大家好,我是王某人。

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

什么情况呢?

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

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

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

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

好吧!!!

开始啦!

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

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

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

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

大家可以看到,瓢虫就是没有抠图的效果,小蜜蜂是抠图以后的效果。网上有很多抠图的网站,但很多都是收费的,这里我写了一个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学习路线跟资料,比较适合新手,戳下面名片找小助理领取

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

  1. python游戏:小蜜蜂历险记(一)

    宅在家里好几个月了,有点无聊.小编决定写了一个小游戏,名字叫做<小蜜蜂的丛林历险记>. 什么情况呢? 我来介绍一下游戏吧:有一天,小蜜蜂为了采集花蜜,决定穿越最凶险的丛林,抵达传说中的万花 ...

  2. 前端游戏巨制! CSS居然可以做3D游戏了

    前言 偶然接触到CSS的3D属性, 就萌生了一种做3D游戏的想法. 了解过css3D属性的同学应该都了解过perspective.perspective-origin.transform-style: ...

  3. c语言制作猜数游戏教程,C语言实现猜数游戏

    本文实例为大家分享了C语言实现猜数游戏的具体代码,供大家参考,具体内容如下 代码如下 #include #include #include void game() { srand((unsigned ...

  4. flash游戏教程集锦~~

    http://www.flash8.net/bbs/dispbbs.asp?boardID=38&ID=183016&page=1 flash游戏教程集锦~~制作游戏有疑惑的先来这里看 ...

  5. python3简明教程第二版答案_python入门简明教程?求最新的python简明教程,最好是python3的...

    本人对于计算机没有任何基础,只是简单的操作.过两天要学习python语言的基础课,需要如何准备.跪谢! 先看python的简明教程,然后可以再看<dive into python>中文版( ...

  6. flash游戏教程集锦~~制作游戏有疑惑的先来这里看看~~

    http://www.flash8.net/bbs/dispbbs.asp?boardID=38&ID=183016&page=1 flash游戏教程集锦~~制作游戏有疑惑的先来这里看 ...

  7. 【纯JAVA语言做RPG游戏】1.做个瓷砖地图生成器

    开个坑,想做个JAVA游戏. 虽然现在有着各种游戏引擎,使得做游戏的效率提高了很多,但是用着别人的代码来做感觉对自己也没啥提升,而且在游戏的模式上也不得不去迎合别人的思维,所以露珠准备应用前面学到的所 ...

  8. html5游戏 很费流量嘛,2017TFC5玩游戏林勇坤 优化HTML5游戏流量数据转化

    2月25日消息,为期两天的2017第十四届TFC全球泛游戏大会暨智能娱乐展已于24在北京国际会议中心圆满落幕.在23日下午举行的2017TFC第五届HTML5游戏高峰论坛上,5玩游戏CEO林勇坤带来了 ...

  9. python网络游戏开发教程_python 网游开发教程 | python做的游戏有哪些

    python游戏开发是做什么的 现在很多的线下培训,质量参差不而且线下的培都十分高昂,加上你的线下生活费的话,学一个技术没有三万是学不下来的,你可以考虑线上的教育,只培训费就会给你省一大笔,学习时间还 ...

最新文章

  1. 字符串中的编码解码问题
  2. excel的宏与VBA入门——代码调试
  3. 使用adb调试android
  4. python创建一个有序链表_Python实现单向有序链表(Singly linked list)
  5. [Angularjs]视图和路由(一)
  6. oj题 根据化学方程式计算摩尔质量
  7. 墨条不如墨汁黑是怎么回事?
  8. springboot报错Table 'wechat.hibernate_sequence' doesn't exist
  9. 安武:被刷屏的德勤财务机器人(RPA)到底是什么?
  10. windows xp下 usb驱动编写
  11. java在线生成word文档_java导出word之FreeMarker生成word文档
  12. Linux——shell编程基础笔记
  13. 图书isbn批量生成一维条码
  14. VsCode文件屏蔽
  15. 2010中国移动开发者大会21日开幕 揭密五大亮
  16. javacpp-opencv图像处理系列:国内车辆牌照检测识别系统(万份测试准确率79.7%以上)
  17. Linux Canbus调试笔记
  18. 零基础学python pdf-零基础学Python PDF 全彩影印版
  19. 塑料按照分子结构分类
  20. m基于matlab的光通信误码率仿真,分别对比了OFDM+BPSK和OFDM+4QAM的误码率和星座图

热门文章

  1. [计算机网络】【网络设备】交换机的静态路由配置
  2. Windows如何使用主题包
  3. 微信授权莫名创建用户数据失败的原因
  4. 考研政治——马克思原理剩余价值循环与分配
  5. 转载虚幻4源码下载加速
  6. 不到一百行python代码简单实现A星算法
  7. IDEA 出现问题:tomcat热部署没反应解决方案(JAVA 小虚竹,建议收藏)
  8. 打开任务管理器,不小心关闭了windows资源管理器,桌面不见了
  9. 通信原理及系统系列10—— 设计无码间串扰的通信系统(奈奎斯特第一准则)
  10. CMD的几个常用用法