Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 按X键随机移动玩家_Python_Pygame - Fatal编程技术网

Python 按X键随机移动玩家

Python 按X键随机移动玩家,python,pygame,Python,Pygame,我是一名业余程序员,对Pygame非常陌生。这是我用Pygame编写的程序,类似于Minecraft。在过去的一个小时里,我一直在尝试设置一个代码,使我的播放器在按X键时移动到一个随机平铺。我已经用尽了大部分,如果不是所有的网站和搜索引擎寻找。我已经设法完成了一半的任务;当按下X键时,化身移动到一个随机平铺,但它会移出窗口/显示器。请看一下我的代码,看看我能做些什么来改进它 import pygame, sys, random from pygame.locals import * LTBL

我是一名业余程序员,对Pygame非常陌生。这是我用Pygame编写的程序,类似于Minecraft。在过去的一个小时里,我一直在尝试设置一个代码,使我的播放器在按X键时移动到一个随机平铺。我已经用尽了大部分,如果不是所有的网站和搜索引擎寻找。我已经设法完成了一半的任务;当按下X键时,化身移动到一个随机平铺,但它会移出窗口/显示器。请看一下我的代码,看看我能做些什么来改进它

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