Python 按X键随机移动玩家
我是一名业余程序员,对Pygame非常陌生。这是我用Pygame编写的程序,类似于Minecraft。在过去的一个小时里,我一直在尝试设置一个代码,使我的播放器在按X键时移动到一个随机平铺。我已经用尽了大部分,如果不是所有的网站和搜索引擎寻找。我已经设法完成了一半的任务;当按下X键时,化身移动到一个随机平铺,但它会移出窗口/显示器。请看一下我的代码,看看我能做些什么来改进它Python 按X键随机移动玩家,python,pygame,Python,Pygame,我是一名业余程序员,对Pygame非常陌生。这是我用Pygame编写的程序,类似于Minecraft。在过去的一个小时里,我一直在尝试设置一个代码,使我的播放器在按X键时移动到一个随机平铺。我已经用尽了大部分,如果不是所有的网站和搜索引擎寻找。我已经设法完成了一半的任务;当按下X键时,化身移动到一个随机平铺,但它会移出窗口/显示器。请看一下我的代码,看看我能做些什么来改进它 import pygame, sys, random from pygame.locals import * LTBL
import pygame, sys, random
from pygame.locals import *
LTBLUE = (125, 221, 255)
GREEN = (42, 106, 24)
YELLOW = (247, 243, 59)
GREY = (150, 150, 150)
WHITE = (255, 255, 255)
PINK = (251, 175, 224)
WATER = 0
SEAWEED = 1
SAND = 2
ROCKS = 3
PEARL = 4
CORAL = 5
PLAYER = pygame.image.load("mermaid.gif")
playerPos=[0,0]
#colors = {SAND: YELLOW, SEAWEED: GREEN, WATER: LTBLUE, PEARL: WHITE, ROCKS: GREY, CORAL: PINK}
textures = { WATER: pygame.image.load("water.png"),
SEAWEED: pygame.image.load("seaweed.png"),
SAND: pygame.image.load("sand.png"),
ROCKS: pygame.image.load("rocks.png"),
PEARL: pygame.image.load("pearl.png"),
CORAL: pygame.image.load("coral3.png")
TILESIZE = 40
MAPWIDTH = 15
MAPHEIGHT = 15
resources = [SAND, WATER, SEAWEED, PEARL, ROCKS, CORAL]
tilemap=[]
for h in range(MAPHEIGHT):
myrow=[]
for w in range(MAPWIDTH):
if(h==0 or h==14 or w==0 or w==14):
myrow.append(CORAL);
else:
randomindex = random.randint(0,5)
myrow.append(randomindex);
tilemap.append(myrow)
print(tilemap)
pygame.init()
DISPLAYSURF = pygame.display.set_mode((MAPWIDTH*TILESIZE, MAPHEIGHT*TILESIZE))
while True:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
if event.type == KEYDOWN:
#rmove = random.randint(0,15)
if event.key == K_RIGHT:
playerPos[0]+=1
elif event.key == K_LEFT:
playerPos[0]-=1
elif event.key == K_UP:
playerPos[1]-=1
elif event.key == K_DOWN:
playerPos[1]+=1
elif event.key == K_x:
if(movex<14 and movey<14):
playerPos[0]-=movex
playerPos[0]+=movex
playerPos[1]-=movey
playerPos[1]+=movey
for row in range(MAPHEIGHT):
for column in range(MAPWIDTH):
DISPLAYSURF.blit(textures[tilemap[row][column]],(column*TILESIZE, row*TILESIZE))
DISPLAYSURF.blit(PLAYER, (playerPos[0]*TILESIZE, playerPos[1]*TILESIZE))`
pygame.display.update()
我认为您在x事件后遗漏了一小部分代码,比如:
movex = random.randint(0,14)
movey = random.randint(0,14)
无论如何,就我理解你的问题而言,假设movex和movey是0到14之间的随机数,问题应该在这里:
if(movex<14 and movey<14):
playerPos[0]-=movex
playerPos[0]+=movex
playerPos[1]-=movey
playerPos[1]+=movey
你应该能把其余的分类放在一起
附言
为了更清楚,您需要指定一个从0到14的数字,而不是对当前位置进行减法/加法。在移动玩家之前,使用if检查新位置。
if event.key == K_RIGHT:
if playerPos[14] == 14:
playerPos[0]= playerPos[0]
else:
playerPos[0]+=1
if event.key == K_LEFT:
if playerPos[0] == 0:
playerPos[0]= playerPos[0]
else:
playerPos[0]-=1