第十三章实验报告——篮球自动弹跳

代码如下:

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

 

代码运行结果如下:

Python描述小球做平抛运动的程序代码 python小球弹跳_初始化

 

 

Python描述小球做平抛运动的程序代码 python小球弹跳_ide_02

 

 

开发Flappy Bird游戏

代码如下:

 

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

 

代码运行结果如下:

Python描述小球做平抛运动的程序代码 python小球弹跳_实例化_03

Python描述小球做平抛运动的程序代码 python小球弹跳_ide_04