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