温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何使用python实现诗歌游戏

发布时间:2021-04-07 11:41:24 来源:亿速云 阅读:402 作者:小新 栏目:开发技术

这篇文章给大家分享的是有关如何使用python实现诗歌游戏的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

内容如下

具体游戏有:根据上句猜下句、猜作者、猜朝代、猜诗名等

如果有更好玩儿的游戏,不妨自己写一下

1.首先,先把搜集到的诗歌全部放到一个txt文件下,命名为poems.txt

2.其次,再定义一个poem类,执行的时候输出诗歌的名字,作者,朝代等,代码如下:

class Poem:     def __init__(self):     self.title = ''     self.dynasty = ''     self.author = ''     self.sentences = []     def __str__(self):     return '{}\n{}\n{}\n{}'.format(       self.title, self.dynasty, self.author, '\n'.join(self.sentences))

3.加载出来诗歌的所有部分,代码如下:

from enum import Enum from poem import Poem     Poems = []     def load():   class ReadState(Enum):     Nothing = 0     Title = 1     DynastyAndAuthor = 2     Sentences = 3     print('开始加载诗歌')     f = open('poems.txt', encoding='utf-8')   lines = f.readlines()     state = ReadState.Title   poem = None     for ln in lines:     line = ln.strip()     if len(line) > 0:       try:         if line.startswith('-'):           if poem is not None:             Poems.append(poem)             print('.', end='')           poem = Poem()           poem.title = line.lstrip('-')           state = ReadState.DynastyAndAuthor           continue         if state == ReadState.DynastyAndAuthor:           dynasty_author = line.split(' ')           poem.dynasty = dynasty_author[0]           poem.author = dynasty_author[-1]           state = ReadState.Sentences           continue         if state == ReadState.Sentences:           poem.sentences.append(line)       except IndexError as e:         print(line)   print('\n共加载{}首诗歌'.format(len(Poems)))   print()     load()

4.下面开始写具体的功能代码,以猜朝代和猜下句为例。

(1)猜朝代代码如下

# -*- coding: utf-8 -*- __author__ = 'wj' __date__ = '2018/7/20 9:54'   from game import Game     class DynastyGame(Game):     def __init__(self, poems):     super(DynastyGame, self).__init__(poems)     self.name = '猜朝代'     self.rules = '根据诗歌猜作者所处的朝代,猜对加10分,猜错不扣分。'     def design_question(self):     """设计问题及答案"""     self.answer = self.poem.dynasty       # 打印题目     print(self.poem.title)     print(self.poem.author)     print()     # enumerate() 会将列表中的索引和数据一一对应取出     # i 数据的索引  s数据     for i, s in enumerate(self.poem.sentences):       print(s)       if i > 5:         print('...')         break     print()     def get_answer(self):     """获取答案"""     # 1.输出问题     print('这首诗的作者是:{}'.format(self.poem.author))       while True:       self.user_answer = input('请输入他/她所在的朝代:')       # 2.判断是否输入了内容       if self.user_answer:         break     def judge(self):     """判断答案"""     is_ok = super(DynastyGame, self).judge()       if is_ok:       self.score += 10         print('回答正确!')     else:       print('回答错误!')       print('{}所在的朝代是:{}'.format(self.poem.author, self.poem.dynasty))       print('您目前的得分为:{}'.format(self.score))     if __name__ == '__main__':   from load_poems import Poems   dynasty = DynastyGame(Poems)   dynasty.run()

(2)根据上句猜出下一句的具体代码如下:

# -*- coding: utf-8 -*- __author__ = 'wj' __date__ = '2018/7/20 10:45'   from game import Game import random     class FillGame(Game):   def __init__(self, poems):       super(FillGame, self).__init__(poems)     self.name = '对下句'     self.rules = '根据上一句,对出下一句,答对得10分,答错不扣分'     def design_question(self):     # 随机取出索引     index = random.randint(0, len(self.poem.sentences)-2)     # 取出问题答案     answer = self.poem.sentences[index + 1]     # 切片 切出不带标点的诗句     self.answer = answer[:-1]       # 题目     print('{}_____________'.format(self.poem.sentences[index]))     print()     def get_answer(self):       while True:         self.user_answer = input('请写出这句诗的下一句:')       if self.user_answer:         break     def judge(self):       if super(FillGame, self).judge():       self.score += 10       print('回答正确!')     else:       print('回答错误!')       print('正确答案是:{}'.format(self.answer))       Game.print_line()     print('您目前的得分为:{}'.format(self.score))     if __name__ == '__main__':   from load_poems import Poems   fill = FillGame(Poems)   fill.run()

注:猜作者游戏和猜诗名游戏的代码和猜朝代类似

5.最后把所有游戏整合到一个py文件里(注意:一个游戏是一个py文件,自己在里边声明类,最后只需要调用一下就行),整合后的代码如下所示:

from load_poems import Poems from game import Game from dynasty_game import DynastyGame from fill_game import FillGame from author_game import AuthorGame from title_game import TitleGame     class PoemGame(object):   """诗词游戏"""     def __init__(self):       self.version = '1.0'     self.games = [DynastyGame(Poems), FillGame(Poems),AuthorGame(Poems),TitleGame(Poems)]     def list(self):     """列出所有游戏玩法"""     print('请选择玩法:')     Game.print_double_line()     for i, g in enumerate(self.games):         print('{:<10}{}'.format(i+1, g.name))       Game.print_line()     def play(self):     """根据用户选择的玩法执行游戏"""     while True:       self.list()       idx = input('请输入游戏编号,输入q退出:')       if idx == 'q':         print('Bye Bye~')         break       Game.print_line()         # 根据索引取出图形对象       idx = int(idx)       g = self.games[idx - 1]       g.run()     def run(self):     """运行游戏"""     print('欢迎来到诗词诗词大会')     print('v{}'.format(self.version))       self.play()     if __name__ == '__main__':     g = PoemGame()   g.run()

感谢各位的阅读!关于“如何使用python实现诗歌游戏”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI