我是一个业余程序员,在Pyplay非常新。这是我用Pyplay编写的程序,类似于我的世界。在过去的一个小时里,我一直在尝试设置一个代码,让我的玩家在按下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中提取一个随机数,并和/减去玩家的位置,你就不能保证新位置在网格内。您应该添加一些逻辑来防止播放器从可见屏幕中消失。即使使用其他控制键,您也可以在操作中看到问题:如果您在屏幕左边框上按下左按钮,则您的车钩将消失(因为位置变为(-1,0))。我建议从event.key.K_*之后的一个简单条件开始:
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
你应该能把其余的分类放在一起。
附笔。
为了更清楚,您希望为当前位置分配一个从0到14的数字,而不是减法/加法。
刚开始使用pygame,当你按住箭头键时,试图让一个简单的点在屏幕上移动。目前,它只在你按键时移动,但你必须重复按键。 此外,我很感激你对我目前的代码有任何建议,可以改进或改变,使之更有效。
问题内容: 我有一本字典,其中每个键都有一个可变长度的列表,例如: 是否有一种干净的方法来获取随机字典密钥,并对其值的长度进行加权? 会平均分配按键的权重,但在上述情况下,我希望大约一半的时间返回。 问题答案: 这将工作:
问题内容: 目前,每次按键时,精灵仅移动1个像素。按住左右键时,如何使水暖工精灵不断移动? 问题答案: 您可以使用pygame.key.get_pressed来做到这一点。 例:
我对Android/Java编程比较陌生。我正在创建一个基于文本的社交游戏,并创建了一个包含ID、名称和角色的SQLite数据库。 角色将由应用程序分配并存储在相关的SQLite表中。 由于角色是随机的,我想也许一个随机数生成器从1-7(2个独特的角色,2个相同的角色和3个相同的角色) 我被困在哪里开始和如何实现此功能,任何帮助/建议将不胜感激。
我知道已经有一些关于墙壁碰撞的问题了,但是这些答案中的技术都没有帮助我。我正在做一个没有重力的自上而下的探索游戏。运动很好,但是一旦我制造了墙壁和碰撞,它就开始出现故障并传送。我已经包含了(并大大减少了)我认为问题所在的两个功能,在底部我包含了整个代码。 根据pygame精灵墙碰撞的建议,我分割了x和y墙碰撞代码。墙壁碰撞代码基于https://github.com/marcusmoller/py
问题内容: 我一直在谷歌上寻找答案,但似乎找不到一个万无一失的东西,而且真的负担不起将其弄乱(进入生产站点)。 我所拥有的是具有20多个过滤器的高级搜索,它返回一个包含ID和Distance的数组。我需要做的是将这些结果混洗以每次随机显示。目前我得到的数组是: 我需要做的是每次都对它们进行随机化或排序,但要保持id和距离对,即: 谢谢 :) 问题答案: 在第一个用户后下的文件: 在保留键,值对的同