python keypress simple game

匿名 (未验证) 提交于 2019-12-03 08:56:10

问题:

I would like to see on screen a sign, e.x might be (hash) '#'. Sign will have some starting position, let's say (0, 0). I would like to see sign moving right if I press right arrow, left if I press left arrow, etc. So far my code looks like this, and it works for reading pos, but I want to add some kind of "animation" so I can see sign is moving on the screen:

!Update: Just to give u a clue, I created "icon" and now when u press right or left, icon moves in desired direction.

from msvcrt import getch  icon = chr(254) pos = [0, 0] t = [] def fright():     global pos     pos[0] += 1     print ' ' * pos[0],      print(icon)   def fleft():     global pos      pos[0] -= 1     print ' ' * pos[0],      print(icon)   def fup():     global pos     pos[1] += 1  def fdown():     global pos     pos[1] -= 1  def appendTab():     global pos, t     t.append(pos)  while True:     print'Distance from zero: ', pos         key = ord(getch())      if key == 27: #ESC         break     elif key == 13: #Enter         print('selected')         appendTab()     elif key == 32: #Space, just a small test - skip this line         print('jump')         print(t)     elif key == 224: #Special keys (arrows, f keys, ins, del, etc.)         key = ord(getch())         if key == 80: #Down arrow             print('down')             fdown()         elif key == 72: #Up arrow             print('up')             fup()         elif key == 75: #Left arrow             print('left')             fleft()         elif key == 77: #Right arrow             print('right')             fright() 

回答1:

You could create a list of lists that serves as the map and set the cell of the player to '#'. Then just print the map and if the player moves, clear the command-line/terminal with os.system('cls' if os.name == 'nt' else 'clear') and print the updated map.

import os from msvcrt import getch  pos = [0, 0] # The map is a 2D list filled with '-'. gamemap = [['-'] * 5 for _ in range(7)] # Insert the player. gamemap[pos[1]][pos[0]] = '#'  while True:     print('Distance from zero: ', pos    )     key = ord(getch())      if key == 27: #ESC         break     elif key == 224: #Special keys (arrows, f keys, ins, del, etc.)         key = ord(getch())         if key in (80, 72, 75, 77):             # Clear previous tile if player moves.             gamemap[pos[1]][pos[0]] = '-'         if key == 80: #Down arrow             pos[1] += 1         elif key == 72: #Up arrow             pos[1] -= 1         elif key == 75: #Left arrow             pos[0] -= 1         elif key == 77: #Right arrow             pos[0] += 1      print('clear')     # Clear the command-line/terminal.     os.system('cls' if os.name == 'nt' else 'clear')     # Set the player to the new pos.     gamemap[pos[1]][pos[0]] = '#'     # Print the map.     for row in gamemap:         for tile in row:             print(tile, end='')         print() 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!