Python在网格中创造钱

时间:2016-04-12 18:34:34

标签: python grid currency

我创建了一段代码,玩家可以四处寻找宝藏。当玩家登陆宝藏时,会添加10个硬币,而如果玩家登陆精灵,则扣除所有硬币。我已经为这个“钱”创建了一个功能,虽然它似乎不起作用。每当我运行代码时,似乎没有任何来自money函数的工作。任何人都可以编辑我的代码,以便它可以工作,或提供任何建议,谢谢。这是我的代码:

import time
from random import *
# Set up Initial Variables
Money = 0
grid = []
character = "X" 
# player_loc will hold the x, y location of the player
player_loc = (0, 0)
# These are a mapping of direction
NORTH = "N"
SOUTH = "S"
 EAST  = "E"
WEST  = "W"   #All variables used for Later on
Treasure = "T"
Goblin = "G"


def menu(): #functiom
   c = input(" To quit this program, type 'quit'    To start the game, type 'start'")#Users choice to start game
   if c == "quit": 
         exit()
   elif c == "start": #If users input is to start the game the all of this appears
      print("Welcome to the treasure hunt game!")
      time.sleep(1)
      print(" ")
      print("These are the rules! You have a choice of a grid ranging from a 3x3 choice to a 20x20 choice")
      print(" ")
      time.sleep(2)
      print("in these grids, bandits and treasure chests will spawn at random locations, hidden to you.")
      print(" ")
      time.sleep(3)
      print("You will have a choice of the amount of goblins and treasures you would like to spawn in, ranging from 1-20.")
      print(" ")
      time.sleep(3)
      print("You will move around the map, in search of treasures which will give you 10 gold. Although landing on a goblin would deduct the amount of gold to 0.")
      print(" ")
      time.sleep(3)
      print("Furthurmore, just deciding on a position you would like to move to, would give you an extra 1 piece of gold.")
      print(" ")
      time.sleep(3)
      print("You can only find the same treasure chest two times before it's replaced by a bandit.")
      print(" ")
      time.sleep(3)
      print("To check the amount of gold you have and the amount of bandits and treasure chests in the grid. Simply type 'status'")
      print(" ")
      time.sleep(3)
      print("Don't forget! If you have collected all the treasure chests and you don't have 100 gold, you lose the game!")
      print(" ")
      time.sleep(3)
      print("Good luck, you will now be entered into the game")
      print(" ")
      time.sleep(2)
      x = input("What is your name?")
      username = x
      time.sleep(2)
      print ("Hello,", username,"! Let's jump into the game!")
      setupGrid()
      Chests_and_Goblins() 


def setupGrid(): #New function for creating grid
    global grid #Adding/creating global variables
    global row
    global N
    N = input("How big would you like the grid to be?") #User input
    time.sleep(2)
    while int(N) > 20 : #Changing N to an integer so computer understamds
          N =input("That number is too high or too low, The grid has to be at a size of under 20x20. Or 3x3 and larger. Please try again")
   else:
       while int(N) < 3 : # Asking the user to input again as number is too high or low
          N = input("That number is too low, the grid has to be a size of over 3x3. Please try again")
       for x in range(0, (int(N))):#For everything in range N
            row = [] #The N amount of rows are created
            for y in range(0, (int(N))): #For everything in range N
               if x == player_loc[0] and y == player_loc[1]: #If the positions is equal to th player location
                    row.append(character) # Add the character in
                else:
                  row.append('O') #Add the same amount of 0's as N
           grid.append(row) 


 def Chests_and_Goblins():
   global z
   global grid
   global row
   global N
   global Treasure
   print("How many chests would you like in the grid?")     
   time.sleep(2)
   B = input("The amount of chests you like is given by the amount of C's")
   print("How many Bandits would you like in the grid?")     
   time.sleep(2)
   F = input("The amount of Bandits you like is given by the amount of B's")
   for each in B:
      grid[randint(0, int(N)-1)][randint(0, int(N)-1)] = Treasure
   for each in F:
      grid[randint(0, int(N)-1)][randint(0, int(N)-1)] = Goblin





def moveSouth(n):
    global player_loc
    grid[player_loc[0]][player_loc[1]] = "O"
    grid[player_loc[0] + n][player_loc[1]] = character
    player_loc = (player_loc[0] + n, player_loc[1])
    money()

def moveNorth(n):
    global player_loc
    grid[player_loc[0]][player_loc[1]] = "O"
    grid[player_loc[0] - n][player_loc[1]] = character
    player_loc = (player_loc[0] - n, player_loc[1])
    money()

def moveEast(n):
    global player_loc
    grid[player_loc[0]][player_loc[1]] = "O"
    grid[player_loc[0]][player_loc[1] + n] = character
    player_loc = (player_loc[0], player_loc[1] + n)
    money()

def moveWest(n):
    global player_loc
    grid[player_loc[0]][player_loc[1]] = "O"
    grid[player_loc[0]][player_loc[1] - n] = character
    player_loc = (player_loc[0], player_loc[1] - n)
    money()

def gridRunner():
    while True:
        for row in grid:
            print (row)

         switch = {NORTH : moveNorth,
                  SOUTH : moveSouth,
                  EAST  : moveEast,
                  WEST  : moveWest }
        print (" ")
        time.sleep(2)
        P = input("What direction would you like to move in? North (N), South(S), East(E) or West(W)?").upper()

        if P not in switch:
            print ("invalid move")
            continue

        distance = int(input("How far would you like to move in this direction? (blocks are the units)"))
        switch[P](distance)

def money():
   global player_loc
   global character
   global Treasure
   if player_loc == Treasure:
      print("Well done, You have gained coins")
   else:
      print ("You got nothing")





menu()
gridRunner()

2 个答案:

答案 0 :(得分:0)

您的金钱功能甚至不存储/操纵货币变量&gt;。&gt;

它只是根据'if'条件打印输出。不应该是这样的:

if player_loc == Treasure:
      print("Well done, You have gained coins")
      Money += 10
else:
      print ("You got nothing")
      Money = 0

答案 1 :(得分:0)

我有一个正常工作的代码但是这种东西自己做得更好,所以我只是在这里放置一些可以指向正确方向的函数:

def money(x, y):
    global MONEY
    if GRID[x][y] == TREASURE: MONEY += 10; print 'You found a treasure'
    elif GRID[x][y] == GOBLIN: MONEY = 0; print 'You lost your money'

这个金钱函数将检查给定网格中的位置,如果它应该用钱来完成,因为你可以看到我们使用全局因为我们将修改全局值的值,我们传递x,y而不是使用我们的位置的原因将在下一个函数中显而易见:

def move_west():
    global GRID, POSITION
    x, y = POSITION[0], POSITION[1]
    if y != 0:
        money(x, y-1)
        GRID[x][y], GRID[x][y-1] = EMPTY, AVATAR
        POSITION = (x, y-1)
    else: print 'You\'ve hit a wall'

正如你在这个函数中看到的,首先我们从一个全局值得到当前位置,在我的例子中是一个元组(x,y)。我们检查我们移动的方式是否有效,然后我们在更改它之前用我们未来的位置调用money函数,之所以我们这样做是因为现在值可以是EMPTY,TREASURE或GOBLIN,但是在我们之后移动肯定会是AVATAR所以我们会改变它,我们的金钱功能永远不会看到那里有什么事情要做。在我们调用money函数之后,我们在全局变量中更新网格和字符的位置。希望这会对你有所帮助。