3

I'm trying to make a really simple game using python.

The game is snake ladder where the player goes from start to finish (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!")

But the problem is, the loop doesn't even start. it says:

"local variable 'player_score' referenced before assignment".

Also: How can i continue the game to the player_choice again with the player_score already added?

David Makogon
  • 69,407
  • 21
  • 141
  • 189

2 Answers2

0

define your variable player_score = 0 inside main

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!")

And the end of game you can again request from user to run again the game. if he accept then again call your method from your start your game

Nasim Bahar
  • 115
  • 3
  • 13
  • Hi, thanks a lot! can i ask one more thing. Now that the game runs, the dice doesn't roll a random number each time. it always stuck at the same number. what's wrong with it ? – Yongky Handrian Koty Nov 19 '16 at 04:44
  • define the numbers also in a function where you rolling the dice. if above answer is correct please accept the answer that this is correct answer. – Nasim Bahar Nov 19 '16 at 04:45
0

You can try

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!")

The reason you see raw_input() is because input() gives an error that R is not defined and the reason you see a slight change in indexing is because your code generates some numbers twice And you see that there is no player function because there is only one command

rrao
  • 297
  • 4
  • 11