2016-11-19 61 views
3

我想用python制作一个非常简单的游戏。在Python中的While循环上需要帮助

游戏是蛇梯,玩家从开始进入到结束(0 - 100)

from random import randint 
from time import sleep 

board = ["1" ,"2", "3", "4", "5", "6", "7", "8", "9", "10", "11" ,"12", "13", "14", "15", 
    "16", "17", "18", "19", "20", "21" ,"22", "23", "24", "25", "26", "27", "28", "29", 
    "30", "31" ,"32", "33", "34", "35", "36", "37", "38", "39", "40", "41" ,"42", "43", 
    "44", "45", "46", "47", "48", "49", "50", "51" ,"52", "53", "54", "55", "56", "57", 
    "58", "59", "60", "61" ,"62", "63", "64", "65", "66", "67", "68", "69", "70", "71", 
    "72", "73", "74", "75", "76", "77", "78", "79", "80", "81" ,"82", "83", "84", "85", 
    "86", "87", "88", "89", "90", "91" ,"92", "93", "94", "95", "96", "97", "98", "99", 
    "100"] 

def print_board(board): 
    print (" ".join(board[0:10])) #first row 
    print (" ".join(board[10:20])) #second row 
    print (" ".join(board[20:30])) #third row 
    print (" ".join(board[30:40])) #fourth row 
    print (" ".join(board[40:50])) #fifth row 
    print (" ".join(board[50:60])) #six row 
    print (" ".join(board[60:70])) #seventh row 
    print (" ".join(board[70:80])) #eight row 
    print (" ".join(board[80:90])) #ninth row 
    print (" ".join(board[90:100])) #tenth row 


dice = randint(1, 6) #random number 1 - 6 
def roll_dice(dice):  #function to roll the dice 
    print ("Rolling the dice...") 
    sleep(1.5) 
    print ("..."), dice 
    return 


player_score = 0 #starting point/score 

def player(player_score): #for Information 
    print ("You are now at %d") % player_score 

def main():       #game starts 
    print ("Let's play a game") 
    while player_score < 100:  #This is the problem, the while doesn't recognize player_score 
     print_board(board) 
     player_choice = input("put R for Rolling or I for Information: ") 
     player_choice = player_choice.upper() 
     if player_choice == "R": 
      roll_dice(dice) 
      if dice == 1: 
       player_score = player_score + 1 
       print ("Player moves.. ") 
       player(player_score)  
      elif dice == 2: 
       player_score = player_score + 2 
       print ("Player moves.. ") 
       player(player_score) 
      elif dice == 3: 
       player_score = player_score + 3 
       print ("Player moves.. ") 
       player(player_score) 
      elif dice == 4: 
       player_score = player_score + 4 
       print ("Player moves.. ") 
       player(player_score) 
      elif dice == 5: 
       player_score = player_score + 5 
       print ("Player moves.. ") 
       player(player_score) 
      elif dice == 6: 
       player_score = player_score + 6 
       print ("Player moves.. ") 
       player(player_score) 
     elif player_choice == "I": 
      player(player_score) 
    else: 
     print ("Congratulations, you won the game!") 

但问题是,循环根本不会开始。它说:

“在分配之前引用的局部变量'player_score'”。

另请参见:如何通过已添加的player_score再次继续游戏至player_choice?

回答

0

定义变量player_score = 0主

def main(): 
    player_score = 0       #game starts 
    print ("Let's play a game") 
    while player_score < 100:  #This is the problem, the while doesn't recognize player_score 
     print_board(board) 
     player_choice = input("put R for Rolling or I for Information: ") 
     player_choice = player_choice.upper() 
     if player_choice == "R": 
      roll_dice(dice) 
      if dice == 1: 
       player_score = player_score + 1 
       print ("Player moves.. ") 
       player(player_score)  
      elif dice == 2: 
       player_score = player_score + 2 
       print ("Player moves.. ") 
       player(player_score) 
      elif dice == 3: 
       player_score = player_score + 3 
       print ("Player moves.. ") 
       player(player_score) 
      elif dice == 4: 
       player_score = player_score + 4 
       print ("Player moves.. ") 
       player(player_score) 
      elif dice == 5: 
       player_score = player_score + 5 
       print ("Player moves.. ") 
       player(player_score) 
      elif dice == 6: 
       player_score = player_score + 6 
       print ("Player moves.. ") 
       player(player_score) 
     elif player_choice == "I": 
      player(player_score) 
    else: 
     print ("Congratulations, you won the game!") 

内,比赛结束后,你可以再次从用户请求再次运行游戏。如果他接受,然后再从你开始你的游戏调用你的方法

+0

嗨,非常感谢!我可以再问一件事。现在游戏运行,骰子不会每次滚动一个随机数。它总是停留在相同的数字。它出什么问题了 ? –

+0

也可以在掷骰子的函数中定义数字。 如果上面的答案是正确的,请接受答案,这是正确的答案。 –

0

您可以尝试

def print_board(board): 
    print (" ".join(board[0:11])) #first row 
    print (" ".join(board[11:20])) #second row 
    print (" ".join(board[21:30])) #third row 
    print (" ".join(board[31:40])) #fourth row 
    print (" ".join(board[41:50])) #fifth row 
    print (" ".join(board[51:60])) #six row 
    print (" ".join(board[61:70])) #seventh row 
    print (" ".join(board[71:80])) #eight row 
    print (" ".join(board[81:90])) #ninth row 
    print (" ".join(board[91:100])) 

def roll_dice(): #function to roll the dice 
    dice = randint(1, 6) 
    print ("Rolling the dice...") 
    sleep(1.5) 
    print ("..."), dice 
    return dice 
#game starts 
def main(): 
    player_score = 0 

    print ("Let's play a game") 
    while player_score < 100: 
     print_board(board) 
     player_choice = raw_input("put R for Rolling or I for Information: ") 
     player_choice = player_choice.upper() 
     if player_choice == "R": 
      dice = roll_dice() 
      if dice == 1: 
       player_score = player_score + 1 
       print "Player moves.. ", dice 
      elif dice == 2: 
       player_score = player_score + 2 
       print "Player moves.. ", dice 
      elif dice == 3: 
       player_score = player_score + 3 
       print "Player moves.. ", dice 
      elif dice == 4: 
       player_score = player_score + 4 
       print "Player moves.. ", dice 
      elif dice == 5: 
       player_score = player_score + 5 
       print "Player moves..",dice 

      elif dice == 6: 
       player_score = player_score + 6 
       print "Player moves..", dice 

      print "You are now at %d" % player_score 
    elif player_choice == "I": 
     print "You are now at %d" % player_score 
else: 
    print ("Congratulations, you won the game!") 

你看到的原因raw_input()是因为input()给出了R不是定义的错误和原因,你看到有轻微索引编制的改变是因为你的代码产生了一些数字两次 而你看到没有播放器的功能,因为只有一个命令