实验13:Pygame游戏编程

一、实验目的和要求

学会Pygame的基本应用

二、实验环境

软件版本:Python 3.10 64_bit

三、实验过程

1、制作一个跳跃的小游戏

(1)代码如下:

1 # -*- coding:utf-8 -*-
 2 import sys                  # 导入sys模块
 3 import pygame               # 导入pygame模块
 4  
 5 pygame.init()                               # 初始化pygame
 6 size = width, height = 640,480             # 设置窗口
 7 screen = pygame.display.set_mode(size)      # 显示窗口
 8 color = (0, 0, 0)                           # 设置颜色
 9  
10 ball = pygame.image.load("ball.png")        # 加载图片
11 ballrect = ball.get_rect()                  # 获取矩形区域
12  
13 speed = [5, 5]                              # 设置移动的X轴、Y轴距离
14 clock = pygame.time.Clock()                 # 设置时钟
15                                             # 执行死循环,确保窗口一直显示
16 while True:
17     clock.tick(60)                          # 每秒执行60次
18     # 检查事件
19     for event in pygame.event.get():
20         if event.type == pygame.QUIT:       # 如果单击关闭窗口,则退出
21             pygame.quit()                   # 退出pygame
22             sys.exit()
23  
24     ballrect = ballrect.move(speed)         # 移动小球
25     # 碰到左右边缘
26     if ballrect.left < 0 or ballrect.right > width:
27         speed[0] = -speed[0]
28     # 碰到上下边缘
29     if ballrect.top < 0 or ballrect.bottom > height:
30         speed[1] = -speed[1]
31  
32     screen.fill(color)                      # 填充颜色
33     screen.blit(ball, ballrect)             # 将图片画到窗口上
34     pygame.display.flip()                   # 更新全部显示

(2)运行结果如图所示:

python pygame 怎么运行 pygame怎么运行游戏代码_小游戏

python pygame 怎么运行 pygame怎么运行游戏代码_初始化方法_02

 

2、开发Flappy Bird游戏

(1)代码如下:

1 import pygame
  2 import sys
  3 import random
  4 
  5 class Bird(object):
  6     """定义一个鸟类"""
  7     def __init__(self):
  8         """定义初始化方法"""
  9         self.birdRect = pygame.Rect(65,50,50,50)      #鸟的矩形
 10         #定义鸟的3种状态列表
 11         self.birdStatus = [pygame.image.load("1.png"),
 12                            pygame.image.load("2.png"),
 13                            pygame.image.load("3.png")]
 14         self.status = 0               #默认飞行状态
 15         self.birdX = 120              #鸟所在X轴坐标
 16         self.birdY = 350              #鸟所在Y轴坐标,即上下飞行高度
 17         self.jump = False             #默认情况小鸟自动降落
 18         self.jumpSpeed = 10           #跳跃高度
 19         self.gravity = 5              #重力
 20         self.dead = False             #默认小鸟生命状态为活着
 21 
 22     def birdUpdate(self):
 23         if self.jump:
 24             #小鸟跳跃
 25             self.jumpSpeed -= 1
 26             self.birdY -= self.jumpSpeed
 27         else:
 28             #小鸟坠落
 29             self.gravity += 0.2
 30             self.birdY += self.gravity
 31         self.birdRect[1] = self.birdY
 32 
 33 class Pipeline(object):
 34      """定义一个管道类"""
 35      def __init__(self):
 36          """定义初始化方法"""
 37          self.wallx = 400;
 38          self.pineUp = pygame.image.load("top.png")
 39          self.pineDown = pygame.image.load("bottom.png")
 40      def updatePipeline(self):
 41          """水平移动"""
 42          self.wallx -= 5
 43          #当管道运行到一定位置,即小鸟飞越管道,分数加1,并且重置管道
 44          if self.wallx < -80:
 45              global score
 46              score += 1
 47              self.wallx = 400
 48 
 49 def createMap():
 50     """定义地图创建方法"""
 51     screen.fill((255,255,255))
 52     screen.blit(background,(0,0))
 53                 
 54     #显示管道
 55     screen.blit(Pipeline.pineUp,(Pipeline.wallx,-300))       #上管道坐标位置
 56     screen.blit(Pipeline.pineDown,(Pipeline.wallx,500))     #下管道坐标位置
 57     Pipeline.updatePipeline()                               #管道移动
 58 
 59     #显示小鸟
 60     if Bird.dead:
 61         Bird.status = 2
 62     elif Bird.jump:
 63         Bird.status = 0
 64     screen.blit(Bird.birdStatus[Bird.status],(Bird.birdX,Bird.birdY))       #设置小鸟坐标
 65     Bird.birdUpdate()
 66     pygame.display.update()
 67 
 68     #显示分数
 69     screen.blit(font.render(" Score:" + str(score),-1,(255,255,255)),(100,50))          #设置颜色及坐标位置
 70     pygame.display.update()
 71 
 72 def checkDead():
 73     #上方管子的矩形位置
 74     upRect = pygame.Rect(Pipeline.wallx,-300,
 75                          Pipeline.pineUp.get_width() - 10,
 76                          Pipeline.pineUp.get_height())
 77     #下方管子的矩形位置
 78     downRect = pygame.Rect(Pipeline.wallx,500,
 79                            Pipeline.pineDown.get_width() - 10,
 80                            Pipeline.pineDown.get_height())
 81     #检测小鸟与上下方管子是否碰撞
 82     if upRect.colliderect(Bird.birdRect) or downRect.colliderect(Bird.birdRect):
 83         Bird.dead = True
 84         return True
 85     #检测小鸟是否飞出上下边界
 86     if not 0<Bird.birdRect[1]<height:
 87         Bird.dead = True
 88         return True
 89     else:
 90         return False
 91 
 92 def getResutl():
 93     final_text1 = "Game over"
 94     final_text2="Your final score is: "+str(score)
 95     ft1_font=pygame.font.SysFont("Arial",70)            #设置第一行文字字体
 96     ft1_surf=font.render(final_text1,1,(242,3,36))      #设置第一行文字颜色
 97     ft2_font=pygame.font.SysFont("Arial",50)            #设置第一行文字字体
 98     ft2_surf=font.render(final_text2,1,(253,177,6))     #设置第一行文字颜色
 99     #设置第一行文字显示位置
100     screen.blit(ft1_surf,[screen.get_width()/2-ft1_surf.get_width()/2,100])
101     #设置第一行文字显示位置
102     screen.blit(ft2_surf,[screen.get_width()/2-ft2_surf.get_width()/2,200])
103     pygame.display.flip()               #更新整个待显示的Surface对象到屏幕上
104 
105 if __name__=='__main__':
106     """主程序"""
107     pygame.init()
108     pygame.font.init()
109     font = pygame.font.SysFont(None,50)
110     size = width,height = 400,680
111     screen = pygame.display.set_mode(size)
112     clock = pygame.time.Clock()
113     Pipeline = Pipeline()
114     Bird = Bird()
115     score = 0
116     while True:
117         clock.tick(60)
118         #轮询事件
119         for event in pygame.event.get():
120             if event.type == pygame.QUIT:
121                 pygame.quit()
122                 sys.exit()
123             if (event.type == pygame.KEYDOWN or event.type == pygame.MOUSEBUTTONDOWN) and not Bird.dead:
124                 Bird.jump = True
125                 Bird.gravity = 5
126                 Bird.jumpSpeed = 10
127         background = pygame.image.load("background.png")  #加载背景图片
128         if checkDead():                                   #检测小鸟生命状态
129             getResutl()                                   #如果小鸟死亡,显示游戏总分
130         else:
131             createMap()                                   #创建地图

(2)运行结果如图所示:

python pygame 怎么运行 pygame怎么运行游戏代码_初始化方法_03




一、实验目的和要求

学会Pygame的基本应用

二、实验环境

软件版本:Python 3.10 64_bit

三、实验过程

1、制作一个跳跃的小游戏

(1)代码如下:

1 # -*- coding:utf-8 -*-
 2 import sys                  # 导入sys模块
 3 import pygame               # 导入pygame模块
 4  
 5 pygame.init()                               # 初始化pygame
 6 size = width, height = 640,480             # 设置窗口
 7 screen = pygame.display.set_mode(size)      # 显示窗口
 8 color = (0, 0, 0)                           # 设置颜色
 9  
10 ball = pygame.image.load("ball.png")        # 加载图片
11 ballrect = ball.get_rect()                  # 获取矩形区域
12  
13 speed = [5, 5]                              # 设置移动的X轴、Y轴距离
14 clock = pygame.time.Clock()                 # 设置时钟
15                                             # 执行死循环,确保窗口一直显示
16 while True:
17     clock.tick(60)                          # 每秒执行60次
18     # 检查事件
19     for event in pygame.event.get():
20         if event.type == pygame.QUIT:       # 如果单击关闭窗口,则退出
21             pygame.quit()                   # 退出pygame
22             sys.exit()
23  
24     ballrect = ballrect.move(speed)         # 移动小球
25     # 碰到左右边缘
26     if ballrect.left < 0 or ballrect.right > width:
27         speed[0] = -speed[0]
28     # 碰到上下边缘
29     if ballrect.top < 0 or ballrect.bottom > height:
30         speed[1] = -speed[1]
31  
32     screen.fill(color)                      # 填充颜色
33     screen.blit(ball, ballrect)             # 将图片画到窗口上
34     pygame.display.flip()                   # 更新全部显示

(2)运行结果如图所示:

python pygame 怎么运行 pygame怎么运行游戏代码_小游戏

python pygame 怎么运行 pygame怎么运行游戏代码_初始化方法_02

 

2、开发Flappy Bird游戏

(1)代码如下:

1 import pygame
  2 import sys
  3 import random
  4 
  5 class Bird(object):
  6     """定义一个鸟类"""
  7     def __init__(self):
  8         """定义初始化方法"""
  9         self.birdRect = pygame.Rect(65,50,50,50)      #鸟的矩形
 10         #定义鸟的3种状态列表
 11         self.birdStatus = [pygame.image.load("1.png"),
 12                            pygame.image.load("2.png"),
 13                            pygame.image.load("3.png")]
 14         self.status = 0               #默认飞行状态
 15         self.birdX = 120              #鸟所在X轴坐标
 16         self.birdY = 350              #鸟所在Y轴坐标,即上下飞行高度
 17         self.jump = False             #默认情况小鸟自动降落
 18         self.jumpSpeed = 10           #跳跃高度
 19         self.gravity = 5              #重力
 20         self.dead = False             #默认小鸟生命状态为活着
 21 
 22     def birdUpdate(self):
 23         if self.jump:
 24             #小鸟跳跃
 25             self.jumpSpeed -= 1
 26             self.birdY -= self.jumpSpeed
 27         else:
 28             #小鸟坠落
 29             self.gravity += 0.2
 30             self.birdY += self.gravity
 31         self.birdRect[1] = self.birdY
 32 
 33 class Pipeline(object):
 34      """定义一个管道类"""
 35      def __init__(self):
 36          """定义初始化方法"""
 37          self.wallx = 400;
 38          self.pineUp = pygame.image.load("top.png")
 39          self.pineDown = pygame.image.load("bottom.png")
 40      def updatePipeline(self):
 41          """水平移动"""
 42          self.wallx -= 5
 43          #当管道运行到一定位置,即小鸟飞越管道,分数加1,并且重置管道
 44          if self.wallx < -80:
 45              global score
 46              score += 1
 47              self.wallx = 400
 48 
 49 def createMap():
 50     """定义地图创建方法"""
 51     screen.fill((255,255,255))
 52     screen.blit(background,(0,0))
 53                 
 54     #显示管道
 55     screen.blit(Pipeline.pineUp,(Pipeline.wallx,-300))       #上管道坐标位置
 56     screen.blit(Pipeline.pineDown,(Pipeline.wallx,500))     #下管道坐标位置
 57     Pipeline.updatePipeline()                               #管道移动
 58 
 59     #显示小鸟
 60     if Bird.dead:
 61         Bird.status = 2
 62     elif Bird.jump:
 63         Bird.status = 0
 64     screen.blit(Bird.birdStatus[Bird.status],(Bird.birdX,Bird.birdY))       #设置小鸟坐标
 65     Bird.birdUpdate()
 66     pygame.display.update()
 67 
 68     #显示分数
 69     screen.blit(font.render(" Score:" + str(score),-1,(255,255,255)),(100,50))          #设置颜色及坐标位置
 70     pygame.display.update()
 71 
 72 def checkDead():
 73     #上方管子的矩形位置
 74     upRect = pygame.Rect(Pipeline.wallx,-300,
 75                          Pipeline.pineUp.get_width() - 10,
 76                          Pipeline.pineUp.get_height())
 77     #下方管子的矩形位置
 78     downRect = pygame.Rect(Pipeline.wallx,500,
 79                            Pipeline.pineDown.get_width() - 10,
 80                            Pipeline.pineDown.get_height())
 81     #检测小鸟与上下方管子是否碰撞
 82     if upRect.colliderect(Bird.birdRect) or downRect.colliderect(Bird.birdRect):
 83         Bird.dead = True
 84         return True
 85     #检测小鸟是否飞出上下边界
 86     if not 0<Bird.birdRect[1]<height:
 87         Bird.dead = True
 88         return True
 89     else:
 90         return False
 91 
 92 def getResutl():
 93     final_text1 = "Game over"
 94     final_text2="Your final score is: "+str(score)
 95     ft1_font=pygame.font.SysFont("Arial",70)            #设置第一行文字字体
 96     ft1_surf=font.render(final_text1,1,(242,3,36))      #设置第一行文字颜色
 97     ft2_font=pygame.font.SysFont("Arial",50)            #设置第一行文字字体
 98     ft2_surf=font.render(final_text2,1,(253,177,6))     #设置第一行文字颜色
 99     #设置第一行文字显示位置
100     screen.blit(ft1_surf,[screen.get_width()/2-ft1_surf.get_width()/2,100])
101     #设置第一行文字显示位置
102     screen.blit(ft2_surf,[screen.get_width()/2-ft2_surf.get_width()/2,200])
103     pygame.display.flip()               #更新整个待显示的Surface对象到屏幕上
104 
105 if __name__=='__main__':
106     """主程序"""
107     pygame.init()
108     pygame.font.init()
109     font = pygame.font.SysFont(None,50)
110     size = width,height = 400,680
111     screen = pygame.display.set_mode(size)
112     clock = pygame.time.Clock()
113     Pipeline = Pipeline()
114     Bird = Bird()
115     score = 0
116     while True:
117         clock.tick(60)
118         #轮询事件
119         for event in pygame.event.get():
120             if event.type == pygame.QUIT:
121                 pygame.quit()
122                 sys.exit()
123             if (event.type == pygame.KEYDOWN or event.type == pygame.MOUSEBUTTONDOWN) and not Bird.dead:
124                 Bird.jump = True
125                 Bird.gravity = 5
126                 Bird.jumpSpeed = 10
127         background = pygame.image.load("background.png")  #加载背景图片
128         if checkDead():                                   #检测小鸟生命状态
129             getResutl()                                   #如果小鸟死亡,显示游戏总分
130         else:
131             createMap()                                   #创建地图

(2)运行结果如图所示:

python pygame 怎么运行 pygame怎么运行游戏代码_初始化方法_03