Python 项目实践一(外星人入侵小游戏)第二篇
时间:2022-04-23
本文章向大家介绍Python 项目实践一(外星人入侵小游戏)第二篇,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
接着上次的继续学习。
一 创建一个设置类
每次给游戏添加新功能时,通常也将引入一些新设置。下面来编写一个名为settings的模块,其中包含一个名为Settings的类,用于将所有设置存储在一个地方,以免在代码中到处添加设置。这样,我们就能传递一个设置对象,而不是众多不同的设置。另外,这让函数调用更简单,且在项目增大时修改游戏的外观更容易:要修改游戏,只需修改settings.py中的一些值,而无需查找散布在文件中的不同设置 下面是最初的Settings类:
class Settings():
'''存储《外星人入侵》的所有设置的类'''
def __init__(self):
'''初始化游戏的设置'''
self.screen_width=1200
self.screen_height=800
self.bg_color = (230,230,230)
为创建Settings实例并使用它来访问设置,将alien_invasion.py修改成下面这样:
import sys
from settings import Settings
from ship import Ship
import pygame
def run_game():
# 初始化游戏并建立一个屏幕对象
pygame.init()
# screen = pygame.display.set_mode((1200,800))
ai_settings=Settings()
screen = pygame.display.set_mode((ai_settings.screen_width,ai_settings.screen_height))
pygame.display.set_caption("Alien Invasion")
#开始游戏的主循环
while True:
# 监视键盘和鼠标事件
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
screen.fill(ai_settings.bg_color)
# 让最近描绘的屏幕可见
pygame.display.flip()
run_game()
二 添加飞船的图像
使用ship.bm图片加载飞船:如下图
创建Ship类:
import pygame
class Ship():
def __init__(self, screen):
"""初始化飞船并设置其初始位置"""
self.screen = screen
# 加载飞船图像并获取其外接矩形
self.image = pygame.image.load('images/ship.bmp')
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
def blitme(self):
"""在指定位置绘制飞船"""
self.screen.blit(self.image, self.rect)
注意几个重要的函数:
(1)为加载图像,我们调用了pygame.image.load()(见)。这个函数返回一个表示飞船的surface,而我们将这个surface存储到了self.image中。
(2)加载图像后,我们使用get_rect()获取相应surface的属性rect
(3)处理rect对象时,可使用矩形四角和中心的x和y坐标。可通过设置这些值来指定矩形的位置。
(4)在Pygame中,原点(0, 0)位于屏幕左上角,向右下方移动时,坐标值将增大。在1200×800的屏幕上,原点位于左上角,而右下角的坐标为(1200, 800)。
三 在屏幕上绘制飞船
下面更新alien_invasion.py:
import sys
from settings import Settings
from ship import Ship
import pygame
def run_game():
# 初始化游戏并建立一个屏幕对象
pygame.init()
# screen = pygame.display.set_mode((1200,800))
ai_settings=Settings()
screen = pygame.display.set_mode((ai_settings.screen_width,ai_settings.screen_height))
pygame.display.set_caption("Alien Invasion")
# 创建一艘飞船
ship = Ship(screen)
#开始游戏的主循环
while True:
# 监视键盘和鼠标事件
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
screen.fill(ai_settings.bg_color)
ship.blitme()
# 让最近描绘的屏幕可见
pygame.display.flip()
run_game()
运行之后效果如下图:
- 日志分析实战之清洗日志小实例3:如何在spark shell中导入自定义包
- PHP-函数
- hdu----(5045)Contest(数位dp)
- hdu----(5053)the Sum of Cube(签到题,水体)
- RHEL构建DNS服务器-多区域
- hdu----(5050)Divided Land(二进制求最大公约数)
- 日志分析实战之清洗日志小实例1:使用spark&Scala分析Apache日志
- RHEL构建DNS服务器-单区域
- hdu----(5047)Sawtooth(大数相乘+数学推导)
- hdu----(4522)湫湫系列故事——过年回家(最短路)
- hdu---(1421)搬寝室(dp)
- hdu----(1257)最少拦截系统(dp/LIS)
- nginx安装Fancy美化索引目录
- hdu---(3779)Railroad(记忆化搜索/dfs)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 说说 C# 8 using 新特性
- SQL Server 每日一题--老二解析
- SQL Server 每日一题--重复报名的人解析
- 逻辑回归项目实战-附Python实现代码
- 详解C# 序列化和反序列化
- SQL Server 每日一题--解析只逛不买
- 【Python】基于某些列删除数据框中的重复值
- SQL Server 每日一题--解析天气预报员
- 未读消息(小红点),前端与 RabbitMQ实时消息推送实践,贼简单~
- 手把手教你用neo4j搭建简单关联图谱(基于家有儿女中的人物关系)
- c#中的静态本地方法
- C#加解密
- SQL Server 每日一题--解析老N的收入
- neo4j中导入数据的两种常用方式(千万级和亿级)
- Entity Framework Core 实现全局查询过滤