第二课、实现飞机大战

一、项目介绍

  项目实战:飞机大战

  课程目标

  • 掌握面向对象分析和开发的思想
  • 能对项目进行拆分,进行模块化开发
  • 了解项目开发的基本流程
  • 理解并运用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()
 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】第一模块 步骤四 第二课、实现飞机大战(未完待续)的更多相关文章

  1. [python]爬代理ip v2.0(未完待续)

    爬代理ip 所有的代码都放到了我的github上面, HTTP代理常识 HTTP代理按匿名度可分为透明代理.匿名代理和高度匿名代理. 特别感谢:勤奋的小孩 在评论中指出我文章中的错误. REMOTE_ ...

  2. 疯狂Java:突破程序员基本功的16课-李刚编著 学习笔记(未完待续)

    突破程序员基本功(16课) 数组 静态语言: 在编译的时候就能确定数据类型的语言,大多静态语言要求在使用变量之前必须声明数据类型(少数具有强推导能力的现代语言不用) 动态语言: 在程序运行时确定数据类 ...

  3. Python之路第一课Day7--随堂笔记(面向对象编程进阶...未完待续 )

    本节内容: 面向对象高级语法部分 静态方法.类方法.属性方法 类的特殊方法 反射 异常处理 Socket开发基础 作业:开发一个支持多用户在线的FTP程序 面向对象高级语法部分 一.静态方法 通过@s ...

  4. Python第一模块

    一.Python简介 二.Python种类 三.Python环境  windows: 1.需要配置环境变量 2.更新:卸载重装 linux:1.常用命令: 查看默认Python版本 Python -V ...

  5. python第一模块数据类型

    一·进制之间的转换 十进制转换为二进制:逆序取余法. 二进制转换为十进制:如1101  1*2^0 + 0*2^1 + 1*2^2 +1 十六进制转换为二进制:231     0010  0011   ...

  6. Python之路第一课Day9--随堂笔记之一(堡垒机实例以及数据库操作)未完待续....

    一.堡垒机前戏 开发堡垒机之前,先来学习Python的paramiko模块,该模块机遇SSH用于连接远程服务器并执行相关操作 SSHClient 用于连接远程服务器并执行基本命令 基于用户名密码连接: ...

  7. python第一模块基础语法

    一·python和各大高级语言的优缺点比较 1.c语言开发效率低 2.c++开发效率高于c语言,低于java,python. 3.java代码臃肿,设计复杂,库繁杂量多. 4.PHP应用领域单一,且运 ...

  8. python 安装模块步骤

    1.下载 pyocr-0.4.1.tar.gz   tar.gz文件  解压  放到 c:/python27 文件夹下面 C:\Python27\pyocr-0.4.1  直接 cmd 命令 进入   ...

  9. Python模块:Random(未完待续)

    本文基于Python 3.6.5的官文random编写. random模块简介 random为各种数学分布算法(distributions)实现了伪随机数生成器. 对于整数,是从一个范围中均匀选择(u ...

  10. 【Android学习】《Android开发视频教程》第二季笔记(未完待续)

    视频地址: http://study.163.com/course/courseMain.htm?courseId=207001 课时22  Activity生命周期(一) 1.如何在一个应用中添加新 ...

随机推荐

  1. MySQL连接提示 public key retrieval is not allowed

    使用DBeaver连接mysql数据提示public key retrieval is not allowed 修改DBeaver的驱动属性中的allowPublicKeyRetrieval

  2. Nginx基础篇

    目录 一.nginx基础篇 1.Nginx开源版本安装 2.Nginx的基础配置 3.虚拟主机与域名解析 4.ServerName匹配规则 5.反向代理 6.动静分离 7.location后符号的匹配 ...

  3. EMQX Cloud Serverless 正式上线:三秒部署、按量计费的 MQTT Serverless 云服务

    近日,全球领先的开源物联网数据基础设施软件供应商 EMQ 正式发布了 MQTT Serverless 云服务 -- EMQX Cloud Serverless 的 Beta 版本,开创性地采用弹性多租 ...

  4. Scala集合总结

    Scala同时支持可变集合和不可变集合,包含两个包: 可变集合:scala.collection.mutable 不可变集合:scala.collection.immutable Scala默认采用不 ...

  5. MyLiveCam使用条款与免责协议

    MyLiveCam(以下简称"我们")在此特别提醒您务必认真阅读.充分理解本<使用条款与免责协议>(以下简称"本协议")中各条款并选择是否接受本协议 ...

  6. js 动态给table添加、删除行。

    1.添加table 行 function addtablTr() { var $table = $("#abc"); var vTr = '<tr><td> ...

  7. Kafka Reblance & max.poll.interval.ms 重复消费问题

    1. 什么是kafka Reblance 消费组是MQ中一个非常重要的概念,一个消费组监听一个Topic时,Kafka服务端会给消费组中的每一个实例,进行队列分配,每一个实例指定消费一个或多个队列(分 ...

  8. fiddler 调试

    如果本地代理js发现跨域,需要手动修改自定义规则 1 static function OnBeforeResponse(oSession: Session) { 2 if (m_Hide304s &a ...

  9. spring mvc基本介绍

    1 MVC 盖帘: MVC 是模型(model)-视图(view)-控制器(controller)的缩写, 是一种用于设计编写 Web 应用程序表现层的模式. MVC 设计模式的三大角色: Model ...

  10. Blob下载

    下载方式 const aBlob = new Blob( array, options ); export function downLoadFile(data: ArrayBuffer, fileN ...