《Python游戏趣味编程》第12章 坚持一百秒

图书简介可以看这里:童晶:《Python游戏趣味编程》新书上架了本章我们将编写一个坚持一百秒的游戏,玩家通过鼠标控制飞机躲避飞舞的小球,效果如图12-1所示。首先学习面向对象编程的知识,利用类和对象实现一个新版本的小球反弹程序;然后实现飞机控制与失败判定、生命显示、游戏音效等功能;最后学习继承的概念,快速添加一种新的智能小球。本章案例最终代码一共99行,代码参看:配套资源\第12章\12-4.py...
摘要由CSDN通过智能技术生成

12 坚持一百秒

图书简介可以看这里:

童晶:《Python游戏趣味编程》新书上架了

本章我们将编写一个坚持一百秒的游戏,玩家通过鼠标控制飞机躲避飞舞的小球,效果如图12-1所示。首先学习面向对象编程的知识,利用类和对象实现一个新版本的小球反弹程序;然后实现飞机控制与失败判定、生命显示、游戏音效等功能;最后学习继承的概念,快速添加一种新的智能小球。

本章案例最终代码一共99行,代码参看:配套资源\第12章\12-4.py,视频效果参看:配套资源\第12章\坚持一百秒.mp4。

import pgzrun  # 导入游戏库
import random  # 导入随机库
WIDTH = 600   # 设置窗口的宽度
HEIGHT = 800  # 设置窗口的高度
time = 0  # 游戏坚持的时间
hero = Actor('hero')  # 导入玩家飞机图片
live = 3 # 飞机一共3条命

livePics = []  # 在左上角显示生命符号
for i in range(live):
    livePic = Actor('hero_small')
    livePic.x = 40 + i*60
    livePic.y = 40
    livePics.append(livePic)

class Ball: # 定义小球类
    x = None  # 小球的x坐标
    y = None  # 小球的y坐标
    vx = None  # 小球x方向的速度
    vy = None  # 小球y方向的速度
    radius = None  # 小球的半径
    color = None  # 小球的颜色

    # 使用构造函数传递参数对对象初始化
    def __init__(self,x,y,vx,vy,radius,color):
        self.x = x
        self.y = y
        self.vx = vx
        self.vy = vy
        self.radius = radius
        self.color = color
    
    def draw(self): # 绘制函数
        # 绘制一个填充圆,坐标(x,y),半径radius,颜色color
        screen.draw.filled_circle((self.x, self.y), self.radius, self.color)

    def update(self): # 更新小球的位置、速度
        self.x += self.vx   # 利用x方向速度更新x坐标
        self.y += self.vy   # 利用y方向速度更新y坐标
        # 当小球碰到左右边界时,x方向速度反转
        if self.x > WIDTH-self.radius or self.x < self.radius:
            self.vx = -self.vx
        # 当小球碰到上下边界时,y方向速度反转
        if self.y > HEIGHT-self.radius or self.y < self.radius:
            self.vy = -self.vy

balls = []  # 存储所有小球的信息,初始为空列表

def draw():   # 绘制模块,每帧重复执行
    screen.fill('white')  # 白色背景
    hero.draw()  # 绘制玩家飞机
    for i in range(live): # 绘制还有几条生命
        livePics[i].draw()
    for ball in balls:
        ball.draw()   # 绘制小球
    screen.draw.text(str(time)+'秒', (270, 10), fontsize=50,
                     fontname='s', color='black')
    if live<=0:
        clock.unschedule(count)
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值