From cea6ab923c0c247c36d13a83eb48abb47aed35bc Mon Sep 17 00:00:00 2001 From: BellCodeEditor <bellcode_dev@bell.ai> Date: Sat, 22 Jan 2022 16:31:50 +0800 Subject: [PATCH] save project --- my_game.py | 141 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------------------------------------------------------- 1 file changed, 72 insertions(+), 69 deletions(-) diff --git a/my_game.py b/my_game.py index cd63944..726fbd0 100644 --- a/my_game.py +++ b/my_game.py @@ -6,96 +6,99 @@ pygame.init() # 初始化 # 创建一个窗口 screen = pygame.display.set_mode((1000, 600)) FPS = pygame.time.Clock() # pygame时钟,控制游戏速度(帧数) -pygame.display.set_caption("悟空酷跑") # 载入图片 background = pygame.image.load('bg.png') # 背景 road = pygame.image.load('road.png') # 路 stone = pygame.image.load('stone.png') # 石头 cacti = pygame.image.load('cacti.png') # 仙人掌 -bush = pygame.image.load('bush.png') # 灌木丛 -hero = [pygame.image.load('hero1.png'), - pygame.image.load('hero2.png'), - pygame.image.load('hero3.png'), - pygame.image.load('hero4.png'), - pygame.image.load('hero5.png')] +apple = pygame.image.load('bush.png') # 灌木丛 +gameover = pygame.image.load('gameover.png') -#构建的精灵类,继承自Sprite类,主要用于后续做碰撞体积检测 class Block(pygame.sprite.Sprite): def __init__(self,image1,image2,image3): + super().__init__() self.image = random.choice([image1,image2,image3]) self.rect = self.image.get_rect() self.rect.x = 1000 self.rect.y = 500 - self.rect.height -obstacle = Block(bush, stone, cacti) +class WuKong(pygame.sprite.Sprite): + def __init__(self,wukong_img): + self.image = wukong_img + self.rect = self.image.get_rect() + self.rect.x = 150 + self.rect.y = 400 -index = 0 -y = 400 -jumpState = "runing" #悟空状态 分为:running up down -t = 30 #跳跃速度 +list_group = pygame.sprite.Group() -# obstacle = random.choice([bush, stone, cacti]) #产生障碍物 -# rect = obstacle.get_rect() -# rect.x = 1000 -# rect.y = 500 - rect.height +# 关卡1 实现悟空跑步效果 +# 逻辑:绘制图画时,不断切换悟空图片 +hero = [pygame.image.load('hero1.png'),pygame.image.load('hero2.png'),pygame.image.load('hero3.png') +,pygame.image.load('hero4.png'),pygame.image.load('hero5.png')] #加载悟空图片 +index = 0 +jumpStatus = 'running' + +wukong = WuKong(hero[index]) +t = 30 -road_x = 0 background_x = 0 +road_x = 0 + +gameState = 1 + time = 0 while True: + if background_x < -1000: + background_x = 0 + if road_x < -1000: + road_x = 0 for event in pygame.event.get(): if event.type == locals.QUIT: # 接收到退出事件后退出程序 exit() - if event.type == locals.KEYDOWN: - if jumpState == "runing": - if event.key == locals.K_SPACE: - jumpState = "up" - - if jumpState == "up": # 起跳状态 - if t > 0: - y -= t - t -= 2 - else: - jumpState = "down" - if jumpState == "down": # 降落状态 - if t <= 30: - y += t - t += 2 - else: - jumpState = "runing" - t =30 - - # 悟空造型 - wukong = hero[index] - if jumpState == "runing": # 跑步状态下 - index += 1 - if index >= 5: - index = 0 - # 将背景图画上去 - road_x -= 8 - background_x -= 5 - if road_x <= -1000: - road_x = 0 - if background_x <= -1000: - background_x = 0 - screen.blit(background, (background_x, 0)) # 远处背景 - screen.blit(road, (road_x, 500)) # 路 - screen.blit(wukong, (150, y)) # 悟空 - - time += 1 - if time >= 60: - time = 0 - num = random.randint(0,50) - if num > 20: - obstacle = Block(bush, cacti, stone) - list - # 障碍物消失 - # 创建障碍物对象 - obstacle = Block(bush, cacti, stone) + if event.type == locals.KEYDOWN and jumpStatus == 'running': #键盘按下 + if event.key == locals.K_SPACE: + jumpStatus = 'up' + if gameState == 1: + if jumpStatus == 'up': + if t>0: + wukong.rect.y -= t + t -= 2 + else: + jumpStatus = 'down' + if jumpStatus == 'down': + if t<=30: + wukong.rect.y += t + t += 2 + else: + jumpStatus = 'running' + t = 30 + if jumpStatus == 'running': + index += 1 + if index == 5: + index = 0 - obstacle.rect.x -= 8 - screen.blit(obstacle.image, (obstacle.rect.x, obstacle.rect.y)) - # 刷新画面 - pygame.display.update() - FPS.tick(30) \ No newline at end of file + background_x -= 5 + road_x -= 8 + # 将背景图画上去 + screen.blit(background, (background_x, 0)) + screen.blit(road, (road_x, 500)) + screen.blit(hero[index], (150, wukong.rect.y)) #绘制悟空 + time += 1 + if time >= 60: + time = 0 + num = random.randint(0,60) + if num>30: + obstacle = Block(stone,cacti,apple) + list_group.add(obstacle) + for temp in list_group: + temp.rect.x -= 8 + screen.blit(temp.image, (temp.rect.x, temp.rect.y)) + if(pygame.sprite.collide_rect(wukong,temp)): + screen.blit(gameover, (350, 200)) + gameState = 0 + if temp.rect.x < 0 - temp.rect.width: + temp.kill() + # 刷新画面 + pygame.display.update() + FPS.tick(60) \ No newline at end of file -- libgit2 0.25.0