java实现五子棋小游戏
程序员文章站
2024-03-24 08:50:22
...
经常听人说不会算法的程序员不是没有灵魂的,于是也想跟随大势上一波车,于是最近在看一些简单的算法,表示挺让人头秃的.
本来是学习稀疏数组和二维数组的转换,发现二维数组的结构挺像棋盘的,就萌生了自己写五子棋的想法(因为不会围棋…).
好了,废话不多说,直接贴代码:
package com.ceeeemall;
import java.util.Scanner;
public class ChessArray {
private static int array[][] = new int[12][12];
private static int row = -1;
private static int col = -1;
private static Scanner scanner = new Scanner(System.in);
public static void main(String[] args) {
String user = "y";
//定义一个原始二维数组,12*12
System.out.println("开始对弈,"+user+"先开始");
while(true){
userInput(user);
if ( array[row][col] !=0){
System.out.println("该位置已有棋子,请选择其他位置");
//下错位置需要让userA重新下一次
continue;
}else{
if (user.equals("y")){
array[row][col] = 1;
//todo 悔棋
}else{
array[row][col] = 2;
//todo 悔棋
}
System.out.println(user+"下棋后棋盘显示");
showChess();
//判断是否获胜
if (isWinner(row,col,array[row][col])){
System.out.println(user+"获得胜利,游戏结束");
return;
}
if (user.equals("y")){
user ="x";
}else{
user ="y";
}
}
}
}
private static void showChess() {
for (int i = 0; i < array.length; i++) {
for (int j = 0; j <array.length ; j++) {
System.out.printf("%d\t",array[i][j]);
}
System.out.println();
}
}
private static void userInput(String username) {
System.out.println(username+"请输入行");
row = scanner.nextInt();
System.out.println(username+"请输入列");
col = scanner.nextInt();
if (row >12 || col > 12){
System.out.println("非法输入,请重新输入");
userInput(username);
}
}
private static boolean isWinner(int row, int col, int seat) {
//连子个数
int count = 1;
int x =0;
int y =0;
//判断落子下边棋子颜色
for (x = row-1; x >= 0; x--) {
//如果落子左边得棋子颜色和当前颜色相同则count++
if (array[x][col] == seat){
count++;
//count>=5时则胜利
if (count >= 5){
return true;
}
}else {
break;
}
}
//判断棋子上边
for (x = row+1; x <=array.length; x++) {
//如果落子左边得棋子颜色和当前颜色相同则count++
if (array[x][col] == seat){
count++;
//count>=5时则胜利
if (count>=5){
return true;
}
}else {
break;
}
}
//判断棋子右边
for (y = col+1;y <= array.length; y++) {
//如果落子上边得棋子颜色和当前颜色相同则count++
if (array[row][y] == seat){
count++;
//count>=5时则胜利
if (count>=5){
return true;
}
}else {
break;
}
}
//判断棋子左边
for (y = col-1; y >= 0; y--) {
//如果落子下边得棋子颜色和当前颜色相同则count++
if (array[row][y] == seat){
count++;
//count>=5时则胜利
if (count>=5){
return true;
}
}else {
break;
}
}
//还需要判断斜上方
for (x=row+1,y=col+1; x <=array.length && y<=array.length; x++,y++) {
if (array[x][y] ==seat){
count++;
if (count>=5){
return true;
}
}else {
break;
}
}
//还需要判断斜下方
for (x=row-1,y=col-1; x >= 0 && y >= 0; x--,y--) {
if (array[x][y] ==seat){
count++;
if (count>=5){
return true;
}
}else {
break;
}
}
return false;
}
}
给大家看看效果:
一方获胜后程序终止:
大家可以自己玩玩,目前只有下棋和获胜的功能,如果加其他功能会更新,有哪个地方逻辑不懂可以留言问我哦~~