我是java的新手,并且有一项任务要求我制作一个connect4游戏。我的代码中的所有内容都完美无缺,除了对角线之外,由于某些原因我无法在第6列中输入硬币。此外,如果发现任何其他错误,请同样指出!任何帮助将不胜感激。谢谢!
public class Connect4 {
/**
* @param args the command line arguments
*/
public static void displayGrid(char [][]connectfourGrid){
for(int i=0;i<connectfourGrid.length;i++)
{
for(int j=0;j<connectfourGrid[i].length;j++)
System.out.print("|"+connectfourGrid[i][j]);
System.out.println("|");
}
for(int i=0;i<connectfourGrid.length-1;i++)
System.out.print("---");
System.out.println("");
}
public static void playConnect4(char[][]connectfourGrid){
Scanner input = new Scanner(System.in);
boolean gameOver=false;
boolean playersTurn = true;
int columnPos = 0;
char colour;
while(!gameOver){
if(playersTurn){
System.out.print("Drop a red coin at column 0-6:");
colour = 'R';
}
else{
System.out.print("Drop a yellow coin at column 0-6:");
colour = 'Y';
}
columnPos = input.nextByte();
while(columnPos<0||columnPos>6){
System.out.println("C'est out of bounds. "+colour+" please enter again mate");
columnPos=input.nextByte();
}
playersTurn = !playersTurn;
if(dropCoin(connectfourGrid, columnPos, colour))
playersTurn=!playersTurn;
else{
displayGrid(connectfourGrid);
if(gameStatus(connectfourGrid,columnPos,colour)){
gameOver=true;
System.out.println(colour+" won!");
}
else if(checkTie(connectfourGrid)){
gameOver = true;
System.out.println("C'est a tie!");
}
}
}
}
public static boolean checkTie(char[][]connectfourGrid){
for(int i=0;i<connectfourGrid[0].length;i++)
if(connectfourGrid[0][i]==0)
return false;
return true;
}
public static boolean gameStatus(char[][]connectfourGrid,int columnPos,char colour){
int rowPos=0;
for(int i=0;i<connectfourGrid.length;i++)
if(connectfourGrid[i][columnPos]!=0){
rowPos = i;
break;
}
if(checkCol(connectfourGrid,columnPos,colour,rowPos))
return true;
if(checkRow(connectfourGrid,columnPos,colour,rowPos))
return true;
if(checkMajorDiagonal(connectfourGrid,columnPos,colour,rowPos))
return true;
if(checkMinorDiagonal(connectfourGrid,columnPos,colour,rowPos))
return true;
return false;
}
public static boolean checkMajorDiagonal(char[][]connectfourGrid,int columnPos,char colour,int rowPos){
int count=1;
for(int i=rowPos-1,j=columnPos-1;i>=0&&j>=0;i--,j--)
if(colour==connectfourGrid[i][j])
return true;
else
break;
if(count>=4)
return true;
for(int i=rowPos+1,j=columnPos+1;i<connectfourGrid.length&&j<connectfourGrid[0].length;i++,j++)
if(colour==connectfourGrid[i][j])
return true;
else
break;
if(count>=4)
return true;
/* for(int i=rowPos-1;i>=0;i--)
for(int j=columnPos-1;j>=0;j--)
if(colour==connectfourGrid[i][j])
count++;
else
break;
if(count>=4)
return true;
for(int i=rowPos+1;i<connectfourGrid.length;i++)
for(int j=columnPos+1;j<connectfourGrid[0].length;j++)
if(colour==connectfourGrid[i][j])
return true;
else
break;
if(count>=4)
return true;*/
return false;
}
public static boolean checkMinorDiagonal(char[][]connectfourGrid,int columnPos,char colour,int rowPos){
int count=1;
for(int i=rowPos+1,j=columnPos-1;i<connectfourGrid.length&&j>=0;i++,j--)
if(colour==connectfourGrid[i][j])
count++;
else
break;
if(count>=4)
return true;
for(int i=rowPos-1,j=columnPos+1;i>=0&&j<connectfourGrid[0].length;i--,j++)
if(colour==connectfourGrid[i][j])
count++;
else
break;
if(count>=4)
return true;
/*for(int i=rowPos+1;i<connectfourGrid.length;i++)
for(int j=columnPos-1;j>=0;j--)
if(colour==connectfourGrid[i][j])
count++;
else
break;
if(count>=4)
return true;
for(int i=rowPos-1;i>=0;i--)
for(int j=columnPos+1;i<connectfourGrid[0].length;j++)
if(colour==connectfourGrid[i][j])
count++;
else
break;
if(count>=4)
return true;*/
return false;
}
public static boolean checkRow(char[][]connectfourGrid,int columnPos,char colour,int rowPos){
int count=1;
for(int i=columnPos-1;i>=0;i--)
if(colour==connectfourGrid[rowPos][i])
count++;
else
break;
if(count>=4)
return true;
for(int i=columnPos+1;i<connectfourGrid[0].length;i++)
if(colour==connectfourGrid[rowPos][i])
count++;
else
break;
if(count>=4)
return true;
return false;
}
public static boolean checkCol(char [][]connectfourGrid,int columnPos,char colour,int rowPos){
int count=1;
if((rowPos+4)<=6)
for(int i=rowPos+1;i<=(rowPos+3);i++)
if(colour==connectfourGrid[i][columnPos])
count++;
else
break;
if(count==4)
return true;
return false;
}
public static boolean dropCoin(char[][]connectfourGrid, int columnPos,char colour){
for(int i=connectfourGrid.length-1;i>=0;i--)
if(connectfourGrid[i][columnPos]==0){
connectfourGrid[i][columnPos]=colour;
return false;
}
System.out.println("C'est full. "+colour+" try again mate!");
return true;
}
public static void main(String[] args) {
// TODO code application logic here
Scanner input = new Scanner(System.in);
char[][]connectfourGrid = new char [6][7];
displayGrid(connectfourGrid);
playConnect4(connectfourGrid);
}
}
答案 0 :(得分:0)
这似乎没有意义......
public static boolean checkMajorDiagonal(char[][] connectfourGrid, int columnPos, char colour, int rowPos) {
int count = 1;
System.out.println(columnPos + "x" + rowPos);
for (int i = rowPos - 1, j = columnPos - 1; i >= 0 && j >= 0; i--, j--) {
if (colour == connectfourGrid[i][j]) {
return true;
} else {
break;
}
}
if (count >= 4) {
return true;
}
for (int i = rowPos + 1, j = columnPos + 1; i < connectfourGrid.length && j < connectfourGrid[0].length; i++, j++) {
if (colour == connectfourGrid[i][j]) {
return true;
} else {
break;
}
}
if (count >= 4) {
return true;
}
return false;
}
当您找到具有匹配颜色的单元格时,您将返回true
,如果还有其他匹配的硬币,则不会考虑这些硬币,以形成获胜条件。< / p>
甚至更奇怪的是,您已经设置了代码来检查&#34;匹配&#34;的数量,但是没有使用它们。
所以,当我把它改成......时,
public static boolean checkMajorDiagonal(char[][] connectfourGrid, int columnPos, char colour, int rowPos) {
int count = 1;
System.out.println(columnPos + "x" + rowPos);
for (int i = rowPos - 1, j = columnPos - 1; i >= 0 && j >= 0; i--, j--) {
if (colour == connectfourGrid[i][j]) {
//return true;
count++;
} else {
break;
}
}
if (count >= 4) {
return true;
}
for (int i = rowPos + 1, j = columnPos + 1; i < connectfourGrid.length && j < connectfourGrid[0].length; i++, j++) {
if (colour == connectfourGrid[i][j]) {
//return true;
count++;
} else {
break;
}
}
if (count >= 4) {
return true;
}
return false;
}
我得到了它(在我的有限测试中)。
除了checkMinorDiagonal
之外,你似乎做得更奇怪了。
我也没有问题将硬币输入第6列