python大游戏_Python开发【项目】:大型模拟战争游戏(外星人入侵)
外星人入侵
游戏概述:
现在准备用python开始搞一个大型游戏,模拟未来战争,地球人狙击外星人大战(其实就是小蜜蜂游戏2333),玩家控制一个飞船,用子弹歼灭屏幕上空的外星飞船;项目用到了Pygame模块,下面是模块的安装
Windows系统上Pygame安装:
访问https://bitbucket.org/pygame/pygame/downloads/地址,查找与Python版本匹配的Windows安装程序,cp35表示支持python3.5,本次使用的是python3.5版本
下载扩展名为.whl的文件,复制到项目文件夹中,打开CMD窗口,执行pip命令进行安装(主要pip跟python的版本绑定)
切换到文件目录,执行命令
python -m pip install --user pygame-1.9.2-cp35-cp35m-win32.whl
进入python,执行import pygame 无报错则表示安装成功
宇宙飞船
实现功能,屏幕下方显示一艘宇宙飞船,可以左右移动,按空格键可以发射子弹
1、全局配置settings.py:
全局配置、初始各种原始数据,没啥好说的,有什么需要初始设置的东西放到这里就好了
class Settings():
'''存储外星人入侵中所有的设置'''
def __init__(self):
'''初始化设置'''
#设置各种初始数据
classSettings():'''存储外星人入侵中所有的设置'''
def __init__(self):'''初始化设置'''self.screen_width= 900self.screen_heigt= 600self.bg_color= (230,230,230) #设置背景色 灰色
self.ship_speed_factor= 1.9 #飞船移动速度
self.ship_image_path = 'images/ship.png' #飞船图片路径
self.bullet_speed_factor= 0.5 #子弹移动速度
self.bullet_width = 3self.bullet_height= 15self.bullet_color= 60,60,60self.bullets_allowed= 4 #允许屏幕中出现子弹的数量
完整settings.py代码
2、程序主体程序alien_invasion.py:
程序运行的主体架构都在此文件中,while 循环之前是各种实例化,while循环之后调用各种函数进行处理
import pygame
from settings import Settings
from ship import Ship
from bullet import Bullet
from pygame.sprite import Group
import game_functions as gf
def run_game():
pygame.init() # 初始化背景设置
ai_settings = Settings() # 全局设置
screen = pygame.display.set_mode( # 创建screen显示窗口
(ai_settings.screen_width,ai_settings.screen_heigt)
)
pygame.display.set_caption('Alien Invasion') # 标题
# 创建飞船
ship = Ship(ai_settings,screen)
# 创建子弹编组
bullets = Group()
# 开始游戏主循环
while True:
# 监视键盘和鼠标事件
gf.check_events(ai_settings,screen,ship,bullets)
# 移动飞船
gf.update_ship(ship)
# 更新子弹位置
gf.update_bullets(bullets)
# 更新屏幕
gf.update_screen(ai_settings,screen,ship,bullets)
run_game()
importpygamefrom settings importSettingsfrom ship importShipfrom bullet importBulletfrom pygame.sprite importGroupimportgame_functions as gfdefrun_game():
pygame.init()#初始化背景设置
ai_settings = Settings() #全局设置
screen= pygame.display.set_mode( #创建screen显示窗口
(ai_settings.screen_width,ai_settings.screen_heigt)
)
pygame.display.set_caption('Alien Invasion') #标题
#创建飞船
ship =Ship(ai_settings,screen)#创建子弹编组
bullets =Group()#开始游戏主循环
whileTrue:#监视键盘和鼠标事件
gf.check_events(ai_settings,screen,ship,bullets)#移动飞船
gf.update_ship(ship)#更新子弹位置
gf.update_bullets(bullets)#更新屏幕
gf.update_screen(ai_settings,screen,ship,bullets)
run_game()
完整alien_invasion.py代码
3、宇宙飞船模块ship.py:
创建飞船Ship类,初始化飞船图片和位置信息,设置绘制飞船的函数blitme,以及飞船移动update的函数
import pygame
class Ship():
'''飞船所有信息'''
def __init__(self,ai_settings,screen):
# 加载飞船图片、获取外接矩行,设置飞船在screen的位置
---snip---
# 移动标志
self.moving_right = False
self.moving_left = False
def blitme(self):
'''在指定位置绘制飞船'''
---snip---
def update(self):
# 向右移动飞船、向左移动飞船
---snip---
importpygameclassShip():'''飞船所有信息'''
def __init__(self,ai_settings,screen):
self.screen=screen
self.ai_settings=ai_settings#加载飞船图片、获取外接矩形
self.image = pygame.image.load(self.ai_settings.ship_image_path) #加载图片
self.rect = self.image.get_rect() #获取图片外接矩形
self.screen_rect = screen.get_rect() #获取屏幕外接矩形
#将每搜新飞船放到并木底部中心
self.rect.centerx =self.screen_rect.centerx
self.rect.bottom=self.screen_rect.bottom#设置成浮点类型
self.center = float(self.rect.centerx) #self.rect.centerx设置不了浮点数 只能另设置一个变量进行运算
#移动标志
self.moving_right =False
self.moving_left=Falsedefblitme(self):'''在指定位置绘制飞船'''self.screen.blit(self.image,self.rect)defupdate(self):#向右移动飞船
if self.moving_right and self.rect.right
self.center+=self.ai_settings.ship_speed_factor#向左移动飞船
if self.moving_left and self.rect.left >self.screen_rect.left:
self.center-=self.ai_settings.ship_speed_factor
self.rect.centerx= self.center
完整ship.py代码
4、创建子弹模块bullet.py:
创建子弹Bullet类,跟Ship类似,初始化子弹的各种信息,设置子弹相对飞船的初始位置,设置绘制子弹的函数draw_bullet,子弹位置移动函数update(函数名不能改)
import pygame
from pygame.sprite import Sprite
import time
class Bullet(Sprite):
'''飞船子弹进行管理'''
def __init__(self,ai_settings,screen,ship):
# 创建子弹矩形初始位置(0,0,3,15)左上角,设置子弹的初始位置(飞船顶部)
---ship---
def update(self):
# 子弹位置更新
---ship---
def draw_bullet(self):
# 绘制子弹图片
---ship---
#!/usr/bin/env python#-*- coding:utf-8 -*-#-Author-Lian
importpygamefrom pygame.sprite importSpriteimporttimeclassBullet(Sprite):'''飞船子弹进行管理'''
def __init__(self,ai_settings,screen,ship):
super(Bullet,self).__init__()
self.screen=screen#创建子弹矩形初始位置(0,0,3,15)分别对应lef,top,宽,高
self.rect =pygame.Rect(0,0,
ai_settings.bullet_width, ai_settings.bullet_height)
self.rect.centerx= ship.rect.centerx #设置中心点x轴坐标跟飞船一致
self.rect.top = ship.rect.top #设置y轴坐标顶部跟飞船一致
#设置成小数进行计算
self.top =float(self.rect.top)
self.color=ai_settings.bullet_color
self.speed_factor=ai_settings.bullet_speed_factordefupdate(self):
self.top-=self.speed_factor
self.rect.top=self.topprint(self.rect.top)defdraw_bullet(self):
pygame.draw.rect(self.screen,self.color,self.rect)
完整bullet.py代码
5、储存运算的模块game_functions.py:
项目的主体运算模块:check_events监视键盘和鼠标事件,update_screen更新屏幕不断地刷新
import sys
import pygame
from bullet import Bullet
def check_events(ai_settings,screen,ship,bullets):
# 监视键盘和鼠标事件
for event in pygame.event.get():
if event.type == pygame.QUIT: # 关闭窗口退出
sys.exit()
elif event.type == pygame.KEYDOWN:
check_keydown_events(event,ai_settings,screen,ship,bullets)
elif event.type == pygame.KEYUP:
check_keyup_events(event,ship)
def update_screen(ai_settings,screen,ship,bullets):
'''更新屏幕上的图片,并切换到新屏幕'''
screen.fill(ai_settings.bg_color) # 设置背景颜色
ship.blitme() # 绘制飞船
# 循环子弹组里面的元素,进行绘制 为空时不执行
for bullet in bullets.sprites():
bullet.draw_bullet() # 绘制子弹
# 显示最新屏幕,擦拭旧屏幕
pygame.display.flip()
def check_keydown_events(event,ai_settings,screen,ship,bullets):
'''飞船左右移动、发射子弹'''
---snip - --
def check_keyup_events(event,ship):
'''飞船左右移动'''
---snip - --
def update_bullets(bullets):
'''更新子弹位置,删除子弹'''
---snip---
def update_ship(ship):
'''更新飞船位置'''
---snip---
def fire_bullet(ai_settings,screen,ship,bullets):
# 创建一个子弹对象 加入到子弹组
if len(bullets) < ai_settings.bullets_allowed: # 子弹少于允许值时再生成
new_bullet = Bullet(ai_settings, screen, ship)
bullets.add(new_bullet)
importsysimportpygamefrom bullet importBulletdefcheck_events(ai_settings,screen,ship,bullets):#监视键盘和鼠标事件
for event inpygame.event.get():if event.type == pygame.QUIT: #关闭窗口退出
sys.exit()elif event.type ==pygame.KEYDOWN:
check_keydown_events(event,ai_settings,screen,ship,bullets)elif event.type ==pygame.KEYUP:
check_keyup_events(event,ship)defupdate_screen(ai_settings,screen,ship,bullets):'''更新屏幕上的图片,并切换到新屏幕'''screen.fill(ai_settings.bg_color)#设置背景颜色
ship.blitme() #绘制飞船
#循环子弹组里面的元素,进行绘制 为空时不执行
for bullet inbullets.sprites():
bullet.draw_bullet()#绘制子弹
#显示最新屏幕,擦拭旧屏幕
pygame.display.flip()#print('1')
defcheck_keydown_events(event,ai_settings,screen,ship,bullets):if event.key ==pygame.K_RIGHT:
ship.moving_right=Trueelif event.key ==pygame.K_LEFT:
ship.moving_left=Trueelif event.key ==pygame.K_SPACE:
fire_bullet(ai_settings,screen,ship,bullets)defcheck_keyup_events(event,ship):if event.key ==pygame.K_RIGHT:
ship.moving_right=Falseelif event.key ==pygame.K_LEFT:
ship.moving_left=Falsedefupdate_bullets(bullets):'''更新子弹位置,删除子弹'''bullets.update()#子弹组每个成员执行self.update()操作
for bullet inbullets.sprites():if bullet.rect.bottom <= 0: #子弹出界 删除
bullets.remove(bullet)defupdate_ship(ship):
ship.update()deffire_bullet(ai_settings,screen,ship,bullets):#创建一个子弹对象 加入到子弹组
if len(bullets) < ai_settings.bullets_allowed: #子弹少于允许值时再生成
new_bullet =Bullet(ai_settings, screen, ship)
bullets.add(new_bullet)
完整代码game_functions.py代码
效果图:
其他功能---待续....
python大游戏_Python开发【项目】:大型模拟战争游戏(外星人入侵)相关推荐
- python做的大型游戏_Python有做大型游戏的潜力吗?
由于最近我要考试忙不过来没修改回答,谢谢评论区大们的指正,我认识到的pygame库确实可以做游戏,但是pygame限制很多,特别是做大型游戏方面,3D还没有相关的优化方法等(3D游戏,pygame表示 ...
- python之穿越火线游戏代码_python开发的小球完全弹性碰撞游戏代码
#python tkinter #python version 3.3.2 from tkinter import * ''' 判断 两个小球 { 圆心:A(x1,y1) 半径:r X轴速度:Vax ...
- python环境准备_python开发环境准备
python 以版本众多,包之间依赖复杂而著称,所以一个趁手的开发环境还是很有必要的. 我的建议是用Anaconda做环境隔离.包管理,PyCharm做项目开发,jupyter做笔记,ipython和 ...
- python石头剪刀布循环_python基础教程之实现石头剪刀布游戏示例
下边是标准.你与你的敌人,在同一时间作出特殊的手式,务必是下边一种手式:石块,剪刀,布.胜者从 下边的标准中造成,这一标准自身是个谬论. (a) 布包石块. (b)石头砸剪刀, (c)剪刀剪碎布.在你 ...
- python编的俄罗斯方块游戏_Python使用pygame模块编写俄罗斯方块游戏的代码实例
文章先介绍了关于俄罗斯方块游戏的几个术语. 边框--由10*20个空格组成,方块就落在这里面. 盒子--组成方块的其中小方块,是组成方块的基本单元. 方块--从边框顶掉下的东西,游戏者可以翻转和改变位 ...
- 学习游戏服务器开发必看,C++游戏服务器开发常用工具介绍
C++游戏服务器开发常用工具介绍 在软件开发过程中需要使用的工具类型实属众多,从需求建模到软件测试,从代码编译到工程管理,这些工具都对项目有着不可替代的作用.庄子有云,"吾生也有涯,而知也无 ...
- java游戏_java开发的七个金典游戏你小时候肯定玩过
相信很多刚接触编程的同学,对于Java开发能做些什么.做过哪些游戏, 并不是特别清楚.那么今天小编就为大家分享下, 万能的Java开发过的那些经典游戏吧! 手机上的Java即J2ME(Java 2 M ...
- java 拼图游戏_Java小项目之:拼图游戏!
Java小项目之:拼图游戏! 今天教大家用java做出一个拼图游戏,很适合java初学者练手. 所用素材: 部分代码: package picture_mosical; import java.awt ...
- 全面战争模拟器 for Mac(模拟战争游戏)
全面战争模拟器 for Mac是一款非常好玩的策略.模拟类型的游戏,你可以在全面战争模拟器特别版中经历各个时代的战争,多个不同的场景供你选择,这里提供Totally Accurate Battle S ...
- 模拟经营动物园java,动物园游戏下载|动物园下载 (经典模拟经营游戏)_单机游戏下载...
动物园是一款十分经典的模拟经营类游戏,游戏画面精美可玩性很高,玩家们将经营自己的动物园,吸引更多的游客,赚取更多的资金来让自己成为动物园大亨. 动物园是一款由Excalibur制作,Merge Gam ...
最新文章
- 阿里深度序列匹配模型SDM:如何刻画大型推荐系统的用户行为?
- vuejs及相关工具介绍
- 【BZOJ1146】【CTSC2008】网络管理 [整体二分]
- Python 定时调度
- docker 覆盖 entrypoint_最佳实践,Dockerfile中ENTRYPOINT与CMD指令的区别与建议
- java中split以“.“ 、“\“、“|”分隔
- 段落排版--行间距, 行高(line-height)
- Win10系统如何查看声卡ID
- unit 12 文档练习
- 由_exit()引起的对于缓冲区的理解
- 实对称矩阵的特征值求法_机器学习和线性代数 - 特征值和特征向量
- SPI通信协议_02
- Spyder5 显示器校准 色彩校准
- 中国最受欢迎50大技术博客评选结果详见
- [Linux命令] Cat是一只可爱的猫
- Web 图集应用,属于非游戏类的图集/雪碧图对象/JS雪碧图/前端图集/JS图集
- 研华运动控制卡接线图_ADVANTECH研华PCI-1245S运动控制卡4轴DSP架构脉冲型 步进/伺服电机SCARA控制通用PCI卡...
- 马云说聪明的人都离开了阿里,剩下的成了富翁
- 【物联网那些事儿】18 大物联网操作系统,Raspbian Pi、Ubuntu Core、Windows 10 IoT、Micropython、OpenWrt ....你用过哪几个?
- Car-eye JT/T1078 视频服务器开发过程中的音频处理
热门文章
- android mjpg格式,Camera常用格式MJPEG和jpeg-turbo库
- 华为机试HJ102:字符统计
- MathorCup 高校数学建模挑战赛第一届——大数据竞赛论文格式及提交规范
- .ul>li 和 .ul li的区别
- 定了!自考还没有报名的每人补贴8000元!政策扶持,名额有限,速看!!!!...
- SpringBoot整合RedisTemplate实现缓存信息监控
- 1150 Travelling Salesman Problem (25 分)(分析题目,细节处理)
- 使用openjtag和openocd操作IXP425的flash
- 老男孩教育 | 5分钟带你搞懂日志采集利器Filebeat!
- Nothing Phone 1智能手机;索尼X系列三款便携式蓝牙音箱;三星第二代SmartSSD计算存储驱动器 | 科技新品...