我是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);
}
}
发布于 2018-06-18 05:52:40
这似乎没有道理..。
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
,它不会考虑是否有其他匹配的硬币,这是形成获胜条件所必需的。
更奇怪的是,你已经设置了代码来检查“匹配”的数量,但并没有使用它们。
所以,当我把它改成...
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
做了正确的事情。
我把硬币放到第六列也没问题。
https://stackoverflow.com/questions/50900666
复制相似问题