第二课、实现飞机大战

一、项目介绍

  项目实战:飞机大战

  课程目标

  • 掌握面向对象分析和开发的思想
  • 能对项目进行拆分,进行模块化开发
  • 了解项目开发的基本流程
  • 理解并运用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. Redis 实战(一)AOF 持久化配置和数据恢复

    真枪实弹:AOF 持久化配置和数据恢复 大家好,我是悟空呀. 如果你曾经背过 RDB 和 AOF 的面试八股文,那么对 AOF 肯定不陌生,但如果只停留在应付面试阶段,对于提高自己的技术是远远不够的, ...

  2. Cannot add middleware after an application has started

    This helped: Open the Command Prompt or the Windows PowerShell. Navigate to your Stable Diffusion fo ...

  3. Stream流、lambda表达式、方法引用、构造引用

    函数式接口 函数接口为lambda表达式和方法引用提供目标类型,就是提供支持的接口里面只有且必须只有一个抽象方法, 如果接口只有一个抽象方法,java默认他为函数式接口 @FunctionalInte ...

  4. QueryDet: Cascaded Sparse Query for Accelerating High-Resolution Small Object Detection(QueryDet:用于加速高分辨率小目标检测的级联稀疏查询)

    QueryDet: Cascaded Sparse Query for Accelerating High-Resolution Small Object Detection(QueryDet:用于加 ...

  5. windows 设置网卡跳跃点

    查看路由表route print -4 添加永久路由表:192.168.1.1(网关)route add 0.0.0.0 mask 255.255.255.0 192.168.1.1 metric 1 ...

  6. iras point sources

    Object/Coordinate Source Type Glon Glat Equatorial J2000 19:03:44.3977 +5:09:51.942 Coordinate   38. ...

  7. Dynamics 365 登录后网页显示空白

    检查IIS的站点,身份验证,是否禁用了windows身份验证以及匿名身份认证:如果是,则启用

  8. sap IUT240 Contract Accounts Receivable and Payable pdf

    sap IUT240 Contract Accounts Receivable and Payable  pdf sap IUT240 Contract Accounts Receivable and ...

  9. php7安装mogodb

    本文教程只在 PHP7 安装使用!!! PHP7 Mongdb 扩展安装 我们使用 pecl 命令来安装: $ /usr/local/php7/bin/pecl install mongodb 执行成 ...

  10. Profiler中WaitForTargetFPS详解【转】

    WaitForTargetFPS 该参数一般出现在 CPU开销过低,且通过设定了目标帧率的情况下(Application.targetFrameRate).当上一帧低于目标帧率时,将会在本帧产生一个W ...