Android自定义View实现五子棋小游戏
作者:wzjhoutai 发布时间:2022-05-18 14:56:59
标签:Android,五子棋
本文实例为大家分享了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);
}
}
来源:https://www.cnblogs.com/wzjhoutai/p/6745197.html


猜你喜欢
- 下面介绍的这个版本搭配是我研究好久好久才跑通的,这在我的电脑上是一组可行的配置,如果你使用了同样的配置跑不通,那可能是环境中某一部分还是有不
- 谷歌有专门的SDK来完成VR,我这次以一个全景图片的例子来说一下这个SDK实现VR的基本过程,首先全景图片就是百度地图里的那样,能够看到周围
- 本文实例为大家分享了Unity3D实现打砖块的具体代码,供大家参考,具体内容如下基于unity20171、 使用Plane创建初始地图(层级
- 本文实例讲述了java Swing组件setBounds()简单用法。分享给大家供大家参考,具体如下:先看API:public void s
- 最近做通讯录小屏机 联系人姓名显示--长度超过边界字体变小/** * 自定义TextView,文本内容自动调整字体大小以适应TextVie
- 一、概述现在app中,图片预览功能肯定是少不了的,用户基本已经形成条件反射,看到小图,点击看大图,看到大图两个手指开始进行放大,放大后,开始
- idea切换分支时,修改过的代码文件全部不见了找了一下问题,切换分支时,idea自动会创建暂存文件,点开,右边View --> 即可显
- 前言:最近公司在项目开发中,由于华为手机存在部分的问题。所以购买了部分新款的华为手机。在真机调试项目APP时,老是无法出现Logcat打印出
- 前言我们都知道浮点型变量在进行计算的时候会出现丢失精度的问题。如下一段代码:System.out.println(0.05 + 0.01);
- 背景出现了一次生产事故,事情是这样的,我们有一个项目,Java访问数据库的框架使用的是MyBatis。然后一个业务员在系统中查询了一个订单,
- 一、代理模式 代理模式是常用的java设计模式,特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委
- 上一篇说的CountDownLatch是一个计数器,类似线程的join方法,但是有一个缺陷,就是当计数器的值到达0之后,再调用CountDo
- 前言Exchange(交换器)顾名思义,它是用来实现两个线程间的数据交换的,它诞生于 JDK 1.5,它有两个核心方法:exchange(V
- TabHost组件可以在界面中存放多个选项卡, 很多软件都使用了改组件进行设计。一、基础知识TabWidget : 该组件就是TabHost
- 您已经看到很多包含视频内容的应用程序,比如带有视频教程的食谱应用程序、电影应用程序和体育相关的应用程序。您是否想知道如何将视频内容添加到您的
- 实例如下所示:/** * 创建多级目录文件 * * @param path 文件路径 * @throws IOException */pri
- 本文实例讲述了Android单选按钮对话框用法。分享给大家供大家参考。具体如下:main.xml布局文件<?xml version=&
- 实践过程效果代码public partial class Form1 : Form{ private HookEx
- Spring2.5.6开发环境搭建的过程,供大家参考,具体内容如下1、jar 包准备:spring 2.5.6 的 jar 包(链接: ht
- 需求说明实现方式嗯 这个可以视作一个经典的消费者和生产者的问题,详细见代码注释代码内容 消费者,负责取走生产者产生的信息/** * @aut