【Python入门】Python做游戏——跳跃小鸟

article/2025/8/23 21:01:18

如何运行

  • 安装依赖
pip install keras
pip install pygame
pip install scikit-image
pip install h5py

作者使用的是theano训练的,训练好的模型文件要使用theano作为Keras的后端才能调用,在配置文件~/.keras/keras.json中(没有可创建)确认/修改backendtheano(如果没有安装tensorflow[Keras的另一可选后端]好像就不用管了),配置文件样式下文中卷积神经网络小节的补充里有。
要使用theano,我们还需要安装OpenBLAS。直接下载源码并解压,cd进目录,然后

sudo apt-get install gfortran
make FC=gfortran  
sudo make PREFIX=/usr/local install  
  • 下载源码并运行
git clone https://github.com/yanpanlau/Keras-FlappyBird.git
cd Keras-FlappyBird
python qlearn.py -m "Run"

我下载时目录中game/wrapped_flappy_bird.py文件的第144行,FPSCLOCK.tick(FPS)语句处缩进有点问题,删去现有缩进,打8个空格就好了,没问题就不用管了。

  • vmware虚拟机Ubuntu16.04+python3+只使用CPU+theano运行:

  • 如果想重新训练神经网络,删除**model.h5**文件然后运行命令qlearn.py -m "Train"

源码分析

  • 游戏输入及返回图像
import wrapped_flappy_bird as game
x_t1_colored, r_t, terminal = game_state.frame_step(a_t)

直接使用flappybird python版本的接口。
输入为a_t(1, 0)代表不跳,(0,1)代表跳)。
返回值为下一帧图像x_t1_colored和奖励reward+0.1表示存活,+1表示通过管道,-1表示死亡),奖励被控制在[-1,+1]来提高稳定性。terminal 是一个布尔值表示游戏是否结束。
奖励函数在game/wrapped_flappy_bird.py中的
def frame_step(self, input_actions)方法中修改。

为什么直接将游戏图像输入处理呢?我一开始没转过弯,其实图像中包含了全部的信息(声音信息在多数游戏里只是辅助,不影响游戏),而人在玩游戏时也是接受输入的图像信息,然后决策输出相应的操作指令。这里其实就是在模拟人的反馈过程,将这一过程描述为一个非线性函数,而该非线性函数我们将使用卷积神经网络来表达,大体上卷积实现了对图像特征的提取,神经网络实现了从特征到操作指令的转换。

  • 图像预处理

要素:1.  将图片转换为灰阶
2.  裁剪图片尺寸到80x80像素
3.  每次堆积4帧,一起馈入神经网络。相当于一次输入一张'四通道'的图像。  (为什么要将4帧堆在一起?这是一种方法,为了让模型能推断出小鸟的速度信息。)
x_t1 = skimage.color.rgb2gray(x_t1_colored)
x_t1 = skimage.transform.resize(x_t1,(80,80))
x_t1 = skimage.exposure.rescale_intensity(x_t1, out_range=(0, 255)) # 调整亮度
#
x_t1 = x_t1.reshape(1, 1, x_t1.shape[0], x_t1.shape[1])
s_t1 = np.append(x_t1, s_t[:, :3, :, :], axis=1)
# axis=1 意味着在第二维上添加

x_t1是一个(1x1x80x80) 的单帧,s_t1是4帧的叠加,形状为(1x4x80x80)。输入设计为 (1x4x80x80)而不是(4x80x80)是为了Keras考虑。

补充

rescale_intensity

  • 卷积神经网络
    现在,将预处理后的图像输入神经网络。
def buildmodel():print("开始建模")model = Sequential()model.add(Convolution2D(32, 8, 8, subsample=(4,4),init=lambda shape, name: normal(shape, scale=0.01, name=name), border_mode='same', dim_ordering='th', input_shape=(img_channels,img_rows,img_cols)))model.add(Activation('relu'))model.add(Convolution2D(64, 4, 4, subsample=(2,2),init=lambda shape, name: normal(shape, scale=0.01, name=name), border_mode='same', dim_ordering='th'))model.add(Ac

http://chatgpt.dhexx.cn/article/QINJ8jpG.shtml

相关文章

教你用Python做小游戏

第一步:你好,兔子 运行IDLE,打开一个新的文本编辑窗口。输入以下的代码: # 1 - Import library import pygame from pygame.locals import *# 2 - Initialize the game pygame.init() width, height 640, 480 screenpygame.dis…

怎么用python做游戏_如何用python做游戏

你有没有想过电脑游戏是怎样制作出来的?其实它没有你想象的那样复杂! PyGame是一个Python的库,能够让你更容易的写出一个游戏。它提供的功能包括图片处理和声音重放的功能,并且它们能很容易的整合进你的游戏里。去官网点击这里下载…

为了上班摸鱼我用Python制作十五个小游戏,普通到地狱级难度,看看你能挑战到哪【内附源码】

今天给大家带来十五个Python小游戏,找回童年的同时学习编程还可以摸鱼,源码附上结尾领取。 一、接金币(1分) 普通难度:❤ 玩法介绍: 吃金币,控制左右键,有手就行。 ​ 源码分享…

用python做一个简单的游戏,用python写一个小游戏

大家好,本文将围绕如何用python做一个简单的小游戏展开说明,python编写的入门简单小游戏是一个很多人都想弄明白的事情,想搞清楚用python做一个简单的游戏需要先了解以下几个事情。 1、Python游戏开发,Python实现贪吃蛇小游戏与吃…

用 Python 做游戏有多简单

大家好,今天我用两篇文章来介绍一下,如果使用 Python 做游戏。 这个游戏是使用 PyGame 做的,贴图素材是从 itch.io[1] 找的。我之前也没有用过 PyGame,这次属于是现学现用,参考的教程是 PyGame: A Primer on Game Prog…

Python做游戏其实很简单,只是你觉得难...

很多小伙伴都喜欢小游戏源码,想学一手Python做小游戏,问我做游戏难不难,要怎么做,接下来我就介绍一下,如何用Python做游戏。 游戏演示 2048小游戏 表白弹窗 贪吃蛇 五子棋 俄罗斯方块 超多小游戏,让你一个…

Python不能做游戏?一小时做出一个游戏!

嗨喽~小伙伴们,我又来了, 写在前面的话: 【 一直都听他们说,python做不出好的游戏,个人是不赞同的,我只能说,python可以用来写游戏,但不适合。 举个最简单的例子&…

【含源码】用python做游戏有多简单好玩

有很多同学问我还有其他什么小游戏吗,游戏是怎么做的,难不难。我就用两篇文章来介绍一下,如何使用Python做游戏。 兔子与灌 俄罗斯方块 休闲五子棋 走迷宫 推箱子 消消乐 超多小游戏玩转不停↓ 更多小游戏可以评论区讨论哦,喜欢…

python做小游戏之一小迷宫游戏

趣味python一迷宫小游戏 读取外部迷宫地图 既然是编写小游戏,那么自然少不了pygame模块,编译环境使用的是pycharm。 迷宫小游戏设计思想是,我们自己绘制迷宫地图文档,然后程序根据我们设计的地图把迷宫绘制到pygame游戏界面当中来…

一日一技:用Python做游戏有多简单 (2)

现在用Python来制作游戏越来越方便,虽然某些方面有所限制。但是利用Pygame工具包基本能制作所有的2D游戏在制作的同时对游戏的理解也会更加深刻,因为本质上都是对图片的定位和图片碰撞的判断,从而以此为原理衍生出各种各样的游戏类型。 接下…

一日一技:用Python做游戏有多简单

自从表白代码发了以后,有很多同学问我除了这种表白的,还有其他什么小游戏吗,游戏是怎么做的,难不难。我就用两篇文章来介绍一下,如果使用Python做游戏。 兔子与灌 俄罗斯方块 休闲五子棋 走迷宫 推箱子 消消乐 超多小…

利用python制作自己的小游戏,超简教程

懒得客套,直接步入主题 首先,利用python来做游戏需要用到python中的pygame模块,这个我们在终端cmd中安装 输入:pip install pygame 安装好后我们进入pycharm查询我们有的模块(打开路径:文件-设置&#xf…

如何用python做游戏(简单易上手版)【送 源码】

嗨害大家好鸭,我是小熊猫🖤 很多小伙伴后台私信问我说, “python可以做游戏吗 ?” “要怎么做呢?” 接下来我就介绍一下, 如何用Python做游戏 有什么python相关报错解答自己不会的、或者源码资料/模块…

python小游戏-移动木板

文章目录 一、游戏简介二、编写步骤1.引入库2.初始化3.相关自定义函数4.相关自定义函数 一、游戏简介 本游戏是通过python编写的小游戏,给初学者熟悉python编程语言抛砖引玉,希望有所帮助。 成型的效果图如下: 二、编写步骤 1.引入库 代码…

UDP over Socks5 实现全局透明代理

Socks5代理协议很强大,不光可以实现HTTP/HTTPS代理的TCP隧道代理功能,类似connect,还可以实现HTTP代理不能做到的UDP代理功能。 要知道UDP代理的重要过程,以方便我们排查错误,我们还需要了解Socks5协议对UDP代理方式的…

阿里P7测开岗大手子手把手教你【软件测试秘籍】

本人阿里CTO线测试开发岗,入职阿里系已有两年,从事软件测试岗位五年有余。双非一本计算机系出身,大佬说不上,今天跟学弟学妹分享一下我这几年的学习软件测试心得。 一、 熟练使用SQL 常用的 sql 语句一定会写。比如说增删改查之类…

软件测试人员必备的60个测试工具清单,建议收藏一波~

据统计,中国软件外包市场的潜力和机会已远远超过软件王国印度,不过由于软件人才的严重不足致使我国软件发展遭遇“瓶颈”。国家为了大力培养软件人才,不断采取积极有效的措施。我国对软件测试人才的需求数量还将持续增加,因此软件…

软件测试精华总结,入门到精通全流程(必看,知识点很全)

软件测试基础 软件测试的概念 通过一系列手段去证明软件是符合用户需求的,满足质量要求的。预期结果和实际结果的一个对比。 软件测试分类 按方法分:黑盒测试、白盒测试、灰盒测试 黑盒测试:把软件比作一个“黑匣子”,不考虑具体是内部是如何实现的,只考虑外部功能的运行…

400 页共计 800 道软件测试面试真题汇总,2022年吐血整理

800 道软件测试面试真题,高清打印版打包带走,横扫软件测试面试高频问题,涵盖测试理论、Linux、MySQL、Web 测试、接口测试、App 测试、Python、Selenium、性能测试、LordRunner、计算机网络、数据结构与算法、逻辑思维、人力资源等模块面试题…

软件测试人员必备的60个测试工具清单,果断收藏了!

前言 据统计,中国软件外包市场的潜力和机会已远远超过软件王国印度,不过由于软件人才的严重不足致使我国软件发展遭遇“瓶颈”。国家为了大力培养软件人才,不断采取积极有效的措施。我国对软件测试人才的需求数量还将持续增加,因…