现在开始开发游戏《外星人入侵》,创建一个空的Pygame窗口,导入模块sys和pygame,其中sys模块用于退出游戏。

关于背景的设置放在Settings类中,以免在代码中添加设置。在下面主程序文件中导入Settings类。同样创建一个Ship类,它负责管理飞船的大部分行为,并在主程序中导入Ship类。

pygame.init()用于初始化背景设置,创建一个Settings实例并储存在ai_settings中。我们调用pygame.display.set_mode()来创建一个名为screen的显示窗口,参数是一个元组使用了ai_settings的属性用于指定游戏窗口的尺寸,我们可以在Settings类中进行修改。接着创建一个名为ship的Ship实例,一定要在循环之前,防止每次循环都创建一艘飞船。在后面调用ship.blitme()将飞船绘an制在屏幕上。

这个游戏由一个循环控制,包含一个事件循环和管理屏幕的代码。事件使用户游戏时的操作,如按键及鼠标的移动。使用pygame.event.get()访问pygame检测到的事件。当玩家单击游戏窗口的关闭按钮时即检测到pygame.QUIT事件,将调用sys.exit()退出游戏。调用 pygame.display.flip()不断更新屏幕,调用screen.fill()用背景颜色填充屏幕,此方法只接受一个实参,即一种颜色。最后调用run_game()初始化游戏并开始主循环。

# _*_ coding:gb2312 _*_
import sys
import pygamefrom settings import Settings
from ship import Shipdef run_game():#初始化游戏并创建一个屏幕对象pygame.init()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()

Settings类中,背景色以RGB值指定,这种颜色由红、绿、蓝组成,每个值的范围为0~255,(255,0,0)表示红色,(0,255,0)

表示绿色,(0,0,255)代表蓝色。可创建1600万种颜色,(230,230,230)是一种浅灰色。

# _*_ coding:gb2312 _*_
class Settings():"""储存《外星人入侵》的所有设置的类"""def __init__(self):"""初始化游戏的设置"""#屏幕设置self.screen_width=1200self.screen_height=600self.bg_color=(230,230,230)

在选用游戏素材时,其图像文件使用位图最简单,将飞船的位图图像名为ship.bmp并储存在主项目文件夹下,名新的文件夹为images。为加载图像调用pygame.image.load(),返回的surface储存在self.image中,使用get_rect()获取相应飞船属性储存在self.rect中,将表示屏幕的矩形储存在self.screen_rect中。

为使放在屏幕底部中央飞船将表示飞船中心的x坐标self.rect.centerx设置为表示屏幕矩形的属性centerx。将表示飞船下边缘的y坐标self.rect.bottom设置为表示屏幕矩形的属性bottom。

最后定义方法blitme(),根据self.rect指定的位置将图像绘制到屏幕上。

# _*_ coding:gb2312 _*_
import pygameclass 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.centerxself.rect.bottom=self.screen_rect.bottomdef blitme(self):"""在指定位置绘制飞船"""self.screen.blit(self.image,self.rect)

结果如图所示:

为简化代码的结构,进行重构,模块game_functions。即将主程序中管理事件和屏幕更新的代码放到模块game_functions中,对代码进行重构会使其更容易扩展。

代码如下:

# _*_ coding:gb2312 _*_
import sys
import pygamefrom settings import Settings
from ship import Ship
import game_functions as gfdef run_game():#初始化游戏并创建一个屏幕对象pygame.init()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:gf.check_events()gf.update_screen(ai_settings,screen,ship)run_game()
# _*_ coding:gb2312 _*_
#game_funtions模块
import sys
import pygame
def check_events():"""响应按键和鼠标事件"""for event in pygame.event.get():if event.type==pygame.QUIT:sys.exit()def update_screen(ai_settings,screen,ship):"""更新屏幕上的图像,并且换到新屏幕"""#每次循环时重绘屏幕screen.fill(ai_settings.bg_color)ship.blitme()#让最近绘制的屏幕可见pygame.display.flip()

Pygame实战外星人入侵1.1——添加飞船相关推荐

  1. python外星人入侵游戏rect报错_Python外星人入侵游戏开发—添加飞船图像

    用法分析 下面将飞船加入到游戏中.为了在屏幕上绘制玩家的飞船,我们将加载一幅图像,再使用Pygame方法blit() 绘制它. 选择用于表示飞船的图像后,需要将其显示到屏幕上.我们将创建一个名为shi ...

  2. Pygame 外星人入侵(4)飞船移动

    Pygame 外星人入侵(4)飞船移动 目录 Pygame 外星人入侵(4)飞船移动 引言 一.移动飞船 1.响应玩家按键 2.修改飞船的坐标 二.优化1:连续移动 1.设置飞船移动的状态属性 2.响 ...

  3. python实战游戏开发——添加飞船图像

    1.创建Ship类 import pygame # -*- coding: utf-8 -*- class Ship():       def __init__(self,screen):       ...

  4. python随机出现外星人飞船_python外星人入侵游戏如何改变飞船的大小

    Python从入门到实践里的<外星人入侵> Python外星人入侵问题分享助世界上从来不缺少风景,缺少的只是欣赏的心情. Python项目外星人入侵添加爆照效果有没有原码<Pytho ...

  5. 添加飞船图像:创建ship类与在屏幕上绘制飞船

    系列文章目录 一.Pygame的安装与项目规划 二.开始游戏项目:创建pygame窗口及响应用户输入 三.开始游戏项目:设置背景色和创建设置类 目录 系列文章目录 前言 添加飞船图像 创建ship类 ...

  6. python ui自动化配置文件,python UI自动化实战记录八:添加配置

    添加配置文件写入测试地址等,当环境切换时只需修改配置文件即可. 1 在项目目录下添加文件 config.ini 写入: [Domain] domain = http://test.domain.cn ...

  7. Pygame 实战(行动代号(单机版)):(二). 游戏编程

    当前系列历史文章: Pygame 实战(行动代号(单机版)):(一). 游戏简介 这一部分就开始讲实现的代码啦!因为之前写代码的时候没什么经验,所以可能有不少冗余的部分和可以简化的地方命名也不是很规范 ...

  8. Pygame实战:利用Python实现智能五子棋,实现之后发现我玩不赢它。

    导语 前段时间不是制作了一款升级版本五子棋的嘛! 但是居然有粉丝私信我说: "准备拿到代码玩一下ok过去了!太难了准备放收藏夹落灰q@q~" 所噶,今天先放一个简易版本的五子棋给大 ...

  9. 【Pygame实战】经典的坦克大战游戏,勾起童年无限回忆《坦克大战小霸王版》

    导语 哈喽!哈喽--我是木木子 今天来升级下之前写的坦克大战游戏嘛,哈哈哈 其实也不算是修改,就是稍微的调试一下!​​ 因为之前写的界面都是英文的 ,有的小伙伴儿英文一点儿都不会的可能看着别扭,今天来 ...

最新文章

  1. C语言中可变参数列表
  2. spring定时任务详解(@Scheduled注解)多线程讲解
  3. android listview中item通过viewpager实现
  4. slr1文法_SLR的完整形式是什么?
  5. PHP-自定义模板-学习笔记
  6. 面试归来,感觉无望,下次再战
  7. 【前端知识梳理】HTML篇 笔记整理(一)
  8. Camera效果测试-白平衡AWB测试
  9. 打怪小游戏(已支持商店)
  10. 学生论坛管理系统的设计与实现
  11. 10个最常见的HTML5面试题及答案
  12. HTML之form表单
  13. 本地图片转换成网络链接图片
  14. 为什么牛逼的程序员都不用 “ ! = null “ 做判空?
  15. 【个人收藏】一些比较有用的链接
  16. Cadence PSpice 模型10:ABM库的控制源型模型介绍与使用方法图文演示
  17. vue前后端aes url传参解密再解base64编码
  18. Unity使MakeHuman人体模型动起来
  19. android平台的蝙蝠侠游戏有哪些,《蝙蝠侠》是最好的游戏?盘点蝙蝠侠7大真正实力...
  20. No row with the given identifier exists 解决方法

热门文章

  1. 《梦想照进现实:30位中国互联网企业家创业故事》即将上市
  2. 给安卓手机安装linux系统分区,把Linux装在你的FAT32分区
  3. (8)打鸡儿教你Vue.js
  4. deal.II中文文档
  5. UI设计师未来的4个发展方向
  6. 动网论坛 上传文件类型
  7. win10 软件推荐
  8. 防火墙的基本概念(2)防火墙
  9. 报告模板 仿 LaTeX beamer主题: Metropolis Powerpoint版本
  10. 今日头条的文章怎么同步到其他自媒体平台?