点击
上方蓝字
关注我们~
一、准备游戏资源
-
(1)下载透明背景的PNG图片
-
(2)准备一首背景音乐和一个音效文件,都使用MP3格式文件
-
(3)准备支持中文的字体
组织结构为:
二、开始做游戏
(1)导入必须的库
import pygame``import random``import time``from pygame.locals import *
(2)参数设置
APPLEEVENT = pygame.USEREVENT # 自定义苹果移动事件``PEACHEVENT = pygame.USEREVENT + 1 # 自定义桃子移动事件``BANANAEVENT = pygame.USEREVENT + 2 # 自定义香蕉移动事件``SCORE = 0 # 游戏得分``NUM_PEACH = 0 # 漏掉的桃子数``NUM_APPLE = 0 # 漏掉的苹果数``NUM_BANAN = 0 # 漏掉的香蕉数``WINDOW_SIZE = [400, 600] # 窗口大小``RED = (255, 0, 0)``GREEN = (0, 255, 0)` `MOKEY_SPEED = 10 # 猴子的速度`` ``pygame.init()``BG_PIC = pygame.image.load("./resource/picture/背景_1.png") # 背景图片``FONT = pygame.font.Font("./resource/Fonts/simhei.ttf", 15) # 文本字体``SOUND = pygame.mixer.Sound("./resource/music/音效1.mp3") # 音效``ClOCK = pygame.time.Clock() # 创建时钟
(3)创建水果精灵
导入图片,并为精灵命名,同时为精灵设置初始属性。水果的运动就是一直向下,直到碰到窗口的下边缘。
class FruitSprite(pygame.sprite.Sprite):` `"""创建苹果等水果的精灵类"""` `def __init__(self, filename, name):` `pygame.sprite.Sprite.__init__(self)` `self.image = pygame.image.load(filename) # 导入图片` `self.rect = self.image.get_rect() # 获取RECT` `self.speed = random.randint(3, 10) # 水果下落速度` `self.rect.bottom = 0 # 初始的底部` `self.rect.x = random.randint(0, WINDOW_SIZE[0] - 60) # 初始水果的x位置` `self.name = name` ` def update(self):` `self.rect.y += self.speed # 往下落` `# 下面判断遗漏水果的数量` `if self.rect.y >= WINDOW_SIZE[1]:` `if self.name == "苹果":` `global NUM_APPLE` `NUM_APPLE += 1` `if self.name == "桃子":` `global NUM_PEACH` `NUM_PEACH += 1` `if self.name == "香蕉":` `global NUM_BANAN` `NUM_BANAN += 1` `# 到达边缘,那么杀死这个精灵` `self.kill()
(4)猴子精灵类
游戏初始化时的猴子状态,猴子的动作靠连续监听键盘来控制运动。
class Monkey(pygame.sprite.Sprite):` `"""猴子精灵"""` `def __init__(self):` `pygame.sprite.Sprite.__init__(self)` `self.image = pygame.image.load('./resource/picture/猴子_1.png')` `self.rect = self.image.get_rect()` `self.rect.x = WINDOW_SIZE[0] // 2` `self.rect.y = 520`` ` `def update(self, Key_pressed):` `# 连续监听键盘` `if Key_pressed[K_LEFT]: # 左箭头` `self.rect.x -= MOKEY_SPEED` `self.rect.x = 0 if self.rect.x < 0 else self.rect.x` `if Key_pressed[K_RIGHT]: # 右箭头` `self.rect.x += MOKEY_SPEED` `self.rect.x = WINDOW_SIZE[0]-50 if self.rect.x >= WINDOW_SIZE[0]-50 else self.rect.x
(5)定义几个功能函数
定义分数显示功能,返回渲染的字体文本和文本的Rect:
def show_text():` `"""显示分数"""` `score_text = f"""分数:{SCORE} 苹果:{NUM_APPLE} 桃子:{NUM_PEACH} 香蕉:{NUM_BANAN}"""` `FONT.bold = True` `render_text = FONT.render(score_text, True, RED)` `textRect =render_text.get_rect()`` textRect.center = (180, 20)` `return render_text, textRect
播放背景音乐,参数-1表示循环播放音乐:
def play_music():` `pygame.mixer.music.load("./resource/music/香椿头.mp3")` `pygame.mixer.music.play(-1)
定义处理事件的函数。mokey是猴子精灵实例,*args是若干不同的水果精灵:
def deal_event(mokey, *args):` `for event in pygame.event.get():` `if event.type == pygame.QUIT: # 退出` `exit()` `# 不同的水果事件监测` `# 对于不同事件创建精灵并添加到对应的精灵组` `if event.type == APPLEEVENT:` `apple = FruitSprite('./resource/picture/苹果_1.png', "苹果")` `args[0].add(apple)` `if event.type == PEACHEVENT:` `peach = FruitSprite('./resource/picture/桃子_1.png', "桃子")` `args[1].add(peach)` `if event.type == BANANAEVENT:` `peach = FruitSprite('./resource/picture/香蕉_1.png', "香蕉")` `args[2].add(peach)` `# 监听键盘`` Key_pressed = pygame.key.get_pressed()` `mokey.update(Key_pressed)
定义更新函数。将组内的所有精灵更新然后绘制到屏幕上:
def update_fruitsprites(screen, group):` `group.update()` `group.draw(screen)
碰撞检测函数。参数monkey是猴子,group是水果精灵组,sco是碰到不同的水果得到的分数:
def collide(monkey, group, sco): `` # 单一精灵与精灵组碰撞` `crash_result = pygame.sprite.spritecollide(monkey, group, True)` `for i in crash_result:` `SOUND.play(0) # 播放音效` `global SCORE # 修改全局变量` `SCORE += sco
(6)主函数
def main():` `# 初始化窗口` `screen = pygame.display.set_mode(WINDOW_SIZE)` `pygame.display.set_caption("猴子吃水果")` `time.sleep(1) # 暂停1秒开始游戏` `# 开始播放背景音乐` `play_music()` `# 创建计时器,以触发不同的水果事件` `pygame.time.set_timer(APPLEEVENT, 800)` `pygame.time.set_timer(PEACHEVENT, 1000)` `pygame.time.set_timer(BANANAEVENT, 2000)` `# 创建精灵和精灵组` `monkey = Monkey() # 猴子` `apple_group = pygame.sprite.Group() # 苹果组` `peach_group = pygame.sprite.Group() # 桃子组` `banna_group = pygame.sprite.Group() # 香蕉组` ` while True:` `# 绑定背景图片到屏幕` `screen.blit(BG_PIC, screen.get_rect())` `# 绑定猴子到屏幕` `screen.blit(monkey.image, monkey.rect)` `# 显示得分信息` `screen.blit(*show_text())` `# 处理事件` `deal_event(monkey, apple_group, peach_group, banna_group)` `# 将不同的精灵绘制屏幕` `update_fruitsprites(screen, apple_group)` `update_fruitsprites(screen, peach_group)` `update_fruitsprites(screen, banna_group)` `# 做碰撞检测` `collide(monkey, apple_group, 1)` `collide(monkey, peach_group, 2)` `collide(monkey, banna_group, 3)` `# 刷新整个屏幕` `pygame.display.update()` `# 设置帧率,一般60比较适合` `ClOCK.tick(60)
(7)调用主函数
if __name__ == '__main__':` `main()
点击下方安全链接前往获取
CSDN大礼包:《Python入门&进阶学习资源包》免费分享
👉Python实战案例👈
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
👉Python书籍和视频合集👈
观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
👉Python副业创收路线👈
这些资料都是非常不错的,朋友们如果有需要《Python学习路线&学习资料》,点击下方安全链接前往获取
CSDN大礼包:《Python入门&进阶学习资源包》免费分享
本文转自网络,如有侵权,请联系删除。