此项目是自学《python编程从入门到实践》这本书时,对着其中的项目进行练习,代码均按照书中代码来敲写,可以运行成功。

首先先建立alien_invasion.py所有代码的调用在此执行

import os# sys模块用来退出游戏
import sys
# 模块pygame包含开发游戏所需的功能
import pygame
import settings
from settings import Settings
from ship import Ship
from bullet import Bulletclass AlienInvasion:"""管理游戏资源与行为的类"""def __init__(self):"""初始化游戏并创建游戏资源"""# 初始化背景设置pygame.init()#创建对象self.settings = Settings()# 调用pygame.display.set.mode()创建一个显示窗口# 设置屏幕大小,pygame.FULLSCREEN可全屏self.screen = pygame.display.set_mode((self.settings.screen_width,self.settings.screen_height))pygame.display.set_caption("外星人入侵")self.ship = Ship(self)self.bullets = pygame.sprite.Group()def run_game(self):"""开始游戏的主循环:return:"""while True:"""监视键盘和鼠标事件"""self._check_event()self.ship.update()self.bullets.update()self.bullets.update()self._update_screen()def _update_bullets(self):"""更新子弹的位置并删除消失的子弹"""#更新子弹位置#删除消失的子弹for bullet in self.bullets.copy():if bullet.rect.bottom <= 0:self.bullets.remove(bullet)print(len(self.bullets))def _check_event(self):"""响应鼠标与按键事件:return:"""for event in pygame.event.get():#如果event类型是点x,就退出if event.type == pygame.QUIT:sys.exit()#KETDOWN键盘按下elif event.type == pygame.KEYDOWN:self._check_keydown_events(event)elif event.type == pygame.KEYUP:self._check_keyup_events(event)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 = Trueelif 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中:return:"""if len(self.bullets) < self.settings.bullets_allowed:new_bullet = Bullet(self)self.bullets.add(new_bullet)def _update_screen(self):#更新屏幕图像,并切换到新屏幕# 每次循环重新绘制屏幕self.screen.fill(self.settings.bg_color)self.ship.blitme()for bullet in self.bullets.sprites():bullet.draw_bullet()# 让最近绘制的屏幕可见pygame.display.flip()
if __name__ == '__main__':# 创建游戏实例并运行游戏ai = AlienInvasion()ai.run_game()

其次建立settings.py此文件中创建设置类,用来管理游戏的外观和行为,比如屏幕的设置、飞船的设置、子弹的设置

class Settings:"""存储外星人入侵游戏中所有设置的类"""def __init__(self):"""初始化游戏设置"""#屏幕设置self.screen_width = 1200self.screen_height = 800self.bg_color = (255,255,255)#飞船设置self.ship_speed = 1.5#子弹设置self.bullet_speed = 1.0self.bullet_width = 3self.bullet_height = 15self.bullet_color = (255,0,0)self.bullets_allowed = 100

创建ship.py来管理ship的行为,比如飞船的初始位置、颜色、以及飞船的移动

import pygameclass Ship:"""管理飞船的类"""def __init__(self,ai_game):"""初始化飞船并设置其初始位置:param ai_game:"""self.screen = ai_game.screenself.settings = ai_game.settings# get_rect()是处理矩形图像的方法,访问屏幕的属性#获取屏幕的rect属性self.screen_rect = ai_game.screen.get_rect()#加载飞船图像并获取其外接矩形#使用pygame.image.load加载图片self.image = pygame.image.load("images/ship.bmp")#获取飞船图片的外接矩形self.rect = self.image.get_rect()#对于每搜新飞船,都将其放在屏幕底部的中央,飞船与屏幕下边缘水平对齐self.rect.midbottom = self.screen_rect.midbottom#在飞船属性x中存储最小数值self.x = float(self.rect.x)#移动标志self.moving_right = Falseself.moving_left = Falseself.moving_up = Falseself.moving_down = Falsedef update(self):"""根据移动标志调整飞船位置:return:"""#更新飞船而不是rect对象的x值#self.rect.right飞船外接矩形右边缘x的坐标if self.moving_right and self.rect.right < self.screen_rect.right:self.x += self.settings.ship_speedif self.moving_left and self.rect.left > 0:self.x -= self.settings.ship_speedif self.moving_up and self.rect.top > 0:self.rect.centery -= 1if self.moving_down and self.rect.bottom < self.screen_rect.bottom:self.rect.centery += 1#根据sself.x更新rect的对象self.rect.x = self.xdef blitme(self):"""在指定位置绘制飞船:return:"""self.screen.blit(self.image,self.rect)

创建bullet文件里创建Bullet类用来管理子弹颜色、数量、发射的属性和行为

import pygamefrom pygame.sprite import Spriteclass Bullet(Sprite):"""管理飞船所发射字典子弹的类"""def __init__(self,ai_game):"""在飞船当前位置创建一个子弹对象:param 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):"""向上移动子弹:return:"""self.y -= self.settings.bullet_speed#更新表示子弹rect的位置self.rect.y = self.ydef draw_bullet(self):"""在屏幕上绘制子弹:return:"""pygame.draw.rect(self.screen,self.color,self.rect)

python项目练习——外星人入侵游戏(一)——武装飞船相关推荐

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

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

  2. 【Python项目】过马路游戏

    文章目录 零.序章 一.游戏主程序 二.玩家类 三.汽车管理员类 四.计分板类 五.效果展示 零.序章 这是一个使用Python写的过马路游戏. 可以练习一些面向对象的知识. 由于全写注释CSND说我 ...

  3. 用python写《外星人入侵》游戏:武装飞船 >1

    昨天的文章,我们设置好了本地环境. 现在,我们有了 python,有了安装 pygame所需的pip,和pygame.接下来我们就开始进入项目阶段. 文章目录 开始游戏项目 创建 pygame 窗口以 ...

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

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

  5. python外星人入侵游戏加随机游动_Python外星人入侵游戏(四):飞船左右移动

    今日任务: 控制飞船 动手前思考 1.如何实现左右移动:游戏是通过循环来刷新界面,那就需要在循环中更新飞船的位置,更新位置是通过按键的点击,所以操作应该在监听按键和页面刷新中完成 2.考虑到习惯,我们 ...

  6. Python项目:外星人入侵(汇总)

    源代码我应经放到了GitHub上,需要的小伙伴自行获取. 链接在文章末尾. 直接上成品: 本次项目一共用到的八个文件(图片文件省略) 每个文件源代码如下: alien.py: import pygam ...

  7. python大作业外星人入侵,python 项目1 外星人入侵总结 2021-02-25

    使用pygame,首先需要导入:import pygame 初始化游戏:pygame.init() 窗口相关操作 pygame.display :访问显示设备 #创建窗口 pygame.display ...

  8. python项目实战:实现游戏敏感词汇过滤器

    2019独角兽企业重金招聘Python工程师标准>>> 前言 某者荣耀的火爆程度,我就不用多说了,但是呢,其中总有那么一些没有素质的人,各种骂人的话都有,毕竟林子大了什么人都有,但是 ...

  9. python外星人入侵游戏图片_[Python]简单的外星人入侵游戏

    1 importsys2 3 importpygame4 from bullet importBullet5 from alien importAlien6 from time importsleep ...

最新文章

  1. 微软开源可解释机器学习工具包lnterpretML
  2. 3.3V稳压IC芯片 1117-3.3V性能测试
  3. attribute java c_属性别名(Attribute Aliasing)
  4. TCM与Cache介绍
  5. STL中的空间配置器
  6. 12/100. Diameter of Binary Tree
  7. leetcode785. 判断二分图(dfs和bfs染色)
  8. Hadoop伪分布安装详解(四)
  9. 删除高频分量matlab,关于FFT之后怎么提出该频率分量
  10. python实现空气焓值,湿球温度的计算
  11. vue3+typeScript项目运行提示Type string trivially inferred from a string literal, remove type annotatio怎么解决
  12. 快递电子面单批量打印接口对接demo-JAVA
  13. android studio 显示view树_Android手势分发和嵌套滚动机制
  14. D2D引擎与GDI\GDI+绘制效果对比
  15. 2021年自然人代开政策继续,综合税率1.5%左右
  16. 【DM】教你用JDBC连接达梦数据库并进行增删改查
  17. 福州市仓山区融丰锦秀山庄别墅设计
  18. WuThreat身份安全云-TVD每日漏洞情报-2023-02-07
  19. python注释快捷键alt_python快捷键的使用【摘抄】
  20. 以数字化视角看世界杯,我预测荷兰夺冠

热门文章

  1. 南京邮电大学微型计算机原理与接口技术:微机系统串行口的测试
  2. Docker安装Elasticsearch7.14.0集群并设置密码
  3. 全球及中国航空钛锻造行业发展前景趋势分析及投资风险研究报告2021年版
  4. 香港理工大学酒店管理html,香港理工大学大酒店管理硕士要求
  5. Ksz8081目前为MICROCHIP主推的PHY芯片之一,原为MICREL公司设计;芯片分为MII接口型号,RMII接口型号,分了两种不同的产品型号。enc28j60集成了MAC和PHY芯片
  6. 深入探讨CCD工业摄像机相关技术特性
  7. 南京邮电大学通达学院物理实验题库答案
  8. MacBook Pro M1 Parallels Desktop 安装 Ubuntu
  9. 刘强东七千字内部信“京东是谁”:比错过机会更可怕的是机会主义
  10. 修改Win10默认盘