正文
前言
又是学习python的一天,赶紧动动手一起做起来吧。只有日复一日的练习,才能提升自己的能力。
代码#coding:utf-8import randomimport math__mataclass__ = typeclass map2048(): # 设置游戏数据 def reset(self): self.__row = 4 # 行数 self.__col = 4 # 列数 self.data = [ [0 for x in range(self.__col)] for y in range(self.__row)] self.fill2() self.fill2() def __init__(self): self.reset() def get_space_count(self): count = 0 for r in self.data: count += r.count(0) return count def get_score(self): s = 0 for r in self.data: for c in r: s += 0 if c 4 else c * int((math.log(c, 2) - 1.0)) return s def fill2(self): blank_count=self.get_space_count() if 0 == blank_count: return False pos = random.randrange(0, blank_count) offset = 0 for r in self.data: for ci in range(self.__col): if 0 == r[ci]: if offset == pos: r[ci] = 2 return True offset += 1 def is_gameover(self): for r in self.data: if r.count(0): return False#水平上还有空格则没有结束 for i in range(self.__col - 1): if r[i] == r[i + 1]: return False#水平方向还有可以合并的数字则游戏没有结束 for c in range(self.__col - 1): for r in range(self.__row - 1): if self.data[r][c] == self.data[r + 1][c]: return False#竖直方向还有可以合并的数字则游戏没有结束 return True#没有以上的条件则游戏结束 def left(self):#左移动 moveflag = False for times in range(self.__col - 1): for r in self.data: for c in range(self.__col - 1): if 0 == r[c]: moveflag = True r[c] = r[c + 1] r[c + 1] = 0# 是否发生碰撞,如果有碰撞则合并,合并结果靠左,右则是空格 for r in self.data: for c in range(self.__col - 1): if r[c] == r[c + 1]: moveflag = True r[c] *= 2 r[c + 1] = 0#数字向左移动填充数字 for times in range(self.__col - 1): for r in self.data: for c in range(self.__col - 1): if 0 == r[c]: moveflag = True r[c] = r[c + 1] r[c + 1] = 0 return moveflag def right(self):#右移动 for r in self.data: r.reverse() moveflag = self.left() for r in self.data: r.reverse() return moveflag def up(self):#向上移动 moveflag=False for times in range(self.__row - 1): for c in range(self.__col): for r in range(self.__row - 1): if 0 == self.data[r][c]: moveflag = True self.data[r][c] = self.data[r + 1][c] self.data[r + 1][c] = 0# 是否发生碰撞,如果有碰撞则合并,合并结果靠上,下则是空格 for c in range(self.__col): for r in range(self.__row - 1): if self.data[r][c] == self.data[r + 1][c]: moveflag = True self.data[r][c] *= 2 self.data[r + 1][c] = 0#数字向上填充数字 for times in range(self.__row - 1): for c in range(self.__col): for r in range(self.__row - 1): if 0 == self.data[r][c]: moveflag = True self.data[r][c] = self.data[r + 1][c] self.data[r + 1][c] = 0 return moveflag def down(self):#向下移动 self.data.reverse() moveflag = self.up() self.data.reverse() return moveflagimport sysif (sys.version_info (3, 0)): from tkinter import * from tkinter import messageboxelse: from tkinter import *game = map2048()#图形界面按键移动keymap={'a':game.left,'d':game.right,'w':game.up,'s':game.down,'Left': game.left,'Right': game.right,'Up': game.up,'Down': game.down,'q': exit,}game_bg_color="#bbada0"mapcolor={0: ("#FF3366","#CC0066"), 2: ("#FFCCFF","#CC0066"), 4: ("#FF99FF","#FF33CC"), 8: ("#FF6699","#FF33CC"), 16: ("#FF33FF","#FF00FF"), 32: ("#FF66FF","#FF00FF"), 64: ("#FF00CC","#FF3399"),128: ("#993366","#FF3399"),256:("#CC0066","#FF3366"), 512: ("#FF33CC","#FF3366"), 1024: ("#FF00FF","#FF33FF"), 2048: ("#FF00FF","#FF33FF"), 4096: ("#FF3399","#FF00CC")}#数字颜色和方块的颜色map_labels = []def on_mouse_down(event): print("clicked at",event.x,event.y)def on_key_down(event): keysym = event.keysym if keysym in keymap: if keymap[keysym](): game.fill2() update_ui() if game.is_gameover(): mb = messagebox.askyesno(title="gameover", message="游戏结束!\n是否退出游戏!") if mb: exit() else: game.reset() update_ui()def update_ui(): for r in range(len(game.data)): for c in range(len(game.data[0])): number = game.data[r][c] label = map_labels[r][c] label['text'] = str(number) if number else '' label['bg'] = mapcolor[number][0] label['foreground'] = mapcolor[number][1] label_score['text'] = str(game.get_score())root=Tk()#图像化界面的显示root.title('2048')frame = Frame(root, width=300, height=300, bg=game_bg_color)frame.grid(sticky=N + E + W + S)frame.focus_set()frame.bind("Key",on_key_down)frame.bind("ButtonRelease-1", on_mouse_down)for r in range(len(game.data)): row = [] for c in range(len(game.data[0])): value = game.data[r][c] text='' if 0==value else str(value) label=Label(frame, text=text, width=4, height=2,font=("黑体", 30, "bold")) label.grid(row=r,column=c,padx=5,pady=5,sticky=N + E + W + S) row.append(label) map_labels.append(row)bottom_row=len(game.data)print("button",str(bottom_row))label = Label(frame, text='分数', font=("黑体", 30, "bold"),bg="#bbada0", fg="#eee4da")label.grid(row=bottom_row, column=0, padx=5, pady=5)label_score = Label(frame, text='0', font=("黑体", 30, "bold"),bg="#bbada0", fg="#ffffff")label_score.grid(row=bottom_row, columnspan=2, column=1, padx=5, pady=5)def reset_game(): game.reset() update_ui()# restart_button = Button(frame, text='重新开始', command=reset_game)restart_button=Button(frame, text='重新开始', font=("黑体", 16, "bold"), bg="#8f7a66", fg="#f9f6f2", command=reset_game)restart_button.grid(row=bottom_row,column=3,padx=5,pady=5)update_ui()root.mainloop()效果展示 最后本文TAG:6699小游戏
- 上一篇: 梦幻西游普陀山加点(敏普陀和辅助普陀加点)
- 下一篇: 传奇3145(游晰传奇3重燃手游)
猜你喜欢
- 2023-08-30赤炎单职业传奇嬉戏里做事押镖任务中有什么方法?讨论赤炎单职业传奇每日押镖任务帮扶你极快升级
- 2023-08-30龙吟单职业传奇中帮你如何搭配夫妻传送功能(龙吟单职业传奇攻略详解)
- 2023-08-30首次接触合击传奇卡怪游戏玩家的绝对晓得的最好怪物,,跟合击传奇卡怪中最先起步的高好机会打宝地图无保留分享传授
- 2023-08-30【双通单职业传奇攻略】双通单职业传奇背包东西扔不出去是怎么回事
- 2022-02-22新开传奇手游使用拍卖行用于交易时最好提前沟通好
- 2022-02-22有哪些方法可以让我们弄到元宝
- 最近发表
- 标签列表
-
- 传奇手游私服 (7)
- 新开传奇手游网站 (7)
- 传奇单职业 (2)
- 传奇手游变态版 (1)
- 传奇发布网 (7)
- 传奇sf手游版 (1)
- 新开传奇 (1)
- 传奇私服 (1)
- 拳皇7k7k小游戏 (0)
- nitrome小游戏 (0)
- 最新传奇发布网 (0)
- 每日新开传奇网 (0)
- 找176复古传奇 (0)
- 超级变态热血传奇 (0)
- nba2k11最新名单 (0)
- 王者荣耀更新 (0)
- 王者荣耀体验服申请 (0)
- 英雄联盟出装顺序 (0)
- 三国志单机游戏 (0)
- 王者荣耀宫本武藏符文 (0)
- 梦幻西游109神器任务攻略 (0)
- 下载英雄联盟 (0)
- 机械公敌兰博出装 (0)
- 王者荣耀西施 (0)
- 王者荣耀无限火力 (0)
- 不知火舞王者荣耀 (0)
- 300英雄三笠出装 (0)
- 冒险岛2职业 (0)
- 龙将2官网 (0)
- 热血传奇怀旧版好玩吗 (0)
- 传奇超级 (0)
- 传奇师服 (0)
- 迷失传奇发布网 (0)
- 韩版传奇私服发布网 (0)
- 传世新开 (0)
- 传奇2外挂 (0)
- 传奇复古 (0)
- 单职业变态 (0)
- 传奇sf180 (0)
- 传世sf吧 (0)
- 传奇私服gm命令大全 (0)
- 传奇世界私服刷元宝 (0)
- dnf私服发布网 (0)
- 网页三国游戏排行榜 (0)
- 傲视千雄私服 (0)
- 热血传奇176客户端下载 (0)
- 最新机战私服 (0)
- 传奇吉吉免费版 (0)
- 蜘蛛纸牌游戏 (0)
- 最热门的网游排行榜 (0)
- 2d网游 (0)
- 网游私服排行榜 (0)
- moba网游 (0)
- 439小游戏 (0)
- 飞车小游戏 (0)
- 奥奇传说小游戏 (0)
- 龙斗士小游戏 (0)
- 下载手机游戏 (0)
- 维京神域之战 (0)
- 星际2单机 (0)
- 防守类单机游戏 (0)
- 灰烬攻略 (0)
- 战神3pc版 (0)
- 腐尸之屋 (0)
- 新神奇传说3秘籍 (0)
- 生化危机5怎么存档 (0)
- 三国群英传1单机版下载 (0)
- 捕鱼达人手机版 (0)
- 仙剑奇侠传游戏1 (0)
- 暴力摩托单机版下载 (0)
- fifa12下载 (0)
- 色单机游戏 (0)
- 三国志13修改器 (0)
- 梦幻西游单机版神剑情天3 (0)
- 对打单机游戏 (0)
- 三国群英传7补丁 (0)
- 最好单机游戏下载 (0)
- 流星蝴蝶剑秘籍大全 (0)
- 孢子 (0)
- 梦幻西游赚钱 (0)
- 梦幻西游答题 (0)
- 王者荣耀防沉迷 (0)
- 梦幻西游挖图技巧 (0)
- 梦幻岛游戏 (0)
- 轩辕剑网游官网 (0)
- 梦幻西游手游论坛 (0)
- 极道阴阳师 (0)
- 仙剑奇侠传3下载 (0)
- 七龙珠人物换装2 (0)
- 赛尔号手机版下载 (0)
- lol战队名字 (0)
- 黑湾海盗中文版 (0)
- 超级街霸4街机版 (0)
- 侵略行为 (0)
- 孤岛惊魂3结局 (0)
- 龙珠单机游戏大全 (0)
- 仙剑三游戏下载 (0)
- 策略单机游戏 (0)
- 家园2简体中文版 (0)
- 现代战争2 (0)