今日任务:

控制飞船

动手前思考

1.如何实现左右移动;游戏是通过循环来刷新界面,那就需要在循环中更新飞船的位置,更新位置是通过按键的点击,所以操作应该在监听按键和页面刷新中完成

2.考虑到习惯,我们通常点击后不松开就会一直移动;移动不能出屏幕,考虑好之后,代码如下

实现代码

alien_invasion.py

import sys

import pygame

from setting import Settings

from ship import Ship

def run_game():

# 初始化游戏并创建一个屏幕对象

pygame.init()

ai_settings = Settings()

screen = pygame.display.set_mode((ai_settings.screen_width, ai_settings.screen_height))

pygame.display.set_caption("外星人入侵")

# 创建一艘飞船

ship = Ship(ai_settings, screen)

# 开始游戏主循环

while True:

check_events(ship)

ship.update()

update_screen(ai_settings, screen, ship)

# 监测事件

def check_events(ship):

# 监视键盘和鼠标事件

for event in pygame.event.get():

if event.type == pygame.QUIT:

sys.exit()

elif event.type == pygame.KEYDOWN:

check_keydown_events(event, ship)

elif event.type == pygame.KEYUP:

check_keyup_events(event, ship)

def check_keydown_events(event, ship):

"""响应按键"""

if event.key == pygame.K_RIGHT:

ship.moving_right = True

if event.key == pygame.K_LEFT:

ship.moving_left = True

def check_keyup_events(event, ship):

"""响应松开"""

if event.key == pygame.K_RIGHT:

ship.moving_right = False

if event.key == pygame.K_LEFT:

ship.moving_left = False

# 更新屏幕

def update_screen(ai_settings, screen, ship):

# 每次循环都重绘屏幕

screen.fill(ai_settings.bg_color)

ship.blitme()

# 让最近绘制的屏幕可见

pygame.display.flip()

run_game()

ship.py

import pygame

class Ship:

def __init__(self, ai_settings, screen):

"""初始化飞船并设置初始位置"""

self.screen = screen

# 加载飞船图像并设置其初始位置

self.image = pygame.image.load('img/ship.png')

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

self.ai_settings = ai_settings

# 移动标志

self.moving_right = False

self.moving_left = False

def update(self):

"""根据移动标志调整飞船位置"""

if self.moving_right and self.rect.right < self.screen_rect.right:

self.rect.centerx += self.ai_settings.ship_speed_factor

elif self.moving_left and self.rect.left > 0:

self.rect.centerx -= self.ai_settings.ship_speed_factor

def blitme(self):

"""在指定位置绘制飞船"""

self.screen.blit(self.image, self.rect)

小结

Python 使用不是main函数哦,注意变量的使用,到这里,我终于知道,为什么要建一个设置类,去存储常量,不是Java随便找个地方设置一个全局变量了。

Python 中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。

在 Python 中,变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存中对象的类型。

python外星人入侵游戏加随机游动_Python外星人入侵游戏(四):飞船左右移动相关推荐

  1. python输出中文加数字_python处理“#”开头加数字的html字符方法

    python如何处理""开头加数字的html字符,比如:风水这类数据. 用python抓取数据时,有时会遇到想要数据是以""开头加数字的字符,比如图中所示的这些 ...

  2. java 如何给游戏加音效,修改添加游戏中各种音效的步骤

    今天我来做私服的朋友们说一些可以在自己中修改添加新音效的方法!凡是玩过游戏的朋友都知道在游戏中人物做出不同的事情时所发出的音效也是各不相同的,最基本的人物行走音效和人物奔跑音效就有很大的差别.而且在中 ...

  3. python 外星人游戏怎么打开_Python外星人入侵游戏开发—创建游戏窗口

    第1.2行代码:导入了模块sys 和pygame .模块pygame 包含开发游戏所需的功能.玩家退出时,我们将使用模块sys 来退出游戏. 第3行至19行,是函数run_game()的实现. 第5行 ...

  4. python飞机大战加背景音乐_python实现飞机大战小游戏 python飞机大战中的音频文件怎么改成MP3...

    怎么样用Python写飞机大战游戏 python开发飞机大战外星人游戏怎么弄双人模式新的一年,哪怕仍是一个人,也要活得像一支队伍,为自己的头脑和心灵招兵买马,不气馁,有召唤,爱自由. 主函数 impo ...

  5. python五子棋人机对战_Python:游戏:五子棋之人机对战

    原标题:Python:游戏:五子棋之人机对战 开端 画棋盘 首先肯定是要画出棋盘来,用 pygame 画出一个 19 × 19 或 15 × 15 的棋盘并不是什么难事,这在之前的文章中已经多次用到, ...

  6. python贪吃蛇源码_Python:游戏:贪吃蛇(附源码)

    Python:游戏:贪吃蛇(附源码) 发布时间:2018-09-05 09:59, 浏览次数:1295 , 标签: Python 贪吃蛇是个非常简单的游戏,适合练手. 首先分析一下这个游戏 1.蛇怎么 ...

  7. python游戏背景音乐循环_Python:pygame游戏编程之旅六(游戏中的声音处理)

    一款人性化的游戏中缺少不了声音,比如角色挂时惨叫一声,或PK时武器交锋的声音,还有就是英雄出场时的背景音乐,无不涉及到声音,本节我们就来看一下pygame中如何控制声音,下面是一个例子,但博客上传不了 ...

  8. python代码300行程序_Python:游戏:300行代码实现俄罗斯方块

    本文代码基于 python3.6 和 pygame1.9.4. 五子棋比起我之前写的几款游戏来说,难度提高了不少.如果是人与人对战,那么,电脑只需要判断是否赢了就可以.如果是人机对战,那你还得让电脑知 ...

  9. python求数列的积_python小游戏学习笔记4-2(列表【】,数列矩阵排列)

    x数值的单列写法: xlist = [1,2,3,4,5] for x in xlist: print(x) 关于len(长度)的用法:(结果为:5)(lens的作用就是把list 化为单个数字(内容 ...

最新文章

  1. linux下find命令的使用和总结
  2. Ubuntu9.10使用windows的字体的方法!
  3. Javascript刷新全集
  4. [转载] 数据库分析手记 —— InnoDB锁机制分析
  5. Java -- 网络编程(一):Client与Server之间的数据传送
  6. 如果你20秒钟还看不懂这个短信的话,说明你还纯洁!?
  7. vba 检查一个文件夹中的文件在另一个文件夹中是否存在(不含扩展名)
  8. python爬虫加强版!!!!想爬哪个队伍就爬那个
  9. echarts 按需引入模_【React】react项目引入echarts插件
  10. $.ajax与$.post、$.get的区别
  11. DHCP详细工作过程(转)
  12. 算法分析中的空间复杂度
  13. html5 blob video 下载
  14. 计算机网络 自顶向下方法 (一) 笔记 总结 第一章 概述
  15. 三代Pacbio进行细菌16S全长测序
  16. 计算机专业的优秀学长寄语大一新生,学长学姐对大一新生的寄语 大学学长学姐寄语励志...
  17. 项目中生成requests.txt文件(virtualenv与pipreqs)
  18. 2019年9月全国计算机公共基础题库【速刷版】
  19. “云”溪笔谈 | VR——看得见的未来
  20. python保留两位小数_python格式化输出保留2位小数的实现方法

热门文章

  1. [Oracle]In-Memory的Join Group 位于内存的何处?
  2. 实力见证,再度折桂 | 云扩科技入选《The Forrester Wave 中国RPA行业发展报告, Q3 2022》
  3. 再见ip.taobao,全网显示 IP 归属地,用上这个开源库,实现也太简单了!
  4. Delphi指针样式控件代码
  5. 光谱特征选择---竞争自适应重加权采样CARS
  6. 亲测可用:两个在线的测试数据生成工具
  7. C++水电管理信息系统
  8. Arcmap设置经纬网只显示度不显示分
  9. 快上车!Java技术开发大厂直通车马上启动!
  10. 欢迎观看Toni_hou的#生活5