Я пытаюсь подключить четыре игры в scala. В настоящее время у меня есть распечатка платы и прошу игрока 1 за ход, как только игрок 1 выберет номер, который выдает печатная плата с X в столбце, где выбрал игрока 1. то игрок 2 выбирает номер. Моя проблема заключается в том, что, как только я выберу номер, письмо игрока заполняет весь столбец, и вы создаете его поверх этого.Connect Four игра в Scala
Вот пример того, что происходит
. X . O X . . .
. X . O X . . .
. X . O X . . .
. X . O X . . .
. X . O X . . .
. X . O X . . .
. X . O X . . .
. X . O X . . .
0 1 2 3 4 5 6 7
// Initialize the grid
val table = Array.fill(9,8)('.')
var i = 0;
while(i < 8){
table(8)(i) = (i+'0').toChar
i = i+1;
}
/* printGrid: Print out the grid provided */
def printGrid(table: Array[Array[Char]]) {
table.foreach(x => println(x.mkString(" ")))
}
/*//place of pieces X
def placeMarker(){
val move = readInt
//var currentRow = 7
while (currentRow >= 0)
if (table(currentRow)(move) != ('.')){
currentRow = (currentRow-1)
table(currentRow)(move) = ('X')
return (player2)}
else{
table(currentRow)(move) = ('X')
return (player2)
}
}
//place of pieces O
def placeMarker2(){
val move = readInt
//var currentRow = 7
while (currentRow >= 0)
if (table(currentRow)(move) != ('.')){
currentRow = (currentRow-1)
table(currentRow)(move) = ('O')
return (player1)}
else{
table(currentRow)(move) = ('O')
return (player1)
}
}
*/
def placeMarker1(){
val move = readInt
var currentRow = 7
while (currentRow >= 0)
if (table(currentRow)(move) !=('.'))
{currentRow = (currentRow-1)}
else{table(currentRow)(move) = ('X')}
}
def placeMarker2(){
val move = readInt
var currentRow = 7
while (currentRow >= 0)
if (table(currentRow)(move) !=('.'))
{currentRow = (currentRow-1)}
else{table(currentRow)(move) = ('O')}
}
//player 1
def player1(){
printGrid(table)
println("Player 1 it is your turn. Choose a column 0-7")
placeMarker1()
}
//player 2
def player2(){
printGrid(table)
println("Player 2 it is your turn. Choose a column 0-7")
placeMarker2()
}
for (turn <- 1 to 32){
player1
player2
}
Итак, когда у меня было var CurrentRows = 7 в функции placeMarker1/placeMaker2, это позволило бы мне подняться во 2-ю строку снизу и не продолжить весь путь вверх. Как вы думаете, я должен продолжать с ним в функциях @daowen – acolisto
@acolisto - Это потому, что логика плохая. Почему у вас есть цикл, если вы никогда не отпускаете его на более чем 1 итерацию? (У обоих ветвей (если/else) условного есть 'return' внутри.) Истинная ветвь должна * только * декрементировать' currentRow', а затем цикл будет продолжать делать свою вещь: 'if (table (currentRow) (move)! = ('.')) {currentRow = (currentRow-1)} else {...} ' – DaoWen
@acolisto - Вам все еще нужно' return' в ветке 'else'. Другими словами, как только вы разместите кусок, вы закончите, и вы вернетесь. – DaoWen