python:pygame小游戏(三)—— 打字游戏

   代码一:实现字符下落的基本功能

"""
打字游戏
1. 声明列表word、xx(x坐标值)、yy(y坐标值)
2. 创建init()函数,初始化三个列表
3. 第四部分:paint ===>绘制字符
4. 第三部分:action ===>进行字母移动
5. 键盘监听事件  循环比对

"""
import pygame, sys
# 导入随机函数模块
import random

"""
第一部分:主函数
"""
def menu():
    # 1.设置窗口标题
    pygame.display.set_caption("打字游戏")
    # 2.死循环
    while True:
        # 3.设置背景颜色填充
        screen.fill((255, 255, 255))
        # 绘制哪张图,以及起始点位置
        #screen.blit(back, (0, 0))

        # 4.调用业务处理函数
        action()
        # 5.调用图形图案绘制函数
        paint()
        # 7.屏幕刷新延迟
        pygame.time.delay(10)
        # 6.设置窗口刷新屏幕
        pygame.display.update()

"""
第二部分:变量声明初始化区域
"""
# 设置窗体
screen = pygame.display.set_mode((800, 600), 0, 0)
# 存储字母列表
word = []
# 存储字母坐标值列表
xx = []
yy = []
# 加载图片
# back = pygame.image.load("1.jpg")


"""
第五部分:初始化函数
"""
def init():
    for i in range(0,10):
        # 字母 ===》A :65  a==>97
        word.append(random.randint(65,90))
        # 坐标值
        xx.append(random.randint(0,800))
        yy.append(random.randint(0,600))

"""
第三部分:业务逻辑处理区域
"""
def action():
    # 4.1 循环迭代事件监听
    for event in pygame.event.get():
        # 4.2 判断是否退出系统
        if event.type == pygame.QUIT:
            sys.exit()
        # 4.4 循环比对
        if event.type == pygame.KEYDOWN:  # 键盘按下
            # 4.5 循环遍历与按键比较
            for i in range(0,10):
                # 4.6 判断
                if event.key == word[i]+32:
                    # 4.7 业务处理
                    word[i] = random.randint(65,90)  # 使得word“消失”
                    xx[i] = random.randint(0,800)  # xx坐标另产生一个随机数,表现为“消失”
                    # 使得yy坐标“消失”,yy坐标变负号,消失在屏幕看不见的位置
                    yy[i] = -random.randint(0,600)
                    # 4.8 防止消失多个
                    break
    # 4.3 字母移动
    for i in range(0,10):
        yy[i] += 1
        # 循环判断
        if yy[i] > 600:
            yy[i] = 0
    # 4.3.1 根据飞行方向修改坐标值
    # 4.3.2 根据坐标值修改飞行方向
    # 4.4 根据分数修改速度

"""
第四部分:图形图案绘制区域
"""
def paint():
    # 4.1 初始化字体
    pygame.font.init()
    # 4.2 设置字体样式 (ps: wryh.ttf是字体库的文件,和项目文件放到一个文件夹中)
    font = pygame.font.Font("wryh.ttf", 28)
    # 4.3 循环迭代
    for i in range(0,10):
        # 4.4 设置绘制内容
        fontRead = font.render(chr(word[i]),True,(0,0,0)) # int转字符串,字体为黑色
        # 4.5 设置绘制内容的坐标
        screen.blit(fontRead,(xx[i],yy[i]))  # 将字符串绘制到该窗口上


# main函数
if __name__ == '__main__':
    init()
    menu()

  代码二:进一步完善代码功能,设计成更好看的界面 

"""
打字游戏
1. 声明列表word、xx(x坐标值)、yy(y坐标值)
2. 创建init()函数,初始化三个列表
3. 第四部分:paint ===>绘制字符
4. 第三部分:action ===>进行字母移动
5. 键盘监听事件  循环比对

拓展练习:
1. 分数 score +5
2. 根据分数处理 速度问题
3. 更改颜色 每个字母只有一个颜色
4. 更改背景 将背景改为图片
"""
import pygame, sys
# 导入随机函数模块
import random

"""
第一部分:主函数
"""
def menu():
    # 1.设置窗口标题
    pygame.display.set_caption("打字游戏")
    # 2.死循环
    while True:
        # 3.设置背景颜色填充
        # screen.fill((255, 255, 255))
        # 绘制哪张图,以及起始点位置
        screen.blit(back, (0, 0))

        # 4.调用业务处理函数
        action()
        # 5.调用图形图案绘制函数
        paint()
        # 7.屏幕刷新延迟
        pygame.time.delay(speed)
        # 6.设置窗口刷新屏幕
        pygame.display.update()

"""
第二部分:变量声明初始化区域
"""
# 设置窗体
screen = pygame.display.set_mode((800, 600), 0, 0)
# 存储字母列表
word = []
# 存储字母坐标值列表
xx = []
yy = []
# 存储得分
score = 0
# 存储RGB颜色值
R = 0
G = 0
B = 0
# 存储速度
speed = 20
# 加载图片(选一张好看的图片作为背景)
back = pygame.image.load("1.jpg")

"""
第五部分:初始化函数
"""
def init():
    for i in range(0,10):
        # 字母 ===》A :65  a==>97
        word.append(random.randint(65,90))
        # 坐标值
        xx.append(random.randint(0,800))
        yy.append(random.randint(0,600))

"""
第三部分:业务逻辑处理区域
"""
def action():
    global score
    # 4.1 循环迭代事件监听
    for event in pygame.event.get():
        # 4.2 判断是否退出系统
        if event.type == pygame.QUIT:
            sys.exit()
        # 4.4 循环比对
        if event.type == pygame.KEYDOWN:  # 键盘按下
            # 4.5 循环遍历与按键比较
            for i in range(0,10):
                # 4.6 判断
                if event.key == word[i]+32:
                    # 4.7 业务处理
                    word[i] = random.randint(65,90)  # 使得word“消失”
                    xx[i] = random.randint(0,800)  # xx坐标另产生一个随机数,表现为“消失”
                    # 使得yy坐标“消失”,yy坐标变负号,消失在屏幕看不见的位置
                    yy[i] = -random.randint(0,600)
                    score += 5
                    # 4.8 防止消失多个
                    break
    # 4.3 字母移动
    for i in range(0,10):
        yy[i] += 1
        # 循环判断
        if yy[i] > 600:
            yy[i] = 0
    # 4.4 根据分数修改速度
    global speed
    if score > 500:  # 20个字
        speed = 3
    elif score > 250:  # 50个字
        speed = 5
    elif score > 100:  # 100个字
        speed = 10


"""
第四部分:图形图案绘制区域
"""
def paint():
    # 4.1 初始化字体
    pygame.font.init()
    # 4.2 设置字体样式 (ps: wryh.ttf是字体库的文件,和项目文件放到一个文件夹中)
    font = pygame.font.Font("wryh.ttf", 28)
    # 4.3 循环迭代
    for i in range(0,10):
        # 4.7 调用updateColor
        updateColor()
        # 4.4 设置绘制内容
        fontRead = font.render(chr(word[i]),True,(R,G,B)) # int转字符串,字体为黑色
        scoreShow = font.render("score:%s"%score,True,(255,0,0))
        # 4.5 设置绘制内容的坐标
        screen.blit(fontRead,(xx[i],yy[i]))  # 将字符串绘制到该窗口上
        # 4.6 绘制分数
        screen.blit(scoreShow, (20,20))  # 将字符串绘制到该窗口上

"""
第六部分:更改RGB颜色值
"""
def updateColor():
    global R,G,B
    R = random.randint(0,255)
    G = random.randint(0, 255)
    B = random.randint(0, 255)

# main函数
if __name__ == '__main__':
    init()
    menu()

  运行效果贴图展示:

 注:

1. 为了使该游戏设计更真实丰富,贴近生活实际,代码可以继续添加其他的功能。

    如字母落到底部过程都没有消失,进行扣分处理,低于一定分值结束游戏等。具体实现可自行设计。

猜你喜欢

转载自blog.csdn.net/Wang_susu/article/details/85923141