Android自定义View实现五子棋小游戏
本文实例为大家分享了Android实现五子棋小游戏的具体代码,供大家参考,具体内容如下
配图:
代码:
package com.example.fiveson; import java.util.LinkedList; import java.util.List; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; public class FiveSon extends View { public FiveSon(Context context) { super(context); // TODO Auto-generated constructor stub init(context, null); } public FiveSon(Context context, AttributeSet attrs) { super(context, attrs); // TODO Auto-generated constructor stub init(context, attrs); } public FiveSon(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); // TODO Auto-generated constructor stub init(context, attrs); } private Paint paint = new Paint(); private Paint circlePaint = new Paint(); // 旗子: 信息 代表 第几行 第几列? private List<int[]> chesses = new LinkedList<int[]>(); private void init(Context context, AttributeSet attrs) { chesses.add(new int[]{3,5}); chesses.add(new int[]{3,6}); } int spacing = 100; @Override protected void onDraw(Canvas canvas) { // TODO Auto-generated method stub super.onDraw(canvas); int width = getWidth(); int height = getHeight(); //1 绘制 X 坐标 int num = width / spacing; paint.setColor(Color.BLACK); for(int i=0;i<=num;i++) { canvas.drawLine(spacing*i, 0, spacing*i, height, paint); } num = height/spacing; for(int i=0;i<=num;i++) { canvas.drawLine(0,spacing*i, width,spacing*i, paint); } //2 绘制Y 坐标 //3 绘制 旗子 if(!chesses.isEmpty()) { int count = chesses.size(); for(int i=0;i<count;i++) { // 行列 信息 int[] location = chesses.get(i); int rawX = location[1] * spacing; int rawY = location[0] * spacing; if(i%2==0) { circlePaint.setColor(Color.BLACK); }else { circlePaint.setColor(Color.GREEN); } canvas.drawCircle(rawX, rawY, 20, circlePaint); } } } /** * 全然自己定义空间: * * 处理你恶不处理时间爱你的方法: * onTouchEvent() * onKeyEvent() * * 当然 也能够通过 * setOnTouchListener() * setOnKeyListener(); * * 外部操作: * setOnTouchListener(OnTouchListener l) * setOnKeyListener(OnKeyListener l) * * * * */ @Override public boolean onTouchEvent(MotionEvent event) { boolean isComsumed = false; int action = event.getAction(); if(action == MotionEvent.ACTION_DOWN) { // 分析点击的坐标 来推断 点击的 行数和 列数 int ex = (int)event.getX(); int ey = (int)event.getY(); int colNum = (int)(ex / spacing); int rowNum = (int)(ey / spacing); int colcc = ex % spacing; int rowcc = ey % spacing; if(colcc>=(spacing/2)) { colcc++; } if(rowcc>=(spacing/2)) { rowcc++; } // 推断什么时候add int len = chesses.size(); if(len>0) { boolean has = false; for(int i = len-1;i>=0;i--) { int[] chs = chesses.get(i); if(rowNum == chs[0] && colNum == chs[1]) { has = true; break; } } if(!has) { chesses.add(new int[]{rowNum,colNum}); invalidate(); } }else { chesses.add(new int[]{rowNum,colNum}); invalidate(); } isComsumed = true; }else { isComsumed = super.onTouchEvent(event); } return super.onTouchEvent(event); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
上一篇:浅析android studio3.5中使用recycleview的包
栏 目:Android
下一篇:Android仿微信录制语音功能
本文地址:https://www.xiuzhanwang.com/a1/Android/9097.html
您可能感兴趣的文章
- 01-10Android自定义View之绘制圆形头像功能
- 01-10Android实现双击返回键退出应用实现方法详解
- 01-10android实现记住用户名和密码以及自动登录
- 01-10android实现简单计算器功能
- 01-10Android 友盟第三方登录与分享的实现代码
- 01-10C++自定义API函数实现大数相乘算法
- 01-10android实现指纹识别功能
- 01-10Emoji表情在Android JNI中的兼容性问题详解
- 01-10Android实现圆形渐变加载进度条
- 01-10android开发环境中SDK文件夹下的所需内容详解
阅读排行
本栏相关
- 01-10Android自定义View之绘制圆形头像功能
- 01-10Android实现双击返回键退出应用实现方
- 01-10android实现简单计算器功能
- 01-10android实现记住用户名和密码以及自动
- 01-10C++自定义API函数实现大数相乘算法
- 01-10Android 友盟第三方登录与分享的实现代
- 01-10android实现指纹识别功能
- 01-10如何给Flutter界面切换实现点特效
- 01-10Android实现圆形渐变加载进度条
- 01-10Emoji表情在Android JNI中的兼容性问题详
随机阅读
- 08-05DEDE织梦data目录下的sessions文件夹有什
- 08-05dedecms(织梦)副栏目数量限制代码修改
- 04-02jquery与jsp,用jquery
- 01-10delphi制作wav文件的方法
- 08-05织梦dedecms什么时候用栏目交叉功能?
- 01-10SublimeText编译C开发环境设置
- 01-11Mac OSX 打开原生自带读写NTFS功能(图文
- 01-11ajax实现页面的局部加载
- 01-10C#中split用法实例总结
- 01-10使用C语言求解扑克牌的顺子及n个骰子