怎么用Android实现拼图游戏
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,小编给大家分享一下怎么用Android实现拼图游戏,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!具体内容如下源码package packageName;import android.
千家信息网最后更新 2026年11月01日怎么用Android实现拼图游戏
小编给大家分享一下怎么用Android实现拼图游戏,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!
具体内容如下
源码
package packageName;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.view.ViewGroup;import android.widget.Button;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.Toast;import MyImg;public class MainActivity extends AppCompatActivity { // 显示图片的宽度 public static final int W = 250; // 左上边距 public static final int MARGIN = 200; // 空图片的索引 public static final int NULLINDEX = 0; private MyImg[] imgs = new MyImg[9]; // 存储图片位置的地图 private int[] map = new int[9]; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 主布局没设置啥东西 setContentView(R.layout.activity_main); // 用于设置生成 view 对象的宽高 ViewGroup.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); initImg(params); randomMap(); addImg(params); // 开始新游戏 Button newBtn = new Button(this); newBtn.setText("新游戏"); newBtn.setTextSize(16); newBtn.setX(40); // 添加控件要用的 ViewGroup.LayoutParams p1= new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); addContentView(newBtn, p1); newBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { newGame(); } }); } // 添加图片到布局中并设置点击事件 private void addImg(ViewGroup.LayoutParams params) { for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { int index = i * 3 + j; // 计算x, y坐标 int x = j * W + MARGIN; int y = i * W + MARGIN; ImageView imgView = imgs[map[index]].getImg(); imgView.setX(x); imgView.setY(y); addContentView(imgView, params); imgView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { ImageView tempImg = imgs[NULLINDEX].getImg(); int x = (int) v.getX(); int y = (int) v.getY(); // goal image int x1 = (int) tempImg.getX(); int y1 = (int) tempImg.getY(); // move top if (y - y1 == W && x == x1) { top((ImageView) v); } else if (y - y1 == -W && x == x1) { down((ImageView) v); } else if (x - x1 == W && y == y1) { left((ImageView) v); } else if (x - x1 == -W && y == y1) { right((ImageView) v); } if (isWin()) { Toast.makeText(MainActivity.this, "You Win!", Toast.LENGTH_SHORT).show(); } } }); } } } private void newGame() { randomMap(); // 设置图片的 x, y坐标 for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { int index = i * 3 + j; int x = j * W + MARGIN; int y = i * W + MARGIN; ImageView imgView = imgs[map[index]].getImg(); imgView.setX(x); imgView.setY(y); } } } private void left(ImageView img) { img.setX(img.getX() - W); imgs[NULLINDEX].getImg().setX(img.getX() + W); } private void right(ImageView img) { img.setX(img.getX() + W); imgs[NULLINDEX].getImg().setX(img.getX() - W); } private void top(ImageView img) { img.setY(img.getY() - W); imgs[NULLINDEX].getImg().setY(img.getY() + W); } private void down(ImageView img) { img.setY(img.getY() + W); imgs[NULLINDEX].getImg().setY(img.getY() - W); } private boolean isWin() { // 根据 x, y的坐标算出图片的位置,假如一一对应的话,那么久是赢了 for (int i = 0; i < 9; i++) { ImageView img = imgs[i].getImg(); int x = (int) img.getX(); int y = (int) img.getY(); int index = (y - MARGIN) / W * 3 + (x - MARGIN) / W; // 有一个没对上,就是没赢 if (index != imgs[i].getType()) { return false; } } return true; } private void randomMap() { // 打乱地图的位置 int a, b; for (int i = 0; i < 50; i++) { a = (int) (Math.random() * 9); b = (int) (Math.random() * 9); int t = map[a]; map[a] = map[b]; map[b] = t; } } // 安排图片数组 private void initImg(ViewGroup.LayoutParams params) { int[] imgId = {R.drawable.img10, R.drawable.img2, R.drawable.img3, R.drawable.img4, R.drawable.img5, R.drawable.img6, R.drawable.img7, R.drawable.img8, R.drawable.img9}; for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { int index = i * 3 + j; imgs[index] = new MyImg(index); MyImg img = imgs[index]; ImageView image = new ImageView(this); params.width = W; params.height = W; image.setLayoutParams(params); image.setImageResource(imgId[index]); img.setImg(image); // 让地图初始化 map[index] = index; } } }}MyImg类
package packageName;import android.widget.ImageView;public class MyImg { // 用于存储图片位置的索引 private int type; private ImageView img; public MyImg(int type) { this.type = type; } public void setImg(ImageView img) { this.img = img; } public ImageView getImg() { return img; } // 获取图片索引 public int getType() { return type; }}看完了这篇文章,相信你对"怎么用Android实现拼图游戏"有了一定的了解,如果想了解更多相关知识,欢迎关注行业资讯频道,感谢各位的阅读!
图片
位置
地图
坐标
索引
j++
布局
篇文章
存储
一一对应
上边
东西
事件
内容
完了
宽度
对象
就是
控件
数组
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网高科技
深圳九邦互联网科技有限公司
互联网中国科技
艾特科技互联网
远拓互联网科技
智慧科技互联网
电子科技大学互联网
互联网科技咨询
人人互联网科技是培训
千方科技属于互联网企业吗
互联网科技研发水平
伊宁互联网科技做什么的
上海京穆互联网科技有限公司
沐思想互联网科技有限公司
互联网金融科技元年
宇信科技在杭州互联网排第几
广东鹅鹅鹅互联网科技有限公司
互联网时代科技型公司的机会
平安好医生打造互联网科技医疗
山东亿川互联网科技有限责任公司
互联网科技垄断
朗新科技与工业互联网
没上市的科技互联网公司
猪兼强互联网科技
上海万想互联网科技
互联网前沿科技
深圳卡尔迅互联网科技有限公司怎么样
内蒙古九一互联网科技
北京瑞云互联网科技有限公司
科技互联网企业在行动