導語🎼

嗨,大寶貝們,又到周末啦,今天你放假了嘛?
周末的日子總是無所事事,無所事事,一直在想做什么游戲,給大家來點兒新鮮感,這不?
玩游戲、找游戲、找素材、寫代碼,大家聽說過這個游戲嘛?
聲控2D動作小游戲它的名字叫做《不要停下來!八分音符醬?》!
今天就來給大家肝一個仿八音符小游戲!

這款游戲需要操作者發聲來控制人物,同時還得掌握好聲音的力度...偷偷玩.jpg
操作起來全都靠吼,走位全都靠音調,再多騷操作都無用,小編只能勸告大家,不要在晚上玩,大概會被鄰居誤會吧~


正文🎼

🎵一、準備中
1.1 游戲規則🎶
不同于以往電腦鍵盤操作,亦不同于網路手游觸屏操作,這款游戲的操作方法竟然是聲音,
玩家可以通過調整聲音的大小來控制音符醬的跳躍,簡單來說,聲音越大,音符醬跳的越高,
如果只發出微弱的聲音, 音符醬就只會緩慢的移動,是不是超級有意思!
1.2 素材圖片🎶

🎵二、環境
1.1 小介紹🎶
Cocos2d模塊:
Cocos2d是一個用于構建2D游戲、演示和其他圖形/互動應用程式的框架, 它可以在Windows、OSX和Linux上作業,它可以供用python語言撰寫的應用程式使用,
Pyaudio模塊:
Pyaudio庫,使用這個可以進行錄音,播放,生成wav檔案等等,PyAudio 提供了 PortAudio 的 Python 語言版本,這是一個跨平臺的音頻 I/O 庫,使用 PyAudio 你可以在 Python 程 序中播放和錄制音頻,為PoTaTudio提供Python系結,跨平臺音頻I/O庫,使用PyAudio,您可 以輕松地使用Python在各種平臺上播放和錄制音頻,例如GNU/Linux、微軟Windows和蘋果Mac OS X/MACOS,
1.2 配置環境🎶
本文涉及環境:Python3、Pycharm、cocos2d模塊;pyaudio模塊;以及一些Python自帶的模塊,
模塊安裝:
pip install +模塊名 或帶豆瓣鏡像源 pip install -i https://pypi.douban.com/simple/ +模塊名
🎵三、正式敲代碼
3.1 定義小黑八音符類:🎶
利用cocos2d模塊來定義主角類是一件非常輕松的事情,你只需要繼承sprites類,然后告訴sprites
類需要執行什么操作即可,根據八音符的游戲規則,我們賦予小黑跳躍、下降和靜止的能力,同
時,我們規定小黑在空中時無法進行跳躍,具體代碼如下:
import cocos
'''小黑類'''
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()
'''重置'''
def reset(self, flag=True):
if flag: self.parent.reset()
# 是否可跳躍
self.is_able_jump = False
# 速度
self.speed = 0
# 位置
self.position = 80, 280
3.2 定義block類:🎶
初始化界面小黑要有一段站立的地方,對于地面,剛開始的時候先得有一段長點的平地緩沖一下,
讓玩家先試試自己的嗓音,然后再隨機生成跳躍塊,讓玩家展示自己的歌喉,
具體代碼如下:
import cocos
import random
'''地面塊'''
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
3.3 實作游戲主回圈:🎶
import cfg
import cocos
import struct
from modules import *
from cocos.sprite import Sprite
from pyaudio import PyAudio, paInt16
'''定義聲控游戲類'''
class VCGame(cocos.layer.ColorLayer):
def __init__(self):
super(VCGame, self).__init__(255, 255, 255, 255, 800, 600)
# frames_per_buffer
self.num_samples = 1000
# 聲控條
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)
# 皮卡丘
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)
# 螢屏更新
self.schedule(self.update)
'''碰撞檢測'''
def collide(self):
diffx = self.pikachu.x - self.floor.x
for b in self.floor.get_children():
if (b.x <= diffx + self.pikachu.width * 0.8) and (diffx + self.pikachu.width * 0.2 <= b.x + b.width):
if self.pikachu.y < b.height:
self.pikachu.land(b.height)
break
'''定義游戲規則'''
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()
'''重置'''
def reset(self):
self.floor.x = 0
'''run'''
if __name__ == '__main__':
cocos.director.director.init(caption="xiaohei Go Go Go ")
cocos.director.director.run(cocos.scene.Scene(VCGame()))
🎵四、效果展示

總結🎼

- 今天的木木子呢,也試玩了一下這個八分音符醬,因為是實在害怕同事會打我,所以就回家錄了一下,
- 沒能通關,也沒辦法這個游戲實在不是我能駕馭的,玩了幾局嗓子就要開始冒煙了~
- 在這提醒好奇心比較強的寶寶們,一定不要在宿舍,夜晚,玩這個聲控小游戲,否則,真的可能會被打!!
好啦,到這里就結束了,想玩的小伙伴兒可以偷偷在家里玩兒,記得小聲點兒哈~🤫
🎶完整的免費原始碼領取處:
如需完整的專案原始碼+素材原始碼基地見:#私信小編06#或者點擊藍色文字添加即可獲取免費的福利!
你們的支持是我最大的動力!!記得三連哦~mua 歡迎大家閱讀往期的文章哦~
🍓新增解答方面——
如果在學習Python方面遇到問題、有時間會給大家解答滴啦!需要自行添加哈!
放WX號如下:apython68
🎉往期游戲文章推薦:
1.0 【Pygame實戰】風靡全球的切水果游戲升級版“水果忍者”上線啦!你敢來PK嘛?!
1.1Pygame實戰:爆肝!幾千行代碼實作《機甲闖關冒險游戲》,太牛了!(??建議收藏起來慢慢學??)
1.1 Pygame實戰:慎點|虐單身狗的最高境界是…【附原始碼】
1.2 Pygame實戰:據說這是史上最難掃雷游戲,沒有之一!你們感受下......
1.3 Pygame實戰:物件突然想玩坦克大戰,我用Python三十分鐘實作!看!他開心的像個孩子!
👑文章匯總——
1.1Python—2021 |已有文章匯總 | 持續更新,直接看這篇就夠了~
?
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/333516.html
標籤:其他
