android简单自定义View实现五子棋
程序员文章站
2023-11-14 17:22:58
本文实例为大家分享了android自定义view实现五子棋的具体代码,供大家参考,具体内容如下
先说一下吧,android的自定义view就是自己实现一个类去继承view,实现其中的...
本文实例为大家分享了android自定义view实现五子棋的具体代码,供大家参考,具体内容如下
先说一下吧,android的自定义view就是自己实现一个类去继承view,实现其中的方法,这里面我最感兴趣的就是ondraw方法了,因为你要的样式都要在这里面进实现,看一下效果图吧:
大概就是介个样子的,长得丑不要紧,能用就行,毕竟只是简单的了解一下嘛!
*protected void ondraw(canvas canvas) { super.ondraw(canvas); rectf rectf; for(int i= pandingx ; i < pandingx*7 ; i+=size){ for(int z= pandingy ; z < pandingy*30 ; z+=size){ rectf = new rectf(i , z , i+size , z +size); canvas.drawroundrect(rectf , 1 ,1 ,paint); } } for(int i = 0 ; i <list.size() ; i++){ int h = (int) list.get(i).get("x"); int s = (int) list.get(i).get("y"); if((int )list.get(i).get("flag") == 1) { rectf = new rectf(h - size/2, s - size/2, h + size/2, s + size/2); canvas.drawroundrect(rectf, 50, 50, black); }else{ rectf = new rectf(h - size/2, s - size/2, h + size/2, s + size/2); canvas.drawroundrect(rectf, 50, 50, white); } } if(flag == 0) { rectf = new rectf(x - size / 2, y - size / 2, x + size / 2, y + size / 2); canvas.drawroundrect(rectf, 50, 50, white); }else{ rectf = new rectf(x - size / 2, y - size / 2, x + size / 2, y + size / 2); canvas.drawroundrect(rectf, 50, 50, black); } }
这里首先画出了一个棋盘,下的棋子就放在了一个arraylist中,里面放的是一个个的map,分别放了x,y坐标还有他的属性(黑棋还是白棋),还有就是边界的处理问题,很简单我就不多说啦,毕竟是下棋的这个控件一定要是可以点的,不能只能看看那么简单。
public boolean ontouchevent(motionevent event) { int action = event.getaction(); switch (action) { case motionevent.action_down://按下 x = pandingx+size; y = pandingy+size; xx = event.getx(); yy = event.gety(); invalidate(); break; case motionevent.action_move://移动 if(abs(event.getrawx()-xx)>=30){ if(event.getrawx()>xx&&judgeright() == true){ x += size; xx = event.getrawx(); yy = event.getrawy(); }else if(judgeleft() == true){ x -= size; xx = event.getrawx(); yy = event.getrawy(); } invalidate(); } if(abs(event.getrawy()-yy)>=30){ if(event.getrawy()>yy&&judgebuttom() == true){ y += size; xx = event.getrawx(); yy = event.getrawy(); }else if(judgetop() == true){ y -= size; xx = event.getrawx(); yy = event.getrawy(); } invalidate(); } break; case motionevent.action_up://松开 int i; for( i = 0 ; i < list.size() ; i++){ if(x == (int)list.get(i).get("x")&&y == (int )list.get(i).get("y")){ toast.repice(); break; } } if(i == list.size()) { map map = new hashmap(); map.put("x", x); map.put("y", y); map.put("flag", flag); list.add(map); flag = (flag + 1) % 2; if(deal.setpiont((x-pandingx)/size , (y-pandingy)/size , flag+1)!=0){ if(deal.setpiont((x-pandingx)/size , (y-pandingy)/size , flag+1) ==1){ toast.winblack(); } if(deal.setpiont((x-pandingx)/size , (y-pandingy)/size , flag+1) == 2){ toast.winwhite(); } list.clear(); init(); } x = -100; y = -100; invalidate(); } break; } return true; }
大概就是介个样子的,实现了手指落下,滑动,还有抬起动作的监听,看上去有点乱,但是大概就是这么个意思,里面的deal类是我把已经下的棋子放到了一个二维数组中在里面单独处理,来判断他们到底有没有五子连珠,好啦大概就只有这些了!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。