用python实现词语接龙游戏

用python实现词语接龙游戏

最近,3岁多的女儿很喜欢玩词语接龙。想一想,这个游戏可以通过刚学的python在电脑上实现。

首先是要整理词语库,最好不要太生僻的词语,要够多,才能经得起比赛。经过上网一番查找,选择了了语料库在线http://corpus.zhonghuayuwen.org下的现代汉语语料库词频表。进行简单的整理,去掉了单字,形成了cword.txt文件,共约1万多个词语,对付小朋友应该够了吧。

由于刚学python没几天,又是很简单的一个程序,没有用到面向对象的方法(其实是还没有学会),通过简单的过程实现了。几点说明:

  1. 为了防止总是重复的回答,电脑先是在库中找到全部符合条件的词语,然后随机选一个回答。
  2. 采用tkinter作为GUI, 曾在VS code下消除了每一个警告,所以import时把每一个用到属性都写进去了,其实用*号就可以了。
  3. 增加了答题记录,有助于回顾答题过程。
  4. 增加对接龙规则一些验证。

这段代码还有很多可以改进的地方,比如一些变量设置不尽合理,可以增加禁示词语的重复和无限循环、可以学习人类输入的新词、可以设置难度,让电脑故意输出较难接的词语、可以设置答题的时间等功能,界面也丑得可以。如果词库改为为诗词库,还可以变换成“诗词接龙”、“飞花令”等诗词游戏。希望有兴趣的朋友可以改进这段代码。
代码和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()

你可能感兴趣的:(python)