【发布时间】:2020-10-31 19:34:26
【问题描述】:
(java) 我的 Mancala 程序出现问题,我需要将数组 Board[0] 的位置转移到 for 循环 Board[pilePlayer1+i] 中的数组。如果 Board[pilePlayer1+i] 处于 Board[0] 的位置而不改变任何东西,我只需要继续执行 for 循环即可。我不知道如何做到这一点,任何帮助将不胜感激。
代码
import TurtleGraphics.KeyboardReader;
public class Mancala
{
public static void main(String[] args)
{
KeyboardReader reader = new KeyboardReader();
int clicked, index = 0, pit = 0;
boolean player1, player2;
//arrays
int[] Board = new int[] { 3, 3, 3, 3, 3, 3, 0, 3, 3, 3, 3, 3, 3, 0 };
char[] CharArrayP1 = new char[6];
CharArrayP1[0] = 'A';
CharArrayP1[1] = 'B';
CharArrayP1[2] = 'C';
CharArrayP1[3] = 'D';
CharArrayP1[4] = 'E';
CharArrayP1[5] = 'F';
char[] CharArrayP2 = new char[6];
CharArrayP2[0] = 'a';
CharArrayP2[1] = 'b';
CharArrayP2[2] = 'c';
CharArrayP2[3] = 'd';
CharArrayP2[4] = 'e';
CharArrayP2[5] = 'f';
//method transfers
playgame(Board, CharArrayP1, CharArrayP2);
BoardPrintout(Board, CharArrayP1, CharArrayP2);
}
public static void playgame(int Board[], char[] CharArrayP1, char[] CharArrayP2)
{
KeyboardReader reader = new KeyboardReader();
int pilePlayer1 = 0, pilePlayer2 = 0, pC=0;
char Char1, Char2;
boolean p1, p2;
do {
pC++;
//player turn printout
if((pC==1)||(pC==3)||(pC==5)||(pC==7)||(pC==9)||(pC==11)||(pC==13))
{
p1 = true;
System.out.println("Player 1's Turn");
}
else
p1 = false;
if((pC==2)||(pC==4)||(pC==6)||(pC==8)||(pC==10)||(pC==12)||(pC==14))
{
p2 = true;
System.out.println("Player 2's Turn");
}
else
p2 = false;
if(p1= true)
{
System.out.println(" ");
System.out.println("Player one chose a pile (A-F Capital)");
Char1=reader.readChar();
//converting char to int
if(Char1=='A')
pilePlayer1=0;
if(Char1=='B')
pilePlayer1=1;
if(Char1=='C')
pilePlayer1=2;
if(Char1=='D')
pilePlayer1=3;
if(Char1=='E')
pilePlayer1=4;
if(Char1=='F')
pilePlayer1=5;
while(Character.isLetter(Char1) == false)
{
//error checker player 1
System.err.println("Error: value wrong please rechoose your pile");
System.out.println("Player 1 rechose a pile (A-F Capital)");
Char1=reader.readChar();
if(Char1=='A')
pilePlayer1=0;
if(Char1=='B')
pilePlayer1=1;
if(Char1=='C')
pilePlayer1=2;
if(Char1=='D')
pilePlayer1=3;
if(Char1=='E')
pilePlayer1=4;
if(Char1=='F')
pilePlayer1=5;
};
//pile adder player 1
for(int i=0; i<4; i++)
{
Board[pilePlayer1]--;
Board[pilePlayer1+i]++;
if(Board[pilePlayer1+i]==Board[13])
{
Board[13]--;
Board[pilePlayer1+i]=Board[0];
}
}
//board printer
BoardPrintout(Board, CharArrayP1, CharArrayP2);
}
if(p2= true)
{
System.out.println("Player two chose a pile (a-f lowercase)");
Char2=reader.readChar();
//converting char to int
if(Char2=='a')
pilePlayer2=7;
if(Char2=='b')
pilePlayer2=8;
if(Char2=='c')
pilePlayer2=9;
if(Char2=='d')
pilePlayer2=10;
if(Char2=='e')
pilePlayer2=11;
if(Char2=='f')
pilePlayer2=12;
while(Character.isLetter(Char2) == false)
{
//error checker player 2
System.err.println("Error: value wrong please rechoose your pile");
System.out.println("Player 2 rechose a pile (A-F Capital)");
Char2=reader.readChar();
if(Char2=='a')
pilePlayer2=7;
if(Char2=='b')
pilePlayer2=8;
if(Char2=='c')
pilePlayer2=9;
if(Char2=='d')
pilePlayer2=10;
if(Char2=='e')
pilePlayer2=11;
if(Char2=='f')
pilePlayer2=12;
}while(Character.isLetter(Char2) == false);
//pile adder player 2 (where the error is)
for(int i=-1; i<4; i++)
{
Board[pilePlayer2]--;
Board[pilePlayer2+i]++;
if(Board[pilePlayer2+i]==Board[13])
{
Board[13]--;
//how do i get it so it only changes position not value
}
}
BoardPrintout(Board, CharArrayP1, CharArrayP2);
}
}while(gameover(Board)!=false);
}
public static void BoardPrintout(int Board[], char[] CharArrayP1, char[] CharArrayP2)
{
//BOARD
System.out.print("\t"+CharArrayP2[5]+"\t"+CharArrayP2[4]+"\t"+CharArrayP2[3]+"\t"+CharArrayP2[2]+"\t"+CharArrayP2[1]+"\t"+CharArrayP2[0]);
System.out.println("");
System.out.print("\t"+Board[12]+"\t"+Board[11]+"\t"+Board[10]+"\t"+Board[9]+"\t"+Board[8]+"\t"+Board[7]);
System.out.println("");
System.out.println(Board[13]+"\t\t\t\t\t\t\t"+Board[6]);
System.out.print("\t"+CharArrayP1[0]+"\t"+CharArrayP1[1]+"\t"+CharArrayP1[2]+"\t"+CharArrayP1[3]+"\t"+CharArrayP1[4]+"\t"+CharArrayP1[5]);
System.out.println("");
System.out.print("\t"+Board[0]+"\t"+Board[1]+"\t"+Board[2]+"\t"+Board[3]+"\t"+Board[4]+"\t"+Board[5]);
System.out.println("");
}
// checks if the game is over
public static boolean gameover(int[] Board){
if (Board[0]==0||Board[1]==0||Board[2]==0||
Board[3]==0||Board[4]==0||Board[5]==0){
return true;
}
else if(Board[7]==0||Board[8]==0||Board[9]==0
||Board[10]==0||Board[11]==0||Board[12]==0){
return true;
}
return false;
}
} ```
**Prompt**
https://i.stack.imgur.com/gOws6.png
【问题讨论】:
-
我不明白你遇到了什么问题。至少,我听不懂你的解释。
-
对不起,我只是想让 for 循环从 Board[13] aka Board[pilePlayer2+i] 到 Board[0] 没有任何明智的改变价值。
-
for(int i=-1; i