package Text;
import java.util.Scanner; //引入scanner类对字符序列进行解析(p212)
public class Test4 {
@SuppressWarnings("resource")
public static void main(String[] args) {
int flag=0; //偶数玩家一操作,奇数玩家二操作 局部变量初始化 p65成员变量有默认值,
//但局部变量没有默认值,因此在使用局部变量之前必须保证局部变量有具体的值.具体原因见下面程序
int works=0; //判断是否胜利,若胜利则为4,具体原因需联系下面的程序
int works_x=0; //设定为当五子连线时最后一步的x值
int works_y=0; //设定为当五子连线时最后一步的y值
String list[][] = start(); //棋盘的生成,和显示
for (int i = 0; i < list.length; i++) {
for (int j = 0; j < list[i].length; j++) {
System.out.print(list[i][j]);
}
System.out.println();
}
while (true) { //引用while循环(p50),而while(true)作为无限循环,经常在不知道循环次数的时候使用,并且需要在循环内使用break才会停止。
//此程序内设定为胜利时break,跳出循环
Scanner sc = new Scanner(System.in); //声明对象并为其分配变量,括号中system.in表明将输入的字符串分配给变量sc
System.out.print("位置:");
String temp = sc.next(); //棋手输入的x值和y值(此方法中为0-9的数)
//然后scanner对象调用next()方法依次返回被解析的字符序列中的单词(p213)
//此处代表将输入的字符串分配给string类对象,以便后续对字符串的处理
int x = Integer.parseInt(temp.substring(0,1)); //首先调用substring方法分别截取字符串的第一个元素和第二个元素(p199)
int y = Integer.parseInt(temp.substring(1)); //然后再使用Integer类中的parseInt方法将字符序列转换为整数型(p200)
//最后再将截取的数字分别分配给变量x和y
if (flag % 2 == 0){// //由于上面已0赋值给flag,所以if语句中设定成让玩家一先操作的程序
if (list[x+1][y+1]==" - ") //当输入的位置在所给的棋盘范围中,进行下一步操作;若不在,else语句中执行flag--
//使flag值为单数,从而跳到下一个else-if语句,让玩家二操作。
//至于为什么是[x+1][y+1],结合棋盘图
list[x+1][y+1] = " O "; //依据输入的数组将指定位置的“-”变为“o”,从而实现玩家一的操作
else
flag--;
}
else{ //玩家二操作,此位置为" - ",否则重新输入,玩家二操作方法参考玩家一
if (list[x+1][y+1]==" - ")
list[x+1][y+1] =" X ";
else
flag--;
}
flag++; //每次操作成功+1,flag由单数变为复数,或由复数变为单数,从而实现让下一玩家操作
for (int i = 0; i < list.length; i++) {//显示操作结果
for (int j = 0; j < list[i].length; j++) {
System.out.print(list[i][j]);
///*
if (list[i][j]!=" - "){//判断是否胜利,只有非“ - ”时判断
if(work(list,i,j)==4){//当值为4时,说明实现五子连线,并赋值给works变量,以便执行下列if语句
works=work(list,i,j);
works_x=x;//将实现五子连线的那个数组分别赋值给两个新变量
works_y=y;
}
}
//*/
}
System.out.println();
}
if(works!=0){//最后值为“ O ”时,玩家一胜出;最后值为“ X ”时,玩家二胜出。
if(list[works_x][works_y]==" O ")
System.out.println("玩家一胜出");
else
System.out.println("玩家二胜出");
System.out.println("结束");
break;
}
}
}
public static String[][] start() { //生成一个10*10的空棋盘
String list[][] = new String[11][11];
for (int i = 0; i < list.length; i++) {
for (int j = 0; j < list[i].length; j++) {
if(i == 0 && j==0)
list[i][j] = " ";
else if (i == 0 && j!=0)
list[i][j] = " "+(j-1)+" ";
else if (j==0 && i!=0)
list[i][j] = " "+(i-1)+" ";
else
list[i][j] = " - ";
}
}
return list;
}
//在输入每一组数组后,都会执行以下语句程序来判断此数组所对应的位置的各个方位是否形成五子连线。
public static int work(String list[][],int x,int y) { //判断是否胜利
int temp=0;//定义一个初始值为0的新变量,循环结束后此变量的最终值为work(list,x,y)值
if(x-4>0 ){ //指位置若在第四行以下(依据棋盘旁标注),进行下列三种情况的判断
if(y-4>0 ){ //第一种情况:指位置若在第四行以下且在第四列以后,执行下列语句判断其左上角是否五子连线
for(int i=0;i<4;i++){ //执行四次循环,i取值就有0,1,2,3
if (list[x][y]==list[x-4+i][y-4+i])
temp++;
else
break;
}
}
else if(y+4<list[x].length){//右上角是否五子连线 第二种情况,位置若在第五列及以前,第四行及以下,执行下列语句判断其右上角是否五子连线
for(int i=0;i<4;i++){ //执行四次循环,i取值就有0,1,2,3
if (list[x][y]==list[x-5+i][y+5-i])//举例:若为list[5][6],在棋盘中位于第四行第五列,此语句将该位置分别与list[1][10](图中第0行第九列)
//list[2][9]等其他五个位置做判断,判断是否都为“x”或都为“O”
temp++;//循环执行一次,若成立则加1
else
break;//四次循环后暂停该循环
}
}
else{ //第三种情况
for(int i=0;i<4;i++){ //正上角是否五子连线
if (list[x][y]==list[x-4+i][y])//若位于第四行及以下,判断该位置以上四个位置是否相同
temp++;
else
break;
}
}
}
else if(x+4<list.length ){ //左下角是否五子连线 若位置在第五行及以上,判断下列三种情况:
if(y-4>0 ){//若位置在第五行及以上,第四列及以后,判断其左下角是否五子连线
for(int i=0;i<4;i++){//与上面判断其右上角是否五子连线步骤类似
if (list[x][y]==list[x+4-i][y-4+i])
temp++;
else
break;
}
}
else if(y+4<list[x].length){//右下角是否五子连线 若位置在第五行及以上,第五列及以前,右下角是否五子连线
for(int i=0;i<4;i++){//与上面判断其左上角是否五子连线步骤类似
if (list[x][y]==list[x+4-i][y+4-i])
temp++;
else
break;
}
}
else{
for(int i=0;i<4;i++){ //正下角是否五子连线 若位置在第五行及以上,正下角是否五子连线
if (list[x][y]==list[x+4-i][y])//与上面判断其正上角是否五子连线步骤类似
temp++;
else
break;
}
}
}
else{
if(y-4>0 ){ //若位置在第四列及以后
for(int i=0;i<4;i++){ //正左角是否五子连线 与上面判断其正上角是否五子连线步骤类似
if (list[x][y]==list[x][y-4+i])
temp++;
else
break;
}
}
else if(y+4<list[x].length){//正右角是否五子连线 若在第五列及以前
for(int i=0;i<4;i++){//判断正右角是否五子连线
if (list[x][y]==list[x][y+4-i])
temp++;
else
break;
}
}
}
return temp;//在以上循环结束后,返回temp的值,并将其值分配给work(list,i,j)
}
}
please告诉我怎么改!