alien_invasion.py

# -*- encoding:utf-8 -*-
"""
@作者:ZYH
@文件名:alien_invasion.py
@文档说明:  创建游戏窗口和用户游戏输入
"""import sys
import pygame
from AlienInvasion.settings import Settings
from ship import Ship
from AlienInvasion.bullet import Bulletclass AlienInvasion:"""管理游戏资源和行为的类"""def __init__(self):"""初始化游戏并创建游戏资源"""pygame.init()self.settings = Settings()# 支持全屏模式self.screen = pygame.display.set_mode((0, 0), pygame.FULLSCREEN)self.settings.screen_width = self.screen.get_rect().widthself.settings.screen_height = self.screen.get_rect().height# # 创建一个窗口  并设置宽 和 高# self.screen = pygame.display.set_mode(#     (self.settings.screen_width, self.settings.screen_height))pygame.display.set_caption("Alien Invasion")self.ship = Ship(self)self.bullets = pygame.sprite.Group()def run_game(self):"""开始游戏的主循环"""while True:self._check_events()self.ship.update()# self.bullets.update()self._update_bullets()self._update_screen()def _check_events(self):# 监视键盘和鼠标事件for event in pygame.event.get():if event.type == pygame.QUIT:  #检测到鼠标点击关闭窗口sys.exit()# 鼠标按着一直右移elif event.type == pygame.KEYDOWN:self._check_keydown_events(event)# 抬起停止移动elif event.type == pygame.KEYUP:self._check_keyup_events(event)# 代码重构 处理keydown事件def _check_keydown_events(self, event):"""响应按键"""if event.key == pygame.K_RIGHT:# 向右移动飞船self.ship.moving_right = Trueelif event.key == pygame.K_LEFT:# 向左移动self.ship.moving_left = True# 按q键退出游戏elif event.key == pygame.K_UP:# 向上移动self.ship.moving_up = Trueelif event.key == pygame.K_DOWN:# 向下移动self.ship.moving_down = Trueelif event.key == pygame.K_q:sys.exit()# 按空格发射子弹elif event.key == pygame.K_SPACE:self._fire_bullet()def _check_keyup_events(self, event):"""响应松开"""if event.key == pygame.K_RIGHT:self.ship.moving_right = Falseelif event.key == pygame.K_LEFT:self.ship.moving_left = Falseelif event.key == pygame.K_UP:self.ship.moving_up = Falseelif event.key == pygame.K_DOWN:self.ship.moving_down = Falsedef _fire_bullet(self):"""创建一颗子弹,并将其加入编组bullets中"""if len(self.bullets) < self.settings.bullets_allowed:new_bullet = Bullet(self)self.bullets.add(new_bullet)def _update_bullets(self):"""更新子弹的位置并删除消失的子弹"""# 更新子弹的位置self.bullets.update()# 删除消失的子弹for bullet in self.bullets.copy():if bullet.rect.bottom <= 0:self.bullets.remove(bullet)def _update_screen(self):# 每次循环时都会重新画屏幕self.screen.fill(self.settings.bg_color)for bullet in self.bullets.sprites():bullet.draw_bullet()# 让最近绘制的屏幕可见   不断更新屏幕self.ship.blitme()pygame.display.flip()if __name__ == '__main__':# 创建游戏实例并运行游戏ai = AlienInvasion()ai.run_game()

ship.py

# -*- encoding:utf-8 -*-
"""
@作者:ZYH
@文件名:ship.py
@文档说明:  飞船类
"""import pygameclass Ship:"""管理飞船的类"""def __init__(self, ai_game):"""初试化飞船并设置其初试值"""self.screen = ai_game.screenself.screen_rect = ai_game.screen.get_rect()self.settings = ai_game.settings# 加载飞船的图像并获取其外接矩形self.image = pygame.image.load('H:\\py_project\\AlienInvasion\\images\\ship.bmp')self.rect = self.image.get_rect()# 对于每艘新飞船,都将其放在屏幕的底部中央self.rect.midbottom = self.screen_rect.midbottom# 在飞船的属性x中存储小数值self.x = float(self.rect.x)  # 因为rect只存储整数部分,所以转换为小数self.y = float(self.rect.y)# 移动标志  上下左右self.moving_right = Falseself.moving_left = Falseself.moving_up = Falseself.moving_down = Falsedef update(self):"""根据移动标志调整飞船的位置"""# 更新飞船而不是rect对象的x值# 防止飞船移动超出屏幕  (左上角 0,0)if self.moving_right and self.rect.right < self.screen_rect.right:# 向右移动ship_speed个像素self.x += self.settings.ship_speedif self.moving_left and self.rect.left > 0:# 向左移动ship_speed像素self.x -= self.settings.ship_speedif self.moving_up and self.rect.top > 0:# 向上移动self.y -= self.settings.ship_speedif self.moving_down and self.rect.bottom < self.screen_rect.bottom:# 向下移动self.y += self.settings.ship_speed# 根据self.x更新rect对象self.rect.x = self.xself.rect.y = self.ydef blitme(self):"""在指定的位置绘制飞船"""self.screen.blit(self.image, self.rect)

settings.py

# -*- encoding:utf-8 -*-
"""
@作者:ZYH
@文件名:settings.py
@文档说明:飞船设置
"""class Settings:"""存储游戏《外星人入侵》中所有设置类"""def __init__(self):"""初始化游戏的设置"""# 屏幕设置self.screen_width = 1200self.screen_height = 800self.bg_color = (230, 230, 230)# 子弹设置self.bullet_speed = 1.0self.bullet_width = 3self.bullet_height = 15self.bullet_color = 60, 60, 60self.bullets_allowed = 3# 飞船设置self.ship_speed = 1.5

bullet.py

# -*- encoding:utf-8 -*-
"""
@作者:ZYH
@文件名:bullet.py
@文档说明: 子弹类
"""import pygame
from pygame.sprite import Spriteclass Bullet(Sprite):"""管理飞船所发射子弹的类"""def __init__(self, ai_game):"""在飞船当前位置创建一个子弹对象"""super().__init__()self.screen = ai_game.screenself.settings = ai_game.settingsself.color = self.settings.bullet_color# 在(0, 0) 处创建一个表示子弹的矩形,再设置正确的位置self.rect = pygame.Rect(0, 0, self.settings.bullet_width, self.settings.bullet_height)self.rect.midtop = ai_game.ship.rect.midtop# 存储用小数表示的子弹位置self.y = float(self.rect.y)def update(self):"""向上移动子弹"""# 更新表示子弹的位置的小数值self.y -= self.settings.bullet_speed# 更新表示子弹的rect位置self.rect.y = self.ydef draw_bullet(self):"""画出子弹"""pygame.draw.rect(self.screen, self.color, self.rect)

飞船图片

Python 外星人入侵(一):武装飞船相关推荐

  1. python外星人入侵不显示子弹_【Python】python外星人入侵,武装飞船,代码写好后,不显示子弹...

    按照书上写的武装飞船,写到能够左右移动了,但到了射击(装子弹)时候,按照书上的代码照搬了,运行时没显示代码有问题,但就是按了空格键,不见有子弹,其他都正常. 代码: alien_invasion.py ...

  2. python外星人入侵飞船上下移动_Python 项目练习1 外星人入侵(武装飞船)

    Python 项目练习1 外星人入侵(武装飞船) 2020年07月30日 | 萬仟网IT编程 | 我要评论 本项目具体步骤在书本<Python编程:从入门到实践>第十二章中安装pygame ...

  3. Python外星人入侵中存放飞船和外星人的文件夹

    上篇介绍了Python外星人入侵游戏--添加飞船和外星人图片.可以先把这两张图片先下载到此工程下的一个images文件夹下,如图

  4. Python外星人入侵游戏——添加飞船和外星人图片

    Python外星人入侵游戏是自己在<Python编程从入门到实践>在本书里学到的.本篇主要介绍该游戏中所需要的两个图片.分别为飞船和外星人图片. 1.首先去到 http://www.itu ...

  5. Python 外星人入侵游戏(一):武装飞船(上)

    从这周开始Python的实践学习,首先来开发一个外星人入侵游戏,这样可以对之前的概念有更深入的理解,对交互式项目有更深入的认识 来源:<Python编程:从入门到实践> 注意:游戏< ...

  6. python项目一:外星人入侵:(一)武装飞船

    第一章:武装飞船 1.1.规划项目 1.2.安装Pygame 1.3.开始游戏项目 1.3.1.创建pygame窗口以及响应用户输入 1.3.2.设置背景色 1.3.3.创建设置类 1.4.添加飞船图 ...

  7. python编程入门到实践学习笔记——外星人入侵游戏pygame(一 武装飞船)

    python编程--外星人入侵游戏pygame(一) 外星人入侵游戏一:武装飞船 安装Pygame 创建窗口及响应用户输入 更改屏幕背景色 创建设置类 创建ship飞船类 重构game_functio ...

  8. Python 外星人入侵游戏(一):武装飞船(下)

    接着做接着做接着做 来源:<Python编程:从入门到实践> 文章目录 5 重构:模块game_functions 5.1 函数check_events() 5.2 函数update_sc ...

  9. Python项目--外星人入侵--武装飞船

    武装飞船 开始游戏项目 创建Pygame窗口以及响应用户输入 首先,我们创建一个空的Pygame窗口.使用Pygame编写的游戏的基本结构如下: #alien_invasion.py import s ...

  10. 《Python编程:从入门到实践》第12章:武装飞船

    做游戏开发会使用到Pygame,为此首先要安装Pygame.Pygame是一组功能强大而有趣的模块,可用于管理图形.动画乃至声音,帮助我们更轻松地开发复杂的游戏. 一.安装Pygame 可利用pip模 ...

最新文章

  1. 今年,就没有一款能打的5G旗舰机吗?
  2. Docker系列教程01-Centos7安装新版Docker教程(10步)
  3. 关于虚拟机ubuntu多虚拟硬盘(VDMK)的使用方法
  4. 对联系人进行增删改查
  5. CSS中!important的使用
  6. 如何将Wii遥控器用作陀螺仪鼠标
  7. nginx内存池大小快内存_使用直接内存时可以更快
  8. 广度优先搜索解决欧拉回路时间复杂度_迷宫搜索类的双向bfs问题(例题详解)
  9. 【数位DP】恨7不成妻
  10. AD小技巧:update changes to PCB后如何调整布线
  11. 集群容错机制:failover、failfast、failback、failsafe、forking
  12. 诛仙斩龙墨雪服务器怎么找不到了,《诛仙3》5月13日服务器数据互通公告
  13. Facebook账号被封了怎么办?这份账号申诉指南请收好
  14. 深入解析云原生网络抖动引起的性能问题 @龙蜥社区eBPF SIG
  15. CF 869 A. The Artful Expedient【异或】
  16. Java学习之路01——2021年职业规划
  17. 地理坐标的六边形编码(PHXIS)
  18. 网络精英赛模拟练习(4)
  19. 1056: 约瑟夫问题【n人围成一圈,报数为3的人退出圈子,问最后留下的人原来的编号。】
  20. 回到过去,寻找曾经的你!(搜索你关心的网站最初的样子)

热门文章

  1. (8.2)利用Newton-Euler公式求解二连杆的动力学方程:
  2. Proxmark3的编译
  3. 基于QT的C++的坦克大战游戏
  4. ICG-PEG-OH 结构式,吲哚菁绿-聚乙二醇-羟基的相关说明
  5. 【小程序专栏】总结uniapp开发小程序的开发规范
  6. “不确定性问题”(Nondeterministic Problem,NP)与哥德尔不完全定理“
  7. [230506] 2021年托福阅读真题第6篇|Water and Life on Mars|15:30~16:30|16:30~19:19
  8. 半导体基本知识 PN结的形成及特性
  9. 【HDU】1862 EXCEL排序(结构体排序)
  10. [HOW TO]-android手机安装google play