本文实例为大家分享了python实现贪吃蛇游戏的具体代码,供大家参考,具体内容如下
新手自学python(简易贪吃蛇代码)
环境python3.7
刚刚大学毕业进入工作岗位,发现同事基本都会写py脚本,于是自学了一下,并写了一个简单的贪吃蛇代码,我觉得写的还是比较容易看懂,适合新手接触python。
# -*- coding: utf-8 -*- import tkinter as tk # 使用Tkinter前需要先导入 import tkinter.messagebox import pickle import random import time # 第1步,实例化object,建立窗口window window = tk.Tk() # 第2步,给窗口的可视化起名字 window.title('Greedy snake') # 第3步,设定窗口的大小(长 * 宽) # window.geometry('1004x504') # 这里的乘是小x # 第5步,创建一个主frame,长在主window窗口上 frame = tk.Frame(window, bg = 'blue', bd = 2, relief = tk.FLAT) frame.pack(side = 'left') #当前框架被选中,意思是键盘触发,只对这个框架有效 frame.focus_set() Labellist = [] #存放所有方块的label Blocklist = [] #存放背景方块的值 1:被占用 0:空闲 Snakelist = [] #存放snake的坐标 height = 15 width = 20 #snack前进方向 left = 0 right = 1 up = 2 down =3 pause = 0 start = 1 class App(tk.Frame): def __init__(self,master): self.window = master tk.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 = 1000 self.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 = 0 for 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+1 if c>=20: r=r+1 c=0 Labellist.append(LabelRowList) Blocklist.append(BlockRowlist) LabelRowList = [] BlockRowlist = [] #初始化snake self.Istart = 0 self.direction = left self.direction_last = left self.overflag = 0 #snake head的初始位置 self.x = 7 self.y = 8 #snake tail的初始位置 self.x_tail = 7 self.y_tail = 10 Snakelist.append((7,8)) Snakelist.append((7,9)) Snakelist.append((7,10)) self.snakelen = len(Snakelist) Blocklist[self.x][self.y] = 1 Blocklist[self.x][self.y+1] = 1 Blocklist[self.x][self.y+2] = 1 Labellist[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) #初始化food 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) 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 - 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 = 1 elif 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 = 1 self.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 #二级菜单:game gamemenu=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()
更多有趣的经典小游戏实现专题,分享给大家:
C++经典小游戏汇总
python经典小游戏汇总
python俄罗斯方块游戏集合
JavaScript经典游戏 玩不停
java经典小游戏汇总
javascript经典小游戏汇总
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
python,贪吃蛇
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 羽泉《给未来的你&天黑天亮》[WAV+CUE][968M]
- 庄心妍《我也许在等候》[低速原抓WAV+CUE]
- 王雅洁《小调歌后2》[原抓WAV+CUE]
- 中国武警男声合唱团《辉煌之声1天路》[DTS-WAV分轨]
- 紫薇《旧曲新韵》[320K/MP3][175.29MB]
- 紫薇《旧曲新韵》[FLAC/分轨][550.18MB]
- 周深《反深代词》[先听版][320K/MP3][72.71MB]
- 李佳薇.2024-会发光的【黑籁音乐】【FLAC分轨】
- 后弦.2012-很有爱【天浩盛世】【WAV+CUE】
- 林俊吉.2012-将你惜命命【美华】【WAV+CUE】
- 晓雅《分享》DTS-WAV
- 黑鸭子2008-飞歌[首版][WAV+CUE]
- 黄乙玲1989-水泼落地难收回[日本天龙版][WAV+CUE]
- 周深《反深代词》[先听版][FLAC/分轨][310.97MB]
- 姜育恒1984《什么时候·串起又散落》台湾复刻版[WAV+CUE][1G]