控制台版单机双人五子棋游戏(Java版)---新人小白
程序员文章站
2024-03-18 15:03:22
...
控制台版单机双人五子棋游戏(Java版)—新人小白
设置了两个方法:①下棋(输入两个数判断是否有重棋,是否出界)
②判断五子连棋的输赢(一个米字的形式,所以在下棋这个点的附近判断,共分成了8种情况-----有点麻烦哈,不过好理解)
import java.util.Scanner;
public class Game {
char[][] arr;
int m, n;
boolean black = false;//判断棋子是否为黑棋
public static void main(String[] args) {
Game ch = new Game();//对象chess下棋的缩写ch
Scanner sc = new Scanner(System.in);
ch.arr = new char[15][15];
for (int i = 0; i < 15; i++) {
for (int j = 0; j < 15; j++) {
ch.arr[i][j] = '+';
}
}
int count = 1;//奇数时黑棋下,偶数时白棋下
while (true) {
if (count % 2 != 0) {
System.out.println("请黑棋下,输入行和列:");
count++;
} else {
System.out.println("请白棋下,输入行和列:");
count++;
}
ch.play(sc);//调用下棋的方法
for (int i = 0; i < 15; i++) {
for (int j = 0; j < 15; j++) {
System.out.print(ch.arr[i][j] + " ");
}
System.out.println();
}
if (ch.judge()) {
if (ch.black) {
System.out.println("白棋胜");
break;
} else {
System.out.println("黑棋胜");
break;
}
}
}
}
/**
* 下棋
* @param sc
*/
public void play(Scanner sc) {
m = sc.nextInt();
n = sc.nextInt();
if (m < 15 && n < 15 && m >= 0 && n >= 0) {
if (arr[m][n] == '+') {
if (black) {
arr[m][n] = '○';
} else {
arr[m][n] = '●';
}
black = !black;
} else {
System.out.println("已存在,请重新输入:");
play(sc);
}
} else {
System.out.println("超出范围,请重新输入:");
play(sc);
}
}
/**
* 判断输赢,以上下左右左斜右斜---8钟情况(或许有点麻烦了)
* @return
*/
//左右方向
public boolean judge() {
int count = 1;
char k = arr[m][n];
for (int i = n - 1; i >= 0; i--) {//左方
if (arr[m][i] == k) {
count++;
} else {
break;
}
}
if (count >= 5) {
return true;
}
for (int i = n + 1; i < 5; i++) {//右方
if (arr[m][i] == k) {
count++;
} else {
break;
}
}
if (count >= 5) {
return true;
} else {
count = 1;
}
//上下方向
for (int i = m - 1; i >= 0; i--) {//上方
if (arr[i][n] == k) {
count++;
} else {
break;
}
}
if (count >= 5) {
return true;
}
for (int i = m + 1; i < 15; i++) {//下方
if (arr[i][n] == k) {
count++;
} else {
break;
}
}
if (count >= 5) {
return true;
} else {
count = 1;
}
//以\的形式表示
for (int i = m - 1, j = n - 1; i >= 0 && j >= 0; i--, j--) {//左上方
if (arr[i][j] == k) {
count++;
} else {
break;
}
}
for (int i = m + 1, j = n + 1; i < 15 && j < 15; i++, j++) {//右下方
if (arr[i][j] == k) {
count++;
} else {
break;
}
}
if (count >= 5) {
return true;
} else {
count = 1;
}
//以/的形式表示
for (int i = m - 1, j = n + 1; i >= 0 && j < 15; i--, j++)//右上方
{
if (arr[i][j] == k) {
count++;
} else {
break;
}![在这里插入图片描述](https://img-blog.csdnimg.cn/20200402141150890.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NoZW5hbjEyMzQ1Njc=,size_16,color_FFFFFF,t_70)
}
for (int i = m + 1, j = n - 1; i < 15 && j >= 0; i++, j--) { //左下方
if (arr[i][j] == k) {
count++;
} else {
break;
}
}
if (count >= 5) {
return true;
}
return false;
}
}
本人还是Java小白,以上方法或许有点麻烦,还请谅解。以上有一个缺点是:只能玩一局,判断输赢之后便结束程序了。
部分结果运行示意图:
上一篇: 给大家分享一个小程序—2048