Python   发布时间:2022-04-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Python游戏开发,pygame模块,Python实现八音符小游戏大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

前言:

本期我们将制作一个类似八音符的小游戏。
让我们愉快地开始吧~~~

Python游戏开发,pygame模块,Python实现八音符小游戏

开发工具**

Python版本:3.6.4

相关模块:

cocos2d模块;

pyaudio模块;

以及一些Python自带的模块。

环境搭建

安装Python并添加到环境变量,pip安装需要的相关模块即可。

原理介绍

相信很多人对八音符这款游戏并不陌生吧,其核心玩法是利用声音控制一个带辫子的小黑球不断前进,大概是长这样子的吧:

Python游戏开发,pygame模块,Python实现八音符小游戏

今天我们就来做一个低配版本的T_T,其功能为利用声音控制皮卡丘不断前进。

游戏主要使用了cocos2d模块和pyaudio模块,前者用于搭建游戏框架,后者用于获得麦克风的声音。

Step1 定义皮卡丘类:

既然游戏的主角是皮卡丘,那我们总得单独定义一个类来体现一下主角吧?

利用cocos2d模块来定义主角类是一件非常轻松的事情。你只需要继承sprites类,然后告诉sprites类需要执行什么操作即可。

根据八音符的游戏规则,我们赋予皮卡丘跳跃、下降和静止的能力,同时,我们规定皮卡丘在空中时无法进行跳跃。具体代码如下:

class Pikachu(cocos.sprite.SpritE):
	def __init__(self, imagepath, **kwargs):
		super(Pikachu, self).__init__(imagepath)
		# 锚点
		self.image_anchor = 0, 0
		# 初始重置
		self.reset(false)
		# 更新
		self.schedule(self.updatE)
	'''声控跳跃'''
	def jump(self, h):
		if self.is_able_jump:
			self.y += 1
			self.speed -= max(min(h, 10), 7)
			self.is_able_jump = false
	'''着陆后静止'''
	def land(self, y):
		if self.y > y - 25:
			self.is_able_jump = True
			self.speed = 0
			self.y = y
	'''更新(重力下降)'''
	def update(self, dt):
		self.speed += 10 * dt
		self.y -= self.speed
		if self.y < -85:
			self.reset()

Step2 定义block类:

显然,主角需要有站的地方吧T_T,到处都是万丈深渊怕是一万只皮卡丘也拯救不了地球人吧T_T。

对于地面,刚开始的时候先得有一段长点的平地缓冲一下,让玩家先试试自己的嗓音,然后再随机生成跳跃块,让玩家展示自己的歌喉。具体代码如下:

class Block(cocos.sprite.SpritE):
def __init__(self, imagepath, position, **kwargs):
		super(Block, self).__init__(imagepath)
		self.image_anchor = 0, 0
		x, y = position
		if x == 0:
			self.scale_x = 4.5
			self.scale_y = 1
		else:
self.scale_x = 0.5 + random.random() * 1.5
self.scale_y = min(max(y - 50 + random.random() * 100, 50), 300) / 100.0
self.position = x + 50 + random.random() * 100, 0

Step3 实现游戏主循环:

有了上面的铺垫,就可以开始实现我们的小游戏了。

此时我们需要继承ColorLayer类来实现游戏主循环。首先,我们定义声控条类来“暗中观察”我们的嗓音,代码如下:

        # 声控条
	self.vbar = Sprite(cfg.bLOCK_IMAGE_PATH)
		self.vbar.position = 20, 450
		self.vbar.scale_y = 0.1
		self.vbar.image_anchor = 0, 0
		self.add(self.vbar)

然后就是实例化皮卡丘类和block类,其中,block类将被放置进容器以方便整体处理。代码如下:

        # 皮卡丘类
self.pikachu = Pikachu(cfg.PIKACHU_IMAGE_PATH)
		self.add(self.pikachu)
		# 地面
		self.floor = cocos.cocosnode.Cocosnode()
		self.add(self.floor)
		position = 0, 100
		for i in range(120):
	b = Block(cfg.bLOCK_IMAGE_PATH, position)
			self.floor.add(b)
			position = b.x + b.width, b.height

啊,千万别忘了只有输入了声音才能控制我们的皮卡丘不停地运动,代码如下:

# 声音输入
audio = PyAudio()
self.stream = audio.open(format=paInt16, chAnnels=1, 
rate=int(audio.get_device_info_by_index(0)['defaultSampleRate']), input=True, 
frames_per_buffer=self.num_samples)

最后,我们需要告诉程序游戏规则,那就是根据麦克风接收到的声音的音量来控制声控条的长短以及皮卡丘的动作。这里,我们通过block块的整体后移来实现皮卡丘的前进效果。

当然,我们也需要加入必要的碰撞检测程序,不然皮卡丘一登场就陷入沼泽一样的地面中了。并且我们规定当皮卡丘掉入“沟壑”后游戏重置。

代码如下:

def update(self, dt):
		# 获取每帧的音量
audio_data = self.stream.read(self.num_samples)
	k = max(struct.unpack('1000h', audio_data))
		self.vbar.scale_x = k / 10000.0
		if k > 3000:
	self.floor.x -= min((k / 20.0), 150) * dt
		# 皮卡丘跳跃
		if k > 8000:
		self.pikachu.jump((k - 8000) / 1000.0)
		# 碰撞检测
		self.collide()

文章到这里就结束了,感谢你的观看,Python24个小游戏系列,下篇文章分享拼图小游戏

All done~详见个人简介或者私信获取完整源代码。。

大佬总结

以上是大佬教程为你收集整理的Python游戏开发,pygame模块,Python实现八音符小游戏全部内容,希望文章能够帮你解决Python游戏开发,pygame模块,Python实现八音符小游戏所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:pygame模块