Android自定义View实现五子棋小游戏

所属分类: 软件编程 / Android 阅读数: 48
收藏 0 赞 0 分享

本文实例为大家分享了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);
 
 }
 
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

更多精彩内容其他人还在看

Android实现信号强度监听的方法

这篇文章主要介绍了Android实现信号强度监听的方法,是Android手机中很常见的一个实用功能,需要的朋友可以参考下
收藏 0 赞 0 分享

Android实现Activity界面切换添加动画特效的方法

这篇文章主要介绍了Android实现Activity界面切换添加动画特效的方法,非常实用的技巧,需要的朋友可以参考下
收藏 0 赞 0 分享

Android中Dialog去黑边的方法

这篇文章主要介绍了Android中Dialog去黑边的方法,需要的朋友可以参考下
收藏 0 赞 0 分享

Qt for Android开发实例教程

这篇文章主要介绍了Qt for Android开发的方法,具有一定的参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

Android开发之时间日期操作实例

这篇文章主要介绍了Android开发之时间日期操作,是Android程序开发中常见的一个功能,需要的朋友可以参考下
收藏 0 赞 0 分享

Android开发之时间日期组件用法实例

这篇文章主要介绍了Android开发之时间日期组件用法,主要介绍了TimePicker和DatePicker组件,对于Android程序开发有不错的借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

Android开发之获取网络链接状态

这篇文章主要介绍了Android获取网络链接状态的方法,主要是通过ConnectivityManager类来完成的,需要的朋友可以参考下
收藏 0 赞 0 分享

Android开发之广播机制浅析

这篇文章主要介绍了Android开发之广播机制浅析,主要包括了发布、接收及配置广播的实例,需要的朋友可以参考下
收藏 0 赞 0 分享

Android开发之登录验证实例教程

这篇文章主要介绍了Android开发之登录验证实现方法,包括发送数据、服务器端验证、配置文件等,需要的朋友可以参考下
收藏 0 赞 0 分享

Android开发之注册登录方法示例

这篇文章主要介绍了Android开发的注册登录方法,是针对Android程序设计中版本兼容性的进一步完善,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多