python小游戏之《躲避太空垃圾》

欢迎加入我们卧虎藏龙的python讨论qq群:729683466

导语

你正驾驶飞船在宇宙间旅行

优哉游哉,好不惬意

突然,出现了无数的太空垃圾

一瞬间弹片横飞

各个方向都有弹片袭来

怎么躲避

就看你啦!

相关资源 代码获取

1:关注“python趣味爱好者”公众号,回复“ 躲避太空垃圾”获取源代码。

2:加入群聊:729683466。在群文件中下载源代码以及相关资料。

 # 效果展示 

# 开发工具

python3.6.4

第三方库:pygame,random

#往期推荐

#  用python做一个“船新”的贪吃蛇

#  python爬取《鹿鼎记》小说

# 讲解部分

一:游戏规则

《躲避太空垃圾》的游戏思路很简单。在黑色的背景中,只有两种游戏元素,第一种是红色的圆圈,代表你自己驾驶的宇宙飞船,第二种是白色的小圆点,代表的是周围的弹片,弹片的方向,速度都是不一样的。同时,如果弹片碰到了边界,就可以反弹回来。

二:弹片类

定义一个弹片的类,主要有以下几个属性

    x = None  # x坐标
    y = None  # y坐标
    speed_x = None  # x方向的速度
    speed_y = None  # y方向的速度
    radius = None  # 半径
    color = None  # 颜色

第一是当前这个球所在的位置,也就是其x,y坐标,这里的坐标指的是这个球在界面内的像素点的坐标。还有在x,y方向上的速度大小,也就是speed_x和speed_y。此外就是弹片的半径和弹片的颜色,由于每个弹片的大小和颜色都是一样的。在实例化的时候都用一样的数字即可。

在定义弹片的基本属性的时候,采用以下的代码即可。

    def __init__(self, x, y, speed_x, speed_y, radius, color):
        self.x = x
        self.y = y
        self.speed_x = speed_x
        self.speed_y = speed_y
        self.radius = radius
        self.color = color

此外,弹片类还有几个功能,其中功能1是draw,意思就是将这个弹片在游戏界面上画出来,方法很简单。用专门画圆圈的函数即可。

pygame.draw.circle(screen, self.color, [self.x, self.y], self.radius)

还有就是弹片的移动,所谓弹片的移动,其实就是修改或者说更新弹片的坐标。代码如下 

    def move(self, screen):
        """
        小球移动
        :param screen: 窗口
        :return:
        """
        self.x += self.speed_x
        self.y += self.speed_y


        # 左右边界
        if self.x > W - self.radius or self.x < self.radius:
            self.speed_x = -self.speed_x


        # 上下边界
        if self.y > H - self.radius or self.y < self.radius:
            self.speed_y = -self.speed_y
        # 移动频率
        time.sleep(0.001)
        self.draw(screen)

其中比较重要的就是在弹片到达边界点的时候,进行的反弹处理,就是将弹片的速度方向取一个相反数。

三:飞船类

定义飞船类的时候,首先是飞船的大小以及颜色。然后还需要定义一个功能,就是飞船的移动。

    def move(self, screen):
        """
        大球移动
        :return:
        """
        # 鼠标检测
        if pygame.mouse.get_focused():
            # 获取光标位置,
            x, y = pygame.mouse.get_pos()


            mouse = pygame.mouse.get_pressed()


            pygame.draw.circle(screen, self.color, [x, y], self.radius)
            self.x = x
            self.y = y

飞船所在的位置其实就是光标所在的位置。这就需要获取鼠标的位置,然后在这个位置画圆圈。这里比较重要的就是如何检测鼠标的坐标点。用pygame里面的函数就是

x, y = pygame.mouse.get_pos()

四:游戏设计

最终需要控制整个游戏的 进行,用到的和所有的游戏都一样,while true循环。首先对pygame进行初始化,然后生成一个游戏界面,写上标题。

随后用一个for循环生成10个弹片。再生成一个飞船。

最后,在一个while循环中进行碰撞检测,检测飞船与每个弹片的距离,如果距离小于13,就表示这个弹片已经撞击到了飞船,那么游戏结束。

def main():
    # 初始化pygame模块
    pygame.init()
    # 设置窗口大小
    screen = pygame.display.set_mode((W,H))
    # 设置窗口标题
    pygame.display.set_caption('躲避太空垃圾')


    for i in range(0, 10):
       create_ball(screen)


    p = Player(10, 'red')
    text_time = "TIME:%.3d" % (time.perf_counter())


    is_loop = True
    while is_loop:
        # 重绘屏幕
        screen.fill((0))


        p.move(screen)


        for ball in balls:
            ball.move(screen)
            if abs(p.x - ball.x) < 13 and abs(p.y - ball.y) < 13:
                is_loop = False
                break


        # 刷新显示
        text_time = "TIME:%.3d" % (time.perf_counter())
        show_text(screen, text_time, (500, 40), (0, 255, 0), True)
        pygame.display.update()


        close()


    while True:
        close()
        show_text(screen, "Game over!", (120, 180), "green", True, 60)
        show_text(screen, text_time, (220, 270), "green", True, 30)


        pygame.display.update()

作者|齐

编辑|齐

PYTHON

扫二维码|关注我们

QQ群:729683466

# 参考来源

github

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值