Android自定义View实现五子棋小游戏
程序员文章站
2023-11-14 17:10:40
本文实例为大家分享了android实现五子棋小游戏的具体代码,供大家参考,具体内容如下
配图:
代码:
package com.example.fives...
本文实例为大家分享了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); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。