第二课、实现飞机大战

一、项目介绍

  项目实战:飞机大战

  课程目标

  • 掌握面向对象分析和开发的思想
  • 能对项目进行拆分,进行模块化开发
  • 了解项目开发的基本流程
  • 理解并运用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. java使用apache-commons-lang3生成随机字符串(可自定义规则)

    在日常开发中,我们经常会遇到生成随机字符串的需求.可能是大小写字母+数字,也可能是其他各种字符.作为一个常用功能,我们完全没必要自己实现,有很多优质的类库已经做的很完善了.本文介绍的就是apache- ...

  2. EMQX+阿里云飞天洛神云网络 NLB:MQTT 消息亿级并发、千万级吞吐性能达成

    随着物联网技术的发展与各行业数字化进程的推进,全球物联网设备连接规模与日俱增.一个可靠高效的物联网系统需要具备高并发.大吞吐.低时延的数据处理能力,支撑海量物联网数据的接入与分析,从而进一步挖掘数据价 ...

  3. Plus 3.0 (ThinkSNS+)centos8.5+php7.4在阿里云部署过程

    参考:https://zhiyicx.github.io/ts-api-docs/guide/installation/using-nginx-and-fpm-publish-website.html ...

  4. 路由器、集线器、交换机分别工作在OSI七层协议模型的哪一层

    路由器三层(网络层): 集线器一层(物理层): 普通交换机二层(数据链路层). 现在也有工作在第三层的交换机. OSI七层网络模型由下至上为1至7层,分别为物理层(Physical layer),数据 ...

  5. Ubuntu16 改 静态IP的方法

    https://blog.csdn.net/mdw5521/article/details/79270035

  6. (K8s学习笔记七)Pod的升级和回滚

    1.Deployment的升级 示例:滚动升级busybox-deployment容器 apiVersion: apps/v1 kind: Deployment metadata: name: bus ...

  7. 页面布局 Stack 层叠组件 Stack 与 Align Stack 与 Positioned 实现定位布局

    一.Flutter Stack 组件 Stack 表示堆的意思,我们可以用 Stack 或者 Stack 结合 Align 或者 Stack 结合 Positiond 来实现页面的定位布局 属性 说明 ...

  8. 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 ...

  9. (转).Net Web开发技术栈

    作者:小曾出处:http://www.cnblogs.com/1996V/p/7700087.html 有很多朋友有的因为兴趣,有的因为生计而走向了.Net中,有很多朋友想学,但是又不知道怎么学,学什 ...

  10. beforeRouteLeave vue监听返回的使用方法

    beforeRouteLeave(to, from, next) { console.log(this, to, from, next, "thissss"); if (to.fu ...