JAVA游戏——双人井字棋
import java.util.Scanner;
public class Programming2 {
// 建立可存入位置的数组
static int[][] x=new int[3][3];
static int[][] o=new int[3][3];
public static void main (String [] args)
{
int i=0;
//如果没有用户取得胜利或下满整个棋盘则游戏继续
while(checkForWin(x)==false&&checkForWin(o)==false&&i<9) {
//玩家x下棋(默认第一个玩家为x)
Scanner sc=new Scanner(System.in);
//提醒玩家输入行数
System.out.println("Player x-Input the row: ");
int a=sc.nextInt();
Scanner sc2=new Scanner(System.in);
//提醒玩家输入列数
System.out.println("Player x-Input the column: ");
int b=sc2.nextInt();
//调用方法检验输入是否合法,合法则打印,不合法则再次输入
if(checkValidPosition(x,o,a,b)==true) {
x[a-1][b-1]=1;
displayBoard (x,o);
}
else main (args);
if(checkForWin(x)==true) {
System.out.println("Player x wins!");
break;
}
i++;
//若棋盘下满无玩家胜利,则平局
if(i==9) {
System.out.println("A draw!");
break;
}
//玩家o下棋
boolean bool=false;
while(bool==false) {
Scanner sc3=new Scanner(System.in);
System.out.println("Player o-Input the row: ");
int a2=sc3.nextInt();
Scanner sc4=new Scanner(System.in);
System.out.println("Player o-Input the column: ");
int b2=sc4.nextInt();
//调用方法检验输入是否合法,合法则打印,不合法则再次输入
if(checkValidPosition(x,o,a2,b2)==true) {
o[a2-1][b2-1]=1;
displayBoard(x,o);
bool=true;
}
else bool=false;
if(checkForWin2(o)==true) {
System.out.println("Player o wins!");
break;
}
}
i++;
}
}
//检测玩家x是否取得胜利
public static boolean checkForWin (int[][]x)
{
boolean b=false;
int sum1=0;
int sum2=0;
int sum3=0;
int sum4=0;
int sum5=0;
int sum6=0;
int sum7=0;
int sum8=0;
//Player x
for(int j=0;j<3;j++) {
//左上到右下的对角线
if(x[j][j]!=0) sum1+=1;
//右上到左下的对角线
if(x[j][2-j]!=0)sum2+=1;
//列
if(x[0][j]!=0)sum3+=1;
if(x[1][j]!=0)sum4+=1;
if(x[2][j]!=0)sum5+=1;
//行
if(x[j][0]!=0)sum6+=1;
if(x[j][1]!=0)sum7+=1;
if(x[j][2]!=0)sum8+=1;
}
//判断是否已经胜利(三子一线)
if(sum1==3||sum2==3||sum3==3||sum4==3||sum5==3||sum6==3||sum7==3||sum8==3){
b=true;
}
return b;
}
//检测玩家o是否取得胜利
public static boolean checkForWin2(int[][]o)
{
boolean b=false;
int sum1=0;
int sum2=0;
int sum3=0;
int sum4=0;
int sum5=0;
int sum6=0;
int sum7=0;
int sum8=0;
//Player o
for(int j=0;j<3;j++) {
//左上到右下的对角线
if(o[j][j]!=0) sum1+=1;
//右上到左下的对角线
if(o[j][2-j]!=0)sum2+=1;
//列
if(o[0][j]!=0)sum3+=1;
if(o[1][j]!=0)sum4+=1;
if(o[2][j]!=0)sum5+=1;
//行
if(o[j][0]!=0)sum6+=1;
if(o[j][1]!=0)sum7+=1;
if(o[j][2]!=0)sum8+=1;
}
//判断是否已经胜利(三子一线)
if(sum1==3||sum2==3||sum3==3||sum4==3||sum5==3||sum6==3||sum7==3||sum8==3){
b=true;
}
return b;
}
//创建棋盘和录入玩家下棋位置
public static void displayBoard (int[][]x,int[][]o)
{
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
if(x[i][j]==1) System.out.print("x|");
else if(o[i][j]==1) System.out.print("o|");
else System.out.print(" |");
}
System.out.println();
}
}
//检测用户输入是否合理
public static boolean checkValidPosition (int[][]x,int[][]o,int a,int b)
{
boolean boo=true;
//如果用户输入超出井字棋格或不是整型则返回false
if(a>3||a<1||b<1||b>3||a%1!=0||b%1!=0) {
System.out.println("Not Valid! Please input aganin!");
boo=false;
}
//如果用户输入重复则返回false
else if(x[a-1][b-1]+o[a-1][b-1]>0) {
System.out.println("Repetitive! Please input aganin!");
boo=false;
}
return boo;
}
}
代码中有些冗余的方法、编码重复,继续努力学习改进!