A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 易大帅 高级黑马   /  2017-3-22 07:38  /  3780 人查看  /  5 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

python 基于Tkinter的姻缘测试器xihuanqiqi)                       
                                                        前期吐槽:
还记得8年前,大概是八年级的时候,那时候自己很帅。。
《名字打架》这款小游戏还是挺火的。。
突然想起来,就用Tkinter做了个。。类似的。。很挫,不过编程,就是自由,想怎么编就怎么编。。
改了个名字,叫姻缘测试器。。
其实真的很无聊,就是巩固下Tkinter。。没什么意思。。大神可以别看。。


算法
MD5 + 是否能够mod 3 尽,两个人都能mod尽,那就最屌了,只有一个人mod 3尽,就凑合,如果都mod 不尽,就可能不适合。
为什么是3呢? 你不觉得世界很多东西和3有关系吗?很多时间间隔是3秒,多了就长,少了就短。而且,本人和3关系很大。。家里排老三呢。。




大概长个样子







代码
# -*- coding: utf-8 -*-from Tkinter import *from ttk import Frame, Button, Style, Entry, Labelimport tkMessageBox import reimport urllib, Queue, sgmllibimport timeimport threadingimport tkFileDialogimport randomimport hashlibclass NameFighter(Frame):    txt = ""    area = None    en1 = None    en2 = None        def __init__(self,parent):        Frame.__init__(self,parent)        self.parent = parent        self.initUI()                #事件绑定,用来实时显示text        self.parent.bind("<<A>>", lambda evt:self.area.insert(END,self.txt))        #事件绑定,让Text跟踪到最新一行        self.parent.bind("<<CurrentView>>", lambda evt:self.area.see(END))        #事件绑定,让goBtn恢复正常        self.parent.bind("<<NormalGoBtn>>", lambda evt: self.goBtn.config(state = NORMAL))    def do_figting(self,moves,n1,n2,b1,b2):        try:            self.txt = "如果两人能够坚持越久轮,爱情就越稳固!\n"            self.parent.event_generate("<<A>>",when="tail")#触发bind的事件,也就是显示文本            self.parent.event_generate("<<CurrentView>>",when="tail")#触发bind的事件,也就是显示文本            time.sleep(1)                        for i in range(5,0,-1):                self.txt = "倒计时:"+str(i)+"秒!\n"                self.parent.event_generate("<<A>>",when="tail")#触发bind的事件,也就是显示文本                self.parent.event_generate("<<CurrentView>>",when="tail")#触发bind的事件,也就是显示文本                time.sleep(1)                            self.txt = n1 + " 初始血量:"+ str(b1)+" \n" + n2 + " 初始血量:"+str(b2)+" \n"            self.parent.event_generate("<<A>>",when="tail")#触发bind的事件,也就是显示文本            time.sleep(1)                        flag = 1                        while b1 > 0 and b2 > 0:                self.txt = "\n=========================第"+str(flag)+"轮=========================\n"                self.parent.event_generate("<<A>>",when="tail")#触发bind的事件,也就是显示文本                self.parent.event_generate("<<CurrentView>>",when="tail")#触发bind的事件,也就是显示文本                time.sleep(1)                                tempb = random.randint(300,400)                tempm = random.randint(0,len(moves)-1)                if flag % 2 == 0:                    b2 -= tempb                    if b2 < 0 :                        self.txt = n2+" 不堪重负,被 "+n1+"活活打死了...\n"                    else:                        self.txt = n1+" "+moves[tempm]+" "+n2+" 造成"+str(tempb)+"的伤害!"                        self.txt += n2+"剩下血量:"+str(b2)+"\n"                else:                    b1 -= tempb                    if b1 < 0 :                        self.txt = n1+" 不堪重负,被 "+n2+"活活打死了...\n"                    else:                        self.txt = n2+" "+moves[tempm]+" "+n1+" 造成"+str(tempb)+"的伤害!"                        self.txt += n1+"剩下血量:"+str(b1)+"\n"                flag += 1                self.parent.event_generate("<<A>>",when="tail")#触发bind的事件,也就是显示文本                self.parent.event_generate("<<CurrentView>>",when="tail")#触发bind的事件,也就是显示文本                time.sleep(1.5)            self.txt = "\n======================一切都结束了======================\n"            self.parent.event_generate("<<A>>",when="tail")#触发bind的事件,也就是显示文本            self.parent.event_generate("<<CurrentView>>",when="tail")#触发bind的事件,也就是显示文本            time.sleep(1)                        #真正的逻辑,以3为基准            if b1 % 3 == 0 and b2 % 3 == 0:                self.txt = "恭喜"+n1+" 和 "+n2+"!你们非常适合在一起!\n"            elif b1 % 3 == 0 or b2 % 3 == 0:                self.txt = "恭喜"+n1+" 和 "+n2+"!因为有一个人比较迁就的关系,你们还算比较适合在一起!\n"            else:                self.txt = "哎!"+n1+" 和 "+n2+"!貌似不合适?不想说什么!\n"            self.parent.event_generate("<<A>>",when="tail")#触发bind的事件,也就是显示文本            self.parent.event_generate("<<CurrentView>>",when="tail")#触发bind的事件,也就是显示文本                        finally:            self.parent.event_generate("<<NormalGoBtn>>",when="tail")#触发bind的事件,让goBtn恢复                def onGo(self):        maleName = self.en1.get()        famaleName = self.en2.get()        n1 = maleName.encode("utf8")        n2 = famaleName.encode("utf8")                md5_1 = hashlib.md5()        md5_1.update(n1)        md5_1 = md5_1.hexdigest().upper()        md5_2 = hashlib.md5()        md5_2.update(str(n2))        md5_2 = md5_2.hexdigest().upper()        blood_1 = 0         for i in range(len(md5_1)):            blood_1 += ord(md5_1)        print blood_1        blood_2 = 0         for i in range(len(md5_2)):            blood_2 += ord(md5_2)        print blood_2                        if maleName == "" or famaleName == "":            tkMessageBox.showinfo('逗比','你不写名字我怎么算\n' )        else:            moves = ['咬了一口','踢了一下','挠了一下','放出了大海无量打中','舔了一下','搓了一下','吼了一下']            self.goBtn.config(state=DISABLED) #先置为disabled                        do_figting_thread = threading.Thread(target=self.do_figting,args = (moves,n1,n2,blood_1,blood_2,))            do_figting_thread.start()                                    def onHelp(self):        tkMessageBox.showinfo('玩法','随便点点,即使是逗比也会玩呢\n' )           def initUI(self):        #大小,位置        w = 600        h = 400        sw = self.parent.winfo_screenwidth()        sh = self.parent.winfo_screenheight()        x = (sw-w)/2        y = (sh-h)/2        self.parent.geometry('%dx%d+%d+%d' % (w,h,x,y))        self.parent.title("哈尔滨马家沟男子职业技术学院出品!电脑算命-姻缘测试器")            #风格        self.style = Style()        self.style.theme_use("default")                Style().configure("TButton", padding = (0, 5, 0, 5), font='serif 10')        #控件位置调控        self.columnconfigure(1, weight = 1)        self.columnconfigure(2, pad = 7)        self.rowconfigure(3, weight = 1)        self.rowconfigure(5, pad = 7)        #标签        lb1 = Label(self, text = "请输入男方姓名: ")        lb1.grid(row = 0, column = 0, sticky = W)        lb2 = Label(self, text = "请输入女方姓名: ")        lb2.grid(row = 1, column = 0, sticky = W)        #输入点Entry        self.en1 = Entry(self)        self.en1.grid(row = 0, column = 1,  columnspan = 1, sticky = W+E)        self.en2 = Entry(self)        self.en2.grid(row = 1, column = 1,  columnspan = 1, sticky = W+E)        #显示结果的text & Scrollbar        self.area = Text(self, bg = 'black', fg = 'green')        self.area.grid(row = 2,column = 0, columnspan = 2, rowspan = 4, sticky = E+W+S+N)        self.area.see(1000.0)                self.sb = Scrollbar(self)        self.sb.grid(row = 2, column = 1, rowspan = 4, sticky = E+W+S+N)        self.area['yscrollcommand'] = self.sb.set #text往下走,触发scrollbar的set()        self.sb['command'] = self.area.yview #scrollbar的拖动,触发text的view移动        #Go按钮        self.goBtn = Button(self, text = "Go!",command = self.onGo)        self.goBtn.grid(row = 0, column = 2)                lb3 = Label(self, text = "电脑算命-绝对准确, made by ouyang! ")        lb3.grid(row = 6, column = 1, sticky = E)        #Help按钮        helpBtn = Button(self, text = "怎么玩?",command = self.onHelp)        helpBtn.grid(row = 6, column = 2)        #最终绑定        self.pack(fill = BOTH,expand = 1)        def main():    root = Tk()    root.geometry("250x150+300+300")    app = NameFighter(root)    root.mainloop()if __name__ == '__main__':    main()

重点关注
事件的绑定和触发
事件触发的时候,把事件放到tail最好,不然容易乱。。。when="tail"

5 个回复

倒序浏览
回复 使用道具 举报
你这资源都是在哪看的
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
我想去摆个摊了
回复 使用道具 举报
为什么本版全是你的贴子啊
回复 使用道具 举报
我就是看看 发表于 2017-3-22 15:34
为什么本版全是你的贴子啊

帅吧,除了这我无法解释!
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马