首先布置场景。
初始化 640 * 640 的窗口,黑色背景,布满 100 个豆子。
在 [310, 310] 位置画一个 pacman 。
主程序框架如下:
import pygame
from bean import Bean
from pacman import Pacman
from patrolmonster import PatrolMonster
from trackingmonster import TrackingMonster
pygame.init()
screen = pygame.display.set_mode([640, 640])
clock = pygame.time.Clock()
pygame.key.set_repeat(10,10)
# 100颗豆子
beans = []
for x in range(10):
for y in range(10):
bean = Bean(x*64+20, y*64+20)
beans.append(bean)
# 怪物列表
monsters = []
# monsters.append(PatrolMonster(300, 0)) # 添加一个巡逻怪
# monsters.append(TrackingMonster(100, 100)) # 添加一个追踪怪
# 吃豆人角色
pacman = Pacman(310, 310)
def update():
screen.fill([0,0,0])
for bean in beans:
bean.draw(screen)
for monster in monsters:
monster.update()
monster.draw(screen)
pacman.update()
pacman.draw(screen)
pygame.display.flip()
def keydown(e):
pass
running = True
while running:
update()
clock.tick(30)
for e in pygame.event.get():
if e.type == pygame.QUIT:
running = False
if e.type == pygame.KEYDOWN:
keydown(e)
pygame.quit()
任务一:让 pacman 动起来
实现键盘控制 pacman 的上下左右移动,每次移动 5 个像素,碰到边界后停止移动;
每 5 帧切换一次 pacman 的造型,实现 pacman 不断张嘴闭嘴的效果。
任务二:吃掉豆子得分
初始分数为 0。 pacman 每碰到一颗豆子,加 1 分,同时将豆子从列表中移除。
将分数显示在 [280, 40] 的位置,字体大小为 100。
任务三:增加一个巡逻怪
patrolmonster.py 中的 PatrolMonster 类代表巡逻怪。
创建一个巡逻怪的角色,初始位置为 [300, 0],添加到怪物列表里。
请完善巡逻怪的逻辑,让怪物从初始位置向下移动,到达底部之后向上移动,到顶部之后又向下移动,如此往复。
巡逻怪每帧移动 2 个像素。每 10 帧切换一次造型。
任务四:game over
pacman 碰到怪物后,不再显示pacman,也不能控制pacman移动,同时在屏幕中央显示“Game Over”的文本。
将 Game Over 显示在 [120, 280] 的位置上。
任务五:增加一个追踪怪
trackingmonster.py 中的 TrackingMonster 类代表追踪怪。
创建一个追踪怪的角色,初始位置为 [10, 10],添加到怪物列表里。
请完善追踪怪的逻辑,让怪物先从 X 方向靠近 pacman,当 X 方向的距离小于 20 像素之后再从 Y 方向靠近 pacman
提示:可以用函数 abs(x1 - x2) 求出 x1 和 x2 之间的距离。
追踪怪每帧移动 2 个像素。它也是每 10 帧切换一次造型。
任务六:新的巡逻怪和跟踪怪
再增加一个巡逻怪,让这个怪物在 X 方向保持来回的水平运动;
再增加一个跟踪怪,让这个怪物优先从 Y 方向靠近 pacman。
任务七:改进 pacman 的显示效果
让 pacman 只在移动时才张嘴,同时保持 pacman 的嘴始终朝着移动方向。
提示:pygame.transform.rotate() 函数能够旋转图片。例如 pygame.transform.rotate(img1, 90) 表示将 img1 逆时针旋转 90 度。
任务八:超能力豆子
实现一个特殊的豆子,吃掉之后 pacman 具有超能力,可以消灭怪物。
超能力持续 5 秒钟结束。








网友评论