python 游戏开发实例(python实现诗歌游戏类继承)
类别:脚本大全 浏览量:1287
时间:2022-01-22 01:52:48 python 游戏开发实例
python实现诗歌游戏类继承本文实例为大家分享了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() |
以上就是整个项目的所有代码了,在这个小项目中,我使用了类继承的方法,在不断修改代码的同时,也让我更加熟悉了类继承的特点和用法。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持开心学习网。
原文链接:https://blog.csdn.net/qq_42598133/article/details/81134080
您可能感兴趣
- python变量指向讲解(详解python中init方法和随机数方法)
- python代码词频分析(python实现词法分析器)
- 如何用python处理excel表格(零基础使用Python读写处理Excel表格的方法)
- python人脸识别实战视频(Python学习笔记之图片人脸检测识别实例教程)
- 用python实现atm银行系统(Python实现的银行系统模拟程序完整案例)
- pythonkeys怎么用(浅谈python的深浅拷贝以及fromkeys的用法)
- python模块化打包(python使用Paramiko模块实现远程文件拷贝)
- python怎么装opencv(Python基于opencv实现的简单画板功能示例)
- python监控系统界面(Python远程视频监控程序的实例代码)
- python的三维画图(python处理DICOM并计算三维模型体积)
- python编写pygame游戏怎么打包(python使用pygame模块实现坦克大战游戏)
- python删除列表中的重复元素(Python实现去除列表中重复元素的方法总结7种方法)
- python基础编程函数参数(详解Python 函数如何重载?)
- pythonyield有什么用(彻底理解Python中的yield关键字)
- python爬取数据总结(python3爬虫学习之数据存储txt的案例详解)
- python对象创建流程(Python3.5面向对象与继承图文实例详解)
- 魅族智能手表充电座曝光 Type-C 接口,线座分离设计(魅族智能手表充电座曝光)
- 华为 Watch GT2 Pro 智能手表曝光,新增支持无线充电(华为WatchGT2)
- vivo首款智能手表来了 也有血氧饱和度监测,一次充电18天续航(vivo首款智能手表来了)
- 你知道 七夕 的真正含义吗(你知道七夕的真正含义吗)
- 七夕的寓意(七夕的寓意)
- 苏志燮赵恩静结婚,韩国四大公共财产变三人,这么快就有替补了(苏志燮赵恩静结婚)
热门推荐
- python微信红包代码(php生成微信红包数组的方法)
- docker 部署netcore(关于Jenkins + Docker + ASP.NET Core自动化部署的问题避免踩坑)
- php数组写法(php文件操作之文件写入字符串、数组的方法分析)
- 云服务器常见的哪几种(新手如何选择合适的云服务器?)
- background-position详细讲解(background-position百分比原理详解)
- 何谓SQLSERVER参数嗅探问题(何谓SQLSERVER参数嗅探问题)
- MySQL定时任务(EVENT事件)如何配置详解(MySQL定时任务EVENT事件如何配置详解)
- sparksql项目实战(Spark SQL的整体实现逻辑解析)
- tomcat处理高并发请求(Tomcat打破双亲委派机制实现隔离Web应用的方法)
- python面向对象实例教程(Python面向对象程序设计类的多态用法详解)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9