美文网首页编程初入门
【pygame系列 第三课 弹球游戏-上 】

【pygame系列 第三课 弹球游戏-上 】

作者: 叶子陪你玩 | 来源:发表于2019-12-10 22:11 被阅读0次

    python我们可以做文字版的游戏,比如猜数字游戏,21点游戏。那python可以做图形界面的游戏吗?偷偷告诉你,用pygame库就可以实现了。pygame是python中专门用来编写游戏的一个引擎库,通过使用它,就可以很快的实现编写图形化的游戏。

    小球动图.gif

    实现思路:
    第一步:创建游戏窗口
    第二步:绘制一个弹球
    第三步:让球动起来
    球动起来的原理实际上就是球的位置发生了改变,位置是由球的x,y坐标决定的,所以只要不断改变球的坐标就可以实现动起来的效果了。
    第四步:边界检测
    怎样知道球出了边界呢?通过比较球的x,y坐标值与边界的坐标值,从而判断是否出了边界。

    1.创建游戏窗口

    这个已经非常熟练了,直接看代码。

    代码:

    import pygame
    import sys
    
    
    pygame.init()
    size =width,height=400,300
    screen = pygame.display.set_mode(size)
    pygame.display.set_caption("弹球游戏")
    
    # 背景白色
    bg = (255,255,255)
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()
        
        screen.fill(bg)
        pygame.display.flip() # 更新
    

    效果:

    2.绘制一个弹球

    绘制一个小球,其实就是绘制一个圆。

    代码:

    import pygame
    import sys
    
    pygame.init()
    size =width,height=400,300
    screen = pygame.display.set_mode(size)
    pygame.display.set_caption("弹球游戏")
    
    # 背景白色
    bg = (255,255,255)  
    # 球的颜色 红色
    ball_color = (255,0,0)
    # 球的大小 半径
    ball_size = 20
    # 球的初始位置 设置在窗口中心位置
    pos_x,pos_y = width//2-ball_size,height//2-ball_size
    
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()
        
        screen.fill(bg)
        # 在窗口上绘制一个圆形 球
        pygame.draw.circle(screen,ball_color,[pos_x,pos_y],ball_size)
        pygame.display.flip()
    

    效果:

    3.让球动起来

    小球是绘制出来了,那该怎样让它动起来了呢?物体动其实它的位置发生了改变,在计算机中就是它的坐标,我们只要让球的坐标变化,利用人眼暂留的效应,使得小球看上去在运动一样。

    代码:

    import pygame
    import sys
    import random
    
    pygame.init()
    size =width,height=400,300
    screen = pygame.display.set_mode(size)
    pygame.display.set_caption("弹球游戏")
    
    # 背景白色
    bg = (255,255,255)  
    # 球的颜色 红色
    ball_color = (255,0,0)
    # 球的大小 半径
    ball_size = 20
    # 球的初始位置 设置在窗口中心位置
    pos_x,pos_y = width//2-ball_size,height//2-ball_size
    # 设置球的 初始速度
    speed_x=random.randint(1,5)
    speed_y=random.randint(1,5)
    
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()
        
        screen.fill(bg)
        # 在窗口上绘制一个圆形 球
        pygame.draw.circle(screen,ball_color,[pos_x,pos_y],ball_size)
        pygame.display.flip()
        # 等待 100ms 避免刷新太快
        pygame.time.wait(100)
        # 更改位置
        pos_x += speed_x
        pos_y += speed_y
    

    效果:

    4.边界检测

    虽然小球可以移动了,但是发现没过一会,小球就跑出窗口了,这个时候,我们需要检测小球是否到达边界,到了就改变运动方向。

    代码:

    import pygame
    import sys
    import random
    pygame.init()
    
    size =width,height=400,300
    screen = pygame.display.set_mode(size)
    pygame.display.set_caption("弹球游戏")
    
    # 背景白色
    bg = (255,255,255)  
    # 球的颜色 红色
    ball_color = (255,0,0)
    # 球的大小 半径
    ball_size = 20
    # 球的初始位置 设置在窗口中心位置
    pos_x,pos_y = width//2-ball_size,height//2-ball_size
    # 设置球的 初始速度
    speed_x=random.randint(1,5)
    speed_y=random.randint(1,5)
    
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()
        
        screen.fill(bg)
        # 在窗口上绘制一个圆形 球
        pygame.draw.circle(screen,ball_color,[pos_x,pos_y],ball_size)
        pygame.display.flip()
        # 等待 100ms 避免刷新太快
        pygame.time.wait(100)
        # 如果小球碰到左右边界,改变速度反弹
        if pos_x <ball_size or pos_x > width-ball_size:
            speed_x = -speed_x
        # 如果小球碰到上下边界,改变速度反弹
        if pos_y <ball_size or pos_y > height-ball_size:
            speed_y = -speed_y
        # 更改位置
        pos_x += speed_x
        pos_y += speed_y
    

    效果:

    总结:

    本文主要讲了如何绘制一个圆形球,如何让球移动起来,以及限制小球移除边界。
    pygame.draw.circle(screen,ball_color,[pos_x,pos_y],ball_size) 在窗口上的中心位置绘制一个什么颜色,多大的圆形。
    speed_x = -speed_x,speed_y = -speed_y - 号表示取反的意思
    pos_x <ball_size or pos_x > width-ball_size 判断是否出了 上边界 或者 下边界
    pos_x += speed_x ,pos_y += speed_y 累加 等效于 pos_x = pos_x+ speed_x

    欢迎转载,转载请注明出处!
    欢迎关注公众微信号:叶子陪你玩
    分享自己的python学习之路

    相关文章

      网友评论

        本文标题:【pygame系列 第三课 弹球游戏-上 】

        本文链接:https://www.haomeiwen.com/subject/dscngctx.html