前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PyGame 英文打字游戏

PyGame 英文打字游戏

作者头像
忆想不到的晖
发布2022-04-13 17:42:45
1.6K0
发布2022-04-13 17:42:45
举报
文章被收录于专栏:hui

专属于你的导航栏

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、部分代码展示
代码语言:javascript
复制
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

去除空值

代码语言:javascript
复制
words = [i for i in word_list if i != '']

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

封装解析结果为什么要用字典?

1、首先字典是以键(key)值(value)对存储数据的,我好给我的数据取个别名(key值),增加代码的可读性,到后面随机生成单词精灵时我是用随机下标indexkey值取数据,而不是self.wordsindex;self.wordsindex;

代码语言:javascript
复制
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)给扔进去

代码语言:javascript
复制
english_words.append(words)

或者利用切片[]

代码语言:javascript
复制
english_words.append({"eng_word": words[0], "cn_comment": words[1:]})

而不是

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

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

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

游戏信息抽取

代码语言:javascript
复制
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学习资源

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/10/07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 回忆篇
  • 正文篇
  • 8、结尾篇
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档