怎么用Android实现拼图游戏
发表于:2024-10-19 作者:千家信息网编辑
千家信息网最后更新 2024年10月19日,小编给大家分享一下怎么用Android实现拼图游戏,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!具体内容如下源码package packageName;import android.
千家信息网最后更新 2024年10月19日怎么用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安全错误
数据库的锁怎样保障安全
软件开发项目实现过程
网络安全检查信息系统自查表
服务器工作温度
世界上最大的服务器架构
widows软件开发
网络安全教育活动宣传语
软件开发部单一项目考核方案
多媒体网络技术的关键技术
计算机三级网络技术模考软件
金蝶产品入库单数据库
小学生网络安全教育主题班会课件
千猫互联网科技有限公司
达内学软件开发怎样
怎么才能打开超凡先锋的服务器
具体的计算机网络技术学习计划
电脑桌面软件开发
nodejs 远程数据库
渭南网络技术调试
怎么关网络安全检查
数据库管理系统常用的方法有
gatner 数据库
biubiu加速器服务器维修
asp网页有数据库吗
腾讯建服务器
服务器级的安全控制数据库
甘肃银联网络技术服务代理商
公安部网络安全保卫局郭立伟
新浪云服务器怎么创建自定义菜单
哪些日常行为违反网络安全法
全球火力指数数据库