基于pygame的小游戏开发

**

“大龟吃小鱼”小游戏开发

**

摘要

“大龟吃小鱼”游戏是基于python语言的pygame模块,尝试模拟实现网络小游戏“大鱼吃小鱼”的运行效果而进行的实践性单机小游戏项目。旨在对本段时间里的python学习效果进行考查与检验。本项目完全由本人对python基础知识以及pygame模块基础知识学习后独立完成开发。该小游戏项目模拟实现了添加背景音乐、对事件添加音效,游戏暂停、开始,随机生成游动小鱼,乌龟位置随光标移动,乌龟面向移动的方向,鲨鱼吃乌龟和其他鱼类,乌龟吃较小鱼、被较大鱼吃等功能。

1 引言

1.1 背景

当今游戏越来越氪金,游戏开发依旧是一个热门行业。但是开发的游戏能否赚到钱,还要看所开发游戏的质量。现在游戏越来越倾向于3D游戏和手游,腾讯算是国内3D手游界的元老了,知名度很高。虽然如此,但也抵挡不了经典游戏的流传。就拿俄罗斯方块来说,那是快跨世纪的经典了。当然经典是属于少数的,我们的知识也要跟上时代步伐。但是无论什么知识的学习,都得从基础开始,而python又是一门简单好用,功能强大的面向对象语言,非常适合其他编程语言薄弱或者零基础学员。所以,想要学得更深层次知识,首先也得从基础爬起。一些2D平面网络小游戏或者类似街霸游戏机的游戏都可以成为我们尝试模拟开发实现的好项目,先照着学着做,再学着去创造自己的游戏。

1.2 意义

模拟实现网络小游戏“大鱼吃小鱼”,单纯为了检验自己这段时间对python基础知识和pygame模块知识的掌握运用,从简单出发,从模拟开始,既不会给自己太多难点,让自己失去耐心信心,还可以提高学习的兴趣,有兴趣了,才会有动力坚持。
python真是一门热门语言,近年来听到与他有关的大数据、深度学习、人工智能的消息不少。自己有学习python的游戏和爬虫两部分内容的决定,但一切从基础出发,项目案例是不可少的!

1.3 相关研究

大鱼吃小鱼”是一款经典,被经常模仿的小游戏,至今还是很多人的回忆。为了编写程序,我还重新回去玩了几把。现在已经被模仿出很多款大鱼吃小鱼的游戏,但操作大致一样,只是画面更加美观,游戏的精灵对象更加丰富。它们的基本玩法都是通过移动鼠标带动小鱼移动,改变方向,躲避比自己个头大的鱼,追捕比自己小的鱼。期间会产生许多游来游去的鱼,这些鱼还有一定躲避和改变方向的能力。时不时还会响起警报,冲出一条鲨鱼。鲨鱼速度快,直接横穿游戏界面,带走旁边经过的小鱼。

1.4 实现的功能

根据“大鱼吃小鱼”游戏的基本玩法,应该模拟实现的基本功能如下:
(1) 添加背景音乐
(2) 鼠标控制主角乌龟的移动
(3) 乌龟向左移动,头应该朝向左;向右移动时,头应该朝向右
(4) 随机产生小鱼、中鱼、大鱼和鲨鱼从游戏屏幕两侧游来
(5) 乌龟可以吃比自己小的鱼,可以被比自己大的鱼吃
(6) 乌龟吃鱼时,播放特定音效
(7) 乌龟吃鱼到一定数量会自动变大,设置两次变大过程
(8) 乌龟变大时播放特定音效
(9) 鲨鱼可以吃乌龟和所有鱼类
(10)鲨鱼出现前播放预警音效和显示警告标志,鲨鱼出现时播放特定音效
(11)添加游戏暂停和进行按钮
(12)实时统计乌龟吃鱼的得分,打印在窗体上。
(13)乌龟被吃,游戏停止,并在游戏屏幕中央打印出“Game Over!!!”
**

2. 系统结构

**

2.1 介绍

模拟实现的“大龟吃小鱼”只不过是个小型窗体游戏,所有游戏呈现的效果都是基于pygame的display模块的set_mode()方法创建的窗体实现的,然后通过循环一直去运行编写的程序,产生对应事件,除非达到指定的停止循环条件,程序才停止运行。而呈现的效果只不过是python高效的响应能力,每秒以人眼察觉不到的帧率刷新屏幕,让一张张图片(一点点像素)在窗体上飞速绘制。

2.2 系统中对象设计

名称 图标 大小 相关属性
小乌龟 $160 50*40 像素 size =1/3/5 、score = 0
小鱼 $12 在这里插入图片描述在这里插入图片描述 40*25像素 size = 0、spend = 3、live = True
中鱼 $1 在这里插入图片描述 60*40像素 size = 2、speed = 2、live=True
大鱼 在这里插入图片描述在这里插入图片描述 80*50像素 size = 4、speed = 3、live = True
鲨鱼 在这里插入图片描述在这里插入图片描述 150*100像素 size = 6、 speed = 5、live = True

相关描述:
(1)size表示对象大小关系,乌龟初始化为1,后边变大再修改为3,5。然后宽高分别变为原来1.4,1.8倍。其他对象size固定不变这样设计,为了满足大吃小的设定。
(2)score是小乌龟吃鱼所获得分数。吃小、中、大鱼分别加10、20、30分。
(3)speed是给鱼的游动速度
(4)live用于判断鱼是否被吃,被吃则置False,触发重置鱼位置的事件。

2.3 使用的模块方法

(1)display模块
set_mode(宽,高):创建窗体
set_cption(“…”):创建窗体标题

(2)mixer内的music模块——Pygame 中控制音频流的模块。load("….ogg"):载入音乐文件,创建了音乐对象
play():播放
set_colume():设置音量
pause():暂停音乐播放
unpause():恢复音乐播放
stop():结束播放呀

(3)mixer模块
pygame.mixer.Sound("….wav"): 使用前需先生成Sound()对象
play():播放
set_volume():设置音量

(4)image模块
load(“….jpg/png”): 从文件加载新图片

(5)mouse模块
set_visible():隐藏或显示鼠标光标
get_pos():获取鼠标光标的位置

(6)sprite 模块
spritecollide():方法用于检测某个精灵是否与指定的组中的其它精灵发生碰撞。
pygame.sprite.Sprite:动画精灵的基类:

(7)event模块
get():获取产生的事件

(8)transform模块
flip():水平、垂直翻转图像
smoothscale():平滑缩放图像

(9)font
Font():设置文本字体和大小
render() 方法: 将显示的文字活生生的渲染成一个 Surface 对象

(10)surface.blit():将surface对象渲染到屏幕上

(11)time模块
delay():进行延迟。
time模块有一个 Clock类。实例化的Clock 对象有一个方法叫做 tick(),参数就是设置的帧率。

**

3 实现代码

**

3.1 打地基

游戏的实现需要一个地基,而进一步工作还需要一些材料。这里的地基就是窗体,材料就是开发过程中用到的素材(音乐、图像)。
先创建一个窗体,并导入音乐素材,顺便把主角小乌龟加入到窗体中。
创建一个musice文件夹存放音乐素材如下:
在这里插入图片描述
创建一个images文件夹存放图片素材如下:
在这里插入图片描述

```python
(1)创建乌龟模块,定义乌龟类
import pygame

class Turtle(pygame.sprite.Sprite):
    def __init_
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值