我们在上上篇博客中准备好了输入,在上一篇中准备好了输出,于是我们来到了最关键和最核心的部分——选出诗句和共同字,同时确定输出位置。
程序的思路很清晰:
a. 从输入中读入诗句内容,保存在一个list中,以便反复使用
b. 为了增加趣味性,使用随机数,确定第一句诗以及第一个共同字(这样可以确保每一次的输出都不一样,但也产生了不能成功输出的风险)
c. 根据确定的共同字,找到下一句包含该共同字的诗文,同时在此句中随机选定下一个共同字
d. 找到包含第二个共同字的诗句
同时,在每次确定输出诗句的时候,要对应给出输出坐标。第一、三句应水平输出,第二句竖直输出。这里多做一点说明,PosPro将屏幕左上角作为原点,向右为x正方向,向下为y正方向,初始坐标为(0,0),每个中文字符占一个坐标位,所以最后输出的字符x,y坐标都应该大于等于0。
程序分析:
1)首先是一些全局变量
NUMofPOEM=1500 #可以自定义的值,即“诗库”中总共有多少诗(也即多少行)
MAXLINES=3 #最多出现的诗句数
allPoems=[] #记录所有读入的诗句
usedPoems=[] #int构成的list,保存的是已用过的诗句编号
keyCharList=[] #记录每个关键字(被略去的字)的值及坐标:(char,x,y)
outputLines=[] #记录每一个输出的诗句,每个元素都是[x,y,char]的形式
coordinateFirstChar=[] #对于每个待输出的句子,记录其首字坐标(x,y)
coverLetter=('?','#','¥','%') #用以替换掉关键字的字符,PosPro says:注意都是中文符号!!
#把所有诗句保存在allPoems中,以方便后续多次查找
#singleLine.txt中每一行都是一首诗:包括编号、标题、作者、诗句内容
#txt中每一部分以Tab隔开
with open('singleLine.txt',encoding='gbk',errors="ignore") as f:
for line in f:
line=line.rstrip()
newList=list(line.split('\t'))
allPoems.append(newList)
randomNum=random.randint(1,NUMofPOEM)
for l in allPoems:
if randomNum==int(l[0]): #根据随机数,随机选出一首诗
usedPoems.append(randomNum)
#usedPoem中保存的是已试用过的诗句编号,注意检查避免重复
getRandomFirstChar(l[3:])
#l[0]为索引,l[1]题目,l[2]作者
#l[3:]表示只分析其诗句部分
break
cnt=2 #

本文介绍如何使用Python创建一个古诗词填字游戏。通过随机选择诗句和共同字,生成不同的输出,增加了游戏的趣味性。程序涉及读取诗句、确定输出坐标,并对输出进行错误处理。虽然当前仅实现两条共同字的排列,但提出了优化和扩展的可能性,例如处理更多的诗句和关键字。
&spm=1001.2101.3001.5002&articleId=50474327&d=1&t=3&u=4bee315c767b4971be2c5c33dd5189b5)
1万+

被折叠的 条评论
为什么被折叠?



