五子棋(二)

news/2024/11/24 4:21:15/

在上篇文章的基础下,来继续写,主要目标是实现

  • 存储棋子
  • 实现 开始游戏
  • 实现 悔棋

存储棋子:

if (xx>=0&&xx<=(row-1)&&yy>=0&&yy<=(column-1)){//当该位置没有棋子的时候,可以下棋if (isAvail[xx][yy] == 0) {if (count == 1){//count=1为黑棋isAvail[xx][yy] = 1;g.setColor(Color.BLACK);count++;} else if (count == 2) {//count=1时为白棋g.setColor(Color.WHITE);isAvail[xx][yy] = 2;count--;}g.fillOval(xx * size + x - size / 2, yy * size + y - size / 2, size, size);Setx[index] = xx;Sety[index] = yy;index++;

下棋需要下在两条直线正中间,所以要对棋子坐标进行更改,具体上一篇文章都有的。

  if ((x1 - x) % size < size / 2) {xx = (x1 - x) / size;} else if ((x1 - x) % size > size / 2) {xx = (x1 - x) / size + 1;}if ((y1 - y) % size < size / 2) {yy = (y1 - y) / size;} else if ((y1 - y) % size > size / 2) {yy = (y1 - y) / size + 1;}

更改坐标

实现开始游戏:加入开始标记就欧克了

 public void qizi(int[][] arr){for (int i=0;i<arr.length;i++){for (int j=0;j<arr.length;j++){arr[i][j]=0;}}}

 qizi方法作用是在点击开始游戏之后保证棋盘是空,清空数组

  switch (gbStr){case"开始游戏":begin=2;//开始游戏qizi(isAvail);//更新保存棋子的数组jf.repaint();count=1;//棋子颜色jf.repaint();break;

将begin=2条件放在棋子开始之前就可以实现了。

 public void mousePressed(MouseEvent e) {x1 = e.getX();y1 = e.getY();if (begin == 2)
//后面为下棋子的步骤
}

实现悔棋:

 switch (gbStr){
case"悔棋":
System.out.println("index"+index);if (index>0){index--;int x=Setx[index];int y=Sety[index];isAvail[x][y]=0;}if (index%2==1){g.setColor(Color.white);count++;}else {g.setColor(Color.BLACK);count--;}jf.repaint();break;
}

在加一个,判断游戏输赢:

需要在创建一个Win类


public class Win {public static int[][] isAvail;//在这里定义一个二维数组为棋子的落子情况public static boolean chessRow(int row, int column, int[][] isAvail) {//先定义一个计数器,用以去计算已下棋子的数量int count = 1;//算上已经点击的棋子int chess = isAvail[row][column];System.out.println("当前输出的棋子" + chess);//向右遍历for (int i = row + 1; i <isAvail.length; i++) {if (chess == isAvail[i][column]) {count++;} else {break;}}//向左遍历for (int i = row - 1; i > 0; i--) {if (chess == isAvail[i][column]) {count++;} else {break;}}return (count >= 5);}public static boolean up_Down(int row, int column, int isAvail[][]){int count=1;int chess=isAvail[row][column];//向上遍历for (int i=column+1;i<isAvail.length;i++){if (chess==isAvail[row][i]){count++;}else {break;}}//向下遍历ifor (int i=column-1;i>0;i--){if (chess==isAvail[row][i]){count++;}else {break;}}return (count>=5);}public static boolean leftUp_RightDown(int row,int column,int isAvail[][]){int count=1;int chess=isAvail[row][column];//向左上遍历for (int i=row-1,j=column-1;i>0&&j>0;i--,j--){if (chess==isAvail[i][j]){count++;}else {break;}}//向右下遍历for (int i=row+1,j=column+1;i<isAvail.length&&j<isAvail.length;i++,j++){if (chess==isAvail[i][j]){count++;}else {break;}}return (count>=5);}public static boolean leftDown_RightUp(int row,int column,int isAvail[][]){int count=1;int chess=isAvail[row][column];//向左下遍历for (int i=row+1,j=column-1;i<isAvail.length&&j>0;i++,j--){if (chess==isAvail[i][j]){count++;}else {break;}}//向右上遍历for (int i=row-1,j=column+1;i>0&&j<isAvail.length;i--,j++){if (chess==isAvail[i][j]){count++;}else {break;}}return (count>=5);}//检查五子连珠public  static boolean isWin(int row,int column,int isAvail[][]){if (chessRow(row,column,isAvail)||up_Down(row,column,isAvail)||leftDown_RightUp(row,column,isAvail)||leftUp_RightDown(row,column,isAvail)){return true;}else{return false;}}}
  Win.isAvail=isAvail;if(Win.isWin (xx,yy,isAvail)){if(isAvail[xx][yy]==1){System.out.println ("黑棋胜利!!");}else if(isAvail[xx][yy]==2){System.out.println ("白棋胜利!!");}}

写在监听器中,才会有效。


http://www.ppmy.cn/news/881449.html

相关文章

五子棋(完整源码)

单文件完整源码&#xff1a; #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <stdlib.h> #include <time.h>#define ROW 9 #define COL 9 #define NUM 5//菜单 void menu() {printf("************* 三子棋游戏 ************\n"…

联网版五子棋

下面的代码实现了一个非常简单的联网五子棋程序&#xff0c;写给学生的一个例子&#xff0c;很多功能都还没实现&#xff0c;用的也是民间规则&#xff0c;姑且一看吧&#xff01; 棋盘类&#xff1a; package com.accp;import java.awt.Color; import java.awt.Graphics;/***…

我的五子棋人工智能算法

近期完成了一个支持人机对战的五子棋游戏。虽然比较简单,而且对于常下五子棋的人来说,计算机的胜率往往低于50%,但无论如何,我对人工智能一块还是比较满意,所以发表出来,以期抛砖引玉,和大家共同探讨。 对于五子棋游戏来说,人工智能的核心思想是:分析棋盘上所有的空…

五子棋项目

目录 核心技术: 主要模块和功能: 基本思路: 注册、登录接口: 具体实现: 匹配功能接口: 具体实现: 用户对战接口: 具体实现: 项目源码Gitee地址: 网页版五子棋的基本思路及实现 核心技术: Spring/SpringBoot/SpringMVCWebSocketMySQLMyBatisHTML/CSS/JS/AJAX 主要模…

python五子棋ai棋力最高_棋力最强的五子棋 App 是什么?

插嘴说下这个五子棋大师 编程我不懂&#xff0c;这个五子棋大师的计算尚可&#xff0c;应该在五步以上&#xff0c;除去掌握比较熟练的棋型&#xff0c;大部分情况下我没有它算的远&#xff0c;如果正常和它下的话&#xff0c;想赢最高级&#xff0c;很吃力。 但是我还是可以轻…

简易人机对弈算法的五子棋程序

要求的五子棋游戏应达到以下几方面的要求: &#xff08;1&#xff09;运行程序后即刻出现棋盘并可以开始下棋&#xff1b; &#xff08;2&#xff09;人机对弈时&#xff0c;先手为黑棋&#xff0c;后手为白棋&#xff1b;人为先手&#xff0c;计算机为后手&#xff1b; &…

inventor2五子棋游戏apk_五子棋大师2中文版游戏

五子棋大师2中文版是一款经典好玩的五子棋游戏&#xff0c;计有世界比赛和区域比赛两种形态。无论何种比赛形态&#xff0c;玩家均必须和电脑控制的几位对手进行比赛&#xff0c;求取最佳名次&#xff0c;以打入排行榜。电脑控制的对手棋力和棋风各有不同&#xff0c;但整体而言…

五子棋 源码

JS 五子棋 带成绩排名 游戏&#xff1a;http://wx0725.top/index.php/181.html 主程序学习&#xff1a;https://blog.csdn.net/qq_44731019/article/details/109586730 改了几个 BUG添加了成绩截图功能去掉了悔棋 自己看着重新写吧&#xff0c;下面代码只是一个思路&#xff0c…