之前我们都是用画图的方式来实现游戏,现在我们开始用图片来做游戏对象,让游戏更加丰富多彩
先回顾一下,我们的初始窗口的代码:
import pygame
pygame.init() # 初始化
screen = pygame.display.set_mode((800, 600)) # 设置窗口的大小
pygame.display.set_caption("这是一个给我们画画用的窗口")
going = True
while going:
for event in pygame.event.get(): # 遍历事件
if event.type == pygame.QUIT: # 退出事件
going = False
pygame.display.update()
pygame.quit()
现在我们开始基于这个基础窗口慢慢增加对象
添加2个图片:
import pygame
pygame.init() # 初始化
screen = pygame.display.set_mode((800, 600)) # 设置窗口的大小
pygame.display.set_caption("这是一个给我们画画用的窗口")
#背景
bg_img = pygame.image.load('bg2.jpg').convert_alpha() #加载背景
bg_my = pygame.transform.scale(bg_img, (800, 600)) #指定图片的大小,不指定会直接按照图片本身大小显示
screen.blit(bg_my, (0, 0)) #背景图最先加载,坐标是(left, top)
#篮子
lanzi_img = pygame.image.load('lanzi.png').convert_alpha() #加载篮子的图片
lanzi_my = pygame.transform.scale(lanzi_img, (100, 80)) # 指定图片的大小,不指定会直接按照图片本身大小显示
screen.blit(lanzi_my, (200,450)) #篮子,坐标是(left, top)
going = True
while going:
for event in pygame.event.get(): # 遍历事件
if event.type == pygame.QUIT: # 退出事件
going = False
pygame.display.update()
pygame.quit()
试看效果,这个时候我么能看到很漂亮的图片界面了
接下来我们加入一个移动的苹果,图片提供了move方法,让我们更方便实现移动,移动就需要加入刷新频率:
import pygame
pygame.init() # 初始化
screen = pygame.display.set_mode((800, 600)) # 设置窗口的大小
pygame.display.set_caption("这是一个给我们画画用的窗口")
#背景
bg_img = pygame.image.load('bg2.jpg').convert_alpha() #加载背景
bg_my = pygame.transform.scale(bg_img, (800, 600)) #指定图片的大小,不指定会直接按照图片本身大小显示
screen.blit(bg_my, (0, 0)) #背景图最先加载,坐标是(left, top)
#篮子
lanzi_img = pygame.image.load('lanzi.png').convert_alpha() #加载篮子的图片
lanzi_my = pygame.transform.scale(lanzi_img, (100, 80)) # 指定图片的大小,不指定会直接按照图片本身大小显示
screen.blit(lanzi_my, (200,450)) #篮子,坐标是(left, top)
#苹果
apple = pygame.image.load('apple.png').convert_alpha()
apple = pygame.transform.scale(apple, (100, 100)) # 设置背景图片尺寸
applerect = apple.get_rect()
applerect.x = 300 #设置默认坐标x
applerect.y = 0 #设置默认坐标y
fclock = pygame.time.Clock() # 控制时间间隔
going = True
while going:
for event in pygame.event.get(): # 遍历事件
if event.type == pygame.QUIT: # 退出事件
going = False
screen.blit(apple, applerect)
applerect = applerect.move([0, 2])
pygame.display.update()
fclock.tick(200)
pygame.quit()
发现苹果动起来了,但苹果移动留下的残影,
把背景的加载移到循环的开始位置就可以实现清空画面了,顺便加入一个篮子,并加入移动事件来控制篮子的左右移动:
import pygame
pygame.init() # 初始化
screen = pygame.display.set_mode((800, 600)) # 设置窗口的大小
pygame.display.set_caption("这是一个给我们画画用的窗口")
#背景
bg_img = pygame.image.load('bg2.jpg').convert_alpha() #加载背景
bg_my = pygame.transform.scale(bg_img, (800, 600)) #指定图片的大小,不指定会直接按照图片本身大小显示
#篮子
lanzi_img = pygame.image.load('lanzi.png').convert_alpha() #加载篮子的图片
lanzi_my = pygame.transform.scale(lanzi_img, (100, 80)) # 指定图片的大小,不指定会直接按照图片本身大小显示
lanzi_rect = lanzi_my.get_rect()
lanzi_rect.x = 300 #设置默认坐标x
lanzi_rect.y = 450 #设置默认坐标y
#苹果
apple = pygame.image.load('apple.png').convert_alpha()
apple_my = pygame.transform.scale(apple, (100, 100)) # 设置背景图片尺寸
apple_rect = apple.get_rect()
apple_rect.x = 300 #设置默认坐标x
apple_rect.y = 0 #设置默认坐标y
fclock = pygame.time.Clock() # 控制时间间隔
going = True
while going:
screen.blit(bg_my, (0, 0)) # 背景图最先加载,坐标是(left, top)
screen.blit(lanzi_my, lanzi_rect) # 篮子,坐标是(left, top)
screen.blit(apple, apple_rect)
for event in pygame.event.get(): # 遍历事件
if event.type == pygame.QUIT: # 退出事件
going = False
if event.type == pygame.KEYDOWN: #判断获取时间是否为按钮按下的类型
if event.key == pygame.K_LEFT:
lanzi_rect = lanzi_rect.move([-100, 0])
if event.key == pygame.K_RIGHT:
lanzi_rect = lanzi_rect.move([100, 0])
apple_rect = apple_rect.move([0, 2])
pygame.display.update()
fclock.tick(200)
pygame.quit()
现在看到苹果正常移动了,并且我们可以通过左右键盘来操作篮子
接下来完善游戏
- 加入苹果和篮子的撞击判断以及其事件
- 并加入文本积分显示
- 把音效也加入来
- 加入随机模块,苹果的出现x坐标改成随机
看看最终的代码:
import pygame
import random
pygame.init() # 初始化
screen = pygame.display.set_mode((800, 600)) # 设置窗口的大小
pygame.display.set_caption("这是一个给我们画画用的窗口")
#背景
bg_img = pygame.image.load('bg2.jpg').convert_alpha() #加载背景
bg_my = pygame.transform.scale(bg_img, (800, 600)) #指定图片的大小,不指定会直接按照图片本身大小显示
#篮子
lanzi_img = pygame.image.load('lanzi.png').convert_alpha() #加载篮子的图片
lanzi_my = pygame.transform.scale(lanzi_img, (100, 80)) # 指定图片的大小,不指定会直接按照图片本身大小显示
lanzi_rect = lanzi_my.get_rect()
lanzi_rect.x = 300 #设置默认坐标x
lanzi_rect.y = 450 #设置默认坐标y
#苹果
apple = pygame.image.load('apple.png').convert_alpha()
apple_my = pygame.transform.scale(apple, (100, 100)) # 设置背景图片尺寸
apple_rect = apple.get_rect()
apple_rect.x = 300 #设置默认坐标x
apple_rect.y = 0 #设置默认坐标y
#加入声音
pygame.mixer.init()# 初始化
track = pygame.mixer.music.load(r'充满童趣的幽默节奏.mp3')# 游戏背景音乐
pygame.mixer.music.play()# 开始播放音乐流
hh = pygame.mixer.Sound(r'jie.mp3') #接住苹果的音效
mm = pygame.mixer.Sound(r'mm.mp3') #移动车子的音效
sb = pygame.mixer.Sound(r'sb.mp3') #接苹果失败音效
fclock = pygame.time.Clock() # 控制时间间隔
apple_count = 0
going = True
while going:
screen.blit(bg_my, (0, 0)) # 背景图最先加载,坐标是(left, top)
screen.blit(lanzi_my, lanzi_rect) # 篮子,坐标是(left, top)
screen.blit(apple, apple_rect)
# 显示文字,显示分数
myfont = pygame.font.Font(None, 50)
textImage = myfont.render('apple:' + str(apple_count), True, (255, 255, 255))
screen.blit(textImage, (50, 50))
if(apple_rect.y>600):
apple_rect.y = 0
apple_rect.x = random.randint(20, 780)
sb.play()
# 当车子接主苹果时,通过苹果和车子的位置以及他们的大小来判断他们是否碰撞
if lanzi_rect.colliderect(apple_rect):
apple_rect.x = random.randint(20, 780)
apple_rect.y = 0
apple_count += 1
hh.play()
for event in pygame.event.get(): # 遍历事件
if event.type == pygame.QUIT: # 退出事件
going = False
if event.type == pygame.KEYDOWN: #判断获取时间是否为按钮按下的类型
if event.key == pygame.K_LEFT:
lanzi_rect = lanzi_rect.move([-100, 0])
mm.play()
if event.key == pygame.K_RIGHT:
lanzi_rect = lanzi_rect.move([100, 0])
mm.play()
apple_rect = apple_rect.move([0, 2])
pygame.display.update()
fclock.tick(200)
pygame.quit()
到此我们已经能利用各种图片来做一些简单的游戏了