【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学习Day06】注释种类、符号及用法
注释种类 单行注释:只能注释一行文字 多行注释:可以注释一段文字 文档注释:用来生成说明文件 注释符号及用法 单行注释:// //后面写注释 多行注释:/**/ /* 我是注释 我是注释 我是注释 * ...
- 分布式锁 -- redis
原理 redis设置一个key和value,如果存在则获取锁失败,不存在则获取锁成功处理业务,业务处理完成后删除这条数据,可以带个失效时间. 代码 public void handleInvoice( ...
- chia P图安装
https://techtellectual.com/chia-plotting-guide-installing-plotman-and-mad-max-in-linux/ Chia 绘图指南:在 ...
- 【Python实例】用脚本自动拿一个或多个仿真环境
注1:之前使用的是perl,现在尝试切换到python; 注2:该脚本用于实现自动拿仿真环境,里面应该还有很多不足之处,后续逐渐完善; 注3:假设脚本名字为get_env.py,直接执行脚本,会有两次 ...
- java后端JVM面试资料
目录 JDK,JRE,JVM三者的区别与联系 讲⼀讲JVM跨平台与跨语⾔ JVM的运⾏时数据区有哪些? 什么是堆内存?堆内存包含哪些部分? 什么是内存溢出 什么是内存泄漏?与内存溢出有什么关系? 对象 ...
- RSA 非对称加密
原文链接:https://www.jianshu.com/p/d56a72013392 RSA 是一种非对称加密算法,在实际业务中经常使用此算法对数据进行加密.但是它的加解密速度较慢,不太适用于高并发 ...
- Rest-Assured:发送PATCH请求:更新Hello-imook(java.lang.IllegalArgumentException: Invalid number of path parameters. Expected 2, was 0. Undefined path parameters are: owner, repo.)
代码: /* * 发送PATCH请求:更新Hello-imook */ @Test public void test003_PatchMethod() { S ...
- 常见的hash数据结构
遍历 hash表是一种比较简单和直观的数据结构,在查找时也有很好的性能.但是hash表不能提供有序遍历,这个是其特性决定,所以不足为奇.但是,更为实际的一个问题是如果遍历整个hash表中的所有元素? ...
- RayLink 远控软件又推出 2 个重磅宝藏功能免费用
你有没有在远程办公时,担心他人偷窥电脑?以致于保密性资料或私密信息,遭到泄露.创意被剽窃......又或是遇到过邻座同事屏幕前明明没人,鼠标箭头却自个浏览起网页的惊悚画面? 如果你有上述情况,建议使用 ...
- c语言学习---void 数据类型
这样的语法是错误的: void a = 10; void表示无类型, 这样定义一个变量a, 编译器是无法知道给a分配多大的内存空间的 #include<stdio.h> #include ...