【1】【MOOC】Python游戏开发入门-北京理工大学【第二部分-游戏开发之框架】

学习地址链接:http://www.icourse163.org/course/0809BIT021E-1001873001?utm_campaign=share&utm_medium=androidShare&utm_source=qq

pygame安装方法:http://www.cnblogs.com/GraceSkyer/p/8004004.html

1.Pygame 简介与安装

Python优秀的第三方库
SDL:各个操作系统上提供的一种能直接与计算机外设打交道的一个第三方库
在这个库基础上做了相关封装

安装:在win平台:“以管理员身份运行”cmd,执行pip install pygame
win平台:“以管理员身份运行”cmd,执行python -m pygame.examples.aliens

Pygame 是Python最经典的2D游戏开发第三方库,也支持3D游戏开发
Pygame 是一种游戏开发引擎,基本逻辑具有参考价值

==============================================================================

2.Pygame 最小开发框架及最小游戏

最小开发框架与极简开发框架:

源代码:
 1 # Pygame的Hello World程序,包含了Pygame最小开发框架。
 2 import pygame,sys
 3  
 4 # 对pygame内部各功能模块进行初始化创建及变量设置,默认调用
 5 pygame.init()
 6 # 初始化显示窗口,第一个参数是一个二元组,分别表示窗口的宽度和高度
 7 screen = pygame.display.set_mode((600, 400))
 8 # 设置显示窗口的标题内容,参数是一个字符串类型
 9 pygame.display.set_caption("Pygame游戏之旅")
10  
11 while True:
12     # 从pygame的事件队列中取出事件,并从队列中删除该事件,例如:键盘按下是一个事件
13     for event in pygame.event.get():
14         # 获得事件类型,并逐类响应;pygame.QUIT是pygame中定义的退出事件常量
15         if event.type == pygame.QUIT:
16             sys.exit()
17     # 对显示窗口进行更新,默认窗口全部重绘
18     pygame.display.update()
Pygame的Hello World程序,包含了Pygame最小开发框架。

 

 

sys是python的标准库
sys提供python运行时环境变量的操控
sys.exit()用于退出结束游戏并退出

==============================================================================

3.壁球小游戏(展示型)与图像的基本使用

 


需求到实现的三个关键要素:
1 壁球:游戏需要一个壁球,通过图片引入
2 壁球运动:壁球能上下左右运动(每次向右及向下移动1个像素)
3 壁球反弹:壁球能在上下左右边缘反弹(到达边缘后,速度取反即可)

通过链接下载壁球图片:https://python123.io/PY15/PYG02-ball.gif
图片保存为gif格式,和.py文件保存在同一个文件夹中。

注意坐标轴体系:窗口左上角坐标(0,0),横轴正向向右,纵轴正向向下。

源代码:

 1 # Pygame壁球小游戏(展示型)
 2 import pygame,sys
 3  
 4 pygame.init()
 5 size = width, height = 600, 400
 6 speed = [1,1]
 7 BLACK = 0, 0, 0
 8  
 9 screen = pygame.display.set_mode(size)
10 pygame.display.set_caption("Pygame壁球")
11  
12 ball = pygame.image.load("PYG02-ball.gif")
13 ballrect = ball.get_rect()
14  
15 while True:
16     for event in pygame.event.get():
17         if event.type == pygame.QUIT:
18             sys.exit()
19     ballrect = ballrect.move(speed[0], speed[1])
20     if ballrect.left < 0 or ballrect.right > width:
21         speed[0] = - speed[0]
22     if ballrect.top < 0 or ballrect.bottom > height:
23         speed[1] = - speed[1]
24  
25     screen.fill(BLACK)
26     screen.blit(ball, ballrect)
27     pygame.display.update()
Pygame壁球小游戏(展示型)


==============================================================================

4.壁球小游戏(节奏型)与屏幕的帧率设置

需求:壁球可以按照一定速度运动
需求到实现的关键要素:
壁球速度:如何控制壁球的运动速度

每次循环壁球运动一步;控制循环间隔即可控制速度;(展示型)在尽最大能力运动
pygame.time.Clock() 创建一个Clock对象,用于操作时间
Clock.tick(fps) 控制帧速度,即窗口刷新速度,表示每秒fps次帧刷新
视频中每次展示的静态图像称为帧

源代码:
 1 # Pygame壁球小游戏(节奏型)
 2 import pygame,sys
 3  
 4 pygame.init()
 5 size = width, height = 600, 400
 6 speed = [1,1]
 7 BLACK = 0, 0, 0
 8 screen = pygame.display.set_mode(size)
 9 pygame.display.set_caption("Pygame壁球")
10 ball = pygame.image.load("PYG02-ball.gif")
11 ballrect = ball.get_rect()
12 fps = 300
13 fclock = pygame.time.Clock()
14  
15 while True:
16     for event in pygame.event.get():
17         if event.type == pygame.QUIT:
18             sys.exit()
19     ballrect = ballrect.move(speed[0], speed[1])
20     if ballrect.left < 0 or ballrect.right > width:
21         speed[0] = - speed[0]
22     if ballrect.top < 0 or ballrect.bottom > height:
23         speed[1] = - speed[1]
24  
25     screen.fill(BLACK)
26     screen.blit(ball, ballrect)
27     pygame.display.update()
28     fclock.tick(fps)
Pygame壁球小游戏(节奏型)

==============================================================================

5.壁球小游戏(操控型)与键盘的基本使用

需求:通过键盘的上下左右控制壁球运动速度,规则如下:
:纵向绝对速度增加1个像素【纵向加速】
:【纵向减速】
:【横向减速】
:【横向加速】

需求到实现的关键要素:
键盘使用:如何获取键盘的操作事件
速度调节:根据对应按键调节壁球运动速度

键盘使用
Pygame采用事件来对应键盘操作
获取事件将得到键盘输入
不同按键编写操作函数即可

 

源代码:

 1 # Pygame壁球小游戏(操控型)
 2 import pygame,sys
 3  
 4 pygame.init()
 5 size = width, height = 600, 400
 6 speed = [1,1]
 7 BLACK = 0, 0, 0
 8 screen = pygame.display.set_mode(size)
 9 pygame.display.set_caption("Pygame壁球")
10 ball = pygame.image.load("PYG02-ball.gif")
11 ballrect = ball.get_rect()
12 fps = 300
13 fclock = pygame.time.Clock()
14  
15 while True:
16     for event in pygame.event.get():
17         if event.type == pygame.QUIT:
18             sys.exit()
19         elif event.type == pygame.KEYDOWN:
20             if event.key == pygame.K_LEFT:
21                 speed[0] = speed[0] if speed[0] == 0 else (abs(speed[0]) - 1)*int(speed[0]/abs(speed[0]))
22             elif event.key == pygame.K_RIGHT:
23                 speed[0] = speed[0] + 1 if speed[0] > 0 else speed[0] - 1
24             elif event.key == pygame.K_UP:
25                 speed[1] = speed[1] + 1 if speed[1] > 0 else speed[1] - 1
26             elif event.key == pygame.K_DOWN:
27                 speed[1] = speed[1] if speed[1] == 0 else (abs(speed[1]) - 1)*int(speed[1]/abs(speed[1]))
28     ballrect = ballrect.move(speed)
29     if ballrect.left < 0 or ballrect.right > width:
30         speed[0] = - speed[0]
31     if ballrect.top < 0 or ballrect.bottom > height:
32         speed[1] = - speed[1]
33  
34     screen.fill(BLACK)
35     screen.blit(ball, ballrect)
36     pygame.display.update()
37     fclock.tick(fps)
Pygame壁球小游戏(操控型)

 

 
posted @ 2017-12-08 13:26  GraceSkyer  阅读(2845)  评论(0编辑  收藏  举报

~~~~~~ACM大牛语录,激励一下~~~~~~

为了世界的和平,为了女生的安全,我拼命做题,做题,做题!

用最短的时间,刷最多的题!

给我一滴泪,我就看到了你全部的海洋!

seize the hour, seize the day.

人生难免有无奈,幸福走远了,或是感叹幸福来迟了.其实我一直相信,无论手中的幸福是多么微不足道的感觉,我会把握住那每一分,每一秒,当幸福依旧像那百鸟般飞逝,终究无法掌握时,我会感谢它,曾经降临过!

A自己的题,让别人郁闷去吧

WA肠中过,AC心中留 TLE耳边过,AC特别牛

天然的悲苦和伤逝,过去有过,以后还会有

^*^一步一步往上爬^*^

AC就像练级,比赛就像PK. 练级不如PK好玩

其实,世上本没有ACM,AC的人多了,也便有了!

AC无止尽~ Seek you forever~

找呀找呀找水题,找到一个AC一个呀!

AC是检验程序的唯一标准。

真的猛士,敢于直面惨淡的人生,敢于正视淋漓的鲜血……