首页 > 编程语言 >python 打字小游戏(单词下落,打单词消除单词)

python 打字小游戏(单词下落,打单词消除单词)

时间:2024-12-26 15:55:20浏览次数:5  
标签:spawn word python self 单词 小游戏 pygame font def

下载库

pip install pygame

代码

import pygame
import random
import sys
import ctypes
from ctypes import windll, byref, create_unicode_buffer, create_string_buffer

# 键盘布局相关的常量和函数
class KeyboardLayout:
    def __init__(self):
        self.user32 = ctypes.WinDLL('user32', use_last_error=True)
        self.kernel32 = ctypes.WinDLL('kernel32', use_last_error=True)

    def get_keyboard_layout(self):
        # 获取当前键盘布局
        handle = self.user32.GetForegroundWindow()
        thread_id = self.user32.GetWindowThreadProcessId(handle, 0)
        layout_id = self.user32.GetKeyboardLayout(thread_id)
        return layout_id & 0xFFFF

    def switch_to_english(self):
        try:
            # 加载英文键盘布局(美式英语)
            result = self.user32.LoadKeyboardLayoutW("00000409", 1)
            if result:
                print("已切换到英文键盘")
            return result
        except Exception as e:
            print(f"切换键盘布局失败: {e}")
            return False

    def is_english_layout(self):
        return self.get_keyboard_layout() == 0x409

# 初始化pygame
pygame.init()

# 设置游戏窗口
WIDTH = 800
HEIGHT = 600
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("打字游戏")

# 颜色定义
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
YELLOW = (255, 255, 0)

# 尝试加载支持中文的字体
try:
    font = pygame.font.SysFont('microsoftyaheimicrosoftyaheiui', 36)
    big_font = pygame.font.SysFont('microsoftyaheimicrosoftyaheiui', 72)
except:
    font = pygame.font.Font(None, 36)
    big_font = pygame.font.Font(None, 72)

class Word:
    def __init__(self, text):
        self.text = text
        self.x = random.randint(10, WIDTH - 100)
        self.y = 0
        self.speed = random.uniform(1.0, 2.0)
        self.color = YELLOW

    def move(self):
        self.y += self.speed

    def draw(self, screen):
        text_surface = font.render(self.text, True, self.color)
        screen.blit(text_surface, (self.x, self.y))

class Game:
    def __init__(self):
        self.words = []
        self.current_input = ""
        self.score = 0
        self.lives = 3
        self.word_list = ["cat", "dog", "run", "jump", "play", "game", "code", "test"]
        self.spawn_timer = 0
        self.spawn_delay =200
        self.game_over = False
        self.keyboard = KeyboardLayout()

    def spawn_word(self):
        if len(self.words) < 10:
            new_word = Word(random.choice(self.word_list))
            self.words.append(new_word)

    def update(self):
        self.spawn_timer += 1
        if self.spawn_timer >= self.spawn_delay:
            self.spawn_word()
            self.spawn_timer = 0

        for word in self.words[:]:
            word.move()
            if word.y > HEIGHT:
                self.words.remove(word)
                self.lives -= 1
                if self.lives <= 0:
                    self.game_over = True

    def handle_input(self, event):
        # 在每次输入前检查并切换键盘布局
        if not self.keyboard.is_english_layout():
            self.keyboard.switch_to_english()

        if event.key == pygame.K_RETURN:
            self.check_input()
        elif event.key == pygame.K_BACKSPACE:
            self.current_input = self.current_input[:-1]
        else:
            if event.unicode.isalnum():
                self.current_input += event.unicode

    def check_input(self):
        for word in self.words[:]:
            if self.current_input.lower() == word.text.lower():
                self.words.remove(word)
                self.score += len(word.text) * 10
                self.current_input = ""
                return

    def draw(self, screen):
        screen.fill(BLACK)

        # 绘制所有单词
        for word in self.words:
            word.draw(screen)

        # 绘制当前输入
        input_surface = font.render(f"输入: {self.current_input}", True, WHITE)
        screen.blit(input_surface, (10, HEIGHT - 40))

        # 绘制分数和生命值
        score_surface = font.render(f"score: {self.score}", True, WHITE)
        lives_surface = font.render(f"life: {self.lives}", True, RED)
        screen.blit(score_surface, (10, 10))
        screen.blit(lives_surface, (WIDTH - 100, 10))

        # 游戏结束画面
        if self.game_over:
            game_over_surface = big_font.render("游戏结束!", True, RED)
            final_score_surface = font.render(f"最终分数: {self.score}", True, WHITE)
            screen.blit(game_over_surface, (WIDTH//2 - 100, HEIGHT//2 - 50))
            screen.blit(final_score_surface, (WIDTH//2 - 80, HEIGHT//2 + 20))

def main():
    clock = pygame.time.Clock()
    game = Game()
    running = True

    # 初始生成一些单词
    for _ in range(10):
        game.spawn_word()

    while running:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                running = False
            
            if not game.game_over and event.type == pygame.KEYDOWN:
                game.handle_input(event)

        if not game.game_over:
            game.update()
        
        game.draw(screen)
        pygame.display.flip()
        clock.tick(60)

    pygame.quit()
    sys.exit()

if __name__ == "__main__":
    main()

标签:spawn,word,python,self,单词,小游戏,pygame,font,def
From: https://blog.csdn.net/m0_62802836/article/details/144746726

相关文章

  • Python基础--类方法、实例方法、静态方法
    一、什么是类和实例类(Class)是一个蓝图或模板,它定义了对象的行为和属性。例如,你可以把“汽车”作为一个类,它定义了所有汽车共有的属性(比如颜色、品牌)和行为(比如启动、刹车)。实例(Instance)是类的具体对象。每一个具体的对象都是一个类的实例,比如“我的红色宝马车”就是“汽车”类的......
  • 蓝桥杯青少组python编程模拟题
    1、以123为随机种子,随机生成10个介于到999(含)之间的随机数,每个随1(含)机数后跟随一个逗号进行分隔,屏幕输出这10个随机数。  2、请实现以下功能:随机选择手机品牌列表brandlist=’华为’,苹果’,‘诺基亚‘,‘OPPO’,‘小米’中的一个手机品牌,屏幕输出。  3、获得用户......
  • Python 中的 __init__.py
    本文参考python跨文件夹调用别的文件夹下py文件或参数方式详解第一章  运行另一个py文件(1)在file_A.py中运行file_B.py文件,注意这里是运行,不是引用12345importosos.system("pythonfile_B.pypara_a1para_a2")#其他形式os.system("pythonfile_B.py%s"......
  • python脚本定期删除EFK日志索引
    使用pyhon脚本删除50天前的日志!/usr/bin/python3fromelasticsearchimportElasticsearchfromdatetimeimportdatetime,timedeltaElasticsearch服务器地址,默认本地为'localhost',可按需替换es_host="localhost"Elasticsearch服务器端口,默认9200,按需替换es_port=92......
  • 想到了个童年小游戏,2个人4只手就能玩,简单用JavaScript实现一下
    /** *规则:双方各有左右2个数,初始值为1。每回合,可以将自身的一个数与对方的一个数相加,然后模10。 *如,第一回合你操作:你(11)机器人(11)-->你(12)机器人(11) *下回合机器人操作:你(12)机器人(11)-->你(12)机器人(13) *第三回合你操作:你(12)机器人(13)-->你(15)机器人(13) *......
  • Python函数
    函数介绍函数函数:是组织好的,可重复使用的,用来实现特定功能的代码段。因为,len()是Python内置的函数:        是提前写好的        可以重复使用        实现统计长度这一特定功能的代码段我们使用过的:input()、print()、str()、int()等都是P......
  • python整人代码5
    这次我带给大家的是python整人代码大全,具体如下:温馨提示:     朋友使用可能会破坏朋友之间的友谊,请谨慎使用无限打开网站importwebbrowserwhileTrue:webbrowser.open('www.luogu.com.cn')危险性:低解决方法:一直按Alt+F4回答我!whileTrue: input("请......
  • LDA主题模型——Python实现(三)
    LDA假设每个文档都是多个主题的混合,每个主题又是多个词语的混合。它通过识别文档中的词语分布来推断出文档的主题结构。LDA的一个简单比喻是冰淇淋店:每个文档就像一个装满多种口味冰淇淋的甜筒,而LDA的任务就是根据观察到的冰淇淋,推断出每种口味(即每个主题)在这些甜筒中的比例。LDA......
  • 基于python+Django的招聘信息可视化与薪资预测系统
    1.项目背景本系统旨在帮助用户更高效地管理和分析招聘信息,通过爬虫抓取招聘数据、可视化分析招聘市场情况,并提供薪资预测功能。项目采用Django框架开发,具有以下主要功能:从招聘网站抓取招聘数据。存储与管理招聘信息。提供基于数据的可视化分析。实现简单的薪资预测功能。......
  • python编写一个反向shell
    攻击端代码importsocket#创建一个TCPsocketserver=socket.socket(socket.AF_INET,socket.SOCK_STREAM)#设置监听的IP和端口host='0.0.0.0'#监听所有网络接口port=444#监听端口#绑定并监听server.bind((host,port))server.listen(5)print(f"Listeningo......