public class WuZhiQi {
public static void main(String[] args) {
// 棋盘编号
char[] bianhao = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E' };
int SIZE = 15; //常数
// 创建棋盘
char[][] qipan = new char[SIZE][SIZE];
for (int i = 0; i < qipan.length; i++) {
for (int j = 0; j < qipan[i].length; j++) {
qipan[i][j] = '+';
}
}
// 创建棋盘上的星
qipan[3][3] = '#';
qipan[3][7] = '#';
qipan[3][11] = '#';
qipan[7][3] = '#';
qipan[7][7] = '#';
qipan[7][11] = '#';
qipan[11][3] = '#';
qipan[11][7] = '#';
qipan[11][11] = '#';
/**
* 横五子 qipan[5][5] = '@'; qipan[5][6] = '@'; qipan[5][7] = '@';
* qipan[5][8] = '@'; qipan[5][9] = '@';
*
* 竖五子 qipan[6][6] = 'O'; qipan[7][6] = 'O'; qipan[8][6] = 'O';
* qipan[9][6] = 'O'; qipan[10][6] = 'O';
*
* 斜五子 qipan[8][9] = '@'; qipan[9][10] = '@'; qipan[10][11] = '@';
* qipan[11][12] = '@'; qipan[12][13] = '@';
*
* 反斜五子 qipan[5][2] = 'O'; qipan[4][3] = 'O'; qipan[3][4] = 'O';
* qipan[2][5] = 'O'; qipan[1][6] = 'O';
*
*/
char curQiZi = '@'; //黑子先落
boolean isOver = false; //游戏结束标志
// 循环
while (true) {
System.out.print(" "); // 第一行编号前面的两个空格
for (int i = 0; i < qipan.length; i++) { // 给列编号
System.out.print(bianhao[i] + " ");
}
System.out.println(); // 第一行换行
// 显示棋盘
for (int i = 0; i < qipan.length; i++) {
System.out.print(bianhao[i] + " "); // 给行编号
for (int j = 0; j < qipan[i].length; j++) {
System.out.print(qipan[i][j] + " ");
}
System.out.println();
}
//结束了
if(isOver){
System.out.println(curQiZi + "方胜利");
return;
}
// 从屏幕输入棋子
Scanner scanner = new Scanner(System.in);
System.out.print("请输入Y坐标:");
int y = scanner.nextInt();
// 判断输入是否正确
if (y > 14 || y < 0) {
System.out.println("您输入错误,请输入0~14,按回车键重新输入!");
new Scanner(System.in).nextLine();
continue;
}
System.out.print("请输入X坐标:");
int x = scanner.nextInt();
// 判断输入是否正确
if (x > 14 || x < 0) {
System.out.println("你输入错误,请输入0~14,按回车键重新输入!");
new Scanner(System.in).nextLine();
continue;
}
// 判断该位置有无落子
if (qipan[y][x] == '@' || qipan[y][x] == 'O') {
System.out.println("该位置已落子,请按回车键重新下子!");
new Scanner(System.in).nextLine();
continue;
}
/**
* 1 交替下棋 2 胜负判断
*
*/
qipan[y][x] = curQiZi;
// 胜负判断
// 横判断
int count = 1;
for(int i = x - 1; i >= 0; i--){
if(qipan[y][i] == qipan[y][x]){
count++;
}else{
break;
}
}
for(int i = x + 1; i < SIZE ; i++){
if(qipan[y][i] == qipan[y][x]){
count++;
}else{
break;
}
}
if(count >= 5){
isOver = true;
continue;
}
//判断竖向
count = 1;
for(int i = y - 1; i >= 0; i--){
if(qipan[i][x] == qipan[y][x]){
count++;
}else{
break;
}
}
for(int i = y + 1; i < SIZE ; i++){
if(qipan[i][x] == qipan[y][x]){
count++;
}else{
break;
}
}
if(count >= 5){
isOver = true;
continue;
}
//判断斜向
count = 1;
for(int i = y - 1,j = x - 1; i >= 0 && j >= 0; i--, j--){
if(qipan[i][j] == qipan[y][x]){
count++;
}else{
break;
}
}
for(int i = y + 1,j = x + 1; i <= SIZE && j <= SIZE; i++, j++){
if(qipan[i][j] == qipan[y][x]){
count++;
}else{
break;
}
}
if(count >= 5){
isOver = true;
continue;
}
//判断反斜向
count = 1;
for(int i = y + 1,j = x - 1; i <= SIZE && j >= 0; i++, j--){
if(qipan[i][j] == qipan[y][x]){
count++;
}else{
break;
}
}
for(int i = y - 1,j = x + 1; i <= SIZE && j >= 0; i--, j++){
if(qipan[i][j] == qipan[y][x]){
count++;
}else{
break;
}
}
if(count >= 5){
isOver = true;
continue;
}
// 交替黑白落子
curQiZi = curQiZi == '@' ? 'O' : '@';
}
}
}
五子棋小游戏
最新推荐文章于 2023-06-09 14:03:22 发布