python游戏入门儿童版五,学习加入图片并完成一个游戏

文章介绍了如何使用Python的Pygame库从简单的窗口程序逐步构建到包含背景、篮子和移动苹果的游戏。通过加载图片、设置对象位置、处理用户输入及添加碰撞检测,实现了游戏的基本功能,还加入了音频效果和积分显示,使游戏更丰富有趣。
摘要由CSDN通过智能技术生成

之前我们都是用画图的方式来实现游戏,现在我们开始用图片来做游戏对象,让游戏更加丰富多彩

先回顾一下,我们的初始窗口的代码:

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()

到此我们已经能利用各种图片来做一些简单的游戏了

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

boyxgb

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值