2013-11-28 57 views
0

所以,我想在Python中創建一個非常簡單的自上而下的遊戲。我有一個非常簡單的網格。Python中簡單的基於文本的網格遊戲

import sys 

ROWS=5 
COLUMNS=5 

def display(grid): 
    for r in range (0,ROWS,1): 
     for c in range (0,COLUMNS,1): 
      sys.stdout.write(grid[r][c]) 
    print() 

def initialize(): 
    grid=[] 
    for r in range (0,ROWS,1): 
     grid.append([]) 
    grid[0]=['#','#','O','#','#'] 
    grid[1]=['#','#',' ','#','#'] 
    grid[2]=['#','#',' ','#','#'] 
    grid[3]=['#','#',' ','#','#'] 
    grid[4]=['#','#',' ','#','#'] 
return(grid) 

def main(): 
    grid=initialize() 
    display(grid) 

main() 

O是玩家。現在,我只需要創建一個簡單的函數,首先會詢問用戶的方向(向下2,向上8,向左4,向右6),然後移動網格上的O. 我該怎麼做?

+0

使用'input()'來捕獲用戶對'main()'循環的響應。在每個輸入中,用戶只需將「O」移動到多維列表中即可。 – 2013-11-28 22:11:42

+0

這裏有一些提示:'input'(或'raw_input',如果這是Python 2.x)可以從用戶那裏得到一個字符串。你可能想跟蹤當前的位置,也許在'x'和'y'變量中,但是如果你真的不想這樣做,你可以在每個'grid'行搜索帶有'O'的列通過在行中使用'O'。 – abarnert

+0

我已經想出瞭如何獲得方向,是的。我只是不知道如何實現運動。我知道我需要實現某種座標,但我不知道如何。 – user2961792

回答

0

這裏的東西,讓你開始:

# all your top-level setup code here 

def initialize(): 
    grid=[] 
    for r in range (0,ROWS,1): 
     grid.append([]) 
    grid[0]=['#','#',' ','#','#'] 
    grid[1]=['#','#',' ','#','#'] 
    grid[2]=['#','#',' ','#','#'] 
    grid[3]=['#','#',' ','#','#'] 
    grid[4]=['#','#',' ','#','#'] 
    row, col = 0, 2 
    grid[row][col] = '0' 
    return grid, row, col 

def move(grid, oldrow, oldcol, newrol, newcol): 
    grid[oldrow][oldcol] = ' ' 
    grid[newrol][newcol] = 'O' 

def main(): 
    grid, row, col = initialize() 
    while True: 
     display(grid) 
     dir = input("Which way? ") 
     if dir == '2': 
      # move up, make sure to handle errors 
     elif dir == '4': 
      # move left 
     # ditto for 6 and 8 
     else: 
      print("That's not a direction. Try 2, 4, 6, or 8.") 

只需填寫註釋部分。

我實施move的方式,用戶會在他身後留下一些空白空間。如果你想記住在他走到那裏之前的原始值(#),那麼你需要一個變量。

+0

這個工程!好吧,差不多。我設法移動了,但是我對Walls'#'有問題。只是想知道,我應該實施wall()函數還是main()? – user2961792

+0

牆壁有什麼問題?你想要它做什麼?現在在做什麼?無論如何,無論您想要添加什麼邏輯,我都可能將它添加到「移動」 - 您可以讓它「提升」非法移動的例外,或者使其返回「newrow,newcol」以進行有效移動並且'oldrow,oldcol'是非法的(並且'main'記住這些值),等等。這意味着如果你後來增加了一個AI迷宮求解器,它可以使用'main'使用的'move'函數。 – abarnert

+0

@ user2961792:您甚至可能想要將方向傳遞給「移動」。 (也許把它作爲一個'drow,dcol'對,像'(-1,0)'向上移動,'(0,1)'向右移動,這可以讓你稍後添加對角線移動,或者「運行」模式,嘗試移動3個空格,但在此之前遇到牆壁時停止,等等) – abarnert