本人用 android studio 实现的

源码

package packageName;import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MotionEvent;
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 packageName.R;public class MyActivity extends AppCompatActivity {// 图片宽度public static final int W = 200;// 左边距public static final int LEFT = 50;// 上边距public static final int TOP = 200;// 适应图片的个数public static final int L = 10;// 四个方向的常量public static final int SHANG = 1;public static final int XIA = 2;public static final int ZUO = 3;public static final int YOU = 4;// 图片控件private ImageView[] allImg = new ImageView[L];// 初始化十张图的 x 坐标private int[] initX = {LEFT + W, LEFT + W, LEFT, LEFT + W * 3, LEFT, LEFT + W * 3, LEFT, LEFT + W, LEFT + W * 2, LEFT + W * 3};// 初始化十张图的 y 坐标private int[] initY = {TOP, TOP + W * 2, TOP, TOP, TOP + W * 2, TOP + W * 2, TOP + W * 4, TOP + W * 4, TOP + W * 4, TOP + W * 4};// 设置十张图的 宽度private int[] initW = {2 * W, 2 * W, W, W, W, W, W, W, W, W};// 设置十张图的 高度private int[] initH = {2 * W, W, 2 * W, 2 * W, 2 * W, 2 * W, W, W, W, W};// 手指点击的开始位置,用于判断滑动方向private int startX, startY;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_my);// 初始化图片initImgs();// 初始化位置initPos();// 添加事件addListener();}private void addListener() {// 添加新游戏按钮ViewGroup.LayoutParams p1 = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);Button btn = new Button(this);btn.setText("新游戏");btn.setTextSize(20);btn.setX(LEFT);btn.setY(50);addContentView(btn, p1);btn.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {initPos();}});ViewGroup.LayoutParams[] params = new ViewGroup.LayoutParams[L];for (int i = 0; i < L; i++) {final ImageView tempImg = allImg[i];params[i] = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);ViewGroup.LayoutParams tempP = params[i];tempP.width = initW[i];tempP.height = initH[i];addContentView(tempImg, tempP);final int finalI = i;tempImg.setOnTouchListener(new View.OnTouchListener() {@Overridepublic boolean onTouch(View v, MotionEvent event) {switch (event.getAction()) {case MotionEvent.ACTION_DOWN:startX = (int) event.getX();startY = (int) event.getY();break;case MotionEvent.ACTION_UP:int endX = (int) event.getX();int endY = (int) event.getY();// 假如是点击事件就不执行if (startX == endX && startY == endY) {return false;}// 是否为左右滑动if (Math.abs(startX - endX) > Math.abs(startY - endY)) {// 物体向左动if (startX > endX) {if (canMove(tempImg, finalI, ZUO)) {left(tempImg);}} else {if (canMove(tempImg, finalI, YOU)) {right(tempImg);}}} else {// 物体向上动if (startY > endY) {if (canMove(tempImg, finalI, SHANG)) {top(tempImg);}} else {if (canMove(tempImg, finalI, XIA)) {down(tempImg);}}}break;}if (isWin()) {Toast.makeText(MyActivity.this, "You Win!", Toast.LENGTH_SHORT).show();}return true;}});}}// 曹操到达指定的位置就算赢了private boolean isWin() {return allImg[0].getX() == LEFT + W && allImg[0].getY() == TOP + W * 3;}private void left(ImageView img) {img.setX(img.getX() - W);}private void right(ImageView img) {img.setX(img.getX() + W);}private void top(ImageView img) {img.setY(img.getY() - W);}private void down(ImageView img) {img.setY(img.getY() + W);}// 用于判断图片是否可以滑动, tag 为当前图片的索引, direct 为滑动方向private boolean canMove(ImageView img, int tag, int direct) {// 目标图片的 x, y 坐标和 宽高int x = (int) img.getX();int y = (int) img.getY();int w = img.getWidth();int h = img.getHeight();// 其它图片的 x, y 坐标和 宽高int x1, y1, w1, h1;// 判断移动的方向来预处理坐标switch (direct) {case SHANG:y -= W;break;case XIA:y += W;break;case ZUO:x -= W;break;case YOU:x += W;}// 每种图片都有其边界switch (tag) {case 0:if (x < LEFT || x > LEFT + W * 2 || y < TOP || y > W * 3 + TOP) {return false;}break;case 1:if (x < LEFT || x > LEFT + W * 2 || y < TOP || y > W * 4 + TOP) {return false;}break;case 2:case 3:case 4:case 5:if (x < LEFT || x > LEFT + W * 3 || y < TOP || y > W * 3 + TOP) {return false;}break;default:if (x < LEFT || x > LEFT + W * 3 || y < TOP || y > W * 4 + TOP) {return false;}}// 遍历其他的图片,判断是否碰撞到了for (int i = 0; i < L; i++) {if (i != tag) {x1 = (int) allImg[i].getX();y1 = (int) allImg[i].getY();w1 = allImg[i].getWidth();h1 = allImg[i].getHeight();// 矩形碰撞器的实现,大家可以画画图来参考if (x1 >= x && x1 < x + w && y1 >= y && y1 < y + h ||x1 >= x && x1 < x + w && y1 <= y && y1 > y - h1 ||x >= x1 && x < x1 + w1 && y >= y1 && y < y1 + h1 ||x >= x1 && x < x1 + w1 && y > y1 - h && y <= y1) {return false;}}}return true;}private void initPos() {for (int i = 0; i < L; i++) {ImageView tempImg = allImg[i];tempImg.setX(initX[i]);tempImg.setY(initY[i]);}}private void initImgs() {// 0 曹操 1 关羽 2 赵云 3 张飞 4 黄忠 5 马超 6 兵 7 兵 8 兵 9 兵  int[] imgId = {R.drawable.r120, R.drawable.r121, R.drawable.r122, R.drawable.r123, R.drawable.r124,R.drawable.r125, R.drawable.r126, R.drawable.r127, R.drawable.r128, R.drawable.r129};for (int i = 0; i < L; i++) {allImg[i] = new ImageView(this);final ImageView tempImg = allImg[i];tempImg.setImageResource(imgId[i]);}}
}

Android游戏: 华容道相关推荐

  1. 华容道源代码android,基于Android的华容道游戏的源代码

    基于Android的华容道游戏的源代码: 相关文件下载在Linux公社的1号FTP服务器里,下载地址: 用户名:www.linuxidc.com 密码:www.muu.cc 在 2011年LinuxI ...

  2. android 游戏引擎libgdx demo cuboc分析

    开始学习android游戏开发也有一段时间了,挑选libgdx这个游戏引擎来进行学习和开发.Libgdx是一款支持2D与3D游戏开发的游戏类库,并且它是夸平台的.例如你可以在windos下开发,同样的 ...

  3. 【Android游戏开发十六】Android Gesture之【触摸屏手势识别】操作!

    本站文章均为 李华明Himi 原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/android-game/337.html   ...

  4. 【Android游戏开发二十七】讲解游戏开发与项目下的hdpi 、mdpi与ldpi资源文件夹以及游戏高清版本的设置...

    今天一个开发者问到我为什么游戏开发要删除项目下的hdpi.mdpi和ldpi文件夹:下面详细给大家解答一下: 首先童鞋们如果看过我写的<[Android游戏开发二十一]Android os设备谎 ...

  5. 技术转载:八款开源 Android 游戏引擎 (巨好的资源)

    作者: iamsheldon 链接:http://software.intel.com/zh-cn/blogs/2012/01/13/android-4/ 初学Android游戏开发的朋友,往往会显得 ...

  6. 八款开源 Android 游戏引擎 (巨好的资源)

    初学Android游戏开发的朋友,往往会显得有些无所适从,他们常常不知道该从何处入手,每当遇到自己无法解决的难题时,又往往会一边羡慕于 iPhone下有诸如Cocos2d-iphone之类的免费游戏引 ...

  7. 【ANDROID游戏开发十六】ANDROID GESTURE之【触摸屏手势识别】操作!利用触摸屏手势实现一个简单切换图片的功能!...

    本站文章均为 李华明Himi 原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/android-game/337.html - ...

  8. 集成Lua到你的Android游戏 - 转

    当前众多游戏引入脚本语言作为快速发布内容以及灵活扩展的解决方案,在寻找向Android应用集成Lua脚本语言的方案时,大量零碎的资料并没有向开发者指引一个明确的方向.在这里我把自己通过整合资料完成的方 ...

  9. 《Android游戏开发详解》——第1章,第1.6节函数(在Java中称为“方法”更好)...

    本节书摘来自异步社区<Android游戏开发详解>一书中的第1章,第1.6节函数(在Java中称为"方法"更好),作者 [美]Jonathan S. Harbour,更 ...

最新文章

  1. Java项目:在线淘房系统(租房、购房)(java+SpringBoot+Redis+MySQL+Vue+SpringSecurity+JWT+ElasticSearch+WebSocket)
  2. 美国匹兹堡大学高伟教授招收Mobile AI方向全奖博士生
  3. sql2008 查询某个表被那些存储过程用到
  4. IDEA如何重新刷新pom.xml文件重新下载
  5. codevs 1557 热浪
  6. Hive文件存储格式和hive数据压缩
  7. 使用yum命令时Error: Cannot find a valid baseurl for repo: base
  8. Visual Studio里的BUG??
  9. TF2.0-tf.keras.callbacks.EarlyStopping
  10. GlusterFS vs. CephFS性能对比研究(一)
  11. 椭圆曲线方程加解密算法研究(一)
  12. 电脑DIY基本知识扫盲!图文并茂!
  13. Python开发基础----数据类型----[列表]
  14. word2010公式编辑器 格式设置
  15. 汇智网mysql_MySQL 入门
  16. 要做股市赢家:杨百万读书笔记
  17. Cube、Cuboid 和 Cube Segment
  18. 配置WAP网站的服务器(接自http://blog.chinaitlab.com/user1/263305/archives/2005/28039.html)
  19. 招聘 | 阿里达摩院决策智能实验室招聘全职/博后/实习生-杭州/西雅图-内推
  20. 大众、奥迪VCDS 5053 允许进入密码【转载】

热门文章

  1. Spark bucketing bucket分桶原理和应用
  2. python ai自动剪辑视频_你知道吗?Python也可以剪辑视频!
  3. toolbars什么意思_Toolbars工具栏
  4. js 判断是什么类型浏览器
  5. 机场精细化管理_【青海机场公司召开“强化‘三基’固根本 精益管理促发展”主题交流会议】...
  6. 树脂吸附六价铬废水处理
  7. 趣味问题:农夫分牛(有关浮点数的讨论)
  8. 素数问题 java_JAVA素数问题
  9. SwiftUI Core Haptics 基础教程
  10. WAF和网络防火墙、网页防篡改、IPS三者的区别