Android自定義View實現(xiàn)五子棋小游戲
本文實例為大家分享了Android實現(xiàn)五子棋小游戲的具體代碼,供大家參考,具體內(nèi)容如下
配圖:
代碼:
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);
}
}
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持我們。
上一篇:淺析android studio3.5中使用recycleview的包
欄 目:Android
下一篇:Android仿微信錄制語音功能
本文標題:Android自定義View實現(xiàn)五子棋小游戲
本文地址:http://www.jygsgssxh.com/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文件夾下的所需內(nèi)容詳解


閱讀排行
本欄相關
- 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用法實例總結(jié)
- 01-10使用C語言求解撲克牌的順子及n個骰子


