宇宙飞船打外星人(python-2D游戏开发)
目录
- 1.开发准备
- 2.开发流程
- 2.1创建第一个外星人
- 2.2进行一些响应和设置操作
- 2.3在屏幕上绘制飞船
- 2.4设置移动、调整速度和活动范围等功能
- 2.5射击设置部分
- 效果展示
- 代码
1.开发准备
1.环境
选择一个python环境,本设备选用的为一个tensorflow_gpu2.4.0的py36环境。
2.开发流程
2.1创建第一个外星人
1、首先我新建一个Aliens类,创建第一个外星人,我选择了一个tensorflow2的py36的一个编译环境;当然我需要创建一个脚本存放这个类:alien.py;在该脚本中,我导入pygame包的时候报错了,证明我这个包在该环境中没有下载,于是我去博客中找到该包下载的办法【1】:
- 首先下载安装pygame所需要的wheel包,我们可以去该网址找到我们需要的安装包:https://www.lfd.uci.edu/~gohlke/pythonlibs/#pygame,找到对应的python环境,下载之后我根据【1】安装遇到一些问题:
于是,我尝试新的安装方法:首先,我打开该环境anaconda prompt(管理员),并激活该环境,我的虚拟环境名称为tensorflow2,所有我输入:activate tensorflow2;之后,直接pip安装会出错:pip install pygame-1.9.6-cp36-cp36m-win_amd64.whl,原来我需要先将该.whl文件拷贝到该虚拟环境指定文件夹中安装,我可以直接找到该虚拟环境的目录,拷贝之后,我再一次输入上面的安装指令,最后成功安装:
然后再去visual studio2017,在对应脚本中输入:import pygame,报错消失,说明安装成功。之后,我再去定义这个Aliens类:
## 创建Aliens类
class Aliens(Sprite):"""表示单个外星人的类"""def __init__(self,ai_settings,screen):"""初始化外星人并设置其起始位置"""super(Aliens,self).__init__()self.screen=screenself.ai_settings=ai_settings#加载外星人图像,并设置成rect属性self.image=pygame.image.load("img/alien.png")self.rect=self.image.get_rect()#每个外星人最初都在屏幕左上角附近self.rect.x=self.rect.widthself.rect.y=self.rect.height#存储外星人的准确位置self.x=float(self.rect.x)def blitme(self):"""在指定位置绘制外星人"""self.screen.blit(self,image,self.rect)
之后,我结合电脑自带的画图软件画了个简易的外星人,并经过ps软件调整图像大小,另存为png格式,并在项目根目录下新建文件夹命名为img,将该外星人图像放在img文件夹下:
2、之后再创建Aliens实例,需要新建一个脚本:alien_invasion.py;在该脚本中,我们创建这个实例:
from ship import Ship
from alien import Aliens
import game_functions as gfdef run_game():--snip--#创建一个外星人alien=Aliens(ai_settings,screen)#开始游戏主循环while True:gf.check_keydown_eventsship.update()gf.update_screen(ai_settings,screen,ship,alien,bullets)run_game()
其中,from ship import Ship ,报错,同理,在tensorflow2虚拟环境下我们直接pip安装一下这个包:pip install ship;安装成功,问题解决;
--snip--
# 先省略部分代码的作用
tips:快捷键ctrl+shift+A可以快速在该项目中创建.py脚本:
3、初始化一些游戏的功能,而让外星人出现在屏幕上只是一个功能,我们需要初始化多个这种函数,其中让外星人出现在屏幕上我们会用到update_screen(),并调用blitme(),创建一个game_functions.py,下面大家就好领悟了:
import sys
from time import sleep
import pygame#from alien import Aliens
#from bullet import Bullet"""
def check_keydown_events(event,ai_settings,screen,ship,bullets):elif event.key == pygame.k_q:sys.exit()
"""
def update_screen(alien,ai_settings,screen,ship,bullets):--snip--#在飞船和外星人后面重绘所有子弹for bullet in bullets:bullet.draw_bullet()ship.blitme()alien.blitme()#让最近绘制的屏幕可见pygame.display.flip()
之后,我运行代码发现并不会出现屏幕和外星人:
后来才发现要创建pygame窗口以及响应用户输入界面,于是我进行如下开展。
2.2进行一些响应和设置操作
1、创建pygame窗口以及用于输入的响应用户,并设置一下背景颜色,创建了一个设置类:settings.py;并实例化这个类,然后在alien_invasion.py添加访问设置,最后修改如下:
settings.py:
class Settings():"""存储《外星人入侵》的所设置的类"""def __init__(self):"""初始化游戏的设置"""#屏幕设置self.screen_width=1200self.screen_hight=800self.bg_color=(230,230,230)
alien_invasion.py:
from pygame.sprite import Sprite
from ship import Ship
from alien import Aliens
from settings import Settingsdef run_game():#--------------------------##初始化游戏并创建一个屏幕对象#-------------------------#pygame.init()#screen=pygame .display.set_mode(1200,800)screen=pygame .display.set_mode((ai_settings.screen_width,ai_settings.screen_height))pygame.display.set_caption("Alien Invasion")#--------------------------##设置背景颜色#-------------------------#bg_color=(230,230,230)#开始游戏的主循环while True:#监视键盘和鼠标事件for event in pygame.event.get():if event.type==pygame.QUIT:sys.exit()#每次循环时都重新绘制屏幕screen.fill(bg_color)#让最近绘制的屏幕可见pygame.display.flip()#创建一个外星人alien=Aliens(ai_settings,screen)#开始游戏主循环#while True:#gf.check_keydown_events#ship.update()#gf.update_screen(ai_settings,screen,ship,alien,bullets)run_game()
2、添加飞船图片,同理,我又在画图工具画了一个飞船简图,并调整大小,放置在img/文件夹下,命名为ship.png:
2.3在屏幕上绘制飞船
1、首先创建Ship类,新建ship.py脚本:
import pygame
class Ship():def __init__(self,screen):"""初始化飞船并设置其初始位置"""self.screen=screen#加载飞船图像并获取其外接矩形self.image=ppygame.image.load("img/ship.png")self.rect=self.image.get_rect()self.screen_rect=screen.get_rect()#将每艘飞船放置在屏幕底部中央self.rect.centerx=self.screen_rect.centerxself.rect.bottom=self.screen_rect.bottomdef blitme(self):"""在指定位置绘制飞船"""self.screen.blit(self.image,self.rect)
2、在屏幕上绘制飞船,我们更新一下alien_invasion.py,使其创建一艘飞船,并调用其方法blitme(),由于报错,我们现将创建外星人的代码注释掉,并加入新的代码:
import pygame
#import game_functions as gf
import sysfrom pygame.sprite import Sprite
from ship import Ship
from alien import Aliens
from settings import Settingsdef run_game():#--------------------------##初始化游戏并创建一个屏幕对象#-------------------------#pygame.init()ai_settings=Settings()#screen=pygame .display.set_mode(1200,800)screen=pygame .display.set_mode((ai_settings.screen_width,ai_settings.screen_height))pygame.display.set_caption("Alien Invasion")#--------------------------##设置背景颜色#-------------------------#bg_color=(230,230,230)#--------------------------##新建一艘飞船#-------------------------#ship=Ship(screen)#--------------------------##创建一个外星人#-------------------------##alien=Aliens(ai_settings,screen)#开始游戏的主循环while True:#监视键盘和鼠标事件for event in pygame.event.get():if event.type==pygame.QUIT:sys.exit()#每次循环时都重新绘制屏幕screen.fill(bg_color)#调用我们自己定义的函数blitme(),使其在指定位置绘制飞船ship.blitme()#让最近绘制的屏幕可见pygame.display.flip()#开始游戏主循环#while True:#gf.check_keydown_events#ship.update()#gf.update_screen(ai_settings,screen,ship,alien,bullets)run_game()
3、运行alien_invasion.py之后报错:
返回settings.py脚本发现height输错了,反正大家报错就根据错误提示去找线索并修改就好:
比如下面又是习惯性输入出错:
将ppygame修改为pygame,再运行,成功:
做到这一步已经成功一半,坚持就是胜利!
2.4设置移动、调整速度和活动范围等功能
1、我们在game_functions.py中check_event(ship)设置飞船的响应按键:点击右键向右移动,松开停止移动,飞船不移动时,moving_right置为False,玩家按下箭头,moving_right=True,松开moving_right=False,根据pygame.KEYDOWN可以检测玩家按下事件;pygame.KEYUP可以检测玩家松开按键事件。飞船每右键按一次,飞船将向右移动一个像素,将ship.rect.centerx值加一。
2、同理,左键标志也为moving_right=False,飞船每左键按一次,飞船将向左移动一个像素,将ship.rect.centerx值减一。
3、然后设置调整飞船速度,代码最后一起罗列。
2.5射击设置部分
前面我们已经创建好游戏屏幕,并能更新画面,我们还创建了一个飞船,并让其限制活动范围,而按键可以控制其移动方向,那么现在马上创建飞船的子弹设置吧。
1、添加子弹设置(包括子弹数量、颜色。速度、大小),再创建Bullet类
2、遇到的问题:参数顺序要一致,不然代码混乱,运行会报错
通过调整多次代码,最后运行成功,效果如下:
而且,移动方向我按左键它向右移,再去看看按键设置的代码,并调整飞船移动的速度;之后,对于子弹再做一些改进,删除消失的子弹、并限制子弹数量。
之后,返回2.1创建一个及多个外星人,运行alien_invasion.py:效果如下:
效果展示
代码
参考:
https://blog.csdn.net/mao_hui_fei/article/details/100124405
宇宙飞船打外星人(python-2D游戏开发)相关推荐
- Unity 2D游戏开发教程之摄像头追踪功能
Unity 2D游戏开发教程之摄像头追踪功能 上一章,我们创建了一个简单的2D游戏.此游戏中的精灵有3个状态:idle.left和right.这看起来确实很酷!但是仅有的3个状态却限制了精灵的能力,以 ...
- Unity 2D游戏开发教程之游戏中精灵的跳跃状态
Unity 2D游戏开发教程之游戏中精灵的跳跃状态 精灵的跳跃状态 为了让游戏中的精灵有更大的活动范围,上一节为游戏场景添加了多个地面,于是精灵可以从高的地面移动到低的地面处,如图2-14所示.但是却 ...
- Unity 2D游戏开发教程之为游戏场景添加多个地面
Unity 2D游戏开发教程之为游戏场景添加多个地面 为游戏场景添加多个地面 显然,只有一个地面的游戏场景太小了,根本不够精灵四处活动的.那么,本节就来介绍一种简单的方法,可以为游戏场景添加多个地面. ...
- Unity 2D游戏开发教程之精灵的死亡和重生
Unity 2D游戏开发教程之精灵的死亡和重生 精灵的死亡和重生 目前为止,游戏项目里的精灵只有Idle和Walking这两种状态.也就是说,无论精灵在游戏里做什么,它都不会进入其它的状态,如死亡.于 ...
- Unity 2D游戏开发教程之2D游戏的运行效果
Unity 2D游戏开发教程之2D游戏的运行效果 2D游戏的运行效果 本章前前后后使用了很多节的篇幅,到底实现了怎样的一个游戏运行效果呢?或者说,游戏中的精灵会不会如我们所想的那样运行呢?关于这些疑 ...
- Unity 2D游戏开发教程之使用脚本实现游戏逻辑
Unity 2D游戏开发教程之使用脚本实现游戏逻辑 使用脚本实现游戏逻辑 通过上一节的操作,我们不仅创建了精灵的动画,还设置了动画的过渡条件,最终使得精灵得以按照我们的意愿,进入我们所指定的动画状态. ...
- Unity4.x 2D游戏开发基础教程第1章Unity及其组成的介绍
Unity4.x 2D游戏开发基础教程第1章Unity及其组成的介绍 本书主要讲解的是,如何使用Unity开发2D游戏.但在开始讲解之前,最好先熟悉一下Unity这个工具.本章会首先介绍Unity的下 ...
- Unity 2D游戏开发快速入门第1章创建一个简单的2D游戏
Unity 2D游戏开发快速入门第1章创建一个简单的2D游戏 即使是现在,很多初学游戏开发的同学,在谈到Unity的时候,依然会认为Unity只能用于制作3D游戏的.实际上,Unity在2013年发布 ...
- Unity 2D游戏开发快速入门(内部资料)
Unity 2D游戏开发快速入门(内部资料) 试读样张:http://pan.baidu.com/s/1hqh5oqw Unity 2D游戏开发快速入门4 前 言 Unity是一款综合的游戏开发工具 ...
- Unity 4.x 2D游戏开发基础教程大学霸第一更
Unity 4.x 2D游戏开发基础教程 大学霸 第1章 Unity及其组成的介绍 本书主要讲解的是,如何使用Unity开发2D游戏.但在开始讲解之前,最好先熟悉一下Unity这个工具.本章会首先介 ...
最新文章
- python进阶:闭包、map/reduce/filter函数、lambda函数、装饰器
- 浅谈域名发散与域名收敛
- npm install引起的项目崩溃(This is probably not a problem with npm,there is likely additional logging outp)
- 给一个执行在windows 7和NAT下的VMWARE虚拟机分配固定IP
- Python补充03 Python内置函数清单
- python 01列表异或_python运算符及优先级顺序
- 《Unity虚拟现实开发实战》——第1章,第1.1节虚拟现实对你来说意味着什么
- webpack4.x实战六,处理图片
- 什么是IEC球压测试?
- java httpclient 下载_java HttpClient 下载一张图片
- Java安全生态-Java加解密API详解-Java安全框架官方文档翻译:对称/非对称加密、数字签名、数字证书、安全通信、密钥库等
- Mujoco雅克比-逆运动-传感器
- AI智能双标题插件+内容伪原创插件集成
- 值得收藏的几千T超多学习资源合集分享
- Ubuntu 安装 tbb 步骤详解
- 详解 WebRTC 高音质低延时的背后—AGC 自动增益控制
- 个税APP优化解决方案
- 可执行 jar 和普通 jar 区别
- 使用键鼠网络共享用windows控制ubuntu,实现跨屏跨系统操作
- 用Matlab创建BP神经网络