Android自定義View實現(xiàn)五子棋小游戲
本文實例為大家分享了Android實現(xiàn)五子棋小游戲的具體代碼,供大家參考,具體內容如下
配圖:
代碼:
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) { // 分析點擊的坐標 來推斷 點擊的 行數(shù)和 列數(shù) 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仿微信錄制語音功能
本文標題:Android自定義View實現(xiàn)五子棋小游戲
本文地址:http://mengdiqiu.com.cn/a1/Android/9097.html
您可能感興趣的文章
- 01-10Android自定義View之繪制圓形頭像功能
- 01-10Android實現(xiàn)雙擊返回鍵退出應用實現(xiàn)方法詳解
- 01-10android實現(xiàn)記住用戶名和密碼以及自動登錄
- 01-10android實現(xiàn)簡單計算器功能
- 01-10Android 友盟第三方登錄與分享的實現(xiàn)代碼
- 01-10C++自定義API函數(shù)實現(xiàn)大數(shù)相乘算法
- 01-10android實現(xiàn)指紋識別功能
- 01-10Emoji表情在Android JNI中的兼容性問題詳解
- 01-10Android實現(xiàn)圓形漸變加載進度條
- 01-10android開發(fā)環(huán)境中SDK文件夾下的所需內容詳解


閱讀排行
本欄相關
- 01-10Android自定義View之繪制圓形頭像功能
- 01-10Android實現(xiàn)雙擊返回鍵退出應用實現(xiàn)方
- 01-10android實現(xiàn)簡單計算器功能
- 01-10android實現(xiàn)記住用戶名和密碼以及自動
- 01-10C++自定義API函數(shù)實現(xiàn)大數(shù)相乘算法
- 01-10Android 友盟第三方登錄與分享的實現(xiàn)代
- 01-10android實現(xiàn)指紋識別功能
- 01-10如何給Flutter界面切換實現(xiàn)點特效
- 01-10Android實現(xiàn)圓形漸變加載進度條
- 01-10Emoji表情在Android JNI中的兼容性問題詳
隨機閱讀
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 04-02jquery與jsp,用jquery
- 01-10delphi制作wav文件的方法
- 08-05織夢dedecms什么時候用欄目交叉功能?
- 01-10SublimeText編譯C開發(fā)環(huán)境設置
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 01-11ajax實現(xiàn)頁面的局部加載
- 01-10C#中split用法實例總結
- 01-10使用C語言求解撲克牌的順子及n個骰子