您的位置:首页 > 脚本大全 > > 正文

python 游戏开发实例(python实现诗歌游戏类继承)

更多 时间:2022-01-22 01:52:48 类别:脚本大全 浏览量:1287

python 游戏开发实例

python实现诗歌游戏类继承

本文实例为大家分享了python实现诗歌游戏的具体代码,供大家参考,具体内容如下

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

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

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

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

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 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.加载出来诗歌的所有部分,代码如下:

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 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)猜朝代代码如下

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • # -*- 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)根据上句猜出下一句的具体代码如下:

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • # -*- 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文件,自己在里边声明类,最后只需要调用一下就行),整合后的代码如下所示:

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 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()
  • 以上就是整个项目的所有代码了,在这个小项目中,我使用了类继承的方法,在不断修改代码的同时,也让我更加熟悉了类继承的特点和用法。

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持开心学习网。

    原文链接:https://blog.csdn.net/qq_42598133/article/details/81134080

    您可能感兴趣