我有一个简单的忍者游戏,有一个滚动的背景。你可以用向下箭头滑动。用向上箭头跳跃,如果你在跳跃的开始,你可以按向右箭头跳跃攻击。问题是你可以拿着右箭头,而在箭头和忍者只是冻结
我不知道如何解决这一点,所以帮助将不胜感激
抱歉,代码太长,但这是代码:
import pygame
import time
x = 60
y = 400
pygame.init()
Counter = 0
jumpCount = 10
imagerun = 0
imageslide = 0
imagejump = 0
imageattack = 0
slow = 0
jumppower =6.5
isslide = False
isjump = False
isattack = False
ninjaheight = 192
ninjawidth = 192
ninjaheight2 = ninjaheight + 50
ninjawidth2 = ninjawidth + 50
winwidth = 1200
winheight = 600
isrunning = True
repeat = 0
score = 0
def redrawgame():
global imageattack
global score
global isrunning
win.blit(bg, (bgX, 0)) # draws our first bg image
win.blit(bg, (bgX2, 0))
if isrunning == True:
win.blit(Run[imagerun],(x, y))
if isslide == True:
isrunning = False
win.blit(Slide[imageslide],(x, y))
if isjump == True and isattack == False:
win.blit(Jump[imagejump],(x, y))
if isattack == True:
if imageattack == 9:
imageattack = 0
win.blit(Attack[imageattack],(x, y))
score += 1
largeFont = pygame.font.SysFont('comicsans', 65) # Font object
text = largeFont.render('Score: ' + str(score), 1, (0 ,0 ,255)) # create our text
win.blit(text, (840, 25)) # draw the text to the screen
pygame.display.update()
bg = pygame.transform.scale(pygame.image.load('bg.png'),(winwidth, winheight))
bgX = 0
bgX2 = bg.get_width()
win = pygame.display.set_mode((winwidth, winheight))
pygame.display.set_caption("First Game")
Run = [pygame.transform.scale(pygame.image.load('Run__0.png'), (ninjaheight, ninjawidth)), pygame.transform.scale(pygame.image.load('Run__1.png'), (ninjaheight, ninjawidth)), pygame.transform.scale(pygame.image.load('Run__2.png'), (ninjaheight, ninjawidth)), pygame.transform.scale(pygame.image.load('Run__3.png'), (ninjaheight, ninjawidth)), pygame.transform.scale(pygame.image.load('Run__4.png'), (ninjaheight, ninjawidth)), pygame.transform.scale(pygame.image.load('Run__5.png'), (ninjaheight, ninjawidth)), pygame.transform.scale(pygame.image.load('Run__6.png'), (ninjaheight, ninjawidth)), pygame.transform.scale(pygame.image.load('Run__7.png'), (ninjaheight, ninjawidth)), pygame.transform.scale(pygame.image.load('Run__8.png'), (ninjaheight, ninjawidth)), pygame.transform.scale(pygame.image.load('Run__9.png'), (ninjaheight, ninjawidth))]
Slide = [pygame.transform.scale(pygame.image.load('Slide__0.png'), (ninjaheight, ninjawidth)), pygame.transform.scale(pygame.image.load('Slide__1.png'), (ninjaheight, ninjawidth)), pygame.transform.scale(pygame.image.load('Slide__2.png'), (ninjaheight, ninjawidth)), pygame.transform.scale(pygame.image.load('Slide__3.png'), (ninjaheight, ninjawidth)), pygame.transform.scale(pygame.image.load('Slide__4.png'), (ninjaheight, ninjawidth)), pygame.transform.scale(pygame.image.load('Slide__5.png'), (ninjaheight, ninjawidth)), pygame.transform.scale(pygame.image.load('Slide__6.png'), (ninjaheight, ninjawidth)), pygame.transform.scale(pygame.image.load('Slide__7.png'), (ninjaheight, ninjawidth)), pygame.transform.scale(pygame.image.load('Slide__8.png'), (ninjaheight, ninjawidth)), pygame.transform.scale(pygame.image.load('Slide__9.png'), (ninjaheight, ninjawidth))]
Jump = [pygame.transform.scale(pygame.image.load('Jump.png'), (ninjaheight, ninjawidth))]
Attack = [pygame.transform.scale(pygame.image.load('Jump_Attack__0.png'), (ninjaheight2, ninjawidth2)), pygame.transform.scale(pygame.image.load('Jump_Attack__1.png'), (ninjaheight2, ninjawidth2)), pygame.transform.scale(pygame.image.load('Jump_Attack__2.png'), (ninjaheight2, ninjawidth2)), pygame.transform.scale(pygame.image.load('Jump_Attack__3.png'), (ninjaheight2, ninjawidth2)), pygame.transform.scale(pygame.image.load('Jump_Attack__4.png'), (ninjaheight2, ninjawidth2)), pygame.transform.scale(pygame.image.load('Jump_Attack__5.png'), (ninjaheight2, ninjawidth2)), pygame.transform.scale(pygame.image.load('Jump_Attack__6.png'), (ninjaheight2, ninjawidth2)), pygame.transform.scale(pygame.image.load('Jump_Attack__7.png'), (ninjaheight2, ninjawidth2)), pygame.transform.scale(pygame.image.load('Jump_Attack__8.png'), (ninjaheight2, ninjawidth2)), pygame.transform.scale(pygame.image.load('Jump_Attack__9.png'), (ninjaheight2, ninjawidth2))]
run = True
while run:
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
time.sleep(0.020)
Counter += 1
if slow == 0:
slow +=1
elif slow == 1:
slow -= 1
keys = pygame.key.get_pressed()
if keys[pygame.K_DOWN]:
if not isslide == True:
if Counter > 39:
if jumpCount == 10:
isrunning = False
isjump = False
isslide = True
Counter = 0
imageslide = 0
if isrunning == True:
if imagerun == 9:
imagerun = 0
else:
imagerun +=1
if isslide == True:
if imageslide == 9:
if repeat == 1:
isslide = False
isrunning = True
imageslide = 0
repeat = 0
else:
repeat +=1
imageslide = 0
else:
imageslide += 1
if not (isjump):
if Counter > 1:
if keys[pygame.K_UP]:
isjump = True
isrunning = False
isslide = False
Counter = 30
else:
if jumpCount < 0: #if negative
jumpCount -=1
y -=jumpCount *jumppower
if slow == 1:
imageattack += 1
if jumpCount == -9:
isjump = False
jumpCount = 10
isattack = False
imageattack = 0
else:
if keys[pygame.K_RIGHT]:
if jumpCount > 6:
if not (isattack):
isattack = True
imageattack = 0
Counter = 30
jumpCount -= 1
y -= jumpCount *jumppower
else:
if jumpCount < 0: #if negative
jumpCount -=1
y -=jumpCount *jumppower
if slow == 1:
imageattack += 1
if jumpCount == -9:
jump = False
jumpCount = 10
isattack = False
imageattack = 0
else:
jumpCount -= 1
y -= jumpCount *jumppower
if slow == 1:
imageattack += 1
bgX -= 15.4 # Move both background images back
bgX2 -= 15.4
if bgX < bg.get_width() * -1: # If our bg is at the -width then reset its position
bgX = bg.get_width()
if bgX2 < bg.get_width() * -1:
bgX2 = bg.get_width()
redrawgame()
if isslide == False and isjump == False and isattack == False:
isrunning = True
pygame.quit()
我希望如果你按下右边的按钮,它会像只敲一次一样。谢谢你的帮助,安德鲁
我跑不动,也不能解决跳跃的问题
它只展示了如何使它更具可读性。它在函数
update_xxx
和draw_xxx
中拆分代码,如update_attack()
,draw\u attac(), 'update_bg()
,draw_bg()
。这样mainloop
就更短了现在在代码中搜索问题应该更容易了
相关问题 更多 >
编程相关推荐