栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python游戏教程 | 小蜜蜂历险记,自己做的游戏就是好玩~

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python游戏教程 | 小蜜蜂历险记,自己做的游戏就是好玩~

大家好,我是王某人。

估计好些宅在家里好几个月了,有点无聊。决定写了一个小游戏,名字叫做《小蜜蜂的丛林历险记》。

什么情况呢?

我来介绍一下游戏吧:有一天,小蜜蜂为了采集花蜜,决定穿越最凶险的丛林,抵达传说中的万花岛。丛林里有各种各样野蛮的虫子,如果不幸被这些虫子抓到了,小蜜蜂生命值就会损失,如果生命值损失没了,小蜜蜂就挂了,当然,在寻找万花岛的过程中,小蜜蜂也会遇到各种各样的帮助,比如说,如果小蜜蜂碰到了一个桃花,喝到了桃花蜜,她的生命值就会提高。如果碰到了梅花,小蜜蜂移动速度加快。

对了,我们还忘记了说一件事,那就是小蜜蜂到底有什么样的武器来对付这些毒虫呢!大家看下面:

小蜜蜂现在只有一种武器,那就是她射出的箭。当然了,随着关卡的不断深入,小蜜蜂还会不断地获得各种各样的新武器。比如.........我也没想好

现在是这个游戏的第一步,在将来,我们会不断的更新这个小游戏,不断添加各种各样的敌人。同时也赋予小蜜蜂越来越多的武器。

好吧!!!

开始啦!

我们来看看我们今天的主角:小蜜蜂:

然后小蜜蜂碰到的第一个敌人是:瓢虫:

现在是最简化版本的游戏,形式上和飞机大战差不多。按上下左右键,小蜜蜂就可以上下左右移动,如果按了空格键,小蜜蜂发射一支箭,射中了瓢虫,那么瓢虫直接死亡(瓢虫血比较薄)。当然,如果小蜜蜂被瓢虫碰到了,小蜜蜂也死亡。

在直接动手写程序以前,我们首先要做的是抠图,意思是把这些图片素材的背景变成透明的,记住,白色的背景不是透明的,白色是一种颜色,我们要的是透明,意思就是无色的。如果我们不扣图,图片素材里面有白色的背景,就会出现这样的情况。

大家可以看到,瓢虫就是没有抠图的效果,小蜜蜂是抠图以后的效果。网上有很多抠图的网站,但很多都是收费的,这里我写了一个python的代码,可以自动从白色的背景中抠图。代码如下:

from PIL import Image
def transPNG(srcImageName, dstImageName):    img = Image.open(srcImageName)    img = img.convert("RGBA")    datas = img.getdata()    newData = list()    for item in datas:        if item[0] > 225 and item[1] > 225 and item[2] > 225:            newData.append((255, 255, 255, 0))        else:            newData.append(item)    img.putdata(newData)    img.save(dstImageName, "PNG")    transPNG('my_arrow.png','new_arrow')

然后我们就要开始正式的程序了。

关于小游戏,我们之前已经讲的很多了,比如说按键识别,大家很容易就能看懂。这个游戏比较特殊的地方在于,我们用了pygame里面的精灵和精灵组。这是pygame里面专门用来开发游戏的功能,可以大幅度节约你的代码。

另外就是,我们用到了类的继承,相信很多同学都学过。

我们首先定义一个精灵类:

class GrameSprite(pygame.sprite.Sprite):    """"飞机大战游戏精灵类"""
    def __init__(self, image_name, speed=1,speed1=1):        # 调用父类方法        super().__init__()        pygame.image.load(image_name).convert_alpha()
        self.image = pygame.image.load(image_name).convert_alpha()        self.rect = self.image.get_rect()        self.speed = speed        self.speed1=speed1
    def update(self):        self.rect.y += self.speed

这个精灵类包含一些基本的参数和功能。

首先,精灵类继承了GrameSprite(pygame.sprite.Sprite)。也就是说,我们定义的这个精灵,它继承了pygame里面的精灵的全部功能。我们还给它添加了一些新的功能。比如说speed,speed表示的是左右方向的速度,而speed1表示的是上下的速度。在update功能中,还定义了精灵的移动功能。

之后,我们定义小蜜蜂的类:

class Hero(GrameSprite):    """英雄类"""
    def __init__(self):        super().__init__('./images/hero1.png', 0)        self.rect.centerx = SCREEN_RECT.centerx        self.rect.bottom = SCREEN_RECT.bottom - 120
        # 创建子弹精灵组        self.bullet_group = pygame.sprite.Group()
    def update(self):        self.rect.x += self.speed        self.rect.y += self.speed1        if self.rect.x < 0:            self.rect.x = 0        elif self.rect.right > SCREEN_RECT.right:            self.rect.right = SCREEN_RECT.right        if self.rect.y>SCREEN_RECT.height:            self.rect.bottom=SCREEN_RECT.height        elif self.rect.y<0:            self.rect.bottom=0            
    def fire(self):        bullet = Bullet()        bullet.rect.bottom = self.rect.y - 20        bullet.rect.centerx = self.rect.centerx        self.bullet_group.add(bullet)

小蜜蜂就是英雄,她的功能有两个,一个是移动,另一个是开火。我们在__init__中读取小蜜蜂的图片,设置她的位置。self.rect表示的是包围小蜜蜂的矩形的四个边的坐标值,我们移动小蜜蜂,指的就是移动这些坐标值。移动坐标的值,我们做了一个专门的函数来处理。也就是update。

最后,小蜜蜂还有一个重要的功能就是开火(也就是射箭)。在这个函数中,我们首先要初始化一个子弹(箭),然后设置好这个子弹的位置,最后把这个子弹添加到子弹的精灵组里面。

然后,我们来讲一讲游戏的循环,和所有的游戏一样,这个游戏也是通过快速的帧率变化来展现出连贯的视频的。我们设置一个帧率,然后快速刷新,由于人眼的视觉暂留效应。这样看到的就是一个连续的视频了。

​​​​​​​

    def start_game(self):        while True:            # 1.设置刷新帧率            self.clock.tick(FRAME_PER_SEC)            # 2.事件监听            self.__event_handler()            # 3.碰撞检测            self.__check_collide()            # 4.更新/绘制精灵组            self.__update_sprites()            # 5.更新显示            pygame.display.update()

在游戏中,我们可以将所有的代码简化为4步,分别是,事件监听,也就是查看我们的按键输入,之后移动各种游戏元素。用精灵组的自带功能进行碰撞检测(查看箭有没有碰到瓢虫,瓢虫有没有碰到蜜蜂)。最后更新精灵组(将射中的瓢虫删除,将箭也删除)。最后更新显示我们的界面。

最后,感兴趣的朋友可以先点个收藏+关注,之后有这样好玩的小游戏也可以分享给大家,我这里也整理了一套Python学习路线跟资料,比较适合新手,戳下面名片找小助理领取

 

 

 

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/875323.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号