2015-05-04 2 views
-1

Мне нужно сделать игру с четырьмя друзьями, используя scala. Я прикрепил код, но каждый раз, когда игра запускается и добирается до строки 3, она просто продолжает менять вторую запись строки вместо перехода к следующей строке. Любая помощь будет оценена по достоинству. Я нашел этот код на another thread здесь и не мог понять, как заставить его работать:Connect-Four Game в Scala

// makes the board 
val table = Array.fill(9,8)('-') 
var i = 0; 
while(i < 8){ 
    table(8)(i) = (i+'0').toChar 
    i = i+1; 
} 

// prints starting board 
def printBoard(table: Array[Array[Char]]) { 
    table.foreach(x => println(x.mkString(" "))) 
} 


//player 1 moves 
def playerMove1(){ 
    val move = readInt 
    var currentRow1 = 7 
    while (currentRow1 >= 0) 
    if (table(currentRow1)(move) != ('-')) { 
     currentRow1 = (currentRow1-1) 
     table(currentRow1)(move) = ('X') 
     return (player2)} 
    } else { 
     table(currentRow1)(move) = ('X') 
     return (player2) 
    } 
} 

//player 2 moves 
def playerMove2(){ 
    val move = readInt 
    var currentRow2 = 7 
    while (currentRow2 >= 0) 
    if (table(currentRow2)(move) != ('-')) { 
     currentRow2 = (currentRow2-1) 
     table(currentRow2)(move) = ('O') 
     return (player1)} 
    } else { 
     table(currentRow2)(move) = ('O') 
     return (player1) 
    } 
} 

//player 1 
def player1(){ 
    printBoard(table) 
    println("Player 1 it is your turn. Choose a column 0-7") 
    playerMove1() 
} 

//player 2 
def player2(){ 
    printBoard(table) 
    println("Player 2 it is your turn. Choose a column 0-7") 
    playerMove2() 
} 

for (turn <- 1 to 32){ 
    player1 
    player2 
} 
+2

Пожалуйста, ссылка на упомянутую нити, настроить заголовок и первое предложение - я просто не понимаю, что вы хотите сказать .... – Markus

+0

жаль не разъяснение. Когда я запустил этот код, нижние две строки будут заполняться, но когда я перейду на ввод X или O в столбце, он просто переключит вторую запись вместо перехода к следующей строке. heres the lonk to another thread http://stackoverflow.com/questions/27073660/connect-four-game-in-scala –

+1

Странно, это напоминает мне [Stack Sort] (https://xkcd.com/1185/). Перейти к теме: У вас, похоже, есть дополнительный '}' перед каждым предложением 'else', поэтому этот код не будет компилироваться. Кроме того, в конце обоих, 'then'-body и' else'-body вы возвращаетесь, поэтому 'currentRow1' /' currentRow2' больше не будет уменьшаться. –

ответ

2

Я пытался сделать код читаемым и компиляцией, а также пытался исправить некоторую логику.

Однако, я никогда не работал с Scala, так это только первый эскиз, где вы могли бы хотеть, чтобы продолжить ...

Некоторые функции могут быть объединены и currentRow необходимо исправить. Смотрите здесь:

object ConnectFour{ 
    val table = Array.fill(9,8)('-') 
    val currentRow = Array.fill(8)(8) 

    def main(args: Array[String]) { 
    var i = 0; 
    while(i < 8) { 
     table(8)(i) = (i+'0').toChar 
     i = i+1; 
    } 

    player(1) 
    } 

    def printBoard(table: Array[Array[Char]]) { 
    table.foreach(x => println(x.mkString(" "))) 
    } 

    def player(playerNr : Int){ 
    printBoard(table) 
    println("Player " + playerNr + " it is your turn. Choose a column 0-7") 
    var column = readAndVerifyInt 

    var nextUser = 1 : Int 
    var symbol = 'O' : Char 

    if(playerNr == 1) { 
     symbol = 'X' 
     nextUser = 2 
    } 

    var curR = currentRow(column) 
    while (curR >= 0) { 
     if (table(curR)(column) != ('-')) { 
     curR = curR-1 
     currentRow(column) = curR 
     } 
     table(curR)(column) = symbol 
     player(nextUser) 
    } 
    } 

    def readAndVerifyInt() : Int = { 
     var column = readInt 
     if (column >= 0 && column <= 7) { 
      return column 
     } else { 
      println(" > Please try again") 
      return readAndVerifyInt 
     } 
    } 
} 
+0

благодарю вас за помощь, но я отправил письмо своему профессору, и он помог мне. –

+0

Я исправил его, тем не менее, только для себя - прилагаемый код работает и немного проще, чем ваш;) – Markus