python外星人入侵飞船上下移动_Python 项目练习1 外星人入侵(武装飞船)
Python 项目练习1 外星人入侵(武装飞船)
2020年07月30日
| 萬仟网IT编程
| 我要评论
本项目具体步骤在书本《Python编程:从入门到实践》第十二章中安装pygame可通过pip安装:python -m pip install --user pygame-1.9.2a0-cp35-none-win32.whlPygame窗口alien_invasion.pyimport sys import pygame from settings import Settingsfrom ship import Shipimport game_functions as gffrom p
本项目具体步骤在书本《Python编程:从入门到实践》第十二章中
安装pygame
可通过pip安装:
python -m pip install --user pygame-1.9.2a0-cp35-none-win32.whl
Pygame窗口
alien_invasion.py
import sys
import pygame
from settings import Settings
from ship import Ship
import game_functions as gf
from pygame.sprite import Group
def run_game(): # 初始化游戏并创建一个屏幕对象
# 初始化pygame、设置和屏幕对象
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(ai_settings, screen)
# 创建一个用于存储子弹的编组
bullets = Group()
# 开始游戏的主循环
while True:
# 监视键盘和鼠标事件
gf.check_events(ai_settings, screen, ship, bullets)
ship.update()
gf.update_bullets(bullets)
gf.update_screen(ai_settings, screen, ship, bullets)
run_game()
设置类
settings.py
class Settings():
"""存储《外星人入侵》的所有设置的类"""
def __init__(self):
"""初始化游戏的设置"""
# 屏幕设置
self.screen_width = 1200
self.screen_height = 800
self.bg_color = (230, 230, 230)
# 飞船的设置
self.ship_speed_factor = 1.5
# 子弹设置
self.bullet_speed_factor = 1
self.bullet_width = 3
self.bullet_height = 15
self.bullet_color = 60, 60, 60
self.bullets_allowed = 3
飞船图像
图片放到 images 文件夹里,图片名为 ship.bmp
图片后缀为.bmp
Ship 类
ship.py
import pygame
class Ship():
def __init__(self, ai_settings, screen):
"""初始化飞船并设置其初始位置"""
self.screen = screen
self.ai_settings = ai_settings
# 加载飞船图像并获取其外接矩形
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
# 在飞船的属性center中存储小数值
self.center = float(self.rect.centerx)
# 移动标志
self.moving_right = False
self.moving_left = False
def update(self):
"""根据移动标志调整飞船的位置"""
# 更新飞船的center值,而不是rect
if self.moving_right and self.rect.right < self.screen_rect.right:
self.center += self.ai_settings.ship_speed_factor
if self.moving_left and self.rect.left > 0:
self.center -= self.ai_settings.ship_speed_factor
# 根据self.center更新rect对象
self.rect.centerx = self.center
def blitme(self):
"""在指定位置绘制飞船"""
self.screen.blit(self.image, self.rect)
响应模块 game_functions
game_functions.py
import sys
import pygame
from bullet import Bullet
def check_keydown_events(event, ai_settings, screen, ship, bullets):
"""响应按键"""
if event.key == pygame.K_RIGHT:
ship.moving_right = True
elif event.key == pygame.K_LEFT:
ship.moving_left = True
elif event.key == pygame.K_SPACE:
fire_bullet(ai_settings, screen, ship, bullets)
def fire_bullet(ai_settings, screen, ship, bullets):
"""如果还没有到达限制,就发射一颗子弹"""
#创建新子弹,并将其加入到编组bullets中
if len(bullets) < ai_settings.bullets_allowed:
new_bullet = Bullet(ai_settings, screen, ship)
bullets.add(new_bullet)
def check_keyup_events(event, ship):
"""响应松开"""
if event.key == pygame.K_RIGHT:
ship.moving_right = False
elif event.key == pygame.K_LEFT:
ship.moving_left = False
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)
# 在飞船和外星人后面重绘所有子弹
for bullet in bullets.sprites():
bullet.draw_bullet()
ship.blitme()
# 让最近绘制的屏幕可见
pygame.display.flip()
def update_bullets(bullets):
"""更新子弹的位置,并删除已消失的子弹"""
# 更新子弹的位置
bullets.update()
# 删除已消失的子弹
for bullet in bullets.copy():
if bullet.rect.bottom <= 0:
bullets.remove(bullet)
Bullet 类
bullet.py
import pygame
from pygame.sprite import Sprite
class Bullet(Sprite):
"""一个对飞船发射的子弹进行管理的类"""
def __init__(self, ai_settings, screen, ship):
"""在飞船所处的位置创建一个子弹对象"""
super(Bullet, self).__init__()
self.screen = screen
# 在(0,0)处创建一个表示子弹的矩形,再设置正确的位置
self.rect = pygame.Rect(0, 0, ai_settings.bullet_width,
ai_settings.bullet_height)
self.rect.centerx = ship.rect.centerx
self.rect.top = ship.rect.top
#存储用小数表示的子弹位置
self.y = float(self.rect.y)
self.color = ai_settings.bullet_color
self.speed_factor = ai_settings.bullet_speed_factor
def update(self):
"""向上移动子弹"""
#更新表示子弹位置的小数值
self.y -= self.speed_factor
#更新表示子弹的rect的位置
self.rect.y = self.y
def draw_bullet(self):
"""在屏幕上绘制子弹"""
pygame.draw.rect(self.screen, self.color, self.rect)
效果图:
本文地址:https://blog.csdn.net/qq_41657977/article/details/107674229
如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!
相关文章:
最近,在终端启动python时,报了一个错误:failed calling sys.__interactivehook__traceback (most rec...
在某些特殊情况下,我们的 python 脚本需要调用父目录下的其他模块。例如:在编写 gne 的测试用例时,有一个脚本 generate_new_cases.p...
python 界有条不成文的准则: 计算密集型任务适合多进程,io 密集型任务适合多线程。本篇来作个比较。通常来说多线程相对于多进程有优势,因为创建一个进程开销...
bfs"""# @time : 2020/11/8# @author : jimou chen"""# 广搜def bfs(graph, start): q...
1、使用xlrd模块读取数据# 将excel表格内容导入到tables列表中def import_excel(tab): # 创建一个空列表,存储excel的数...
在学习return函数时候,还是要知道了解它最主要的函数作用,比如,怎么去实现返回一个值,另外还有就是我们经常会用到的使用return能够进行多值输出,这才是我...
使用程序难免会有出错的时候,如何从大篇代码中找出错误,不仅考验能力,还要考验小伙们的耐心。辛辛苦苦敲出的代码运行不出结果,非常着急是可以理解的。那么我们在pyt...
一、准备工作:1、安装mysql3.7,创建一个test数据库,创建student表,创建列:(列名看代码),创建几条数据(以上工作直接用navicat for...
通过fiddler抓包比较,基本可以确定是javascript生成加密cookie导致原来的请求返回521。发现问题: 打开fiddler软件,用浏览器打开目...
1.self只有在类的方法中才会有,其他函数或方法是不必带self的。2.在调用时不必传入相应的参数。3.在类的方法中(如__init__),第一参数永远是se...
网友评论
验证码:
python外星人入侵飞船上下移动_Python 项目练习1 外星人入侵(武装飞船)相关推荐
- 外星人入侵 python 飞船位置_《python从入门到实践》项目一:外星人入侵
游戏编程思维导图 游戏思路 函数编写 第一次做思维导图,做的有点乱 解释:跟着<python编程从入门到实践>写完游戏程序后,写一下自己的心得体会.可以把这个游戏分为几块来理解.如果想要设 ...
- python支付程序源码_python项目中实现支付宝网页支付
支付流程 在一次项目中需要引入支付宝接口实现支付宝支付,使用场景如下: 用户在我方商户系统中选择了购买商品,我方商户系统生成一张支付订单,用户点击订单的支付按钮后,页面会跳转到一个支付二维码的界面. ...
- python视图函数是什么_python项目Django(视图函数)
一 Django的视图函数view 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应. 响应可以是一张网页的HTML内容,一个重定向,一个404错 ...
- python 大众点评模拟登陆_python项目实战:模拟登陆163邮箱,简单到爆
前言 相信大家都会做一些有趣的Python项目,对于小白的我们来说,如果成功了的话,那成就感是非常爆棚的的,这也是非常有助学习. 接下来,为大家介绍一个selenium 模拟登陆163邮箱的代码 首先 ...
- python制作动态小游戏_Python——项目-小游戏2-动画绘制
实现游戏循环还有事件的监听 在上一讲中 你需要完成这样的这样的效果, 如果你还没有完成,请不要继续往下阅读!!切记切记切记.,重要的事情说三遍 我们来看一下什么是游戏循环 所谓的游戏循环很好的理解 就 ...
- python飞机大战计分代码_Python项目实战-飞机大战
{getUnitName} {getLessonName} 敬请期待 免费 {getTaskName} 剩余观看时长:{watchLimitRemaining} 回放 {activityStartTi ...
- python从入门到实践 第12章 武装飞船 之 调整飞船的速度程序实践
第一个文件,main.py是主程序 #main.py import sys import pygame from settings import Settings from ship import S ...
- python项目一:外星人入侵:(一)武装飞船
第一章:武装飞船 1.1.规划项目 1.2.安装Pygame 1.3.开始游戏项目 1.3.1.创建pygame窗口以及响应用户输入 1.3.2.设置背景色 1.3.3.创建设置类 1.4.添加飞船图 ...
- python外星人入侵游戏加随机游动_Python外星人入侵游戏(四):飞船左右移动
今日任务: 控制飞船 动手前思考 1.如何实现左右移动:游戏是通过循环来刷新界面,那就需要在循环中更新飞船的位置,更新位置是通过按键的点击,所以操作应该在监听按键和页面刷新中完成 2.考虑到习惯,我们 ...
最新文章
- [Python学习] 专题四.文件基础知识
- Linux 统计文件行数,字节数。
- 数据只会告诉你该怎么走
- Cookie (设置与读取、超时设置、指定路径、显示用户上次登录时间)
- knife4j文档请求异常_umi-request 网络请求之路
- 计算机组装与维护精品,国家精品课程——《计算机组装与维护》.pdf
- matlab取整函数记录
- C语言实现飞机订票系统
- 使用matlab的appdesigner绘制Steward并联机构
- [Java,IDEA]连接oracle的关于oracle.jdbc.driver.OracleDriver一直驱动加载失败的原因
- Windows 10调整色温显示器
- 场效应管的分类及型号命名方法
- Elasticsearch集群监控指标学习
- HBase综合测试(头歌实践教学项目)
- 【转】excel音标乱码
- 地图经纬度坐标相互转换度分秒
- 菊风云 | 音视频社交崛起的背后
- docker搭建redis高可用集群
- 兰州城市学院计算机专业在哪个校区,兰州城市学院 代码
- 系统流程图与数据流图的联系与区别