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

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

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!";

}

}

}

}

}

python大作业五子棋人人对战_简单的五子棋(人人对战)相关推荐

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

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

  2. python大作业报告(爬虫 分析 可视化)_爬虫综合大作业——网易云音乐《Five Hours》爬虫可视化分析...

    爬虫综合大作业 选择一个热点或者你感兴趣的主题. 选择爬取的对象与范围. 了解爬取对象的限制与约束. 爬取相应内容. 做数据分析与文本分析. 形成一篇文章,有说明.技术要点.有数据.有数据分析图形化展 ...

  3. _【超详细指北】python大作业!

    [超详细指北]python大作业! ​ 这是笔者最近写python大作业时写的一个实现过程笔记,也就是基本上可以说是本人从0开始上手的一个python练习.程序和本文档从 4.29-5.15日 总共历 ...

  4. pygame飞机大战小游戏(python大作业)

    一.项目背景 python大作业,在查看了老师给的链接发现教学视频不完整,所以借用了同学的<Python编程 从入门到实践>中的一个项目,学习模仿. 二.游戏具体介绍 这是一款由辉辉亲自打 ...

  5. kaggle经典题--“泰坦尼克号”--0.8275准确率--东北大学20级python大作业开源(附详细解法与全部代码以及实验报告)

    kaggle经典题--"泰坦尼克号"--0.8275准确率--东北大学20级python大作业开源(附详细解法与全部代码以及实验报告) 前言 开发环境 一.导入包: 二.实验数据的 ...

  6. Python011: Python大作业之移动的小火车动画(四)代码实现

    书接上文:Python010: Python大作业之移动的小火车动画(三)结果显示 0.注意: ​ 该项目使用的库和资源说明如下: pygame 2.0.1 (SDL 2.0.14, Python 3 ...

  7. Python大作业之就诊卡管理信息系统[原创]

    Python大作业之就诊卡管理信息系统[原创] 项目地址: 网页链接:http://patientcard.dreamtownapi.com/ 后端地址:http://django.dreamtown ...

  8. HTML5+CSS大作业——彭于晏明星(15页) _网页设计期末作业

    HTML5+CSS大作业--彭于晏明星(15页) _网页设计期末作业 常见网页设计作业题材有 个人. 美食. 公司. 学校. 旅游. 电商. 宠物. 电器. 茶叶. 家居. 酒店. 舞蹈. 动漫. 明 ...

  9. Python大作业——两种方法设计计算器(使用wx库)。

    python大作业 本次设计用Pycharm开发工具,Python语言进行主要功能是基于图形用户面的多功能.该计算器的主要功能是加.减.乘.除等常规运算以及指数,对数,三角函数等科学运算功能.该计算器 ...

最新文章

  1. 解释一下SQLSERVER事务日志记录
  2. TensorFlow中设置学习率的方式
  3. Spring Boot 返回 JSON 数据,一分钟搞定!
  4. AI:一个20年程序猿的学习资料大全—结构分析软件/办公软件/电气制造控制/高级语言编程/平面三维设计/视频编辑/FQ格式转换软件——只有你不想要的,没有你找不到的
  5. Daily Scrum4 11.6
  6. 设计模式在Netty 中的应用-单例模式源码举例
  7. 山东理工大学计算机学院学号,计算机组成原理课程设计--山东理工大学计算机学院...
  8. 活体检测python_活体检测很复杂?仅使用opencv就能实现!(附源码)!
  9. RDD(弹性分布式数据集)
  10. python书籍pdf文档密码-Python玩转PDF的各种骚操作
  11. PyPA Installing Packages
  12. 《庆余年》里的五竹,到底是不是机器人?
  13. 统计123出现次数_Java字符串03-统计大小写字母出现的次数
  14. (百例编程)76.小明买书
  15. 学习继电器的工作原理及作用
  16. QCC3040---Log module
  17. linux 无线网卡驱动 centrino 6200 agn,下载:Intel无线网卡驱动14.2官方正式版
  18. JAVA中dot的用法_doT学习(一)之语法
  19. 54:第五章:开发admin管理服务:7:人脸入库流程;人脸登录流程;浏览器开启视频调试模式(以便能够在本机的不安全域名的情况下,也能去开启摄像头);
  20. 《PTA——拼题A》之第1008题

热门文章

  1. Google免费DNS服务器IP及全国主要DNS
  2. Java实现puzzle
  3. 向大家推荐一部励志电影
  4. Gowalla(美国微博)好友关系数据集和签到数据集
  5. 逆伽马分布20210806
  6. 农村生活污水处理如何因地制宜?
  7. java封装 继承 多态_Java 封装、继承、多态
  8. flutter- ListTile leading加载本地图标
  9. 2月19日B组比赛总结
  10. 概率论与数理统计学习笔记——第8讲——多维随机变量的概念(3.1.4联合概率密度的概念及性质)