From 201d1469c4676c6c349af818c1ffd8b575f35236 Mon Sep 17 00:00:00 2001 From: BellCodeEditor <bellcode_dev@bell.ai> Date: Sun, 24 Jan 2021 22:49:27 +0800 Subject: [PATCH] auto save --- my_game.py | 136 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------------------------------- 1 file changed, 92 insertions(+), 44 deletions(-) diff --git a/my_game.py b/my_game.py index 3b72415..beb72bb 100644 --- a/my_game.py +++ b/my_game.py @@ -14,7 +14,17 @@ class Block(pygame.sprite.Sprite): #绘制障碍物图标 self.rect.x = 1000 self.rect.y = 500 - self.rect.height - +#悟空 +class Player(pygame.sprite.Sprite): + def __init__(self,image): + #先继承父类的属性 + super().__init__() + #加载悟空精灵图像 + self.image = image + #image的get_rect的方法,之前音乐的图片旋转就用到过,返回四个值 + self.rect = self.image.get_rect() + self.rect.x = 150 + self.rect.y = 400 @@ -40,15 +50,21 @@ t = 30 #道路的横坐标 road_x = 0 + #远处背景的横坐标 bg_x = 0 #创建类之后,实例化对象 -obstacle = Block(bush, stone, cacti) +#obstacle = Block(bush, stone, cacti) +#创建一个精灵组 +block_list = pygame.sprite.Group() # rect = obstacle.get_rect() # rect.x = 1000 # rect.y = 500 - rect.height +#设置障碍物出现时间 +time = 0 +gamestate = True while True: for event in pygame.event.get(): if event.type == locals.QUIT: @@ -58,51 +74,83 @@ while True: 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] + # 悟空造型,后面用类来实现 + #wukong = hero[index] + wukong = Player(hero[index]) if jumpState == "runing": # 跑步状态下 index += 1 if index >= 5: index = 0 - # 将背景图画上去 - #远处的背景变化的看上去很慢,所以速度小 - bg_x -= 1 - if bg_x <= -1000: - bg_x = 0 - screen.blit(background, (bg_x, 0)) # 远处背景 - #在渲染道路前先改变速度 - road_x -= 8 #实现道路向左移动 - if road_x <= -1000: #循环路的背景 - road_x = 0 - screen.blit(road, (road_x, 500)) # 路,注意为什么纵坐标为500, - #在悟空的脚下,悟空本身高100,总坐标为400,所以路应该在更靠下的500 - screen.blit(wukong, (150, y)) # 悟空 + #优化gameover,只有当状态为True时执行渲染代码 + if gamestate == True: + if jumpState == "up": # 起跳状态 + if t > 0: + y -= t + #优化碰撞侦测 + wukong.rect.y = y + t -= 2 + else: + jumpState = "down" + if jumpState == "down": # 降落状态 + if t <= 30: + y += t + wukong.rect.y = y + t += 2 + else: + jumpState = "runing" + t =30 + + + # 将背景图画上去 + #远处的背景变化的看上去很慢,所以速度小 + bg_x -= 1 + if bg_x <= -1000: + bg_x = 0 + + screen.blit(background, (bg_x, 0)) # 远处背景 + #在渲染道路前先改变速度 + road_x -= 8 #实现道路向左移动 + if road_x <= -1000: #循环路的背景 + road_x = 0 + screen.blit(road, (road_x, 500)) # 路,注意为什么纵坐标为500, + #在悟空的脚下,悟空本身高100,总坐标为400,所以路应该在更靠下的500 + screen.blit(wukong.image, (150, y)) # 悟空 + + #精灵组的优化方法 + time+=1 + if time > 60: + time = 0 + num = random.randint(0,50) + if num > 20: + #创建精灵组之后~在重新使用实例化方法 + obstacle = Block(bush, stone, cacti) + #将实例化的内容放入精灵组中 + block_list.add(obstacle) + + #遍历精灵组渲染 + for sprite in block_list: + sprite.rect.x -= 8 + screen.blit(sprite.image,(sprite.rect.x,sprite.rect.y)) + # if obstacle.rect.x <= 0-obstacle.rect.width: # 障碍物消失 + # # 创建障碍物对象 + # obstacle = Block(bush, stone, cacti) + # # obstacle = random.choice([bush,stone,cacti]) + # # rect = obstacle.get_rect() + # # rect.x = 1000 + # # rect.y = 500 - rect.height + # obstacle.rect.x -= 8 + #screen.blit(obstacle.image, (obstacle.rect.x,obstacle.rect.y)) + #删除精灵 + if sprite.rect.x <= 0-sprite.rect.width: + sprite.kill() + #精灵和悟空的碰撞检测: + if pygame.sprite.collide_rect(wukong,sprite): + gameover = pygame.image.load("gameover.png") + screen.blit(gameover,(400,200)) + #碰撞之后停止程序,改变游戏状态 + gamestate = False - if obstacle.rect.x <= 0-obstacle.rect.width: # 障碍物消失 - # 创建障碍物对象 - obstacle = Block(bush, stone, cacti) - # obstacle = random.choice([bush,stone,cacti]) - # rect = obstacle.get_rect() - # rect.x = 1000 - # rect.y = 500 - rect.height - obstacle.rect.x -= 8 - screen.blit(obstacle.image, (obstacle.rect.x,obstacle.rect.y)) - # 刷新画面 - pygame.display.update() - FPS.tick(60) \ No newline at end of file + # 刷新画面 + pygame.display.update() + FPS.tick(60) \ No newline at end of file -- libgit2 0.25.0