上一篇博客我说到五子棋的点击事件,接下来该说如何判断的问题

5、输赢的判断

首先设置一个类来输出当游戏胜利时的提示

 private void checkGameOver() {// TODO Auto-generated method stubboolean whiteWin = checkFiveInLine(mWhiteArray);boolean blackWin = checkFiveInLine(mBlackArray);if (blackWin || whiteWin) {mIsGameOver = true;mIsWhiteWinner = whiteWin;String text = mIsWhiteWinner ? "白棋胜利" : "黑棋胜利";Toast.makeText(getContext(), text, Toast.LENGTH_SHORT).show();}}

并且在onTouchEvent类中要设置当胜利时,不能再点击棋子

        if (mIsGameOver) {// 如果胜利,则不能下子return false;}

然后创建类checkFiveInLine来判断是否五子连珠

 private boolean checkFiveInLine(List<Point> points) {// TODO Auto-generated method stubfor (Point point : points) {int x = point.x;// x,y坐标int y = point.y;boolean win = checkHorizontal(x, y, points);if (win) {return true;}win = checkVertical(x, y, points);if (win) {return true;}win = checkLeftDiagonal(x, y, points);if (win) {return true;}win = checkRightDiagonal(x, y, points);if (win) {return true;}}return false;}

因为胜利共有四种方法,即在四个方向上连成五个棋子,所以我们要设置四个类来判断(这里我写其中一个方向的,其他方向都差不多):

        private int MAX_COUNT_IN_LINE = 5;
 // 横向五子连珠时private boolean checkHorizontal(int x, int y, List<Point> points) {// TODO Auto-generated method stubint count = 1;// 左边for (int i = 1; i < MAX_COUNT_IN_LINE; i++) {if (points.contains(new Point(x - i, y))) {count++;} else {break;}}if (count == MAX_COUNT_IN_LINE)return true;// 右边for (int i = 1; i < MAX_COUNT_IN_LINE; i++) {if (points.contains(new Point(x + i, y))) {count++;} else {break;}}if (count == MAX_COUNT_IN_LINE)return true;return false;}

其实,做到这一步就可以了,当我们可以给他加一个数据的储存,防止在屏幕翻转是view的重置将数据丢失

6、数据的存储和读取

 private static final String INSTANCE = "instance";private static final String INSTANCE_GAME_OVER = "instance_game_over";private static final String INSTANCE_WHITE_ARRAY = "instance_white_array";private static final String INSTANCE_BLACK_ARRAY = "instance_black_array";//数据的存储@Overrideprotected Parcelable onSaveInstanceState() {// TODO Auto-generated method stubBundle bundle = new Bundle();bundle.putParcelable(INSTANCE, super.onSaveInstanceState());bundle.putBoolean(INSTANCE_GAME_OVER, mIsGameOver);bundle.putParcelableArrayList(INSTANCE_WHITE_ARRAY, mWhiteArray);bundle.putParcelableArrayList(INSTANCE_BLACK_ARRAY, mBlackArray);return bundle;}//数据的读取@Overrideprotected void onRestoreInstanceState(Parcelable state) {// TODO Auto-generated method stubif (state instanceof Bundle) {Bundle bundle = (Bundle) state;mIsGameOver=bundle.getBoolean(INSTANCE_GAME_OVER);mWhiteArray=bundle.getParcelableArrayList(INSTANCE_WHITE_ARRAY);mBlackArray=bundle.getParcelableArrayList(INSTANCE_BLACK_ARRAY);super.onRestoreInstanceState(bundle.getParcelable(INSTANCE));return ;}

7、设置再来一局

注意:用eclipse的可能在layout中看不到menu,这是可能是因为用的Android版本低。你把apk放到手机上就有了,不必去修改代码,强制吧menu显示出来。

设置一个start类,在其中把黑棋和白棋的数据清理

 public void start(){mWhiteArray.clear();mBlackArray.clear();mIsGameOver=false;mIsWhiteWinner=false;invalidate();}

在main_activity中声明

wuziqiPanel=(WuziqiPanel) findViewById(R.id.wuziqi);

在onOptionsItemSelected中编写,并且记得layout中的view要有ID,不然start不起作用

    <com.example.wuziqi.WuziqiPanelandroid:id="@+id/wuziqi"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_centerInParent="true"/>
 @Overridepublic boolean onOptionsItemSelected(MenuItem item) {// TODO Auto-generated method stubint id = item.getItemId();if (id == R.id.action_settings) {wuziqiPanel.start();return true;}return super.onOptionsItemSelected(item);}

好了,这就是全部的思路,我讲的不是很清楚,希望大家多多包涵。

代码下载地址:点击打开链接

五子棋-人人对战(二)相关推荐

  1. python五子棋人人对战_五子棋-人人对战

    date: 2019-03-07 五子棋是国内受到普遍欢迎的一款游戏,规则简单,趣味不俗.作为一名程序员,自然也希望将它移植到电脑上. 这篇我们要讲的主要就是实现简单的人人对战,AI算法放到以后单独说 ...

  2. Java五子棋-人人对战

    五子棋是国内受到普遍欢迎的一款游戏,规则简单,趣味不俗.作为一名程序员,自然也希望将它移植到电脑上. 这篇我们要讲的主要就是实现简单的人人对战,AI算法放到以后单独说. 我们先来整理一下脉络,看看实现 ...

  3. 如果用java swing编写一个五子棋(人人对战)

    2020博客之星年度总评选进行中:请为74号的狗子投上宝贵的一票! 我的投票地址:点击为我投票 写在前面: 大家好,我是 花狗Fdog ,来自内蒙古的一个小城市,目前在泰州读书. 很感谢能有这样一个平 ...

  4. 五子棋人人对战功能的C语言实现(无禁手)

    文章目录 前言 显示棋盘 执行落子 胜负判定 功能综合 前言 之前C语言课的大作业是设计一个可以进行人人对战和人机对战的五子棋程序.我在初期开始写的时候参考过很多份代码,但对于当时我的水平而言不够直观 ...

  5. python大作业五子棋人人对战_简单的五子棋(人人对战)

    这是一个简单的五子棋游戏,目前只实现了简单的人人对战,就是自己跟自己下...具体效果如下: 实现这个效果也很简单,主要功能是: 1.点击棋盘能下棋子.棋子位置在棋盘点.点击点和下子点近似判断.黑白棋子 ...

  6. JAVA五子棋人人对战的实现

    此程序只实现了五子棋的人人对战功能,人机对战功能待完善算法问题后补充 目录 棋子类 棋盘类 界面类 总结 棋子类 package FiveChess;import java.awt.Color;//棋 ...

  7. python五子棋人人对战_简单的五子棋-人人对战

    1新建工程 项目->VC++->MFC->MFC应用程序->输入名称->单文档->Window套接字->完成 2资源编辑 视图->其他窗口->资源 ...

  8. HTML五子棋人人对战源代码,五子棋C++源代码 单机 联机 人机对战 人人对战

    [实例简介] 上海交通大学软件工程课程设计,五子棋. 有人机对战算法实现和网络互连对战功能.包含uml.C++实现. [实例截图] [核心代码] Gobang └── Gobang ├── GBP五子 ...

  9. python五子棋人人对战_游戏五子棋人人对战例程

    原谅我的直男视角,界面有点丑,之后在我弄懂人机对战和网络对战,深度学习后,会继续更新完善我的五子棋. .计次循环首 (17, y) .计次循环首 (17, x) 复制窗口组件 (图片框1, 图片框组 ...

最新文章

  1. cookie JS验证码
  2. Java 递归解决 quot;仅仅能两数相乘的计算器计算x^yquot; 问题
  3. Android SQLite (三 ) 全面详解(一)
  4. Windows10 VS2019下使用CMake3.20.1打开PCL1.11.0程序
  5. jdbc获取结果行数_java – 如何判断从JDBC执行更改的行数
  6. CentOS7 1.搭建环境脚本
  7. 二十多岁不信,三十多岁却深信不疑的道理
  8. [洛谷P5367]【模板】康托展开
  9. spring 自定义注解及使用
  10. activiti 动态加载任务执行人(基于jeesit)
  11. java写的小米商城_开发”小米商城官网首页”(静态页面)
  12. 别让这个世界左右你的人生
  13. Excel 合并两列时间,中间用分隔符连接
  14. 空气质量等级c语言编程,华中科技大学C语言课设空气质量检测信息管理系统技术分析.docx...
  15. Python基础——函数与字典和集合
  16. 计算机科学怎么撤稿,撤稿Nature后,这所大学在撤Science!
  17. 用双向宽搜来提高搜索效率
  18. LibreCAD Windows编译问题集
  19. Hive计算引擎大PK,万字长文解析MapRuce、Tez、Spark三大引擎
  20. FFA 议程上线!实时化浪潮下,Apache Flink 还将在大数据领域掀起怎样的变革?...

热门文章

  1. tampermonkey油猴插件-tampermonkey油猴插件下载
  2. 为什么有人就是不信35岁以后多数人都会失业?让你们看看我真实的经历,有图有真相
  3. 科奥斯扫地机器人怎么样_科沃斯扫地机器人怎么样【315曝光】耐用吗
  4. win2003服务器维护,Windows 2003服务器维护技巧
  5. svg圣诞节雪人代码
  6. OA办公系统如何通过审批流程提高效率
  7. item_get - 根据ID获取商品详情
  8. 数据分析工具--matplotlib
  9. 安装Mysql-8.0.11遇到的问题
  10. c语言 字符串切片重组,c语言 字符串的拼接和分割实例