【python】第一模块 步骤四 第二课、实现飞机大战(未完待续)
第二课、实现飞机大战
一、项目介绍
项目实战:飞机大战
课程目标
- 掌握面向对象分析和开发的思想
- 能对项目进行拆分,进行模块化开发
- 了解项目开发的基本流程
- 理解并运用python的包、模块相关知识
- 理解并运用文件读写,函数式编程
- 理解简单2D游戏开发的基本思路
- 能独立开发简单的2D游戏项目
- 掌握IDE的调试技巧
项目功能模块
- 我方飞机
- 敌方小型飞机
- 敌方中型飞机
- 图片资源
- 音效资源
- 游戏历史
- 子弹
- 游戏展示结果
所需技能点
- python的基础,包括变量、字符串、分支、条件控制、循环等
- python中的运算符及运算符的优先级
- 列表、元组、字典等数据类型的使用
- 函数式编程,形参、实参、装饰器
- 面向对象分析方法,类及类的实例,类变量、实例变量、方法等
- 包与模块,标准模块和第三方模块的使用
- python多线程、多进程
- 文件读写
- pygame
技能重点说明
- python的包与模块,标准模块和第三方模块的使用
- 面型对象分析方法,类及类的实例,类变量,实例变量,方法等
- python多线程、多进程
- 文件读写
- 游戏开发入门
技能难点说明
- 对python多线程、多进程的运用
- 面向对象分析及开发方法
- 游戏开发入门及对pygame的使用
环境要求
| python及第三方模块 | 开发工具 | 操作系统 |
| python3.7 | pycharm | Windows10 |
| pygame1.9.4 |
学习建议
- 老师敲过的代码要跟着敲一遍,理解其中的意思
- 扎实python基础知识
- 多练习,多思考,多看文档
二、pygame的介绍及使用
2.1 pygame入门
章节概要
- 介绍及安装
- 介绍:2D游戏开发工具包
- 安装:
- >>>pip install pygame
- import pygame
- 帮助文档
- https://www.pygame.org/docs/
- 文字及颜色
- 游戏中的图片
- 游戏音效
- 动画切换
- 精灵及精灵组
- 碰撞检测
Hello World
- 引入相关包:import pygame,sys等
- 初始化:pygame.init()
- 得到窗口pygame.Surface对象:pygame.display.set_mode((400,300))
- 游戏主循环
- 处理游戏事件
- 更新游戏状态
- 在屏幕上绘制
- 游戏事件
- for event in pygame.event.get():
- #退出游戏事件
- if event.type == QUIT:
- pygame.quit()
- sys.exit()
- for event in pygame.event.get():
1 # 1.引入相关的包
2 import sys, pygame
3
4 # 2.pygame进行初始化
5 pygame.init()
6
7 size = width, height = 320, 240
8 speed = [2, 2]
9 black = 0, 0, 0
10
11 # 3.得到屏幕对象Surface
12 screen = pygame.display.set_mode(size)
13
14 ball = pygame.image.load("intro_ball.gif")
15 ballrect = ball.get_rect()
16
17 # 4.游戏主循环
18 while 1:
19
20 # 处理游戏的事件
21 for event in pygame.event.get():
22 if event.type == pygame.QUIT: sys.exit()
23
24 # 更新游戏的状态
25 ballrect = ballrect.move(speed)
26 if ballrect.left < 0 or ballrect.right > width:
27 speed[0] = -speed[0]
28 if ballrect.top < 0 or ballrect.bottom > height:
29 speed[1] = -speed[1]
30
31 # 在屏幕上进行绘制
32 screen.fill(black)
33 screen.blit(ball, ballrect)
34 pygame.display.flip()
2.2 pygame中的图片、颜色和形状
1.游戏中的图片
- 图片加载
bg=pygame.image.load('bg.png')
- 在屏幕上绘制
screen.blit(bg,bg.get_rect())
2.像素中的坐标
3.游戏中的颜色
- 使用RGB表示
R(red):红色 G(green):绿色 B(blue):蓝色
取值范围:0-255
- RGBA表示透明色
A(alpha);0-255
4.游戏中的形状
- 线
pygame.draw.line(screen,RED,(1,1),(50,50),6)
- 矩形
pygame.draw.rect(screen,RED,(10,20,200,300),10)
- 圆
pygame.draw.circle(screen,RED,(100,100),50,5)
1 import sys, pygame
2
3 # 初始化pygame
4 pygame.init()
5
6 # 屏幕对象
7 screen = pygame.display.set_mode((500, 500))
8
9 #加载图片
10 ball = pygame.image.load('intro_ball.gif')
11
12 red = pygame.Color(255,0,0)
13
14 # 游戏主循环
15 while True:
16 # 处理事件
17 for event in pygame.event.get():
18 if event.type == pygame.QUIT:
19 pygame.quit()
20 sys.exit()
21 # 更新状态
22
23 # 画线
24 pygame.draw.line(screen,red,(10,10),(200,200),10)
25
26 # 画矩形
27 pygame.draw.rect(screen,red,(10,10,200,200),5)
28
29 # 画圆
30 pygame.draw.circle(screen,red,(100,100),50,5)
31
32 # 绘制
33 screen.blit(ball,(100,100))
34 pygame.display.flip()
2.3 pygame中的文字
1.游戏中的文字
- 加载字体
font = pygame.font.SysFont('华文楷书',32)
- 得到Surface对象
text = font.render('得分:0',True,RED,BLUE)
- 在屏幕上绘制
screen.blit(text,text.get_rect())
2.游戏中的音效
- 加载背景音乐
pygame.mixer.music.load('./bg_music.mp3')
- 无限循环播放
pygame.mixer.music.play(-1)
1 import pygame,sys
2
3 pygame.init()
4
5
6 screen = pygame.display.set_mode((500,500))
7
8
9 # 加载字体['arial', 'arialblack', 'bahnschrift', 'calibri', 'cambriacambriamath', 'cambria', 'candara', 'comicsansms', 'consolas', 'constantia', 'corbel', 'couriernew', 'ebrima', 'franklingothicmedium', 'gabriola', 'gadugi', 'georgia', 'impact', 'inkfree', 'javanesetext', 'leelawadeeui', 'leelawadeeuisemilight', 'lucidaconsole', 'lucidasans', 'malgungothic', 'malgungothicsemilight', 'microsofthimalaya', 'microsoftjhengheimicrosoftjhengheiui', 'microsoftjhengheimicrosoftjhengheiuibold', 'microsoftjhengheimicrosoftjhengheiuilight', 'microsoftnewtailue', 'microsoftphagspa', 'microsoftsansserif', 'microsofttaile', 'microsoftyaheimicrosoftyaheiui', 'microsoftyaheimicrosoftyaheiuibold', 'microsoftyaheimicrosoftyaheiuilight', 'microsoftyibaiti', 'mingliuextbpmingliuextbmingliuhkscsextb', 'mongolianbaiti', 'msgothicmsuigothicmspgothic', 'mvboli', 'myanmartext', 'nirmalaui', 'nirmalauisemilight', 'palatinolinotype', 'segoemdl2assets', 'segoeprint', 'segoescript', 'segoeui', 'segoeuiblack', 'segoeuiemoji', 'segoeuihistoric', 'segoeuisemibold', 'segoeuisemilight', 'segoeuisymbol', 'simsunnsimsun', 'simsunextb', 'sitkasmallsitkatextsitkasubheadingsitkaheadingsitkadisplaysitkabanner', 'sitkasmallsitkatextboldsitkasubheadingboldsitkaheadingboldsitkadisplayboldsitkabannerbold', 'sitkasmallsitkatextbolditalicsitkasubheadingbolditalicsitkaheadingbolditalicsitkadisplaybolditalicsitkabannerbolditalic', 'sitkasmallsitkatextitalicsitkasubheadingitalicsitkaheadingitalicsitkadisplayitalicsitkabanneritalic', 'sylfaen', 'symbol', 'tahoma', 'timesnewroman', 'trebuchetms', 'verdana', 'webdings', 'wingdings', 'yugothicyugothicuisemiboldyugothicuibold', 'yugothicyugothicuilight', 'yugothicmediumyugothicuiregular', 'yugothicregularyugothicuisemilight', 'dengxian', 'fangsong', 'kaiti', 'simhei', 'holomdl2assets']
10 fonts = pygame.font.get_fonts()
11 print(fonts)
12
13 red = pygame.Color(255,0,0)
14
15 # 加粗 斜体
16 # 方式一:使用系统默认的字体来进行加载
17 #font = pygame.font.SysFont('fangsong',40,True,True)
18 # 方式二:自己准备好一个字体文件ttf,放到咱们的项目里面
19 font = pygame.font.Font('simfang.ttf',40)
20 # 文字对象
21 text = font.render('得分',True,red)
22
23 # 加载音乐
24 bg_music = pygame.mixer.music.load('game_music.mp3')
25 # 循环播放背景音乐
26 pygame.mixer.music.play(-1)
27 # 设置音量大小(0-1),值越小,音量越小
28 pygame.mixer.music.set_volume(0.5)
29
30 while True:
31 for event in pygame.event.get():
32 if event.type == pygame.QUIT:
33 pygame.quit()
34 sys.exit()
35
36 screen.blit(text, (20,20))
37 pygame.display.flip()
2.4 pygame动画切换及音效
动画切换
- 帧速率
用FPS或帧/秒来度量
- 通过pygame.time.Clock()中的tick(num)控制
- 算法切换
精灵和精灵组
- 什么是精灵
精灵可以认为是一个个小图片,一种可以在屏幕上移动的图形对象,并且可以与其他图形对象交互。精灵图像可以是使用pygame绘制函数绘制的图像,也可以是原来就有的图像文件。
- 什么是精灵组
精灵组是一个容器,用于管理组内精灵的绘制和更新。
1 import pygame,sys
2
3 pygame.init()
4
5
6 screen = pygame.display.set_mode((500,500))
7
8 # 加载图片
9 image = pygame.image.load('hero1.png')
10 image2 = pygame.image.load('hero2.png')
11
12 clock = pygame.time.Clock()
13
14 counter = 0
15
16 while True:
17 counter =+ 1
18 print(111)
19 for event in pygame.event.get():
20 if event.type == pygame.QUIT:
21 pygame.quit()
22 sys.exit()
23
24 clock.tick(30)
25
26 # 绘制白色屏幕
27 screen.fill(pygame.Color(255,255,255))
28
29 # 绘制图片
30 if counter % 5 == 0:
31 screen.blit(image, (20,20))
32 else:
33 screen.blit(image2, (20, 20))
34
35 pygame.display.flip()
2.5 pygame自定义精灵及碰撞检测
碰撞检测
- 两个精灵之间的矩形检测
pygame.sprite.collide_rect(sprite_1,sprite_2)
pygame.sprite.collide_rect_ratio(0.5)(sprite_1,sprite_2)
(未完待续)
【python】第一模块 步骤四 第二课、实现飞机大战(未完待续)的更多相关文章
- [python]爬代理ip v2.0(未完待续)
爬代理ip 所有的代码都放到了我的github上面, HTTP代理常识 HTTP代理按匿名度可分为透明代理.匿名代理和高度匿名代理. 特别感谢:勤奋的小孩 在评论中指出我文章中的错误. REMOTE_ ...
- 疯狂Java:突破程序员基本功的16课-李刚编著 学习笔记(未完待续)
突破程序员基本功(16课) 数组 静态语言: 在编译的时候就能确定数据类型的语言,大多静态语言要求在使用变量之前必须声明数据类型(少数具有强推导能力的现代语言不用) 动态语言: 在程序运行时确定数据类 ...
- Python之路第一课Day7--随堂笔记(面向对象编程进阶...未完待续 )
本节内容: 面向对象高级语法部分 静态方法.类方法.属性方法 类的特殊方法 反射 异常处理 Socket开发基础 作业:开发一个支持多用户在线的FTP程序 面向对象高级语法部分 一.静态方法 通过@s ...
- Python第一模块
一.Python简介 二.Python种类 三.Python环境 windows: 1.需要配置环境变量 2.更新:卸载重装 linux:1.常用命令: 查看默认Python版本 Python -V ...
- python第一模块数据类型
一·进制之间的转换 十进制转换为二进制:逆序取余法. 二进制转换为十进制:如1101 1*2^0 + 0*2^1 + 1*2^2 +1 十六进制转换为二进制:231 0010 0011 ...
- Python之路第一课Day9--随堂笔记之一(堡垒机实例以及数据库操作)未完待续....
一.堡垒机前戏 开发堡垒机之前,先来学习Python的paramiko模块,该模块机遇SSH用于连接远程服务器并执行相关操作 SSHClient 用于连接远程服务器并执行基本命令 基于用户名密码连接: ...
- python第一模块基础语法
一·python和各大高级语言的优缺点比较 1.c语言开发效率低 2.c++开发效率高于c语言,低于java,python. 3.java代码臃肿,设计复杂,库繁杂量多. 4.PHP应用领域单一,且运 ...
- python 安装模块步骤
1.下载 pyocr-0.4.1.tar.gz tar.gz文件 解压 放到 c:/python27 文件夹下面 C:\Python27\pyocr-0.4.1 直接 cmd 命令 进入 ...
- Python模块:Random(未完待续)
本文基于Python 3.6.5的官文random编写. random模块简介 random为各种数学分布算法(distributions)实现了伪随机数生成器. 对于整数,是从一个范围中均匀选择(u ...
- 【Android学习】《Android开发视频教程》第二季笔记(未完待续)
视频地址: http://study.163.com/course/courseMain.htm?courseId=207001 课时22 Activity生命周期(一) 1.如何在一个应用中添加新 ...
随机推荐
- java使用apache-commons-lang3生成随机字符串(可自定义规则)
在日常开发中,我们经常会遇到生成随机字符串的需求.可能是大小写字母+数字,也可能是其他各种字符.作为一个常用功能,我们完全没必要自己实现,有很多优质的类库已经做的很完善了.本文介绍的就是apache- ...
- EMQX+阿里云飞天洛神云网络 NLB:MQTT 消息亿级并发、千万级吞吐性能达成
随着物联网技术的发展与各行业数字化进程的推进,全球物联网设备连接规模与日俱增.一个可靠高效的物联网系统需要具备高并发.大吞吐.低时延的数据处理能力,支撑海量物联网数据的接入与分析,从而进一步挖掘数据价 ...
- Plus 3.0 (ThinkSNS+)centos8.5+php7.4在阿里云部署过程
参考:https://zhiyicx.github.io/ts-api-docs/guide/installation/using-nginx-and-fpm-publish-website.html ...
- 路由器、集线器、交换机分别工作在OSI七层协议模型的哪一层
路由器三层(网络层): 集线器一层(物理层): 普通交换机二层(数据链路层). 现在也有工作在第三层的交换机. OSI七层网络模型由下至上为1至7层,分别为物理层(Physical layer),数据 ...
- Ubuntu16 改 静态IP的方法
https://blog.csdn.net/mdw5521/article/details/79270035
- (K8s学习笔记七)Pod的升级和回滚
1.Deployment的升级 示例:滚动升级busybox-deployment容器 apiVersion: apps/v1 kind: Deployment metadata: name: bus ...
- 页面布局 Stack 层叠组件 Stack 与 Align Stack 与 Positioned 实现定位布局
一.Flutter Stack 组件 Stack 表示堆的意思,我们可以用 Stack 或者 Stack 结合 Align 或者 Stack 结合 Positiond 来实现页面的定位布局 属性 说明 ...
- 19c 滚动升级
一.环境说明 节点1 节点2 IP 192.168.3.77 192.168.3.88 DB 版本 Oracle 19.6.0.0.0 Oracle 19.6.0.0.0 OS 主机名 oadb1 ...
- (转).Net Web开发技术栈
作者:小曾出处:http://www.cnblogs.com/1996V/p/7700087.html 有很多朋友有的因为兴趣,有的因为生计而走向了.Net中,有很多朋友想学,但是又不知道怎么学,学什 ...
- beforeRouteLeave vue监听返回的使用方法
beforeRouteLeave(to, from, next) { console.log(this, to, from, next, "thissss"); if (to.fu ...