这是一个简单的五子棋游戏,目前只实现了简单的人人对战,就是自己跟自己下。。。具体效果如下:

实现这个效果也很简单,主要功能是:

1、点击棋盘能下棋子、棋子位置在棋盘点、点击点和下子点近似判断、黑白棋子交替出现

2、某个棋盘点下了棋子后不能被覆盖

3、判断输赢条件

4、分胜负之后不能再下

一般来说做这个棋盘应该用十几条直线交替画出来,我是用一张图片代替,所以省去了画直线的方法,然后主要的是计算图片中的棋盘点了

所以选用图片一定要选棋盘隔是均匀的矩形,这样方便我们计算每个交点的坐标。计算坐标时当然要考虑到这个图片的规格了,有个经验是用QQ的截图功能(ctrl+alt+A),去选取那个区域,上面会显示区域的长和宽,就可以得到坐标了,像这样:

这样我就知道棋盘左上角的第一个点坐标是(38,25),棋盘每个格的边长都是32。

接下来是画棋子,因为不可能让玩家鼠标点击的点总要刚好等于棋盘交线处的点才能下棋子,这样太费劲了,所以应该还做一个近似判断,就是当点击处离某一个交线点很近的时候,就视为在那个棋盘点下棋了。我的画棋子方法是在棋子类里面(每画一个棋子就创建一个棋子类,再调用棋子类里面的画棋子方法),棋子大小为24(所以画的时候要注意fillOval方法给的参数不是圆心而是左上角的坐标,这样就要减12)。

下棋分黑棋和白棋,黑白棋交替下这个用奇偶数判断就行了,即设置一个int型变量count,判断它%2的值为0还是1,0画白子,1画黑子,然后每下一次棋这个数加一即可。

然后还需判断这个点有没有下过棋子,这个地方我用的是一个18*18 的二维数组,就是涵盖所有棋盘点的数组,数组内的每个元素对应元素角标的棋盘点,这样给没下过棋子的棋盘点对应的元素赋值0,给下过的赋值1,这样当玩家下棋时判断这个点的值是不是0,是0才能下棋,也就不能覆盖了

代码如下:

//遍历所有棋盘点
for(int i=0;i<18;i++)
{for(int j=0;j<18;j++){//近似判断if(Math.abs(38+32*i-x)<12&&Math.abs(25+32*j-y)<12){
            //这个点没有下过棋子且游戏没有结束if(point[i][j]==0&&winner==null){
                //创建新的棋子pieces[i][j] = new Pieces(38+32*i-12, 25+32*j-12,count);
                //画出此棋子pieces[i][j].drawPieces(g);game_panel.setPieces(pieces);
                //步数加一count++;//此点已占point[i][j]=1;if(count>=9){
                    //判断游戏胜负的方法win();
                    //有一方获胜if(winner!=null){
                        //调用提示框的类new Message(winner,pieces,game_panel);}}}}}
}

接下来就要实现判断输赢的功能了,这应该是在每下一个棋子时就判断一次,判断的原理就是遍历棋子的四个方向,如果棋子的颜色和某一方向的连续四个相邻棋子都相同,则这个颜色的玩家就赢了

//胜负判断
public void win()
{for(int i=0;i<18;i++){for(int j=0;j<18;j++){//右斜的棋子判断if(i<14&&j<14&point[i][j]==1){int flag=0;
                //连续四个棋子是否都一样for(int k=1;k<5;k++){if(pieces[i+k][j+k]!=null){
                        //kind是存储这个棋子的颜色的属性if(!pieces[i+k][j+k].kind.equals(pieces[i][j].kind))break;}flag++;}if(flag==4){winner = pieces[i][j].kind+"  win!";}}//左斜的棋子判断if(i<14&&j>3&point[i][j]==1){int flag=0;for(int k=1;k<5;k++){if(!pieces[i+k][j-k].kind.equals(pieces[i][j].kind))break;flag++;}if(flag==4){winner = pieces[i][j].kind+"  win!";}}//横着的棋子判断if(i<14&&point[i][j]==1){int flag=0;for(int k=1;k<5;k++){if(!pieces[i+k][j].kind.equals(pieces[i][j].kind))break;flag++;}if(flag==4){winner = pieces[i][j].kind+"  win!";}}//竖着的棋子判断if(j<14&&point[i][j]==1){int flag=0;for(int k=1;k<5;k++){if(!pieces[i][j+k].kind.equals(pieces[i][j].kind))break;flag++;}if(flag==4){winner = pieces[i][j].kind+"  win!";}}}}
}

简单的五子棋(人人对战)相关推荐

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

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

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

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

  3. Java五子棋-人人对战

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

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

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

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

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

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

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

  7. 使用EasyX实现简单的五子棋双人对战

    基于Visual Stdio 2017 IDE,利用EasyX图形函数库工具搭建可视化图形操作界面.通过鼠标在图形界面上点击选子,实现了五子棋的双人对战小游戏. 本程序主体框架是从https://bl ...

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

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

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

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

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

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

最新文章

  1. mysql数据库64免安装_MYSQL数据库mysql 5.7.18 winx64 免安装 配置方法
  2. 何谓程序员?何谓中国的程序员?
  3. SAP S/4HANA生产订单创建时使用的工厂数据是从什么地方带出来的 1
  4. 初级Java开发与架构之间的差距不仅仅是开发时间
  5. 基于Django实现RBAC权限管理
  6. Mybatis自学日志02
  7. Chrome 打包扩展程序
  8. Linux下hba卡驱动的卸载,SLES11下如何重装qlogic FC HBA卡驱动
  9. mybatisnet - 2 使用 DataMapper 访问数据库
  10. 【百度地图API】如何制作孪生姐妹地图?
  11. 鸿蒙汽车电动尾门工厂,汽车智能电动尾门为什么能成为汽车电子行业“新宠”?...
  12. 四种JAVA架构演进史,程序员能学会最后一种就非常厉害了,至少50k
  13. 数据库五种约束以及添加方法
  14. 电压跟随器的一点理解
  15. BC1.2 PD协议
  16. caj 格式的文件转换为word
  17. python怎么筛选excel数据_python筛选数据excel表格-如何利用python提取两个excel对比后的重复值的信息?...
  18. 获取上一个自然周的、上一个自然月的起始时间范围
  19. C++ 使用Poco库操作SQLite数据库
  20. c语言数字拆分,在手机上玩C语言—数字拆分

热门文章

  1. 爬虫实战篇(模拟登录)
  2. 彻底解剖C++引用机制-汇编级别的深层探索
  3. 史上最清晰的三路快速排序
  4. Hibernate 中对象 set 属性时自动保存入库的问题
  5. ios识别人脸自动拍照_求助,使用APP开发自动拍照及标记脸部,可以付费
  6. 国内图书分类号、国际图书分类号、DOI查询
  7. SAP-MM STO订单详解2 (库存转储调拨单)
  8. 数据集2020(一)GraspNet-1Billion: A Large-Scale Benchmark for General Object Grasping
  9. 音频-ffmpeg音频PCM文件截取某段声音
  10. 程序人生--我已经努力了7年