pgzero游戏开发项目实战(一)

矩游戏开发最终要的是逻辑关系,所以本博主将携带大家一起来从零开始的一款小游戏制作,如有不足之处,请帮忙之处。

一、框架及库函数导入

import pgzrun


def draw():
    pass


def update():
    pass


pgzrun.go()

框架导入更有利于我们定位代码,也是一个pgzero开发好的开端。所以要习惯先把框架代码打好。

二、背景导入

screen.blit('图片名',(0,0))

我们发现窗体有多余部分,应为窗体的默认大小为800x600。所以我们需要对窗体进行修改

修改窗体

WIDTH=images.bg0.get_width()

HEIGHT=images.bg0.get_height()

images.图片名称.get_width()和images.图片名称.get_height()可以快速获取图片的宽和高

三、角色

eagle=Actor('eagle')
def draw():
    screen.blit('bg0',(0,0))
    eagle.draw()

角色定位

eagle.pos=WIDTH/2,HEIGHT-images.eagle.get_height()

角色移动 

定义角色速度

eagle_speed=5

定义角色移动函数

def eagle_move():
    if keyboard.left:#方向键左
        eagle.x-=eagle_speed
    if keyboard.right:#方向键右
        eagle.x+=eagle_speed

在update函数中将函数调用,即可实现角色的左右移动。

限制运动范围

eagle.x=max(images.eagle.get_width()/2,min(WIDTH-images.eagle.get_width()/2,eagle.x))

通过max和min函数可以限制角色的最大和最小运动范围。只需在max(最小,min(最大,角色坐标)) 

def eagle_move():
    if keyboard.left:#方向键左
        eagle.x-=eagle_speed
    if keyboard.right:#方向键右
        eagle.x+=eagle_speed
    eagle.x=max(images.eagle.get_width()/2,min(WIDTH-images.eagle.get_width()/2,eagle.x))

四、子弹发射

无限子弹流

通过按键创建子弹角色,并定位子弹角色位置,在将其放置于列表中,通过draw函数循环绘制即可将每颗子弹进行绘制。

def on_key_down(key):
    if key==keys.SPACE:
        bullet=Actor('bullet')
        bullet.center=eagle.center
        bullet_list.append(bullet)

通过按下空格键创建子弹角色,并定义子弹角色和玩家角色中心,并将角色添加入列表中 

def draw():
    screen.blit('bg0',(0,0))
    eagle.draw()
    for bullet in bullet_list:
        bullet.draw()

 通过循环访问子弹列表,并将子弹列表中的每个角色依次取出并进行角色的绘制。

子弹移动

子弹移动只需定义个子弹的移动速度,并在每次循环绘制子弹的过程中使子弹的y坐标朝该方向进行运动。

bullet_speed=15

def draw():
    screen.blit('bg0',(0,0))
    eagle.draw()
    for bullet in bullet_list:
        bullet.y-=bullet_speed
        bullet.draw()

五、角色私有属性

私有属性是角色里可以方便我们给该角色增加变量。

bullet.alive=True

通过alive来判断角色属性的存活,并更改子弹列表,当子弹超出屏幕时,使子弹属性设置为False

import pgzrun

WIDTH=images.bg0.get_width()
HEIGHT=images.bg0.get_height()

eagle=Actor('eagle')
eagle.alive=True
eagle.pos=WIDTH/2,HEIGHT-images.eagle.get_height()
eagle_speed=5
bullet_speed=15
bullet_list=[]
def draw():
    global bullet_list
    screen.blit('bg0',(0,0))
    eagle.draw()
    bullet_list=[bullet for bullet in bullet_list if bullet.alive]
    for bullet in bullet_list:
        bullet.y-=bullet_speed
        bullet.draw()
    pass

def eagle_move():
    if keyboard.left:#方向键左
        eagle.x-=eagle_speed
    if keyboard.right:#方向键右
        eagle.x+=eagle_speed
    eagle.x=max(images.eagle.get_width()/2,min(WIDTH-images.eagle.get_width()/2,eagle.x))
def on_key_down(key):
    if key==keys.SPACE:
        bullet=Actor('bullet')
        bullet.center=eagle.center
        bullet.alive=True
        bullet_list.append(bullet)
def update():
    eagle_move()
    for bullet in bullet_list:
        if bullet.y<0:
            bullet.alive=False
            continue
        bullet.y-=bullet_speed
    pass

pgzrun.go()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值