电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

python語言實(shí)現(xiàn)貪吃蛇游戲

瀏覽:9日期:2022-07-05 16:27:10

本文實(shí)例為大家分享了python實(shí)現(xiàn)貪吃蛇游戲的具體代碼,供大家參考,具體內(nèi)容如下

新手自學(xué)python(簡易貪吃蛇代碼)環(huán)境python3.7

剛剛大學(xué)畢業(yè)進(jìn)入工作崗位,發(fā)現(xiàn)同事基本都會(huì)寫py腳本,于是自學(xué)了一下,并寫了一個(gè)簡單的貪吃蛇代碼,我覺得寫的還是比較容易看懂,適合新手接觸python。

# -*- coding: utf-8 -*-import tkinter as tk # 使用Tkinter前需要先導(dǎo)入import tkinter.messageboximport pickleimport randomimport time# 第1步,實(shí)例化object,建立窗口windowwindow = tk.Tk() # 第2步,給窗口的可視化起名字window.title(’Greedy snake’)# 第3步,設(shè)定窗口的大小(長 * 寬)# window.geometry(’1004x504’) # 這里的乘是小x# 第5步,創(chuàng)建一個(gè)主frame,長在主window窗口上frame = tk.Frame(window, bg = ’blue’, bd = 2, relief = tk.FLAT)frame.pack(side = ’left’)#當(dāng)前框架被選中,意思是鍵盤觸發(fā),只對(duì)這個(gè)框架有效frame.focus_set()Labellist = [] #存放所有方塊的labelBlocklist = [] #存放背景方塊的值 1:被占用 0:空閑Snakelist = [] #存放snake的坐標(biāo)height = 15width = 20#snack前進(jìn)方向left = 0right = 1up = 2down =3pause = 0start = 1class App(tk.Frame): def __init__(self,master):self.window = mastertk.Frame.__init__(self)master.bind(’<Up>’,self.Up)master.bind(’<Left>’,self.Left)master.bind(’<Right>’,self.Right)master.bind(’<Down>’,self.Down)master.bind(’<p>’,self.Pause)master.bind(’<s>’,self.Start)master.bind(’<r>’,self.Restart)self.Init_snake() #初始化界面方法 self.time = 1000self.Onetime() def Up(self, event):if self.Istart: self.direction = up def Down(self, event):if self.Istart: self.direction = down def Left(self, event):if self.Istart: self.direction = left def Right(self, event):if self.Istart: self.direction = right def Init_snake(self):del Labellist[:]del Blocklist[:]del Snakelist[:] #初始化背景方塊LabelRowList = []BlockRowlist = []c = r = 0for k in range(width*height): LN=tk.Label(frame,text = ’ ’, bg = ’black’, fg = ’white’, relief = tk.FLAT, bd = 4) LN.grid(row=r,column=c,sticky=tk.N+tk.E+tk.S+tk.W) LabelRowList.append(LN) BlockRowlist.append(0) c=c+1if c>=20:r=r+1c=0Labellist.append(LabelRowList)Blocklist.append(BlockRowlist)LabelRowList = []BlockRowlist = []#初始化snakeself.Istart = 0self.direction = left self.direction_last = left self.overflag = 0 #snake head的初始位置self.x = 7self.y = 8#snake tail的初始位置self.x_tail = 7self.y_tail = 10Snakelist.append((7,8))Snakelist.append((7,9))Snakelist.append((7,10))self.snakelen = len(Snakelist) Blocklist[self.x][self.y] = 1Blocklist[self.x][self.y+1] = 1Blocklist[self.x][self.y+2] = 1Labellist[self.x][self.y].config(bg = ’green’, relief = tk.RAISED)Labellist[self.x][self.y+1].config(bg = ’white’, relief = tk.RAISED)Labellist[self.x][self.y+2].config(bg = ’white’, relief = tk.RAISED)#初始化foodself.food_x = random.randint(0,14)self.food_y = random.randint(0,19)while Blocklist[self.food_x][self.food_y] == 1: self.food_x = random.randint(0,14) self.food_y = random.randint(0,19) Blocklist[self.food_x][self.food_y] = 1Labellist[self.food_x][self.food_y].config(bg = ’red’, relief = tk.RIDGE) def Pause(self, event):self.Istart = pause def Start(self, event):self.Istart = start def Restart(self, event):self.Init_snake() def Onetime(self): #每1000ms做一次界面刷新if self.Istart and self.overflag == 0:if (self.direction_last == down and self.direction == up )or(self.direction_last == up and self.direction == down )or(self.direction_last ==left and self.direction == right )or(self.direction_last ==right and self.direction == left ):self.direction = self.direction_last self.direction_last = self.direction x0 = self.x y0 = self.y if self.direction == left:if x0 == self.food_x and y0-1 == self.food_y: Labellist[x0][y0-1].config(bg = ’green’, relief = tk.RAISED) Labellist[x0][y0].config(bg = ’white’, relief = tk.RAISED) self.food_x = random.randint(0,14) self.food_y = random.randint(0,19) while Blocklist[self.food_x][self.food_y] == 1:self.food_x = random.randint(0,14)self.food_y = random.randint(0,19) Blocklist[self.food_x][self.food_y] = 1 Labellist[self.food_x][self.food_y].config(bg = ’red’, relief = tk.RIDGE) self.snakelen += 1 Snakelist.insert(0,(x0,y0-1)) self.x = x0 self.y = y0 - 1elif (x0>=0 and x0<height and y0-1>=0 and y0-1<width and Blocklist[x0][y0-1] == 0) or (self.x_tail == x0 and self.y_tail == y0 - 1):Blocklist[self.x_tail][self.y_tail] = 0 Labellist[self.x_tail][self.y_tail].config(bg = ’black’, relief = tk.FLAT) Blocklist[x0][y0-1] = 1 Labellist[x0][y0-1].config(bg = ’green’, relief = tk.RAISED) Labellist[x0][y0].config(bg = ’white’, relief = tk.RAISED) del Snakelist[self.snakelen - 1] Snakelist.insert(0,(x0,y0-1)) self.x = x0 self.y = y0 - 1 self.x_tail = Snakelist[self.snakelen - 1][0] self.y_tail = Snakelist[self.snakelen - 1][1]else: tk.messagebox.showinfo(title = ’snake’, message = ’game over!!!’) self.overflag = 1elif self.direction == up:if x0-1 == self.food_x and y0 == self.food_y: Labellist[x0-1][y0].config(bg = ’green’, relief = tk.RAISED) Labellist[x0][y0].config(bg = ’white’, relief = tk.RAISED) self.food_x = random.randint(0,14) self.food_y = random.randint(0,19) while Blocklist[self.food_x][self.food_y] == 1:self.food_x = random.randint(0,14)self.food_y = random.randint(0,19) Blocklist[self.food_x][self.food_y] = 1 Labellist[self.food_x][self.food_y].config(bg = ’red’, relief = tk.RIDGE) self.snakelen += 1 Snakelist.insert(0,(x0-1,y0)) self.x = x0 - 1 self.y = y0 elif (x0-1 >=0 and x0-1<height and y0>=0 and y0<width and Blocklist[x0-1][y0] == 0) or (self.x_tail == x0-1 and self.y_tail == y0): Blocklist[self.x_tail][self.y_tail] = 0 Labellist[self.x_tail][self.y_tail].config(bg = ’black’, relief = tk.FLAT) Blocklist[x0-1][y0] = 1 Labellist[x0-1][y0].config(bg = ’green’, relief = tk.RAISED) Labellist[x0][y0].config(bg = ’white’, relief = tk.RAISED) del Snakelist[self.snakelen - 1] Snakelist.insert(0,(x0 - 1,y0)) self.x = x0 - 1 self.y = y0 self.x_tail = Snakelist[self.snakelen - 1][0] self.y_tail = Snakelist[self.snakelen - 1][1]else: tk.messagebox.showinfo(title = ’snake’, message = ’game over!!!’) self.overflag = 1 elif self.direction == down:if x0+1 == self.food_x and y0 == self.food_y: Labellist[x0+1][y0].config(bg = ’green’, relief = tk.RAISED) Labellist[x0][y0].config(bg = ’white’, relief = tk.RAISED) self.food_x = random.randint(0,14) self.food_y = random.randint(0,19) while Blocklist[self.food_x][self.food_y] == 1:self.food_x = random.randint(0,14)self.food_y = random.randint(0,19) Blocklist[self.food_x][self.food_y] = 1 Labellist[self.food_x][self.food_y].config(bg = ’red’, relief = tk.RIDGE) self.snakelen += 1 Snakelist.insert(0,(x0+1,y0)) self.x = x0 + 1 self.y = y0 elif (x0+1 >=0 and x0+1 <height and y0>=0 and y0<width and Blocklist[x0+1][y0] == 0) or (self.x_tail == x0+1 and self.y_tail == y0):Blocklist[self.x_tail][self.y_tail] = 0 Labellist[self.x_tail][self.y_tail].config(bg = ’black’, relief = tk.FLAT) Blocklist[x0+1][y0] = 1 Labellist[x0+1][y0].config(bg = ’green’, relief = tk.RAISED) Labellist[x0][y0].config(bg = ’white’, relief = tk.RAISED) del Snakelist[self.snakelen - 1] Snakelist.insert(0,(x0 + 1,y0)) self.x = x0 + 1 self.y = y0 self.x_tail = Snakelist[self.snakelen - 1][0] self.y_tail = Snakelist[self.snakelen - 1][1]else: tk.messagebox.showinfo(title = ’snake’, message = ’game over!!!’) self.overflag = 1 elif self.direction == right:if x0 == self.food_x and y0+1 == self.food_y: Labellist[x0][y0+1].config(bg = ’green’, relief = tk.RAISED) Labellist[x0][y0].config(bg = ’white’, relief = tk.RAISED) self.food_x = random.randint(0,14) self.food_y = random.randint(0,19) while Blocklist[self.food_x][self.food_y] == 1:self.food_x = random.randint(0,14)self.food_y = random.randint(0,19) Blocklist[self.food_x][self.food_y] = 1 Labellist[self.food_x][self.food_y].config(bg = ’red’, relief = tk.RIDGE) self.snakelen += 1 Snakelist.insert(0,(x0,y0 + 1)) self.x = x0 self.y = y0 + 1 elif (x0>=0 and x0<height and y0+1>=0 and y0+1<width and Blocklist[x0][y0+1] == 0) or (self.x_tail == x0 and self.y_tail == y0+1): Blocklist[self.x_tail][self.y_tail] = 0 Labellist[self.x_tail][self.y_tail].config(bg = ’black’, relief = tk.FLAT) Blocklist[x0][y0+1] = 1 Labellist[x0][y0+1].config(bg = ’green’, relief = tk.RAISED) Labellist[x0][y0].config(bg = ’white’, relief = tk.RAISED) del Snakelist[self.snakelen - 1] Snakelist.insert(0,(x0,y0 + 1)) self.x = x0 self.y = y0 + 1 self.x_tail = Snakelist[self.snakelen - 1][0] self.y_tail = Snakelist[self.snakelen - 1][1]else: tk.messagebox.showinfo(title = ’snake’, message = ’game over!!!’) self.overflag = 1self.after(self.time,self.Onetime)def Start_Stop(): app.Istart = 1 - app.Istart def Restart(): app.Restart(0) #主菜單mainmenu = tk.Menu(window)window[’menu’] = mainmenu#二級(jí)菜單:gamegamemenu=tk.Menu(mainmenu)mainmenu.add_cascade(label=’游戲’,menu=gamemenu)gamemenu.add_command(label = ’開始/暫停’,command=Start_Stop)gamemenu.add_command(label = ’重置’,command=Restart)gamemenu.add_command(label = ’退出’,command=window.quit)app = App(window) window.mainloop()

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 拉卡拉POS机官网 - 官方直营POS机办理|在线免费领取 | 可程式恒温恒湿试验箱|恒温恒湿箱|恒温恒湿试验箱|恒温恒湿老化试验箱|高低温试验箱价格报价-广东德瑞检测设备有限公司 | 砂尘试验箱_淋雨试验房_冰水冲击试验箱_IPX9K淋雨试验箱_广州岳信试验设备有限公司 | 海外仓系统|国际货代系统|退货换标系统|WMS仓储系统|海豚云 | 欧版反击式破碎机-欧版反击破-矿山石料破碎生产线-青州奥凯诺机械 | 假肢-假肢价格-假肢厂家-河南假肢-郑州市力康假肢矫形器有限公司 | 蓝鹏测控平台 - 智慧车间系统 - 车间生产数据采集与分析系统 | 热熔胶网膜|pes热熔网膜价格|eva热熔胶膜|热熔胶膜|tpu热熔胶膜厂家-苏州惠洋胶粘制品有限公司 | 青岛美佳乐清洁工程有限公司|青岛油烟管道清洗|酒店|企事业单位|学校工厂厨房|青岛油烟管道清洗 插针变压器-家用电器变压器-工业空调变压器-CD型电抗器-余姚市中驰电器有限公司 | 青州开防盗门锁-配汽车芯片钥匙-保险箱钥匙-吉祥修锁店 | [品牌官网]贵州遵义双宁口腔连锁_贵州遵义牙科医院哪家好_种植牙_牙齿矫正_原华美口腔 | elisa试剂盒-PCR试剂盒「上海谷研实业有限公司」 | 颗粒机,颗粒机组,木屑颗粒机-济南劲能机械有限公司 | 湖南档案密集架,智能,物证,移动,价格-湖南档案密集架厂家 | 盘扣式脚手架-附着式升降脚手架-移动脚手架,专ye承包服务商 - 苏州安踏脚手架工程有限公司 | 热风机_工业热风机生产厂家上海冠顶公司提供专业热风机图片价格实惠 | Eiafans.com_环评爱好者 环评网|环评论坛|环评报告公示网|竣工环保验收公示网|环保验收报告公示网|环保自主验收公示|环评公示网|环保公示网|注册环评工程师|环境影响评价|环评师|规划环评|环评报告|环评考试网|环评论坛 - Powered by Discuz! | 细沙回收机-尾矿干排脱水筛设备-泥石分离机-建筑垃圾分拣机厂家-青州冠诚重工机械有限公司 | 能耗监测系统-节能监测系统-能源管理系统-三水智能化 | 武汉高低温试验箱_恒温恒湿试验箱厂家-武汉蓝锐环境科技有限公司 | 编织人生 - 权威手工编织网站,编织爱好者学习毛衣编织的门户网站,织毛衣就上编织人生网-编织人生 | 工业胀紧套_万向节联轴器_链条-规格齐全-型号选购-非标订做-厂家批发价格-上海乙谛精密机械有限公司 | 闪电优家-卫生间防水补漏_酒店漏水渗水维修_防水堵漏公司 | 信阳网站建设专家-信阳时代网联-【信阳网站建设百度推广优质服务提供商】信阳网站建设|信阳网络公司|信阳网络营销推广 | 旋振筛|圆形摇摆筛|直线振动筛|滚筒筛|压榨机|河南天众机械设备有限公司 | 金环宇|金环宇电线|金环宇电缆|金环宇电线电缆|深圳市金环宇电线电缆有限公司|金环宇电缆集团 | 钢绞线万能材料试验机-全自动恒应力两用机-混凝土恒应力压力试验机-北京科达京威科技发展有限公司 | CE认证_FCC认证_CCC认证_MFI认证_UN38.3认证-微测检测 CNAS实验室 | 皮带式输送机械|链板式输送机|不锈钢输送机|网带输送机械设备——青岛鸿儒机械有限公司 | 软装设计-提供软装装饰和软装配饰及软装陈设的软装设计公司 | 木材烘干机,木炭烘干机,纸管/佛香烘干设备-河南蓝天机械制造有限公司 | 昆明网络公司|云南网络公司|昆明网站建设公司|昆明网页设计|云南网站制作|新媒体运营公司|APP开发|小程序研发|尽在昆明奥远科技有限公司 | 加盟店-品牌招商加盟-创业项目商机平台 | 游泳池设备安装工程_恒温泳池设备_儿童游泳池设备厂家_游泳池水处理设备-东莞市君达泳池设备有限公司 | TPU薄膜_TPU薄膜生产厂家_TPU热熔胶膜厂家定制_鑫亘环保科技(深圳)有限公司 | 综合管廊模具_生态,阶梯护坡模具_检查井模具制造-致宏模具厂家 | 游动电流仪-流通式浊度分析仪-杰普仪器(上海)有限公司 | 高压无油空压机_无油水润滑空压机_水润滑无油螺杆空压机_无油空压机厂家-科普柯超滤(广东)节能科技有限公司 | 外贮压-柜式-悬挂式-七氟丙烷-灭火器-灭火系统-药剂-价格-厂家-IG541-混合气体-贮压-非贮压-超细干粉-自动-灭火装置-气体灭火设备-探火管灭火厂家-东莞汇建消防科技有限公司 | 铸铝门厂家,别墅大门庭院大门,别墅铸铝门铜门[十大品牌厂家]军强门业 | 超声波乳化机-超声波分散机|仪-超声波萃取仪-超声波均质机-精浩机械|首页 |