怎么用Android实现拼图游戏
发表于:2025-11-08 作者:千家信息网编辑
千家信息网最后更新 2025年11月08日,小编给大家分享一下怎么用Android实现拼图游戏,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!具体内容如下源码package packageName;import android.
千家信息网最后更新 2025年11月08日怎么用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安全错误
数据库的锁怎样保障安全
天天购物软件开发
phpcms 数据库路径
做软件开发有哪些方向
oracle数据库进场使用率高
潍坊银行软件开发
工作辅助软件开发
服务器内存超频多少
陕西省网络安全知识竞赛86分
数据库实验四山东建筑
电子科技大学互联网试验班
广西党性体检软件开发系统
铁路工程基础数据库
斗罗封神服务器刷东西
我的世界服务器能用自己的存档吗
苏州学软件开发培训
家里用公用网络安全吗
文化发展的数据库
计算机病毒和网络安全
新乡网络技术销售价格
欧洲网络安全的建议
相应服务器598
数据库的常规在哪里
深圳商家联盟软件开发多少钱
网络安全意识有奖竞答
为什么安装了SQL数据库
数据库概念模型是什么意思
十四五网络安全治理方案
软件开发外包员工
网站数据库类型什么意思
西安胡门网络技术有限