欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android自定義View實(shí)現(xiàn)五子棋小游戲

 更新時(shí)間:2019年11月03日 11:27:51   作者:wzjhoutai  
這篇文章主要為大家詳細(xì)介紹了Android自定義View實(shí)現(xiàn)五子棋小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了Android實(shí)現(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 坐標(biāo)
 
 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 坐標(biāo)
 
 
 
 //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);
  }
  
 }
 }
 
 
 /**
 * 全然自己定義空間:
 * 
 * 處理你惡不處理時(shí)間愛你的方法:
 * onTouchEvent()
 * onKeyEvent()
 * 
 * 當(dāng)然 也能夠通過 
 * 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)
 {
//  分析點(diǎn)擊的坐標(biāo) 來推斷 點(diǎn)擊的 行數(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++;
  }
  
//  推斷什么時(shí)候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)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Android自定義View Flyme6的Viewpager指示器

    Android自定義View Flyme6的Viewpager指示器

    這篇文章主要為大家詳細(xì)介紹了Android自定義View Flyme6的Viewpager指示器,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • Android 第三方登錄、分享(ShareSDK、友盟)

    Android 第三方登錄、分享(ShareSDK、友盟)

    這篇文章主要為大家詳細(xì)介紹了Android 第三方登錄、分享,分別使用sharesdk和友盟來實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • Android WebView與JS交互全面詳解(小結(jié))

    Android WebView與JS交互全面詳解(小結(jié))

    本篇文章主要介紹了Android WebView與JS交互全面詳解(小結(jié)),實(shí)現(xiàn)了Android客戶端與Web網(wǎng)頁交互,具有一定的參考價(jià)值,有興趣的可以了解一下
    2017-11-11
  • Android中對xml文件解析的3種方式總結(jié)

    Android中對xml文件解析的3種方式總結(jié)

    這篇文章主要給大家介紹了關(guān)于Android中對xml文件解析的3種方式,分別是 Dom 、 SAX 和 dom4j,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-02-02
  • Android界面切換出現(xiàn)短暫黑屏的解決方法

    Android界面切換出現(xiàn)短暫黑屏的解決方法

    這篇文章主要介紹了Android界面切換出現(xiàn)短暫黑屏的解決方法,本文講解的是一個(gè)取巧方法,需要的朋友可以參考下
    2015-04-04
  • Kotlin?launch原理全面分析

    Kotlin?launch原理全面分析

    在Android開發(fā)中,launch是我們經(jīng)常用的,今天來看看它是什么原理,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2022-11-11
  • Android多線程之同步鎖的使用

    Android多線程之同步鎖的使用

    本篇文章主要介紹了Android多線程之同步鎖的使用,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-08-08
  • Android 通過代碼設(shè)置、打開wifi熱點(diǎn)及熱點(diǎn)連接的實(shí)現(xiàn)代碼

    Android 通過代碼設(shè)置、打開wifi熱點(diǎn)及熱點(diǎn)連接的實(shí)現(xiàn)代碼

    這篇文章主要介紹了Android 通過代碼設(shè)置、打開wifi熱點(diǎn)及熱點(diǎn)連接的實(shí)現(xiàn)代碼,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2018-05-05
  • GridView實(shí)現(xiàn)桌面圖標(biāo)顯示案例

    GridView實(shí)現(xiàn)桌面圖標(biāo)顯示案例

    這篇文章主要為大家詳細(xì)介紹了GridView實(shí)現(xiàn)桌面圖標(biāo)顯示案例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • OpenGL Shader實(shí)例分析(8)彩色光圈效果

    OpenGL Shader實(shí)例分析(8)彩色光圈效果

    這篇文章主要為大家詳細(xì)介紹了OpenGL Shader實(shí)例分析第8篇,彩色光圈效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-02-02

最新評論