本文实例为大家分享了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()
以上就是整个项目的所有代码了,在这个小项目中,我使用了类继承的方法,在不断修改代码的同时,也让我更加熟悉了类继承的特点和用法。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
华山资源网 Design By www.eoogi.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
华山资源网 Design By www.eoogi.com
暂无评论...
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
2024年11月16日
2024年11月16日
- [发烧人声]群星《邂逅》DTS-WAV
- 艻打绿《夏/狂热(苏打绿版)》[320K/MP3][106.42MB]
- 艻打绿《夏/狂热(苏打绿版)》[FLAC分轨][574.2MB]
- 黄雨勳《魔法列车首部曲》[320K/MP3][33.1MB]
- 李蕙敏.2014-记得·销魂新歌+精丫乐意唱片】【WAV+CUE】
- 谢金燕.1995-含泪跳恰蔷冠登】【WAV+CUE】
- 于文文.2024-天蝎座【华纳】【FLAC分轨】
- 黄雨勳《魔法列车首部曲》[FLAC/分轨][173.61MB]
- 群星《歌手2024 第13期》[320K/MP3][50.09MB]
- 群星《歌手2024 第13期》[FLAC/分轨][325.93MB]
- 阿木乃《爱情买卖》DTS-ES【NRG镜像】
- 江蕾《爱是这样甜》DTS-WAV
- VA-Hair(OriginalBroadwayCastRecording)(1968)(PBTHAL24-96FLAC)
- 博主分享《美末2RE》PS5 Pro运行画面 玩家仍不买账
- 《双城之战2》超多新歌MV发布:林肯公园再次献声