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学习路线跟资料,比较适合新手,戳下面名片找小助理领取
python游戏教程 | 小蜜蜂历险记,自己做的游戏就是好玩~相关推荐
- python游戏:小蜜蜂历险记(一)
宅在家里好几个月了,有点无聊.小编决定写了一个小游戏,名字叫做<小蜜蜂的丛林历险记>. 什么情况呢? 我来介绍一下游戏吧:有一天,小蜜蜂为了采集花蜜,决定穿越最凶险的丛林,抵达传说中的万花 ...
- 前端游戏巨制! CSS居然可以做3D游戏了
前言 偶然接触到CSS的3D属性, 就萌生了一种做3D游戏的想法. 了解过css3D属性的同学应该都了解过perspective.perspective-origin.transform-style: ...
- c语言制作猜数游戏教程,C语言实现猜数游戏
本文实例为大家分享了C语言实现猜数游戏的具体代码,供大家参考,具体内容如下 代码如下 #include #include #include void game() { srand((unsigned ...
- flash游戏教程集锦~~
http://www.flash8.net/bbs/dispbbs.asp?boardID=38&ID=183016&page=1 flash游戏教程集锦~~制作游戏有疑惑的先来这里看 ...
- python3简明教程第二版答案_python入门简明教程?求最新的python简明教程,最好是python3的...
本人对于计算机没有任何基础,只是简单的操作.过两天要学习python语言的基础课,需要如何准备.跪谢! 先看python的简明教程,然后可以再看<dive into python>中文版( ...
- flash游戏教程集锦~~制作游戏有疑惑的先来这里看看~~
http://www.flash8.net/bbs/dispbbs.asp?boardID=38&ID=183016&page=1 flash游戏教程集锦~~制作游戏有疑惑的先来这里看 ...
- 【纯JAVA语言做RPG游戏】1.做个瓷砖地图生成器
开个坑,想做个JAVA游戏. 虽然现在有着各种游戏引擎,使得做游戏的效率提高了很多,但是用着别人的代码来做感觉对自己也没啥提升,而且在游戏的模式上也不得不去迎合别人的思维,所以露珠准备应用前面学到的所 ...
- html5游戏 很费流量嘛,2017TFC5玩游戏林勇坤 优化HTML5游戏流量数据转化
2月25日消息,为期两天的2017第十四届TFC全球泛游戏大会暨智能娱乐展已于24在北京国际会议中心圆满落幕.在23日下午举行的2017TFC第五届HTML5游戏高峰论坛上,5玩游戏CEO林勇坤带来了 ...
- python网络游戏开发教程_python 网游开发教程 | python做的游戏有哪些
python游戏开发是做什么的 现在很多的线下培训,质量参差不而且线下的培都十分高昂,加上你的线下生活费的话,学一个技术没有三万是学不下来的,你可以考虑线上的教育,只培训费就会给你省一大笔,学习时间还 ...
最新文章
- 字符串中的编码解码问题
- excel的宏与VBA入门——代码调试
- 使用adb调试android
- python创建一个有序链表_Python实现单向有序链表(Singly linked list)
- [Angularjs]视图和路由(一)
- oj题 根据化学方程式计算摩尔质量
- 墨条不如墨汁黑是怎么回事?
- springboot报错Table 'wechat.hibernate_sequence' doesn't exist
- 安武:被刷屏的德勤财务机器人(RPA)到底是什么?
- windows xp下 usb驱动编写
- java在线生成word文档_java导出word之FreeMarker生成word文档
- Linux——shell编程基础笔记
- 图书isbn批量生成一维条码
- VsCode文件屏蔽
- 2010中国移动开发者大会21日开幕 揭密五大亮
- javacpp-opencv图像处理系列:国内车辆牌照检测识别系统(万份测试准确率79.7%以上)
- Linux Canbus调试笔记
- 零基础学python pdf-零基础学Python PDF 全彩影印版
- 塑料按照分子结构分类
- m基于matlab的光通信误码率仿真,分别对比了OFDM+BPSK和OFDM+4QAM的误码率和星座图