使用用户输入在棋盘上移动玩家:"Left dx Up dy"



我用下面的代码创建了一个网格:

board = []
x = choice_size
y = x
for row in range(0,x):
    board.append(["()"]*y)
def print_board(board):
    for row in board:
        print(" ".join(row))
print_board(board)

我需要为用户提供输入选项(例如"Left 10 Up 2"),然后将它们移动到电路板上的相应位置。

我试过把他们的数字添加到变量中,然后在列表board中获得x和y的位置,但我似乎不能让它工作。

这是一个如何移动玩家的例子

但是它使用Linux的特殊符号在重绘板之前清除终端/控制台。

import time
# --- constants --- (UPPER_CASE names)
SIZE_X = 10
SIZE_Y = 5
SYMBOL_EMPTY  = '( )'
SYMBOL_PLAYER = '(@)'
#SYMBOL_DANGER = '(!)'
# --- functions --- (lower_case names)
def print_board(board):
    print('33c') # clear terminal on Linux
    for row in board:
        print("".join(row))

def move_player(new_x, new_y):
    global player_x
    global player_y
    # remove in old place
    board[player_y][player_x] = SYMBOL_EMPTY
    # put in new place
    player_x = new_x
    player_y = new_y
    board[player_y][player_x] = SYMBOL_PLAYER
# --- main --- (lower_case names)
# creat board
board = [ ]
for row in range(SIZE_Y):
    board.append([SYMBOL_EMPTY] * SIZE_X)
# display empty board
print_board(board)
time.sleep(0.5)
# set player position and symbol
player_x = player_y = 0
board[player_y][player_x] = SYMBOL_PLAYER
# display board with player    
print_board(board)
time.sleep(0.5)
# move player
# move left
for new_x in range(SIZE_X):
    move_player(new_x, player_y)
    # redraw
    print_board(board)
    time.sleep(0.5)
# move down
for new_y in range(SIZE_Y):
    move_player(player_x, new_y)
    # redraw
    print_board(board)
    time.sleep(0.5)

真正的程序可以更复杂。

在控制台中,清除屏幕以重新绘制板和获得键/鼠标事件以使其真正具有交互性可能存在问题。可能见urwid或ncurses模块。

或者尝试PyGame, Pyglet等图形模块

根据玩家想要移动的方向,尝试通过增加或减少数字来改变x/y值。

最新更新