Arrays 连接Scala中的四个游戏
我想在scala做一个连接四的游戏。目前我已经打印出棋盘,并要求玩家1移动,一旦玩家1选择了一个数字,棋盘就会在玩家1选择的列中打印出一个X。然后玩家2选择一个数字。我的问题是,一旦我选择了一个数字,玩家的字母就会填满整个栏,你就可以在上面构建 下面是一个发生了什么的例子Arrays 连接Scala中的四个游戏,arrays,scala,Arrays,Scala,我想在scala做一个连接四的游戏。目前我已经打印出棋盘,并要求玩家1移动,一旦玩家1选择了一个数字,棋盘就会在玩家1选择的列中打印出一个X。然后玩家2选择一个数字。我的问题是,一旦我选择了一个数字,玩家的字母就会填满整个栏,你就可以在上面构建 下面是一个发生了什么的例子 . X . O X . . . . X . O X . . . . X . O X . . . . X . O X . . . . X . O X . . . . X . O X . . . . X . O X . . . .
. 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
}
。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
//初始化网格
val table=Array.fill(9,8)(“.”)
var i=0;
而(i<8){
表(8)(i)=(i+'0')。toChar
i=i+1;
}
/*printGrid:打印提供的网格*/
def打印网格(表:数组[Array[Char]]){
表.foreach(x=>println(x.mkString(“”))
}
/*//零件位置X
def placeMarker(){
val move=readInt
//var currentRow=7
而(当前行>=0)
如果(表(当前行)(移动)!=('.')){
currentRow=(currentRow-1)
表(当前行)(移动)=('X')
返回(player2)}
否则{
表(当前行)(移动)=('X')
返回(播放机2)
}
}
//件位
def placeMarker2(){
val move=readInt
//var currentRow=7
而(当前行>=0)
如果(表(当前行)(移动)!=('.')){
currentRow=(currentRow-1)
表(当前行)(移动)=('O')
返回(player1)}
否则{
表(当前行)(移动)=('O')
返回(播放者1)
}
}
*/
def placeMarker1(){
val move=readInt
var currentRow=7
而(当前行>=0)
如果(表(当前行)(移动)!=('.'))
{currentRow=(currentRow-1)}
else{table(currentRow)(move)=('X')}
}
def placeMarker2(){
val move=readInt
var currentRow=7
而(当前行>=0)
如果(表(当前行)(移动)!=('.'))
{currentRow=(currentRow-1)}
else{table(currentRow)(move)=('O')}
}
//玩家1
def播放器1(){
打印网格(表格)
println(“玩家1轮到你了。选择一列0-7”)
placeMarker1()
}
//玩家2
def播放器2(){
打印网格(表格)
println(“玩家2轮到你了。选择一列0-7”)
placeMarker2()
}
对于(turn您的全局状态将把您弄得一团糟:var currentRow=7
与其在所有列中跟踪全局“currentRow”,我建议使用以下两种方法之一:
为currentRows
数组中的每一列保留一个单独的“currentRow”
只需在每次放置工件时遍历列,以找到最低的空槽
实际上,看起来您最初是在执行第二个建议,但是您注释掉了本地currentRow
变量,并声明了一个全局(实例级别)因此,当我在函数placeMarker1/placeMaker2中使用var CurrentRows=7时,它只允许我从底部上升到第二行,而不是一直上升。你认为我应该在函数中继续使用它吗@daowen@acolisto-那是因为逻辑不好。如果你从不放弃,为什么会有一个循环对于1次以上的迭代(条件的两个分支(if/else)都有一个返回值),真正的分支应该只减少currentRow
,然后循环将继续执行它的操作:if(table(currentRow)(move)!=('.){currentRow=(currentRow-1)}else{…}
@acolisto-您仍然需要else
分支中的return
。