PyGame 英文打字游戏

Posted 忆想不到的晖

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PyGame 英文打字游戏相关的知识,希望对你有一定的参考价值。

专属于你的导航栏      1、回忆篇

     2、正文篇

     3、结尾篇

回忆篇

回想起初中时候,语文老师(陈老师)教的知识。

这篇文章的开头主要有什么作用?

答:

1、开门见山,点出文章主题,为下文做铺垫,讲述了...

2、设置悬念,吸引读者的阅读兴趣或思考。

3、衬托人物的情感(表现中心)。

4、......

现在依然记得老师布置给我们的一篇作文(毕竟受过表扬☺),那时阳光明媚,晴空万里,突然下了一场冰雹,老师叫我们写一篇关于冰雹的作文

我的作文能力也不怎么行,我是模仿安塞腰鼓课文写的(想象一下好一个安塞腰鼓!改成好一个冰雹!),在班上拿出来了读(开心的不得了),其实这也可以激励同学和自己学习,毕竟一件事被人认可,心里会有成就感,鼓舞自己向前。

第三方介入:停停停,老子不想了解太多你的往事,赶紧的有话快说,有pi快放(自己模拟和自己对话,望谅解)

好,就不继续往下了,在回忆下去我都怕自己和看到这篇文章想起往事的人会感动的流泪(博主不要脸


正文篇

1、开门见山

小二,上效果图
好的勒,客官请稍等,马上就来

Python开发的英文单词打字小游戏(客官请慢用)

2、开发环境和整体结构

3、模拟类图设计(非专业)

一开始我是用word去模拟设计(插入形状),设计第一个类图的时候我都感觉好慢,心里难受(word不怎么会用这才是重点,嘿嘿)【如图】。

幸好看到了这篇文章在线UML Class Diagram 类图工具 - 教程,不然我差点用word去完成类图设计模拟了。

详细的类图模拟设计

4、pygame游戏框架思想

5、pygame中精灵(Sprite)和精灵组(Group)的职责

6、部分代码展示

import os
import sys
import random
import pyautogui as gui
from Game_Sprite import *

pygame.init()

# 获取电脑屏幕分辨率
screen_width, screen_height = gui.size()
game_x = (screen_width - Game_Info.SCREEN_RECT.width)/2
game_y = (screen_height - Game_Info.SCREEN_RECT.height)/2
# 设置游戏窗口相对电脑屏幕居中
os.environ['SDL_VIDEO_WINDOW_POS'] = "%d,%d" % (game_x, game_y)


def parser_words():
    """
    解析英语单词
    :return english_words
    """
    english_words = []
    word_contents = open("english_word.txt", encoding="gbk")
    for value in word_contents:
    	# 去除左边空格
        value = value.lstrip()
        word_list = value.split(" ")
        words = [i for i in word_list if i != '']
        if len(words) >= 2:
            # 把解析好的单词和中文翻译封装到字典中,然后加入集合
            english_words.append("eng_word": words[0], "cn_comment": words[1])
    return english_words

去除空值

words = [i for i in word_list if i != '']

本来想用正则去筛选解析的,试了一下由于不太会用,也不喜欢这种编程风格(重要是小编菜,望大神指点),就大概看了一下 四级英文单词文本整体结构和规律,一开始我从网上找的文本是不符合规律的,用notepad++大概整理一下,然后用代码解析,虽然简单,但我想讲的是解决问题的想法而不是简单的复制粘贴,首先代码内部不好解析,我们可以从外部设法解决。就像设定一些标准一样(无规矩不成方圆)

封装解析结果为什么要用字典?
1、首先字典是以键(key)值(value)对存储数据的,我好给我的数据取个别名(key值),增加代码的可读性,到后面随机生成单词精灵时我是用随机下标indexkey值取数据,而不是self.words[index][0];self.words[index][1];

index = random.randint(0, len(self.words) - 1)
eng_word = self.words[index]["eng_word"]
cn_comment = self.words[index]["cn_comment"]

2、解析出来的结果是1个英文单词和多个中文意思,我只封装了一个中文意思,假设你想多种中文意思都要,你可能会觉得封装成字典(dict)的麻烦,就直接把整个列表(list)给扔进去

english_words.append(words)

或者利用切片[]

english_words.append("eng_word": words[0], "cn_comment": words[1:])

而不是

 # 把解析好的单词和注释封装到字典中,然后加入列表
english_words.append("eng_word": words[0], "cn_comment": words[1])

从而导致随机生成单词代码要更复杂一点(要多个中文意思),到后面显示英文单词和多个中文意思的时候,太长,不直观,不美观

因此我们要懂得取舍,更要在生活中懂得取舍

游戏信息抽取

import pygame

GAME_NAME = "WordSprite"
SCREEN_RECT = pygame.Rect(0, 0, 1200, 800)
INPUT_RECT_WIDTH = 600
INPUT_RECT_HEIGHT = 100
GAME_BLOOD_RECT = pygame.Rect(SCREEN_RECT.width / 2 - 250, SCREEN_RECT.height - 26, 500, 25)

GAME_ICON = "image/rabbit.ico"
GAME_BACKGROUND = "image/game_bg.gif"
INPUT_BACKGROUND = "image/input_bg.png"
SCORE_RECORD_FILE = "score_record.txt"

# 单词拼写成功后的消失动画
KILL_ANIMATION = ["image/000.png", "image/001.png", "image/002.png", "image/003.png", "image/004.png",
                  "image/005.png", "image/006.png", "image/007.png"]

FRAME_PRE_SEC = 60  # 游戏的刷新帧率
WORD_SIZE = 22      # 单词大小
WORD_SPEED = 0.5    # 单词下落速度

# 创建单词的时间间隔(毫秒)
CREATE_WORD_INTERVAL = 1000 * 4
# 首次生成单词的数量
GENERATE_WORD_NUM = 6

# 字体颜色
RED = pygame.color.Color("RED")
YELLOW = pygame.color.Color("YELLOW")
BLUE = pygame.color.Color("#70f3ff")
GREEN = pygame.color.Color("GREEN")
WHITE = pygame.color.Color("WHITE")
ORANGE = pygame.color.Color("ORANGE")
PINK = pygame.color.Color("#ff4777")

# 创建单词事件
CREATE_WORD_EVENT = pygame.USEREVENT
# 游戏结束事件
GAME_OVER_EVENT = pygame.USEREVENT + 1

小编喜欢单独拿一个模块来抽取游戏信息(来实现程序的高内聚低耦合维护性)。

我们很多人(包括我)喜欢一有想法就简单思考一下,然后就编写代码,虽然是练习,没必要想太多,但我认为还是需要养成良好的编码习惯,有利于之后的发展。就以我这个小游戏举例,一开始没有做设计,没有做太多的分析,刚完成的时候好简约,慢慢的加血条,分数,动画,还有重玩,导致后面的代码冗余性变高了,可读性变差了。一开始还好可以改,到后面越来越多,人的堕落天使就出来了,说道:“怕什么,反正程序实现了效果,达到了想要的功能就可以了
(解读人性—懒惰)
更多的代码,文章底部可以下载源码,相互学习。

7、回归主题

再说下去,就跑题啦(嘿嘿)

Typing Game 之英语的重要性!!!

英语的重要性

1、英语的起源

2、英语是与电脑联系最密切的语言,大多数编程语言都与英语有联系,而且随着网络的使用,英文的使用更普及。

3、英语是国际指定的官方语言(作为母语),也是世界上最广泛的第一语言,英语包含约49万词,外加技术名词约30万个,是词汇最多的语言,也是欧盟以及许多国际组织以及英联邦国家的官方语言,拥有世界第三位的母语使用者人数,仅次于汉语和西班牙语母语使用者人数。

4、我做这个小游戏的目的,练习打字手速学习英语巩固学习知识学以致用有效的输出

8、结尾篇

并不是每个人都想阅读你的文章

并不是每个人都知道你的实力

并不是每个人都想了解你

因此:

有品质的文章,有时需要耀眼的标题引入;
有强大的实力,有时需要学历的衬托;
有趣的内在,有时需要精美的形象;

品尝的差不多了,小二,再来碗鸡汤

读书多了,容颜自然改变,
许多时候,自己可能以为许多看过的书籍都成了过眼云烟,不复记忆,其实他们仍是潜在的。
在气质里,在谈吐上,在胸襟的无涯,当然也可能显露在生活和文字里。—【三毛】

千里马常有,而伯乐不常有

小二,结账

源码下载(含可运行exe程序):https://gitee.com/huiDBK/Typing_Game

Python学习资源

小二:客官慢走,欢迎下次光临

以上是关于PyGame 英文打字游戏的主要内容,如果未能解决你的问题,请参考以下文章

Pygame 游戏开发 基础知识

平铺python游戏(pygame)

我在 pygame 中的游戏无法正常运行 [重复]

Pygame/Python 游戏不接收输入

用pygame制作的游戏可以提交到steam吗? [关闭]

Python/Pygame 游戏循环问题/让代码运行