实现了功能,但是细节上还有些问题,最后显示过关或失败页面会卡顿。
import pygame
from pygame.locals import *
from sys import exit
from random import randint
import time
class Sicong:
def __init__(self,hp=400):
self.x=randint(0,474)-44
self.y=randint(0,296)-35
self.hp=hp
def move(self,mx,my,screen):
new_x=self.x+mx
new_y=self.y+my
if new_x<0:
self.x=screen.get_width()+new_x
elif new_x>screen.get_width():
self.x=new_x-screen.get_width()
else:
self.x=new_x
if new_y<0:
self.y=screen.get_height()+new_y
elif new_y>screen.get_height():
self.y=new_y-screen.get_height()
else:
self.y=new_y
self.hp-=10
def eat(self):
self.hp+=20
if self.hp>1000:
self.hp=1000
class Hotdog:
def __init__(self):
self.x=randint(0,470)-30
self.y=randint(0,290)-20
def move(self,dx=-10):
newx=self.x+dx
if newx<0:
self.x=474+newx
else:
self.x=newx
# class Menu:
# # def __init__(self):
# # pass
# #
# # def display(self):
# # screen.blit(1p,(200,50))
# # screen.blit(2p,(200,100))
# # screen.blit(quitt,(200,150))
# # if pygame.mouse.get_pos():
# # if pygame.mouse.get_pressed():
def main():
sc=Sicong()
sc2=Sicong()
hotdogs=[Hotdog() for item in range(10)]
pygame.init()
screen=pygame.display.set_mode((474,296))
pygame.display.set_caption("吃热狗")
scimg=pygame.image.load("img\sc.png")
hotdogimg=pygame.image.load("img\hotdog.png")
background=pygame.image.load("img\ground.jpg")
die = pygame.font.SysFont("arial", 40)
die_display = die.render("You are died ! please try agin!", True, (255, 0, 0), (0, 255, 255))
passon = pygame.font.SysFont("arial", 80)
passon_display = passon.render("Success ! You are Winer !", True, (0, 0, 0), (255, 255, 0))
count_down=5
count_downs=pygame.font.SysFont("arial",50)
count_down_display=count_downs.render("%s" %(count_down),True,(0,0,0),(255,255,255))
clock=pygame.time.Clock()
score=pygame.font.SysFont("arial",20)
count=0
while True:
screen.blit(background,(0,0))
screen.blit(scimg,(sc.x,sc.y))
screen.blit(scimg,(sc2.x,sc2.y))
for item in hotdogs:
screen.blit(hotdogimg,(item.x,item.y))
item.move()
for event in pygame.event.get():
if event.type==pygame.QUIT:
exit()
if event.type==KEYDOWN:
if event.key==K_UP or event.key==K_w:
if event.key==K_UP:
sc.move(0,-20,screen)
if event.key==K_w:
sc2.move(0,-20,screen)
elif event.key==K_DOWN or event.key==K_s:
if event.key==K_DOWN:
sc.move(0,20,screen)
if event.key==K_s:
sc2.move(0, 20, screen)
elif event.key==K_LEFT or event.key==K_a:
if event.key==K_LEFT:
sc.move(-20,0,screen)
if event.key==K_a:
sc2.move(-20, 0, screen)
elif event.key==K_RIGHT or event.key==K_d:
if event.key==K_RIGHT:
sc.move(20,0,screen)
if event.key==K_d:
sc2.move(20,0,screen)
# for event in pygame.event.get():
# if event.type==pygame.QUIT:
# exit()
# if event.type==KEYDOWN:
# if event.key==K_w:
# sc2.move(0,-20,screen)
# sc2.hp-=10
# elif event.key==K_s:
# sc2.move(0,20,screen)
# sc2.hp-=10
# elif event.key==K_a:
# sc2.move(-20,0,screen)
# sc2.hp-=10
# elif event.key==K_d:
# sc2.move(20,0,screen)
# sc2.hp-=10
score_display = score.render("score:%d" % count, True, (0, 0, 0), (255, 255, 255))
screen.blit(score_display,(400,20))
for hotdog in hotdogs:
if (sc.x<hotdog.x+34) and (sc.x+44>hotdog.x) and (sc.y<hotdog.y+20) and (sc.y+35>hotdog.y):
sc.eat()
count+=1
hotdogs.remove(hotdog)
print(hotdogs)
if (sc2.x<hotdog.x+34) and (sc2.x+44>hotdog.x) and (sc2.y<hotdog.y+20) and (sc2.y+35>hotdog.y):
sc2.eat()
hotdogs.remove(hotdog)
if sc.hp<0:
screen.blit(die_display,(50,50))
time.sleep(5)
# for i in range(5):
# time.sleep(1)
# screen.blit(count_down_display, (220, 150))
# count_down=count_down-1
if len(hotdogs)==0:
screen.blit(passon_display,(100,20))
time.sleep(5)
# for i in range(5):
# time.sleep(1)
# screen.blit(count_down_display, (100, 100))
# count_down=count_down-1
pygame.display.update()
clock.tick(10)
if __name__ == '__main__':
main()