【python】day07 pygame的几款游戏练习(简单版)找不同、消灭单词、汤姆猫、看图猜名

这篇具有很好参考价值的文章主要介绍了【python】day07 pygame的几款游戏练习(简单版)找不同、消灭单词、汤姆猫、看图猜名。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

 

01-pygame编写小程序的模板

02-找不同

02-1:项目解释

02-2:项目代码

02-2-1:初始介绍:

02-2-2 完整版:

03-消灭单词

03-1:项目解释

03-2:项目代码

04-汤姆猫

02-1:项目解释

02-2:项目代码

02--2-1:一个点击图标动画

02--2-2:点击图标+点击区域动画

05-看图猜名

02-1:项目解释

02-2:项目代码


01-pygame编写小程序的模板

写项目直接复制下来,然后改掉不同的部分,比如屏幕大小,名称和背景颜色等。

import sys,pygame

class FindDifference:
    #1.初始化函数
    def __init__(self):
        #设置初始化屏幕大小
        self.screen=pygame.display.set_mode((800,600))
    #2.主架构函数
    def menu(self):
        # 2.1 设置窗口名称
        pygame.display.set_caption('找不同')
        # 2.2 死循环
        while True:
            # 2.3 设置屏幕背景颜色
            self.screen.fill((255,255,255))
            # 2.4 调用业务执行函数
            self.action()
            # 2.5 调用绘制函数
            self.paint()
            # 2.7 延迟刷新频率
            pygame.time.delay(10)
            # 2.6 设置屏幕刷新
            pygame.display.update()
    #3.业务执行函数
    def action(self):
        # 3.1 获取pygame中所有的监听事件
        for event in pygame.event.get():
            # 3.2 判断是否退出
            if event.type==pygame.QUIT:
                sys.exit()
    #4.绘制函数
    def paint(self):
        pass
    
if __name__=='__main__':
    fd=FindDifference()
    fd.menu()

02-找不同

02-1:项目解释

找到两张图片的不同之处:

        其实就是点击左边的图(或者右边的图)的不同之处时,能够在两张图上分别绘制出一个矩形框。【这个找不同并不是高级的深度学习类似的匹配,也不能精确框出一个物体】

02-2:项目代码

02-2-1:初始介绍:

此时通过鼠标点击图片可以获取鼠标的坐标值,依此可以获得不同之处的左上角。

python利用左上角作为原点,对一个图片进行排放。

【python】day07 pygame的几款游戏练习(简单版)找不同、消灭单词、汤姆猫、看图猜名

此时的代码:

'''
找不同游戏
    点击图片中不一样的区域 产生两个红色矩形框(红色)
    鼠标的监听事件
    if event.type == pygame.MOUSEBUTTONDOWN:
        # 获取鼠标的坐标值
        mx,my = pygame.mouse.get_pos()
        # 获取鼠标的左键是否点击
        leftFlag = pygame.mouse.get_pressed()[0]
        if leftFlag and 100<mx<200 and 100<my<200:
            print("恭喜您,答对了")
'''
import sys,pygame

class FindDifference:
    #1.初始化函数
    def __init__(self):
        # 设置初始化屏幕大小
        self.screen=pygame.display.set_mode((800,600))
        # 背景图片
        self.back=pygame.image.load('FindDifference.png')
    #2.主架构函数
    def menu(self):
        # 2.1 设置窗口名称
        pygame.display.set_caption('找不同')
        # 2.2 死循环
        while True:
            # 2.3 设置屏幕背景颜色
            self.screen.fill((255,255,255))
            # 2.4 调用业务执行函数
            self.action()
            # 2.5 调用绘制函数
            self.paint()
            # 2.7 延迟刷新频率
            pygame.time.delay(10)
            # 2.6 设置屏幕刷新
            pygame.display.update()
    #3.业务执行函数
    def action(self):
        # 3.1 获取pygame中所有的监听事件
        for event in pygame.event.get():
            # 3.2 判断是否退出
            if event.type==pygame.QUIT:
                sys.exit()
            # 3.3 判断是否点击该位置
            if event.type==pygame.MOUSEBUTTONDOWN:
                # 3.3.1 左键是否点击 0左键  1代表双击 2右击
                leftFlag=pygame.mouse.get_pressed()[0]
                #运行时点击图片获得点击位置
                mx,my=pygame.mouse.get_pos()
                print(f'mx:{mx},my:{my}')

    #4.绘制函数
    def paint(self):
        #设置背景图
        self.screen.blit(self.back,(0,0))

if __name__=='__main__':
    fd=FindDifference()
    fd.menu()

02-2-2 完整版:

'''
找不同游戏
    点击图片中不一样的区域 产生两个红色矩形框(红色)
    鼠标的监听事件
    if event.type == pygame.MOUSEBUTTONDOWN:
        # 获取鼠标的坐标值
        mx,my = pygame.mouse.get_pos()
        # 获取鼠标的左键是否点击
        leftFlag = pygame.mouse.get_pressed()[0]
        if leftFlag and 100<mx<200 and 100<my<200:
            print("恭喜您,答对了")
'''
import sys,pygame

class FindDifference:
    #1.初始化函数
    def __init__(self):
        # 设置初始化屏幕大小
        self.screen=pygame.display.set_mode((800,600))
        # 背景图片
        self.back=pygame.image.load('FindDifference.png')
        # 不同区域列表
        self.dif=[
            #[左上角横坐标,左上角纵坐标,框选区域横长,框选区域纵长]
            [51,114,50,50],
            [0,230,90,90],
            [360,450,35,50]
        ]
        self.rec=[]
    #2.主架构函数
    def menu(self):
        # 2.1 设置窗口名称
        pygame.display.set_caption('找不同')
        # 2.2 死循环
        while True:
            # 2.3 设置屏幕背景颜色
            self.screen.fill((255,255,255))
            # 2.4 调用业务执行函数
            self.action()
            # 2.5 调用绘制函数
            self.paint()
            # 2.7 延迟刷新频率
            pygame.time.delay(10)
            # 2.6 设置屏幕刷新
            pygame.display.update()
    #3.业务执行函数
    def action(self):
        # 3.1 获取pygame中所有的监听事件
        for event in pygame.event.get():
            # 3.2 判断是否退出
            if event.type==pygame.QUIT:
                sys.exit()
            # 3.3 判断是否点击该位置
            if event.type==pygame.MOUSEBUTTONDOWN:
                # 3.3.1 左键是否点击 0左键  1代表双击 2右击
                leftFlag=pygame.mouse.get_pressed()[0]
                #运行时点击图片获得点击位置
                mx,my=pygame.mouse.get_pos()
                print(f'mx:{mx},my:{my}')
                for df in self.dif:
                    if leftFlag\
                        and df[0]<=mx<=df[0]+df[2]\
                        and df[1]<=my<=df[1]+df[2]:
                        self.rec.append(df)

    #4.绘制函数
    def paint(self):
        #设置背景图
        self.screen.blit(self.back,(0,0))
        #绘制选中框
        for df in self.rec:
            #左边
            pygame.draw.rect(self.screen,(255,0,0),(df[0],df[1],df[2],df[3]),8)
            #右边
            pygame.draw.rect(self.screen, (255, 0, 0), (df[0]+400,df[1],df[2], df[3]), 8)

if __name__=='__main__':
    fd=FindDifference()
    fd.menu()

03-消灭单词

03-1:项目解释

01-MyWord
1.搭建项目架构
2.初始化函数
3.主架构函数
4.业务执行函数
5.绘制函数
6.main函数

业务需求:
    1.创建10个字母 从上往下落
        1.1 init函数设置
            self.x ===>随机的坐标值
            self.y ===>随机的坐标值
            self.word ====>存储的是10个随机字母====>ASCCII码值
        1.2 paint函数
            使用绘制字符串
        1.3 action函数中
            循环修改y的坐标值
            使用key与我们的系统产生的words进行比较

课堂练习
    1.绘制背景图片
    2.字体颜色  固定每次字体下落的颜色 单击成功后修改颜色
        self.colors = []
    3.设置分数
        self.score = 0
        绘制到界面上
        字母击中  +5分
        字母落下  超过下边界 -10分
    4. 根据分数修改速度
        self.speed = 10
        分数越高  下落的速度越快

03-2:项目代码

'''
01-MyWord
1.搭建项目架构
2.初始化函数
3.主架构函数
4.业务执行函数
5.绘制函数
6.main函数

业务需求:
    1.创建10个字母 从上往下落
        1.1 init函数设置
            self.x ===>随机的坐标值
            self.y ===>随机的坐标值
            self.word ====>存储的是10个随机字母====>ASCCII码值
        1.2 paint函数
            使用绘制字符串
        1.3 action函数中
            循环修改y的坐标值
            使用key与我们的系统产生的words进行比较

课堂练习
    1.绘制背景图片
    2.字体颜色  固定每次字体下落的颜色 单击成功后修改颜色
        self.colors = []
    3.设置分数
        self.score = 0
        绘制到界面上
        字母击中  +5分
        字母落下  超过下边界 -10分
    4. 根据分数修改速度
        self.speed = 10
        分数越高  下落的速度越快
'''
import pygame,sys,random

class MyWord:
    # 1.初始化函数
    def __init__(self):
        # 1.1 窗口对象
        self.screen=pygame.display.set_mode((800,600))
        # 1.2 设置随机坐标值
        self.x=[random.randint(0,800) for i in range(10)]
        self.y=[random.randint(0,600) for i in range(10)]
        # 1.3 设置随机产生的字母
        # A===>65 a===>97 产生大写字母的ASCCII值
        self.word=[random.randint(65,90) for i in range(10)]
        # 1.4 背景图片
        self.back=pygame.image.load('myword.png')
        # 1.5 字体颜色 getColor函数返回  列表 [R,G,B]
        self.colors = [self.getColor() for i in range(10)]
        # 1.6 分数
        self.score=0
        # 1.7 速度
        self.speed = 10
    # 2.窗口的架构
    def menu(self):
        # 2.1 设置窗口的标题
        pygame.display.set_caption('MyWord')
        # 2.2 设置死循环
        while True:
            # 2.3 设置背景颜色
            self.screen.fill((255,255,255))
            # 2.4 调用业务执行函数
            self.action()
            # 2.5 调用绘制函数
            self.paint()
            # 2.6 延迟刷新
            pygame.time.delay(self.speed)
            # 2.7 刷新屏幕
            pygame.display.update()
    # 3.业务执行函数
    def action(self):
        # 3.1 循环遍历所有的监听事件
        for event in pygame.event.get():
            # 3.2 判断是否退出
            if event.type==pygame.QUIT:
                sys.exit()
            # 3.3 键盘监听事件
            if event.type==pygame.KEYDOWN:
                # 循环遍历进行判断
                # 键盘与words比较如下
                for i in range(10):
                    # key中的所有值  比较小写的字母  97 a  65 A
                    # if event.key==self.words[i]+32:
                    if event.key==self.word[i]+32\
                        and self.y[i]>0:# 字母显示在窗口中
                        # 修改分数
                        self.score+=5
                        # 修改颜色值,让单词消失,也就是将原本的单词替换成新的单词
                        self.colors[i]=self.getColor()
                        self.x[i]=random.randint(0,800)
                        self.y[i]=random.randint(0,600)
                        self.word[i]=random.randint(65,90)
                        break
        # 3.4 循环遍历坐标值
        for i in range(10):
            self.y[i]+=1
            if self.y[i]>600:
                # 修改分数
                self.score-=10
                self.y[i]=0
        # 3.5 根据分数修改速度
        if 0<=self.score<50:
            self.speed=8
        elif 50<=self.score<70:
            self.score=5
        elif 70<=self.score<90:
            self.score=3
        elif 90<=self.score:
            self.speed=1

    # 4.绘制图形图案函数
    def paint(self):
        '''绘制背景图'''
        self.screen.blit(pygame.transform.scale(self.back,(800,600)),(0,0))
        # 4.1 初始化字体
        pygame.font.init()
        # 4.2 设置字体样式
        ft=pygame.font.Font('msyhbd.ttc',28)
        # 4.3 绘制内容
        for i in range(0,10):
            strName = chr(self.word[i])
            ftRender= ft.render(strName,True,(255,255,255))
            self.screen.blit(ftRender,(self.x[i],self.y[i]))
        # 4.4 绘制分数
        ftScore=ft.render('score:%d'%self.score,True,(255,0,0))
        self.screen.blit(ftScore,(100,100))

    # 5.获取颜色列表
    def getColor(self):
        R=random.randint(0,255)
        G = random.randint(0, 255)
        B = random.randint(0, 255)
        return [R,G,B]

if __name__=='__main__':
    mWord=MyWord()
    mWord.menu()

04-汤姆猫

02-1:项目解释

点击6个图标和5个区域汤姆猫做出反应,即动画文章来源地址https://www.toymoban.com/news/detail-411869.html

02-2:项目代码

02--2-1:一个点击图标动画

'''
01-MyTom 帧动画
    1.搭建项目架构
    2.绘制背景图
        2.1  init函数 self.back变量
        2.2  paint函数 绘制背景图
    3.帧动画效果
        3.1 init函数  设置列表 self.eatList
        3.2 init函数  设置变量 self.ix
        3.3 action函数中  调整back的使用
    4.点击动画效果
        4.1 init函数 设置吃鸟动作 self.eatImg
        4.2 paint函数 绘制吃鸟图片
        4.3 action函数中 添加鼠标监听事件
    5.动画的停止
        5.1 init函数中  设置总帧数  self.counts
        5.2 action函数中 设置  self.counts =40的值
'''
import pygame,sys

class MyTom:
    # 1.初始化函数
    def __init__(self):
        # 1.1 设置窗口对象
        self.screen=pygame.display.set_mode((320,512))
        # 1.2 设置背景图片
        self.back = pygame.image.load('Animations/Eat/eat_00.jpg')
        # 1.3 设置吃鸟的动作列表
        # day08/Animations/Eat/eat_00.jpg
        # day08/Animations/Eat/eat_01.jpg
        self.eatList=['Animations/Eat/eat_%02d.jpg'%i for i in range(40)]
        # 1.4 设置背景图片下标
        self.ix=0
        # 1.5 设置吃鸟动作图片
        self.eatImg=pygame.image.load('Buttons/eat.png')
        # 1.6 设置动画的总帧数
        self.count=-1

    # 2.设置主结构
    def menu(self):
        # 2.1 设置标题
        pygame.display.set_caption("MyTom")
        # 2.2 死循环
        while True:
            self.screen.fill((255,255,255))
            # 2.3 调用业务执行函数
            self.action()
            # 2.4 调用绘制函数
            self.paint()
            # 2.5 延迟操作
            pygame.time.delay(5)
            # 2.6 刷新屏幕
            pygame.display.update()

    # 3.设置action
    def action(self):
        # 3.1 循环遍历
        for event in pygame.event.get():
            # 3.2 判断是否退出
            if event.type==pygame.QUIT:
                sys.exit()
            '''动画效果开始 鼠标单击事件'''
            if event.type==pygame.MOUSEBUTTONDOWN:
                # 获取是否点击  0代表单击  1代表双击  2代表右击
                leftFlag=pygame.mouse.get_pressed()[0]
                # 获取鼠标的坐标值
                mx,my=pygame.mouse.get_pos()
                if leftFlag\
                    and 30<mx<30+60 and 350<my<350+60:
                    # 修改总帧数
                    self.count=40
        '''核心代码- 修改图片内容'''
        # 3.3 修改计数值  每运行一次 ix更改  0-39
        self.ix+=1
        # 3.4 根据ix的值修改背景图片
        # 根据ix值得到eatList中的图片路径 根据路径获取图片 根据图片修改back值
        # ix = 0 <  counts -1 False 不会修改图片
        # ix = 0 <  counts 40 True  会修改图片
        # ix = 40 < counts 40 False 停止动画效果   ix = 0 counts = -1
        if self.ix<self.count:
            self.back=pygame.image.load(self.eatList[self.ix])
        else:
            self.ix=0
            self.count=-1
        # 只展现一张图片
        # if self.ix<len(self.eatList):
        #     self.back=pygame.image.load(self.eatList[self.ix])
        # else:
        #     self.ix=0
    # 4.设置绘制函数
    def paint(self):
        # 4.1 绘制背景图
        self.screen.blit(pygame.transform.scale(self.back,(320,512)),(0,0))
        # 4.2 绘制吃鸟动作图片
        self.screen.blit(self.eatImg,(30,350))
        #pygame.draw.rect(self.screen,(255,0,0),(100,100,100,100),2)
if __name__=='__main__':
    mTom=MyTom()
    mTom.menu()

02--2-2:点击图标+点击区域动画

'''
01-MyTom 帧动画
    1.搭建项目架构
    2.绘制背景图
        2.1  init函数 self.back变量
        2.2  paint函数 绘制背景图
    3.帧动画效果
        3.1 init函数  设置列表 self.eatList
        3.2 init函数  设置变量 self.ix
        3.3 action函数中  调整back的使用
    4.点击动画效果
        4.1 init函数 设置吃鸟动作 self.eatImg
        4.2 paint函数 绘制吃鸟图片
        4.3 action函数中 添加鼠标监听事件
    5.动画的停止
        5.1 init函数中  设置总帧数  self.counts
        5.2 action函数中 设置  self.counts =40的值
'''
import pygame,sys

class MyTom:
    # 1.初始化函数
    def __init__(self):
        # 1.1 设置窗口对象
        self.screen=pygame.display.set_mode((320,512))
        # 1.2 设置背景图片
        self.back = pygame.image.load('Animations/Eat/eat_00.jpg')
        # 1.3 设置吃鸟的动作列表
        # day08/Animations/Eat/eat_00.jpg
        # day08/Animations/Eat/eat_01.jpg
        self.eatList=['Animations/Eat/eat_%02d.jpg'%i for i in range(40)]
        # 1.4 设置背景图片下标
        self.ix=0
        # 1.5 设置动作图片
        # 吃鸟
        self.eatImg=pygame.image.load('Buttons/eat.png')
        # 喝牛奶
        self.drink = pygame.image.load("Buttons/drink.png")
        # 敲钹
        self.cymbal = pygame.image.load("Buttons/cymbal.png")
        # 放屁
        self.fart = pygame.image.load("Buttons/fart.png")
        # 派
        self.pie = pygame.image.load("Buttons/pie.png")
        # 抓
        self.scratch = pygame.image.load("Buttons/scratch.png")
        # 1.6 设置动画的总帧数
        self.count=-1
        # 1.7 图标动画列表
        self.image = [
            [40, 'eat', 30, 350],
            [81, 'drink', 30, 420],
            [13, 'cymbal', 30, 280],
            [28, 'fart', 240, 280],
            [24, 'pie', 240, 350],
            [56, 'scratch', 240, 420]
        ]
        # 脸
        self.btList = [
            [60, 85, 190, 165],
            [166, 313, 100, 34],
            [114, 458, 40, 20],
            [163, 464, 40, 20],
            [211, 378, 26, 80]
        ]
        # 1.8 绘制列表
        self.rectList = []
        # 1.9 图片路径存储列表
        self.pathList = []
    # 2.设置主结构
    def menu(self):
        # 2.1 设置标题
        pygame.display.set_caption("MyTom")
        # 2.2 死循环
        while True:
            self.screen.fill((255,255,255))
            # 2.3 调用业务执行函数
            self.action()
            # 2.4 调用绘制函数
            self.paint()
            # 2.5 延迟操作
            pygame.time.delay(5)
            # 2.6 刷新屏幕
            pygame.display.update()

    # 3.设置action
    def action(self):
        # 3.1 循环遍历
        for event in pygame.event.get():
            # 3.2 判断是否退出
            if event.type==pygame.QUIT:
                sys.exit()
            '''动画效果开始 鼠标单击事件'''
            if event.type==pygame.MOUSEBUTTONDOWN:
                # 获取是否点击  0代表单击  1代表双击  2代表右击
                leftFlag=pygame.mouse.get_pressed()[0]
                # 获取鼠标的坐标值
                mx,my=pygame.mouse.get_pos()
                #图标动画
                if leftFlag:
                    for bt in self.image:
                        # 1.吃鸟
                        if bt[2] < mx < bt[2] + 60 and bt[3] < my < bt[3] + 60:
                            # 1.1 修改总数
                            self.counts = bt[0]
                            # 1.2 修改列表的值
                            self.updateImage("%s" % bt[1])
                # if leftFlag:
                #     if self.btList[0][0]<=mx<=self.btList[0][0]+self.btList[0][2]\
                #             and self.btList[0][1]<=my<=self.btList[0][1]+self.btList[0][3]:
                #             self.counts=26
                #             self.updateImage("angry")
                #     elif self.btList[1][0]<=mx<=self.btList[1][0]+self.btList[1][2]\
                #             and self.btList[1][1]<=my<=self.btList[1][1]+self.btList[1][3]:
                #             self.counts = 34
                #             self.updateImage("stomach")
                #     elif
                # for bt in self.btList:
                #     if leftFlag \
                #             and bt[0] <= mx <= bt[0] + bt[2] \
                #             and bt[1] <= my <= bt[1] + bt[3]:
                #         # 将选中的不同点击添加到列表中
                #         self.rectList.append(bt)
                #         print(f'bt:{bt}')
                # for rt in self.rectList:
                #     if int(rt[0][0])==:
                #         self.counts=26
                #         self.updateImage("angry")
                #     elif self.rectList[rt]==self.btList[1]:
                #         self.counts=34
                #         self.updateImage("stomach")
                #     elif self.rectList[rt]==self.btList[2]:
                #         self.counts=30
                #         self.updateImage("footright")
                #     elif self.rectList[rt]==self.btList[3]:
                #         self.counts=30
                #         self.updateImage("footleft")
                #     elif self.rectList[rt]==self.btList[4]:
                #         self.counts=81
                #         self.updateImage("knockout")
                #     else:
                #         break
                # 7.循环遍历 0x   1y  2w  3h
                #身体区域动画
                if leftFlag:
                    for i in range(5):
                        if self.btList[i][0] <= mx <= self.btList[i][0] + self.btList[i][2] \
                                and self.btList[i][1] <= my <= self.btList[i][1] + self.btList[i][3]:
                            if i == 0:
                                self.counts = 26
                                self.updateImage("angry")
                            elif i == 1:
                                self.counts = 34
                                self.updateImage("stomach")
                            elif i == 2:
                                self.counts = 30
                                self.updateImage("footright")
                            elif i == 3:
                                self.counts = 30
                                self.updateImage("footleft")
                            elif i == 4:
                                self.counts = 81
                                self.updateImage("knockout")
                            else:
                                break
        '''核心代码- 修改图片内容'''
        # 3.3 修改计数值  每运行一次 ix更改  0-39
        self.ix+=1
        # 3.4 根据ix的值修改背景图片
        # 根据ix值得到eatList中的图片路径 根据路径获取图片 根据图片修改back值
        # ix = 0 <  counts -1 False 不会修改图片
        # ix = 0 <  counts 40 True  会修改图片
        # ix = 40 < counts 40 False 停止动画效果   ix = 0 counts = -1
        # 减少动画频率值
        index = int(self.ix / 10 % self.counts + 1)
        if index < self.counts:
            self.back = pygame.image.load(self.pathList[index])
        else:
            self.ix=0
            self.count=-1
            # 如果动画停止  列表进行清空 self.pathList = []
            del self.pathList[:]
        # 只展现一张图片
        # if self.ix<len(self.eatList):
        #     self.back=pygame.image.load(self.eatList[self.ix])
        # else:
        #     self.ix=0
    # 4.设置绘制函数
    def paint(self):
        # 4.1 绘制背景图
        self.screen.blit(pygame.transform.scale(self.back,(320,512)),(0,0))
        # 4.2 绘制吃鸟动作图片
        self.screen.blit(self.eatImg,(30,350))
        # 4.3 绘制喝牛奶
        self.screen.blit(self.drink,(30,420))
        # 4.4 绘制钹
        self.screen.blit(self.cymbal,(30,280))
        # 4.5 绘制放屁
        self.screen.blit(self.fart, (240, 280))
        # 4.6 绘制派
        self.screen.blit(self.pie, (240, 350))
        # 4.7 绘制抓
        self.screen.blit(self.scratch, (240, 420))
    # 5.修改列表的图片值
    def updateImage(self,name):
        # 要先设置self.counts的值
        for i in range(0,self.counts):
            # Animations/%s/%s_%02d.jpg
            self.pathList.append("Animations/%s/%s_%02d.jpg"%(name,name,i))

if __name__=='__main__':
    mTom=MyTom()
    mTom.menu()

05-看图猜名

02-1:项目解释

1.完成超级猜图的游戏代码编写
    1.1 答案 选项 都是列表形式
    1.2 init函数中就需要读取文件并解析内容存储到各种列表中

02-2:项目代码

'''
1.完成超级猜图的游戏代码编写
    1.1 答案 选项 都是列表形式
    1.2 init函数中就需要读取文件并解析内容存储到各种列表中
'''
import  pygame,os,sys

class Guess:
    # 1.初始化函数
    def __init__(self):
        # 1.1 窗口对象
        self.screen = pygame.display.set_mode((1000, 600))
        # 1.2 设置答案的列表
        self.answerList = []
        # 1.3 设置标题列表
        self.titleList = []
        # 1.4 设置图片列表
        self.iconList = []
        # 1.5 设置选项列表
        self.optionsList = []
        # 1.6 读取文件内容 函数
        self.getList()
        # 1.7 设置图片关卡 当前第几张图
        self.numbers = 0
        # 1.8 设置用户的答案选项
        self.userAnswer = []
    # 2.主架构
    def menu(self):
        # 2.1 设置标题内容
        pygame.display.set_caption("超级猜图")
        # 2.2 死循环
        while True:
            # 2.3 设置背景颜色
            self.screen.fill((0, 0, 0))
            # 2.4 调用业务执行函数
            self.action()
            # 2.5 调用绘制函数
            self.paint()
            # 2.6 设置刷新屏幕
            pygame.display.update()

    # 3.业务函数
    def action(self):
        # 3.1获取所有的监听事件
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()
            '''鼠标监听事件'''
            if event.type == pygame.MOUSEBUTTONDOWN:
                # 3.2获取鼠标的点击
                leftFlag = pygame.mouse.get_pressed()[0]
                # 3.3获取鼠标的坐标值
                mx, my = pygame.mouse.get_pos()
                # 3.4判断是否在选项区域
                self.judgeOptionRect(leftFlag, mx, my)
                # 3.5判断是否在答案区域
                self.judgeAnswerRect(leftFlag, mx, my)
        # 3.6 判断是否胜利
        self.judgeWin()

    # 3.4 判断是否在选项区域
    def judgeOptionRect(self, leftFlag, mx, my):
        # 3.4.1 判断顶级是否在选项区域
        if leftFlag and 100 < mx < 100 + 10 * 80 and 450 < my < 590:
            # 判断点击哪一行那一列的框
            col = int((mx - 100) / 80)
            row = int((my - 450) / 50)
            # 设置变量twoCol 二维列表0-9第一行的数据 10-19第二行的数据
            # col 第二行需要+10再去取列表中的值
            twoCol = 10 + col if row > 0 else col
            if len(self.userAnswer)<len(self.answerList[self.numbers]):
                self.userAnswer.append(self.optionsList[self.numbers][twoCol])

    # 3.5 判断是否在答案区域
    def judgeAnswerRect(self,leftFlag,mx,my):
        rtx = 320 / len(self.answerList[self.numbers])
        if leftFlag and \
            320 < mx<320+rtx*len(self.answerList[self.numbers]) \
            and 390<my<440:
            col = int ((mx -320)/rtx)
            if len(self.userAnswer)!=0:
                del self.userAnswer[col]

    # 3.6 判断是否胜利
    def judgeWin(self):
        # 将用户的答案组成字符串
        userMsg = ""
        for ms in self.userAnswer:
            userMsg += ms
        # 判断是否一致
        if userMsg == self.answerList[self.numbers]:
            print("组件的字符串:", userMsg)
            del self.userAnswer[:]
            self.numbers += 1

    # 4.绘制函数
    def paint(self):
        # 4.1 绘制标题以及关卡
        pygame.font.init()
        ft = pygame.font.Font("msyhbd.ttc", 28)
        ftReader = ft.render("第%d图" % (self.numbers + 1), True, (255, 255, 0))
        self.screen.blit(ftReader, (300, 20))

        ft = pygame.font.Font("msyhbd.ttc", 30)
        ftReader = ft.render(self.titleList[self.numbers], True, (255, 0, 0))
        self.screen.blit(ftReader, (400, 20))
        # 4.2 绘制海报
        self.paintIcon()
        # 4.3 绘制填空选项(答案区域)
        self.paintAnswerRect()
        # 4.4 绘制选项框以及选项
        self.paintOptionRect()

    # 4.2 绘制海报
    def paintIcon(self):
        # 4.2.1 获取海报图片名称并加载
        iconImg = pygame.image.load("Image/%s.png" % self.iconList[self.numbers])
        # 4.2.2 绘制海报图片
        self.screen.blit(pygame.transform.scale(iconImg, (320, 300)), (300, 70))

    # 4.3 绘制填空选项
    def paintAnswerRect(self):
        # 4.3.1 设置绘制字体样式
        pygame.font.init()
        ft = pygame.font.Font("msyhbd.ttc", 35)
        # 4.3.2 循环遍历当前关卡的答案长度进行绘制填空框
        for i in range(0, len(self.answerList[self.numbers])):
            # 4.3.3 设置x值  rx是以左侧320的尺寸为起点
            rectW = 320 / len(self.answerList[self.numbers])
            # 320 400 480 560
            rx = 320 + rectW * i
            # rx是x坐标  450是y坐标  50,50 宽度和高度
            pygame.draw.rect(self.screen, (255, 255, 255), (int(rx), 390, 50, 50))
            '''4.3.4 绘制用户添加的答案'''
            for i in range(0, len(self.userAnswer)):
                ax = int(320 + rectW * i)
                ftRender = ft.render(self.userAnswer[i], True, (255, 0, 0))
                self.screen.blit(ftRender, (ax + 5, 390))

    # 4.4 绘制选线框以及选项
    def paintOptionRect(self):
        pass
        # 4.4.1 设置字体样式
        pygame.font.init()
        ft = pygame.font.Font("msyhbd.ttc",35)
        for i in range(0,20):
            # 第一行
            if i  < 10:
                rx = 100 + i * 80
                # 选项框
                pygame.draw.rect(self.screen,(255,255,255),(rx,450,50,50))
                ftRender = ft.render(self.optionsList[self.numbers][i],True,(255,0,0))
                self.screen.blit(ftRender,(rx+5,450))
            # 第二行
            else:
                rx = 100 + (i-10) * 80
                pygame.draw.rect(self.screen,(255,255,255),(rx,540,50,50))
                ftRender = ft.render(self.optionsList[self.numbers][i],True,(255,0,0))
                self.screen.blit(ftRender,(rx+5,540))

    # 5.获取文本的数据
    def getList(self):
        # 5.1 打开文件
        file = open("guess.txt", 'r')
        # 5.2 获取文件所有的内容
        lines = file.readlines()
        # 5.3 关闭文件
        file.close()
        # 5.4 循环遍历每一行文件内容
        for line in lines:
            # 5.5 调用解析函数进行数据分割
            self.clearData(line)

    # 6.数据解析分割函数
    def clearData(self,line):
        '''
            0 answer 0   越光宝盒 1
            1 icon:movie_ygbh
            2 title:恶搞风格的喜剧大片
            3 options:线,话,飞,人,笑,越,黄,工,大,超,传,特,宝,鸿,队,赤,光,人,壁,盒,王
        '''
        # 6.1 进行分割
        dataList = line.split("#")
        # 6.2 答案数据分割添加  <越光宝盒>
        self.answerList.append(dataList[0].split(":")[1])
        print("self.answerList:",self.answerList)
        # 6.3 图片数据分割添加 <movie_ygbh>
        self.iconList.append(dataList[1].split(":")[1])
        # 6.4 标题数据分割添加 <恶搞风格的喜剧大片>
        self.titleList.append(dataList[2].split(":")[1])
        # 6.5 选项数据的添加 <线,话,飞,人,笑,越,黄,工,大,超,传,特,宝,鸿,队,赤,光,人,壁,盒,王>
        option = dataList[3].split(":")[1].replace("\n","")
        # 二维选项列表
        self.optionsList.append(option.split(","))

if __name__=='__main__':
    guess=Guess()
    guess.menu()

到了这里,关于【python】day07 pygame的几款游戏练习(简单版)找不同、消灭单词、汤姆猫、看图猜名的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python游戏汇总:三十个pygame游戏代码

    提示:爱学习哦,不要沉迷游戏,平时打发一下无聊时间最好啦 正文 欢迎阅读: 1.python21点小游戏。2.Python笨鸟先飞小游戏。3.python绘制满天星小游戏。4.吃豆豆小游戏项目。 5.python忍者奔跑小游戏。6.python迷宫小游戏。7.python飞机大战改版小游戏。8.Python鳗鲲大战小游戏。 9

    2024年02月02日
    浏览(36)
  • Python游戏篇:pygame

    pygame专门用于多媒体(如电子游戏开发),其中包含对图像、声音、视频、事件、碰撞等支持, 如果想开发3D游戏,pygame就显得力不从心了,可以看看panda3d。 pygame中的draw模块可以在窗口上绘图如线条、矩形、多边形、圆、椭圆、圆弧等。 pygame中的image模块用来加载图片。

    2024年02月13日
    浏览(36)
  • 【Python】pygame弹球游戏实现

    游戏源码: pygame_os库:

    2024年02月12日
    浏览(44)
  • Python 游戏开发与 Pygame

    第一章. Python 简介 Python 简介和历史 Python 特点和优势 安装 Python 第二章. 变量和数据类型 变量和标识符 基本数据类型:数字、字符串、布尔值等 字符串操作 列表、元组和字典 第三章. 控制语句和函数 分支结构:if/else 语句 循环结构:for 和 while 循环 函数 参数传递与返回值

    2024年04月17日
    浏览(35)
  • Python的Pygame游戏框架(汇总)

    个人主页 : ζ小菜鸡 大家好我是ζ小菜鸡,小伙伴们,让我们一起来学习Python的Pygame游戏框架。 如果文章对你有帮助、 欢迎关注、点赞、收藏(一键三连)   pygame是跨平台Python模块,专为电子游戏设置,包含图像、声音。创建在SDL(Simple Direct Medica Layer)基础上,允许实时电

    2024年02月09日
    浏览(42)
  • Python之Pygame游戏编程详解

    1.1  定义 Pygame是一种流行的Python游戏开发库,它提供了许多功能,使开发人员可以轻松创建2D游戏。它具有良好的跨平台支持,可以在多个操作系统上运行,例如Windows,MacOS和Linux。在本文中,我们将介绍Pygame库的特点和用法,帮助您了解如何使用Pygame库进行游戏开发。它提

    2024年02月04日
    浏览(39)
  • python游戏库pygame经典教程

    目录 一.Pygame程序基本搭建过程         1.初始化化程序         2.创建Surface对象         3.事件监听         4.游戏循环  二.Pygame Display显示模块详解         1.将Surface对象粘贴至主窗口上         2.设置窗口主窗口         3.填充主窗口背景,参数

    2024年02月03日
    浏览(38)
  • python模块: pygame(自己动手写游戏)

    目录 一、pygame的安装  二、pygame基础操作 1.基本窗体设置 2.surface组件  3.event事件 一、pygame的安装 在pycharm 左下角的终端上输入指令pip install pygame,按下回车键执行下载,推荐下载到虚拟环境上,即路径前方带有(venv)。或者不使用pycharm,在控制窗口输入执行该命令也可以(控

    2024年03月21日
    浏览(40)
  • Python基础篇(十五)-- Pygame游戏编程

            Pygame是一个开源的Python模块,专门用于多媒体应用(如电子游戏)的开发,其中包含对图像、声音、视频、事件、碰撞等的支持。Pygame建立在SDL的基础上,SDL是一套跨平台的多媒体开发库,用C语言实现,被广泛的应用于游戏、模拟器、播放器等的开发。而Pygame让

    2024年02月05日
    浏览(36)
  • Python利用pygame实现飞机大战游戏

    文章目录: 一:运行效果 1.演示 2.思路和功能 二:代码 文件架构 Demo 必备知识:python图形化编程pygame游戏模块 效果图 ◕‿◕✌✌✌ Python利用pygame实现飞机大战游戏运行演示 参考:【Python游戏】1小时开发飞机大战游戏-Pygame版本(1小时40分钟) 博主提取资源: 提取

    2024年04月09日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包