最近,3岁多的女儿很喜欢玩词语接龙。想一想,这个游戏可以通过刚学的python在电脑上实现。
首先是要整理词语库,最好不要太生僻的词语,要够多,才能经得起比赛。经过上网一番查找,选择了了语料库在线http://corpus.zhonghuayuwen.org下的现代汉语语料库词频表。进行简单的整理,去掉了单字,形成了cword.txt文件,共约1万多个词语,对付小朋友应该够了吧。
由于刚学python没几天,又是很简单的一个程序,没有用到面向对象的方法(其实是还没有学会),通过简单的过程实现了。几点说明:
这段代码还有很多可以改进的地方,比如一些变量设置不尽合理,可以增加禁示词语的重复和无限循环、可以学习人类输入的新词、可以设置难度,让电脑故意输出较难接的词语、可以设置答题的时间等功能,界面也丑得可以。如果词库改为为诗词库,还可以变换成“诗词接龙”、“飞花令”等诗词游戏。希望有兴趣的朋友可以改进这段代码。
代码和cword.txt文件已经上传,通过审核后就可以下载了。
from tkinter import Tk, Label, Button, Text, StringVar, Entry, mainloop, BOTTOM, END
from tkinter.messagebox import *
import random
def wordinit():
global word_list, word_len
with open( "cword.txt", mode='r', encoding='UTF-8') as word_file:
word_list = word_file.readlines()
word_len = len(word_list)
def findword():
global word_list,word_len,record,first_word, word_result
find_it = False
record = ''
print(word_result)
word_example=[]
letter = MyEntry.get()#获得输入
if len(letter)<=1:
entry=showinfo('提示','输入的词语太短了')#输入应至少为2个字
return
else:
if first_word:
MyText.delete(1.0,END)#新开始游戏时消除记录
else:
if word_result[len(word_result)-1]!=letter[0]: #检测是否符合接龙规则
entry=showinfo('提示','你这接不上啊,我读书少,不要骗我。')#
return
MyEntry.delete(0,END)#清除输入框
record+=letter+' '#增加接龙记录
MyText.insert(END,letter+' ')#显示更新记录
v2.set(record)
letter=letter[len(letter)-1] #取词语的最后一个字
for i in range(word_len):
if letter == word_list[i][0]:
word_example.append(word_list[i].rstrip('\n'))#要去掉每个记录中最后的换行符
find_it=True
first_word = False
if find_it == False:
v.set('对不起,我接不上,你赢了!')
first_word = True
return
else:
random.shuffle(word_example)
word_result=word_example[0]
v.set(word_result)
record+=word_result+' '
v2.set(record)
MyEntry.insert(0,word_result[len(word_result)-1])
MyText.insert(END,word_result+' ')
return
def closewindow():
entry = askyesno(title='确认', message='实在答不出来,我认输了。')
if entry==True:
root.destroy()
word_list=[] #建立汉语常用词语列表
word_len=0
first_word=True #是否第一次输入词语
word_result=''
record='' #词语接龙的记录
wordinit() #读入常用词语表
root = Tk() #创建tk窗口
root.geometry('1024x768') #定义窗口大小
root.title('词语接龙')
v = StringVar()
MyLabel = Label(root,textvariable=v,fg='Black', font=('宋体',48))
MyLabel.pack()
v.set('请说出一个词:')
MyEntry = Entry(root,fg='Blue', width=8, font=('楷体',64))
MyEntry.pack()
MyButton = Button(root,text='确认',width=5, font=('宋体',32),command=findword)
MyButton.pack()
MyButton2 = Button(root,text='退出',width=5, font=('宋体',32),command=closewindow)
MyButton2.pack()
v2 = StringVar()
MyText=Text(root, fg='Yellow',bg='Green', font=('宋体',24))
MyText.pack(side=BOTTOM)
MyEntry.focus_set()
mainloop()