python游戏入门儿童版六,加入类概念,提高代码可读性

文章讲述了在游戏开发过程中,随着代码量增加导致的混乱问题,提出通过创建苹果和篮子类,并将它们分别放入独立文件来提高代码可读性的方法。此外,还介绍了配置文件config.py的使用,以统一管理多个文件共用的基本参数。这样做的结果是使主逻辑代码更加简洁,游戏开发更加有序。
摘要由CSDN通过智能技术生成

发现我们游戏越来越完善的时候,代码也越来越多,越来越乱。接上节的接苹果游戏,当掉小的苹果同时出现多个的时候,还需要多几分苹果的代码以及操作,那么有办法让代码更有可读性,更容易理解呢?答案是有的,那就是类,这一节,我们把苹果和篮子分别单独出来做一个类,并把他们分别独立到单独的文件中去,好让我们的主逻辑代码更加简洁。

类可以理解为分类

类可以实例化为具体的对象,每个对象都有相关的属性和方法

比如,我们的苹果,它有移动速度这个属性,有移动这个方法

发生独单的文件,之后我们发现有一些基本的值多个文件都用到,这个时候我们就可以考虑弄个独立的配置文件,其他类用到的基本参数都可以放在配置文件config.py

上接课的游戏代码,拆分之后的单独文件可以如下:

  • main.py 游戏主文件
  • basket.py篮子类文件
  • apple.py苹果类文件
  • music.py音乐文件
  • config .py配置文件

分别来看看这些文件的具体代码

main.py

from apple import *
from basket import *
import music
import config

def main():
    pygame.init()  # 初始化
    screen = pygame.display.set_mode((config.screen_w, config.screen_h))  # 设置窗口的大小
    pygame.display.set_caption(config.game_name) #设置游戏界面的标题

    # 背景
    bg_img = pygame.image.load('bg2.jpg').convert_alpha()  # 加载背景
    bg_my = pygame.transform.scale(bg_img, (config.screen_w, config.screen_h))  # 指定图片的大小,不指定会直接按照图片本身大小显示

    bk = basket()#实例化一个篮子
    ap = apple()#实例化一个苹果

    fclock = pygame.time.Clock()  # 控制时间间隔

    apple_count = 0
    going = True
    while going:
        screen.blit(bg_my, (0, 0))  # 背景图最先加载,坐标是(left, top)
        screen.blit(bk.img, bk.rect) # 篮子加入画布,坐标是(left, top)
        screen.blit(ap.img, ap.rect) # 苹果加入画布,坐标是(left, top)

        # 显示文字,显示分数
        myfont = pygame.font.Font(None, 50)
        textImage = myfont.render('apple:' + str(apple_count), True, (255, 255, 255))
        screen.blit(textImage, (50, 50))

        # 当车子接主苹果时,通过苹果和车子的位置以及他们的大小来判断他们是否碰撞
        if bk.rect.colliderect(ap.rect):
            ap.rect.x = randint(20, config.screen_w-20)
            ap.rect.y = 0
            apple_count += 1
            music.jie.play()

        ap.move()#苹果移动

        for event in pygame.event.get():  # 遍历事件
            if event.type == pygame.QUIT:  # 退出事件
                going = False
            if event.type == pygame.KEYDOWN:  # 判断获取时间是否为按钮按下的类型
                if event.key == pygame.K_LEFT:
                    bk.move_left() #调用篮子的向左函数
                if event.key == pygame.K_RIGHT:
                    bk.move_right() #调用篮子的向右函数

        pygame.display.update()
        fclock.tick(200)
    pygame.quit()

if __name__ == '__main__':
    main()

basket.py

import pygame
import music
import config

class basket(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        position = [300, 550] #篮子默认显示位置
        speed = [0, 2] #篮子移动参数
        self.img = pygame.image.load('lanzi.png') #加载篮子图片
        self.img = pygame.transform.scale(self.img, (120, 80))  # 指定图片的大小,不指定会直接按照图片本身大小显示
        self.rect = self.img.get_rect() #获取篮子方形 
        self.rect.center = position #设置篮子默认位置
        self.image = self.img #篮子图片
        self.speed = speed #篮子移动参数

    #向左移动函数
    def move_left(self):
        music.mm.play()
        self.speed = [-100, 0]
        if self.rect.left < 0:
            self.rect.left = 0
        else:
            self.rect = self.rect.move(self.speed)
    
    #向右移动函数
    def move_right(self):
        music.mm.play()
        self.speed = [100, 0]
        if self.rect.right > config.screen_w: #右移超出窗体的时,将无法再右移
            self.rect.right = config.screen_w
        else:
            self.rect = self.rect.move(self.speed)

apple.py

import pygame
from random import * #引用随机模块,这里我们可以看看改成 import random 会有什么不同,从而了解这种引用方式
import music
import config

class apple(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        x = randint(20, 430)
        position = [x, 20]
        speed = [0, 2]
        self.img = pygame.image.load('apple.png')
        self.rect = self.img.get_rect()
        self.rect.center = position
        self.image = self.img
        self.speed = speed

    def move(self):
        if (self.rect.y > config.screen_h):
            self.rect.y = 0
            self.rect.x = randint(20, config.screen_w-20)
            music.sb.play()
        self.rect = self.rect.move(self.speed)

music.py

import pygame

pygame.mixer.init()  # 初始化
if not pygame.mixer.music.get_busy(): #用非逻辑确定当前背景音乐没办法的时候开启背景音乐
    pygame.mixer.music.load(r'充满童趣的幽默节奏.mp3')  # 游戏背景音乐
    pygame.mixer.music.play()  # 开始播放音乐流

jie = pygame.mixer.Sound(r'jie.mp3')  # 接住苹果的音效
mm = pygame.mixer.Sound(r'mm.mp3')  # 移动车子的音效
sb = pygame.mixer.Sound(r'sb.mp3')  # 接苹果失败音效

config.py

game_name = "接苹果小游戏"
screen_w = 800
screen_h = 600

多看看,多思考,为什么要这么分,有没更合理的分法

最后介绍下pygame的官网,网站是全英文的,可以学到更加全面的pygame

https://www.pygame.org/

Godot Engine

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

boyxgb

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

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

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

打赏作者

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

抵扣说明:

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

余额充值