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

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

 }

}

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

(0)

相关推荐

  • Android开发实现的简单五子棋游戏示例

    本文实例讲述了Android开发实现的简单五子棋游戏.分享给大家供大家参考,具体如下: 我刚刚在Android上写的一个五子棋的小程序,在这里跟大家分享一下. 写完以后感觉Android的SDK,虽然也是使用Java的,但是跟Java ME还是有很大不一样. 首先就是Android的SDK没有实现所有的Java ME标准,原来运行在KJava上的应用程序是不能在Android上直接跑的. 另外就是Android的SDK有大量的API是Android自己的,需要开发人员去了解. Android的开

  • android简单自定义View实现五子棋

    本文实例为大家分享了android自定义View实现五子棋的具体代码,供大家参考,具体内容如下 先说一下吧,android的自定义View就是自己实现一个类去继承View,实现其中的方法,这里面我最感兴趣的就是onDraw方法了,因为你要的样式都要在这里面进实现,看一下效果图吧: 大概就是介个样子的,长得丑不要紧,能用就行,毕竟只是简单的了解一下嘛! *protected void onDraw(Canvas canvas) { super.onDraw(canvas); RectF rectF

  • Android五子棋游戏程序完整实例分析

    最近学习了五子棋的课程,感觉挺不错.然后自己写了个关于五子棋的android程序,从中还是能够学习到很多东西的.现在我们开始今天五子棋程序的编写历程.程序的源码请参见友情链接: 好了,我们现在开始一步步的构建出项目来,首先是如下的项目结构图: 运行的效果图: 一些前期做准备的代码 1. 主活动类MainActivity,在菜单中加入了再来一局的功能: public class MainActivity extends AppCompatActivity { private ChessBoardV

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

    本文实例为大家分享了Android五子棋游戏的具体代码,供大家参考,具体内容如下 1.效果图: 2.GobangPanel棋盘面板: public class GobangPanel extends View { private int mPanelWidth;//棋盘的宽度 private float mLineHeight;//行,高要为float private int MAX_LINE = 15;//棋盘行数 private int MAX_COUNT_IN_LINE = 5;//设置赢

  • Android下SDL2实现五子棋游戏

    本文实例介绍了Android下用SDL2实现一个简单的五子棋游戏,分享给大家供大家参考,具体内容如下 1. Five.c // Five.c // SDL2 五子棋 // gcc -mwindows -o Five Five.c FiveData.c FiveData.h -lSDL2 -lSDL2main -lSDL2_image -lSDL2_ttf //#define _DEBUG_ #include <stdio.h> #include <string.h> #includ

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

    本文实例为大家分享了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.graphic

  • Android自定义View实现拼图小游戏

    本文实例为大家分享了Android拼图小游戏的具体代码,供大家参考,具体内容如下 1.效果图: 运行时: 结束时: 2.PuzzleLayoutView: public class PuzzleLayoutView extends RelativeLayout implements View.OnClickListener { //表示将其切成2*2拼图(默认4块) private int mColumn = 2; //容器的内边距 private int mPadding; //每个块块的边距

  • Android自定义View实现游戏摇杆键盘的方法示例

    前言 本文主要给大家介绍的是关于Android自定义View实现游戏摇杆键盘的相关内容,为什么会有这篇文章呢?因为在之前的一个项目,操作方向的方式为上下左右,左上需要同时按住左键和右键的方式进行操作. 如下图: 近来需要升级项目,操作方式改为类似王者荣耀的摇杆操作. 如下图: 好了,下面话不多说了,跟着小编来一起看看是如何实现的吧. 绘制背景 实现遥感按钮,需要绘制背景,绘制中心的遥感按钮.绘制遥感背景,需要创建一个RemoteViewBg类,存储背景图,减少重复创建bitmap. Remote

  • Android自定义view实现阻尼效果的加载动画

    效果: 需要知识: 1. 二次贝塞尔曲线 2. 动画知识 3. 基础自定义view知识 先来解释下什么叫阻尼运动 阻尼振动是指,由于振动系统受到摩擦和介质阻力或其他能耗而使振幅随时间逐渐衰减的振动,又称减幅振动.衰减振动.[1] 不论是弹簧振子还是单摆由于外界的摩擦和介质阻力总是存在,在振动过程中要不断克服外界阻力做功,消耗能量,振幅就会逐渐减小,经过一段时间,振动就会完全停下来.这种振幅随时间减小的振动称为阻尼振动.因为振幅与振动的能量有关,阻尼振动也就是能量不断减少的振动.阻尼振动是非简谐运

  • Android自定义View 仿QQ侧滑菜单的实现代码

    先看看QQ的侧滑效果 分析一下 先上原理图(不知道能否表达的清楚 ==) -首先这里使用了 Android 的HorizontalScrollView 水平滑动布局作为容器,当然我们需要继承它自定义一个侧滑视图 - 这个容器里面有一个父布局(一般用LinerLayout,本demo用的是),这个父布局里面有且只有两个子控件(布局),初始状态菜单页的位置在Y轴上存在偏移这样可以就可以形成主页叠在菜单页的上方的视觉效果:然后在滑动的过程程中 逐渐修正偏移,最后菜单页和主页并排排列.原理搞清了实现起来

  • Android自定义View实现等级滑动条的实例

     Android自定义View实现等级滑动条的实例 实现效果图: 思路: 首先绘制直线,然后等分直线绘制点: 绘制点的时候把X值存到集合中. 然后绘制背景图片,以及图片上的数字. 点击事件down的时候,换小图片为大图片.move的时候跟随手指移动. up的时候根据此时的X计算最近的集合中的点,然后自动吸附回去. 1,自定义属性 <?xml version="1.0" encoding="utf-8"?> <resources> <de

  • Android自定义View实现loading动画加载效果

    项目开发中对Loading的处理是比较常见的,安卓系统提供的不太美观,引入第三发又太麻烦,这时候自己定义View来实现这个效果,并且进行封装抽取给项目提供统一的loading样式是最好的解决方式了. 先自定义一个View,继承自LinearLayout,在Layout中,添加布局控件 /** * Created by xiedong on 2017/3/7. */ public class Loading_view extends LinearLayout { private Context m

  • Android自定义View的三个构造函数

    自定义View有三个构造方法,它们的作用是不同的. public MyView(Context context) { super(context); } public MyView(Context context, AttributeSet attrs) { super(context, attrs); } public MyView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, de

随机推荐