【python学习】Python开心消消乐实现过程基础1

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

Python开心消消乐实现过程基础1


前言

前几天,用Python学会利用pygame实现图形的简单绘制,现在将面向过程的思路改成面向对象。利用两个类,Block(具体绘制小方块)和MagicBlock(控制绘制小方块)来实现对整个游戏的绘制,添加一个类,Tool(游戏工具类)来加载整个游戏的地图资源、进度条资源等。


提示:以下是本篇文章正文内容,下面案例可供参考

一、Block类

Block类包含五个参数,left、top分别表示绘制图形左上角的XY坐标,screen、blocktype表示绘制的屏幕和小方块的类型(记录下当前小方块的类型)、isUse、randomIndex表示方块是否有用、绘制图片时的随机下标,记录下图片的标号,以便后序交换小方块做铺垫。

成员函数:changeColor(),实现颜色随机。drawBlock(screen,width,height)实现绘制小方块,
其中利用if-else对小方块的类型进行判断,需要什么图形就绘制什么图形。mouseClicked(x,y)用来处理鼠标点击事件。

代码如下:

class Block:
        def __init__(self, type, screen):
            self.left = 0
            self.top = 0
            self.screen = screen
            self.blockType = type
            self.isUse = random.randint(0, 1)#判断方块是否有用
            self.randomIndex = random.randint(0, 5)  # 保存图片 为后面选择时候可以直接读取到是哪个图片
        #随机颜色
        def changeColor(self):
            r = random.randint(0, 255)
            g = random.randint(0, 255)
            b = random.randint(0, 255)
            return r, g, b
        #绘制小方块
        def drawBlock(self, screen, width, height):
            rect_pos = self.left, self.top, width, height
            if self.blockType == DRAW_TYPE_RECT:  # 绘制矩形
                pygame.draw.rect(screen, self.changeColor(), rect_pos)
            elif self.blockType == DRAW_TYPE_CIRCLE and self.isUse == BLOCK_ISUSE:  # 绘制圆形
                pygame.draw.circle(screen, self.changeColor(), (self.left + width / 2, self.top + height / 2),
                                   width / 2)
            elif self.blockType == DRAW_TYPE_IMAGE and self.isUse == BLOCK_ISUSE:  # 绘制自己的图片
                screen.blit(img_list[self.randomIndex], (self.left, self.top))
        #处理鼠标点击事件
        def mouseClicked(self, x, y):
            if (x > self.left and x < self.left + 50 and y > self.top and y < self.top + 50):
                # self.screen.blit(img_list[random.randint(0, 5)], (self.left, self.top))
                pygame.draw.rect(self.screen, self.changeColor(), (self.left, self.top, 50, 50))
                print('这是img' + str(self.randomIndex + 1))

二、MagicBlock类

MagicBlock类表示大矩形,包含一个个小方块,包括九个参数screen_x、screen_y表示大矩形的左上角坐标,row、col表示要绘制小方块的行列,block_width、block_height表示绘制矩形的长宽,type表示类型,screen表示屏幕。

代码如下(示例):

class MagicBlock:
    def __init__(self,screen_x,screen_y,row,col,block_width,block_height,type,screen):
        self.startX = screen_x
        self.startY = screen_y
        self.row    = row
        self.col    = col
        self.screen = screen
        self.blocks = [[0] * self.col for i in range(0,row)]
        self.block_width      = block_width
        self.block_height     = block_height
        self.block_type   = type
    def initMagicblock(self):
        #两层for语句给二维数组blocks赋值
        for i in range(0,self.row):
            for j in range(0,self.col):
                self.blocks[i][j] = Block(self.block_type,self.screen)
    def drawMagic(self):
        for i in range(0,self.row,1):
            for j in range(0,self.col,1):
                    self.blocks[i][j].drawBlock()

    def mouseClicked(self, MouseX,MouseY):
        for i in range(0,self.row):
            for j in range(0,self.col):
                    self.blocks[i][j].mouseClicked(MouseX,MouseY)

三、Tool类

包含两个方法 初始化进度条和背景图片,drawprocess是进度条的绘制。要确保在./image文件目录下要有process和background两个图片

class Tool:
    def init_resource(self,screen,processlen):
        process = pygame.image.load('./image/process.png')
        background = pygame.image.load('./image/background.jpg')
        screen.blit(background, (0, 0))
        screen.blit(process, (50, 750))
        pygame.draw.rect(screen, (0, 255, 38), (63.5, 761, processlen, 31))
    def drawprocess(self,screen,processlen):
        pygame.draw.rect(screen, (0, 0, 0), (63.5, 761, 673, 31))
        pygame.draw.rect(screen, (0, 255, 38), (63.5, 761, processlen, 31))

猜你喜欢

转载自blog.csdn.net/qq_51720181/article/details/126685319
今日推荐