2013-11-28 59 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