本文实例为大家分享了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