【发布时间】:2023-03-31 07:05:01
【问题描述】:
如果任何对 pygames 有基本了解的人可以帮助我解决我目前面临的问题,那就太好了。对于你们那里的绝对神来说,这应该不会太难。
我的代码目前存在问题。
我正在尝试制作一个简单的游戏,其中程序显示一个随机字母,用户必须在该字母到达页面底部之前输入该字母。
我有在随机列中显示随机字母的代码,但是,一旦字母到达底部,我只有程序打印“结束”然后退出程序。
我无法理解如何进一步开发代码。这是现在的代码:
import os #
os.environ['SDL_VIDEO_WINDOW_POS'] = "%d,%d" % (1335,330) # sets the coordinates so that the window pops up in the lower right side of the screen (1600x900 screen)
import pygame # pygame is the platform im using
import random # random needs to be imported for the random letters and columns
pygame.init() # initializes pygame
win = pygame.display.set_mode((260, 527)) # size of the window ,screenwidth = 260, screenheight = 527
pygame.display.set_caption("Daveypoo is King") # title of the window
clock = pygame.time.Clock() # used for frame rate
bg = pygame.image.load('phone3cropped.jpg') # background picture upload
qp = pygame.image.load('q.png') # uploads pictures of the letters (use paint, 50x50 pixels, black, 1 pixel outline, font = 36)
wp = pygame.image.load('w.png') # ^
ep = pygame.image.load('e.png') # ^
ap = pygame.image.load('a.png') # ^
sp = pygame.image.load('s.png') # ^
dp = pygame.image.load('d.png') # ^
jp = pygame.image.load('j.png') # ^
kp = pygame.image.load('k.png') # ^
lp = pygame.image.load('l.png') # ^
letterlist = [qp,wp,ep,ap,sp,dp,jp,kp,lp] # creates a list of letter images
randletter = random.choice(letterlist) # randomizes the list of images^
class player(): # creates letter instance
def __init__(self, x,y,width,height,end): # initializes the list
self.x = x
self.y = y
self.width = width
self.height = height
self.path = [self.y, 415] # creates the path that the letters will travel
self.vel = 1 # this is where the velocity of the letters is set
self.hitbox = (self.x, self.y, 50, 50) # creates the hitbox for the letter pictures (no need to change for now -- 50x50 is good)
def move(self, win): # creates the movement for the letters
if self.vel > 0:
if self.y + self.vel < self.path[1] : # if the bottom of the letter is less than the end, then:
self.y += self.vel # keep going
else: # if not:
self.vel = 0 # stop moving
else: # if the bottom of the letter is at the end, then
print('end')
quit()
#redrawGameWindow()
# this is where the action to make a new letter has to go
class greenzone(object): # creates the zone (greenzone) where the player should get the letter in
def __init__(self,x,y,width,height): # initializes it
self.x = x
self.y = y
self.width = width
self.height = height
self.hitbox = (16, 342, 228, 66) # first two letters are top left (x,y) coordinate of the zone, next is width, next is height
# def hit(self):
# print('hit')
def redrawGameWindow():
win.blit(bg, (0,0)) # diplays the background image, coordinates of top left
win.blit(randletter, pygame.draw.rect(win, (255, 255, 255), (letters.x, letters.y, letters.width, letters.height))) # displays the letters going down the page (letters.x, letters.y, letters.width, letters.height)
# win.blit(randletter, pygame.draw.rect(win, (255, 255, 255), (letters.x, letters.y, letters.width, letters.height)))
letters.move(win) # calls upon the movement of the letters -- makes them move
# for letter in letters:
# letter.draw(win)
#pygame.draw.rect(win, (255,0,0), (16, 342, 228, 66), 2) # this shows the hitbox of the greenzone if needed
pygame.display.update() # idk what this does -- but it is needed
### mainloop
abc_list = [27,106,185] # this is the list of the starting positions of the letters (top left)
rand = random.choice(abc_list) # takes a random starting position of the letters
letters = player(rand,56,50,50,415) # instances the letters to start
#letters = [] # apparently creates a list of the the letters -- used to initialize and create new letters
target = greenzone(18,343,228,67) # sets the hitbox of the greenzone
run = True
while run:
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
exit()
# for letter in letters:
# if letter.x < 500 and letter.x > 0:
# letter.x += letter.vel
# else:
# letters.pop(letters.index(letter))
keys = pygame.key.get_pressed()
if keys[pygame.K_q] and randletter == qp:
if letters.y < target.hitbox[1] + target.hitbox[3]:
if letters.y + letters.height > target.hitbox[1]:
print('hit')
else:
print('fail')
else:
print('fail')
if keys[pygame.K_w] and randletter == wp:
if letters.y < target.hitbox[1] + target.hitbox[3]:
if letters.y + letters.height > target.hitbox[1]:
print('hit')
else:
print('fail')
else:
print('fail')
if keys[pygame.K_e] and randletter == ep:
if letters.y < target.hitbox[1] + target.hitbox[3]:
if letters.y + letters.height > target.hitbox[1]:
print('hit')
else:
print('fail')
else:
print('fail')
if keys[pygame.K_a] and randletter == ap:
if letters.y < target.hitbox[1] + target.hitbox[3]:
if letters.y + letters.height > target.hitbox[1]:
print('hit')
else:
print('fail')
else:
print('fail')
if keys[pygame.K_s] and randletter == sp:
if letters.y < target.hitbox[1] + target.hitbox[3]:
if letters.y + letters.height > target.hitbox[1]:
print('hit')
else:
print('fail')
else:
print('fail')
if keys[pygame.K_d] and randletter == dp:
if letters.y < target.hitbox[1] + target.hitbox[3]:
if letters.y + letters.height > target.hitbox[1]:
print('hit')
else:
print('fail')
else:
print('fail')
if keys[pygame.K_j] and randletter == jp:
if letters.y < target.hitbox[1] + target.hitbox[3]:
if letters.y + letters.height > target.hitbox[1]:
print('hit')
else:
print('fail')
else:
print('fail')
if keys[pygame.K_k] and randletter == kp:
if letters.y < target.hitbox[1] + target.hitbox[3]:
if letters.y + letters.height > target.hitbox[1]:
print('hit')
else:
print('fail')
else:
print('fail')
if keys[pygame.K_l] and randletter == lp:
if letters.y < target.hitbox[1] + target.hitbox[3]:
if letters.y + letters.height > target.hitbox[1]:
print('hit')
else:
print('fail')
else:
print('fail')
redrawGameWindow()
pygame.quit()
我知道这是很多代码,我尝试在其中添加尽可能多的注释,以帮助阅读本文的任何人理解我的心态。
对此的任何和所有帮助都会很棒。我知道我做错了很多——我几天前才开始这样做。感谢您的任何意见,非常感谢!
【问题讨论】:
标签: python python-3.x pygame iteration new-operator