五子棋小结(人人对战)

五子棋是我学习Java后写的第二个小游戏,初步实现了五子棋的人人对战。

下面简单介绍一下我的五子棋及其我在编写过程中遇到的一些问题,但愿大家可以避免我走的一些弯路

我的五子棋经历了如下四个步骤:

一、将五子棋的界面做出来(  棋盘  棋子)

二、对棋子进行一些设置 ( 如黑白分明  棋子下在棋盘的交点上    已下棋子的位置不能再下等)

三、判断输赢

四、悔棋和重新开局

五子棋的界面

主要是重写父类中的paint方法,及其重绘  由于之前做过画板的重绘,这步没花费太多时间

对棋子进行基本的设置

就开始接触最最基本的算法了,也是我第一次写算法,在磕磕碰碰中实现了,主要是根据获取鼠标点击的坐标,判断距离最近的棋盘交点,把棋子放在最近的交点上

判断输赢

从这步开始就有点纠结了,总是自己很清楚算法是怎样的,就是无法用Java语言准确的表达出来

横向纵向判断还好,因为坐标的i j值只有一个变化,用一个for循环就可以解决了

到斜着的两个方向,i j值则变成了同增同减  或者  此消彼长的关系,我以前写的for循环里面只有一个变量,由于对for语句了解的局限性,

耗费了很多功夫,最后只能一个for循环设置两个变量,这么一试,问题解决了,松了一口气

判断输赢时还要注意数组越界的问题

四个方向计算连在一起的最大棋子数时最好分别计数,避免互相干扰

//横向判断

public int XWin(int i,int j){

ch = cl.getChess();

value = ch[i][j];

s1=1;

for (int b=j+1; b

int temp = ch[i][b];

if (temp == value) {

s1++;

}else{

break;

}

}

for (int b=j-1; b>=0; b--) {

int temp = ch[i][b];

if (temp == value) {

s1++;

}else{

break;

}

}

return s1;

}

//纵向判断

public int YWin(int i,int j){

ch = cl.getChess();

value = ch[i][j];

s2 = 1;

for (int b=i+1; b

int temp = ch[b][j];

if (temp == value) {

s2++;

}else{

break;

}

}

for (int b=i-1; b>=0; b--) {

int temp = ch[b][j];

if (temp == value) {

s2++;

}else{

break;

}

}

return s2;

}

//斜向判断1

public int XYWin(int i,int j){

ch = cl.getChess();

value = ch[i][j];

s3 = 1;

for (int b=j+1, a=i+1; b

int temp = ch[a][b];

if (temp == value) {

s3++;

}else{

break;

}

}

for (int b=j-1, a=i-1; b>=0&&a>=0; b--,a--){

int temp = ch[a][b];

if (temp == value) {

s3++;

}else{

break;

}

}

return s3;

}

//斜向判断2

public int YXWin(int i,int j){

ch = cl.getChess();

value = ch[i][j];

s4 = 1;

for (int a=i+1,b=j-1; a=0;a++,b--) {

int temp = ch[a][b];

if (temp == value) {

s4++;

}else{

break;

}

}

for (int a=i-1, b=j+1; a>=0&&b

int temp = ch[a][b];

if (temp == value) {

s4++;

}else{

break;

}

}

return s4;

}

悔棋

悔棋的算法有很多,我用的是数组,也可以用堆栈的方法

用一个n行2列的数组保存已下棋子的ij值,n值取决于棋盘能容纳的最大棋子数

前面在区别黑白棋时,用一个二维数组 ch[][]白棋保存1  黑子保存2,悔棋就是把保存的数值赋为0,然后重绘

由于我只悔棋一步,悔棋后下白子还是黑子要判断一下

//实现悔棋

public void stepBack(){

//得到保存棋子种类的数组

ch=cl.getChess();

//得到保存棋子坐标的数组

chi = cl.getChi();

chj = cl.getChj();

for(int m=0;m<1;m++){

//获取已下的棋子数

n=cl.getN();

i=chi[n][1];

j=chj[n][1];

//悔棋后将棋子的坐标等参数重置为0

ch[i][j]=0;

chi[n][1]=0;

chj[n][1]=0;

n--;

}

//悔棋后仍下该颜色的棋子

count = cl.getCount();

if(count==0){

cl.setCount(1);

}else{

cl.setCount(0);

}

wzq.paint(g);

}

//重新开局

public void restart(){

ch=cl.getChess();

for(int i=0;i

for(int j=0;j

ch[i][j]=0;

}

}

for(int i=0;i<200;i++){

for(int j=0;j<2;j++){

//重新开局后将数组清空

chi[i][j]=0;

chj[i][j]=0;

}

}

//所下棋子数设为0

cl.setN(0);

cl.setCount(0);

wzq.paint(g);

choose = cl.isChoose();

if(choose == true){

//只有输赢结果出来后才加上监听器

wzq.addMouseListener(cl);

cl.setChoose(false);

}

}

由于之前一直对参数传递不太熟,只要不在一个类里面就手足无措,通过这个小项目,我更好的理解了如何传递参数,

还有利用source中的Generate Getters and Setters 现成的方法 可以省好多力气的

总是在不断地发现问题和解决问题中进步,不要害怕遇到问题,写程序中总会遇到问题的

下一步,该好好想想如何实现人机对战了。

python大作业五子棋人人对战_五子棋总结(人人对战)相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  9. Python大作业——爬虫+可视化+数据分析+数据库(数据库篇)

    相关链接 Python大作业--爬虫+可视化+数据分析+数据库(简介篇) Python大作业--爬虫+可视化+数据分析+数据库(爬虫篇) Python大作业--爬虫+可视化+数据分析+数据库(数据分析 ...

  10. python大作业01

    python大作业01 使用组合数据类型(列表,元组,字典,集合)中任意一种存储方式,完成一个简单的学生管理系统,可以多次录入学生信息到系统并完成基本的 增加.删除.修改.查询操作. 学生信息: 学号 ...

最新文章

  1. 2.请求安全-- MD5的必要性以及实际应用场景
  2. Android About ContentProvider
  3. activemq中怎么知道推送消息是否成功_ActiveMQ入门
  4. excel绘制直方图
  5. 二、用于数据分析的Tableau技巧
  6. 关于仿写写一个网易云静态页面的那些事
  7. edge浏览器安装扩展插件报错:出现错误Download interrupted
  8. LCD 1602学习
  9. DBeaver-Driver-All ( DBeaver驱动包,所有JDBC驱动整合包)
  10. OA产品的技术发展过程及未来趋势
  11. windows系统的备份和还原
  12. UICollectionView 自定义组头组尾的XIB方法
  13. 移动云,中国移动算力网络棋局中的关键一子
  14. 每周一书《用户故事地图》分享!设计、产品、开发必读!
  15. html用九张图片做出九宫图,.九图片详解和制作
  16. matlab交叉耦合,交叉耦合滤波器怎么从耦合矩阵得出频率响应
  17. Android Espresso 测试框架探究
  18. android 商城ui布局,Android UI布局
  19. Python人脸识别智能考勤系统 (供源码,附报告)(可答疑,可调试)
  20. 操作系统(一)储存系统——基本概念和硬盘

热门文章

  1. Flutter进阶第9篇:检测网络连接,监听网络变化
  2. 1061 判断题 (15 分)—PAT (Basic Level) Practice (中文)
  3. L1-026 I Love GPLT (5 分)—团体程序设计天梯赛
  4. 08.存储Cinder→5.场景学习→08.Backup Volume→2.实操
  5. position:fixed 失效
  6. http 性能测试. Apache ab 使用.
  7. Python unittest基本框架组成(1)
  8. UVA - 10534
  9. 红黑树并没有我们想象的那么难(下)
  10. 利用UrlRewrite,asp.net动态生成htm页面