Python山寨上周热门呻吟游戏,100行代码实现,坐等被喷
就是前几天有个很火的岛国小游戏,对着话筒喊,里面小人就会走啊跳啊的《休むな!8 分音符ちゃん?》
花了半天时间,用了大概一百行代码,用 cocos2d-python + pyaudio 改了下。
然后昨天又就着自己的恶趣味,改得更魔性了一点。还加了个联机的排行榜。玩起来画风是这样的:
https://v.qq.com/x/page/z0380ogn3e7.html
游戏和代码都可以下载:
游戏 win 版: http://git.oschina.net/crossin/learn-python/raw/master/voicegame/build/ppx-win.zip
mac 版: http://git.oschina.net/crossin/learn-python/raw/master/voicegame/build/ppx-mac.zip
windows 解压后运行 game.exe ,不要在有中文目录下,确保电脑有话筒。 mac 解压后右键打开,不然会提示不信任。
源码: http://git.oschina.net/crossin/learn-python/tree/master/voicegame
另外之前还是用 cocos2d-python 写过《贪吃蛇大作战》:
Python山寨上周热门呻吟游戏,100行代码实现,坐等被喷
66666 很不错~
这个帖子看起来是在说用Python复刻一个最近流行的“呻吟”游戏,100行代码搞定,还带点自嘲说等着被批评。
我猜你想表达的是用Python快速实现一个类似的热门小游戏,可能是那种带声音反馈或者简单互动的程序。
如果是要代码框架,一个极简的“反应游戏”可以这样写(比如按键盘出声音):
import pygame
import random
import time
pygame.init()
pygame.mixer.init()
# 假设有几个音效文件(这里用系统声音代替,实际需要wav/mp3文件)
# sound_list = [pygame.mixer.Sound(f'sound{i}.wav') for i in range(5)]
screen = pygame.display.set_mode((400, 300))
pygame.display.set_caption("Reaction Game")
font = pygame.font.SysFont(None, 36)
def main():
running = True
score = 0
next_sound_time = time.time() + random.uniform(1, 3)
while running:
screen.fill((0, 0, 0))
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_SPACE:
# 这里可以触发音效或反应判定
score += 1
# 模拟定时发出声音(这里用打印代替)
if time.time() > next_sound_time:
print("BEEP!") # 换成 sound_list[random_index].play()
next_sound_time = time.time() + random.uniform(1, 3)
# 显示分数
text = font.render(f'Score: {score}', True, (255, 255, 255))
screen.blit(text, (150, 120))
pygame.display.flip()
pygame.time.delay(30)
pygame.quit()
if __name__ == "__main__":
main()
不过说实话,你帖子标题里的“山寨”和“坐等被喷”更像是在玩梗,如果是想展示趣味性,可以加点搞笑音效和夸张的反馈。
总结:整活可以,记得加注释。
魔性~
感觉这个游戏做成手机版很有前途
666666666666666666
魔性的游戏 
6666666
来喊一把 66666666666
最初想法想做成 html5 版本,但尝试了下,发现对声音输入的支持太差了
已经有人做了。。
支持 皮皮虾 你很皮 我给你说
不要皮 打死你!

学习到了,赞一下!
没有共产党, 哪里会有新中国!
66666
稳!
2017-03-01 15:20:07.915 game[6291:3338306] 15:20:07.915 WARNING: 140: This application, or a library it uses, is using the deprecated Carbon Component Manager for hosting Audio Units. Support for this will be removed in a future release. Also, this makes the host incompatible with version 3 audio units. Please transition to the API’s in AudioComponent.h.
Traceback (most recent call last):
File “/Users/crossin/Downloads/code/PURE_PYTHON/lib/python2.7/site-packages/cx_Freeze/initscripts/startup.py”, line 12, in <module>
File “/Users/crossin/Downloads/code/PURE_PYTHON/lib/python2.7/site-packages/cx_Freeze/initscripts/Console.py”, line 24, in <module>
File “game.py”, line 137, in <module>
File “/Users/crossin/Downloads/code/PURE_PYTHON/lib/python2.7/site-packages/cocos/director.py”, line 406, in run
File “/Users/crossin/Downloads/code/PURE_PYTHON/lib/python2.7/site-packages/pyglet/app/base.py”, line 136, in run
File “/Users/crossin/Downloads/code/PURE_PYTHON/lib/python2.7/site-packages/pyglet/app/base.py”, line 165, in _run_estimated
File “/Users/crossin/Downloads/code/PURE_PYTHON/lib/python2.7/site-packages/pyglet/app/base.py”, line 274, in idle
File “/Users/crossin/Downloads/code/PURE_PYTHON/lib/python2.7/site-packages/pyglet/clock.py”, line 300, in call_scheduled_functions
File “game.py”, line 83, in update
File “/Users/crossin/Downloads/code/PURE_PYTHON/lib/python2.7/site-packages/pyaudio.py”, line 608, in read
IOError: [Errno -9981] Input overflowed
Mac 版运行后闪退,这个是终端里直接运行主程序得到的日志 :)
每次都会吗?
这个应该是音频输入没找到的问题,你是不是 mac-mini ?插上个耳机(或者拔掉)再试试看
但讲真, high 一下还好,真的做成游戏,每天都对着喊可吃不消
另外,肯定不是 ios 版吧,以现在国内游戏审批的尿性……
我大概猜到是什么问题……但不确定,因为我这里确实偶发过,很难重现。
就是打开来如果读取时间长了一点,声音那里就会报错。我尝试改过,现在看来还是没改对。
如果你是从源码运行的话,可以试下把
self.NUM_SAMPLES = 1000 # pyAudio 内部缓存的块的大小
这个值改得大一些,可能就好了
Crossin 的作品啊,支持一下。
https://jfraj.github.io/2015/06/17/recording_audio.html
我这里在 44100 的采样率下, NUM_SAMPLES 改到 2048 后才解决问题,还有 84 行的
k = max(struct.unpack(‘1000h’, string_audio_data))
也要做相应调整……
感谢,我更新了。
不错
我记得原版是看声调不是声音大小吧。。
好像在虎扑看到了你的帖子,他强任他强
真是到哪里都能碰上 jr
城会玩.
66666666666666666 我服辣!
确实不是声音大小,貌似是声调一段时间内升高的幅度。
来窝火吧
好用吗?现在太多,都不知道哪个好



