我是一个初一的学生,我遇到了一个困难,就是我成功地导入了图片,而且也在屏幕上绘制了图片,也写了pygame.display.update(),可图片就是无法显示。这是源代码:
player.py:
import pygame
pygame.init()
class Player(pygame.sprite.Sprite):
def __init__(self,screen):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load(r"D:\python3.8.5_files\python_games\images\coins_image\player.png").convert_alpha()
self.rect = self.image.get_rect()
self.width,self.height = 600,500
self.active = True
self.speed = 10
self.rect.left = self.width / 2 - self.rect.width / 2
self.rect.top = 485
self.screen = screen
self.mask = pygame.mask.from_surface(self.image)
def moveleft(self):
if self.rect.left > 0:
self.rect.left -= self.speed
else:
self.rect.left = 0
def moveright(self):
if self.rect.right < self.width:
self.rect.left += self.speed
self.update()
else:
self.rect.right = self.width
def update(self):
self.screen.blit(self.image,(self.rect.left,self.rect.top))
pygame.display.update()
bomb.py:
import pygame,random
pygame.init()
class Bomb(pygame.sprite.Sprite):
def __init__(self,screen):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load(r"D:\python3.8.5_files\python_games\images\coins_image\bomb.png").convert_alpha()
self.rect = self.image.get_rect()
self.width,self.height = 600,500
self.speed = 5
self.rect.left = random.randint(0,self.width - self.rect.width)
self.rect.top = 0 - self.rect.height
self.screen = screen
self.mask = pygame.mask.from_surface(self.image)
def movedown(self):
if self.rect.top < self.height:
self.rect.top += self.speed
self.update()
else:
self.reset()
def reset(self):
self.active = True
self.rect.left = random.randint(0,self.width - self.rect.width)
self.rect.top = 0 - self.rect.height
def update(self):
self.screen.blit(self.image,self.rect)
pygame.display.update()
coins.py:
import pygame,random
pygame.init()
class Small_coin(pygame.sprite.Sprite):
def __init__(self,screen):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load(r"D:\python3.8.5_files\python_games\images\coins_image\small_coin.png").convert_alpha()
self.rect = self.image.get_rect()
self.width,self.height = 600,500
self.active = True
self.speed = 3
self.rect.left = random.randint(0,self.width - self.rect.width)
self.rect.top = 0 - self.rect.height
self.screen = screen
self.mask = pygame.mask.from_surface(self.image)
def movedown(self):
if self.rect.top < self.height:
self.rect.top += self.speed
self.update()
else:
self.reset()
def reset(self):
self.active = True
self.rect.left = random.randint(0,self.width - self.rect.width)
self.rect.top = 0 - self.rect.height
def update(self):
self.screen.blit(self.image,self.rect)
pygame.display.update()
class Mid_coin(pygame.sprite.Sprite):
def __init__(self,screen):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load(r"D:\python3.8.5_files\python_games\images\coins_image\mid_coin.png").convert_alpha()
self.rect = self.image.get_rect()
self.width,self.height = 600,500
self.active = True
self.speed = 3
self.rect.left = random.randint(0,self.width - self.rect.width)
self.rect.top = 0 - self.rect.height
self.screen = screen
self.mask = pygame.mask.from_surface(self.image)
def movedown(self):
if self.rect.top < self.height:
self.rect.top += self.speed
self.update()
else:
self.reset()
def reset(self):
self.active = True
self.rect.left = random.randint(0,self.width - self.rect.width)
self.rect.top = 0 - self.rect.height
def update(self):
self.screen.blit(self.image,self.rect)
pygame.display.update()
class Big_coin(pygame.sprite.Sprite):
def __init__(self,screen):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load(r"D:\python3.8.5_files\python_games\images\coins_image\big_coin.png").convert_alpha()
self.rect = self.image.get_rect()
self.width,self.height = 600,500
self.active = True
self.speed = 5
self.rect.left = random.randint(0,self.width - self.rect.width)
self.rect.top = 0 - self.rect.height
self.screen = screen
self.mask = pygame.mask.from_surface(self.image)
def movedown(self):
if self.rect.top < self.height:
self.rect.top += self.speed
self.update()
else:
self.reset()
def reset(self):
self.active = True
self.rect.left = random.randint(0,self.width - self.rect.width)
self.rect.top = 0 - self.rect.height
def update(self):
self.screen.blit(self.image,self.rect)
pygame.display.update()
main.py:
import pygame,sys,random,time,traceback,bomb,coins,player
from pygame.locals import *
pygame.init()
bg_size = [600,500]
screen = pygame.display.set_mode(bg_size)
pygame.display.set_caption("money catcher")
white = (255,255,255)
black = (0,0,0)
red = (255,0,0)
green = (0,255,0)
blue = (0,0,255)
def add_score(result):
if result == "s":
score += 10
elif result == "m":
score += 30
elif result == "b":
score += 50
def print_txt(font,x,y,txt,color = white):
text = font.render(txt,True,color)
screen.blit(text,(x,y))
def add_small_coins(group1,group2,num):
for i in range(num):
sc = coins.Small_coin(screen)
group1.add(sc)
group2.add(sc)
def add_mid_coins(group1,group2,num):
for i in range(num):
mc = coins.Mid_coin(screen)
group1.add(mc)
group2.add(mc)
def add_big_coins(group1,group2,num):
for i in range(num):
bc = coins.Big_coin(screen)
group1.add(bc)
group2.add(bc)
def add_bombs(group,num):
for i in range(num):
b = bomb.Bomb(screen)
group.add(b)
def add_speed(target):
target.speed += 1
def main():
gameover = True
win = False
lose = False
record = False
lives = 5
mistake = 0
score = 0
level = 1
font = pygame.font.Font(None,24)
p = player.Player(screen)
coins_list = pygame.sprite.Group()
small_coins_list = pygame.sprite.Group()
mid_coins_list = pygame.sprite.Group()
big_coins_list = pygame.sprite.Group()
bombs_list = pygame.sprite.Group()
add_small_coins(small_coins_list,coins_list,8)
add_mid_coins(small_coins_list,coins_list,5)
add_big_coins(small_coins_list,coins_list,2)
add_bombs(bombs_list,3)
print("接住金币,获得分数,躲避炸弹.如若碰到炸弹,就会减少生命.如若没接住金币,就会增加失误次数.")
while True:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
screen.fill(green)
keys = pygame.key.get_pressed()
if keys[K_RETURN]:
if gameover:
gameover = False
lives = 5
win = False
lose = False
mistake = 0
score = 0
level = 1
del coins_list
del small_coins_list
del mid_coins_list
del big_coins_list
del bombs_list
coins_list = pygame.sprite.Group()
small_coins_list = pygame.sprite.Group()
mid_coins_list = pygame.sprite.Group()
big_coins_list = pygame.sprite.Group()
bombs_list = pygame.sprite.Group()
coins.Small_coin.speed = 3
coins.Mid_coin.speed = 3
coins.Big_coin.speed = 5
bomb.Bomb.speed = 5
if gameover:
if not win and not lose:
read_txt = open(r"D:\python3.8.5_files\python_games\pygame.money_catcher.mine\score\score.txt","r")
heightest_score = read_txt.readlines()
print_txt(font,200,100,str(heightest_score))
read_txt.close()
if win:
if score > heightest_score:
heightest_score = score
print_txt(font,200,400,"YOU WIN!!!")
if lose:
if score > heightest_score:
heightest_score = score
print_txt(font,200,400,"YOU LOSE!!!")
print_txt(font,200,238,"<PRESS ENTER TO PLAY>")
else:
if keys[K_a]:
p.moveleft()
elif keys[K_d]:
p.moveright()
p.update()
for sc in small_coins_list:
if sc.active:
sc.movedown()
screen.blit(sc.image,sc.rect)
pygame.display.update()
if sc.rect.top >= p.rect.top + sc.rect.height and sc.rect.top < p.rect.top - p.rect.height:
if sc.rect.right >= p.rect.left and sc.rect.left <= p.rect.right:
add_score("s")
sc.reset()
for mc in mid_coins_list:
if mc.active:
mc.movedown()
if mc.rect.top >= p.rect.top + mc.rect.height and mc.rect.top < p.rect.top - p.rect.height:
if mc.rect.right >= p.rect.left and mc.rect.left <= p.rect.right:
add_score("m")
mc.reset()
for bc in big_coins_list:
if bc.active:
bc.movedown()
if bc.rect.top >= p.rect.top + bc.rect.height and bc.rect.top < p.rect.top - p.rect.height:
if bc.rect.right >= p.rect.left and bc.rect.left <= p.rect.right:
add_score("b")
bc.reset()
if level == 1 and score > 999:
level = 2
add_small_coins(small_coins_list,coins_list,3)
add_mid_coins(mid_coins_list,coins_list,2)
add_big_coins(big_coins_list,coins_list,1)
add_bombs(bombs_list,1)
elif level == 2 and score > 1999:
level = 3
add_small_coins(small_coins_list,coins_list,3)
add_mid_coins(mid_coins_list,coins_list,2)
add_big_coins(big_coins_list,coins_list,1)
add_bombs(bombs_list,1)
elif level == 3 and score > 3499:
level = 4
add_small_coins(small_coins_list,coins_list,3)
add_mid_coins(mid_coins_list,coins_list,2)
add_big_coins(big_coins_list,coins_list,1)
add_bombs(bombs_list,1)
add_speed(coins.Small_coin)
add_speed(coins.Mid_coin)
elif level == 4 and score > 4999:
level = 5
add_small_coins(small_coins_list,coins_list,3)
add_mid_coins(mid_coins_list,coins_list,2)
add_big_coins(big_coins_list,coins_list,1)
add_bombs(bombs_list,1)
add_speed(coins.Small_coin)
add_speed(coins.Mid_coin)
add_speed(coins.Big_coin)
add_speed(bomb.Bomb)
if lives < 1:
if score > 9999:
win = True
else:
lose = True
gameover = True
print_txt(font,0,0,"lives:" + str(lives))
print_txt(font,270,0,"mistake:" + str(mistake))
print_txt(font,540,0,"score:" + str(score))
pygame.display.update()
time.sleep(0.01)
if __name__ == "__main__":
try:
main()
except SystemExit:
pass
except KeyboardInterrupt:
pass
except:
traceback.print_exc()
pygame.quit()
input()
我无法找出错误,请各位大神帮忙找找错误。
你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答
本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。
因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。