def move_left(lists):"""将列表所有的0元素右移,非0元素左移:param lists: list:return: list_new"""for list in lists:if list == 0:del lists[lists.index(0)]lists.append(0)return listsdef add_num(lists):"""对列表元素进行判断,若相邻元素相等,求和,并在末尾补元素0:param lists: list:return: new list"""for i in range(1, len(lists)):if lists[i - 1] == lists[i]:new_val = lists[i - 1] + lists[i]lists[i - 1] = new_valdel lists[i]lists.append(0)return listsdef test_list_left(lists):"""降维,左移,并计算值:param lists: list:return: list"""list_new = []for list in lists:list_new.append(add_num(move_left(list)))return list_newdef turn_list(lists):"""将列表镜像反转,再输出新列表:param lists: list:return: list"""lists_new = []for list in lists:list.reverse()  # 元素反转lists_new.append(list)return lists_newdef transpose_1(matrix):"""将二维数列顺时针转置变换:param matrix: list:return: list"""new_matrix = []for i in range(len(matrix)):matrix1 = []for j in range(len(matrix)):matrix1.append(matrix[j][i])new_matrix.append(matrix1)return new_matrixdef transpose_2(matrix):"""将二维数列逆时针转置变换:param matrix: list:return: list"""new_matrix = []for i in range(len(matrix),1,-1):print(i)matrix1 = []for j in range(len(matrix),1,-1):print(j)#     matrix1.append(matrix[j][i])# new_matrix.append(matrix1)return new_matrixlist_1 = [[2, 0, 6, 6], [0, 2, 6, 2], [0, 3, 3, 0],[3, 8, 8, 3]]
print('原始列表:', list_1)list_test_left = test_list_left(list_1)
print('左移结果:', list_test_left)list_test_right = test_list_left(turn_list(list_test_left))
res_right = turn_list(list_test_right)
print('右移结果:', res_right)# list_test_up = test_list_left(transpose_1(res_right))
# res_up = transpose_1(list_test_up)
# print('上移结果:',res_up)print(transpose_2(res_right))
# coding=UTF-8
from tkinter import *
from random import randint
from random import choice
import tkinter.messagebox"""
When you use python 3.X,you need to use the following header file.
from tkinter import *
from random import randint
from random import choice
import tkinter.messagebox
Author:Jeremy Wang
"""class Grid(object):def __init__(self, master=None, height=4, width=4, offset=10, grid_width=200, bg="#696969"):self.height = heightself.width = widthself.offset = offsetself.grid_width = grid_widthself.bg = bgself.canvas = Canvas(master, width=self.width * self.grid_width + 2 * self.offset,height=self.height * self.grid_width + 2 * self.offset, bg=self.bg)self.initial()def initial(self):for i in range(0, 4):for j in range(0, 4):x = i * self.grid_width + self.offsety = j * self.grid_width + self.offsetself.canvas.create_rectangle(x + 10, y + 10, x + self.grid_width - 10, y + self.grid_width - 10,fill="#808080", outline=self.bg)self.canvas.pack(side=RIGHT, fill=Y)def draw(self, pos, color, text):x = pos[0] * self.grid_width + self.offsety = pos[1] * self.grid_width + self.offset# outline属性要与网格的背景色(self.bg)相同,要不然会很丑self.canvas.create_rectangle(x + 10, y + 10, x + self.grid_width - 10, y + self.grid_width - 10, fill=color,outline=self.bg)ft1 = ('Comic Sans MS', 50, "bold")self.canvas.create_text(pos[0] * 200 + 110, pos[1] * 200 + 110, text=text, font=ft1)class Matrix(object):def __init__(self, grid):self.grid = gridself.matrix = [[0 for i in range(4)] for i in range(4)]self.matrix_o = [[0 for i in range(4)] for i in range(4)]self.vacancy = []self.gamewin = False# 使用一个字典将数字与其对应的颜色存放起来self.color = {0: "#808080", 2: "#FFFACD", 4: "#F5DEB3", 8: "#F0E68C", 16: "#FFFF00", 32: "#FFD700",64: "#FFA500", 128: "#FF8C00",256: "#CD5C5C", 512: "#FF6347", 1024: "#FF0000", 2048: "#00FFFF"}def initial(self):self.matrix = [[0 for i in range(4)] for i in range(4)]self.void()self.generate()self.generate()self.draw()for i in range(0, 4):for j in range(0, 4):self.matrix_o[i][j] = self.matrix[i][j]def draw(self):for i in range(0, 4):for j in range(0, 4):pos = (i, j)text = str(self.matrix[i][j])color = self.color[self.matrix[i][j]]self.grid.draw(pos, color, text)# 计算空位def void(self):self.vacancy = []for x in range(0, 4):for y in range(0, 4):if self.matrix[x][y] == 0:self.vacancy.append((x, y))return len(self.vacancy)# 在空位中,随机生成2或4def generate(self):pos = choice(self.vacancy)if randint(0, 5) == 4:self.matrix[pos[0]][pos[1]] = 4else:self.matrix[pos[0]][pos[1]] = 2del self.vacancy[self.vacancy.index((pos[0], pos[1]))]# 矩阵左移def up(self):ss = 0for i in range(0, 4):for j in range(0, 3):s = 0if not self.matrix[i][j] == 0:for k in range(j + 1, 4):if not self.matrix[i][k] == 0:if self.matrix[i][j] == self.matrix[i][k]:ss = ss + self.matrix[i][k]self.matrix[i][j] = self.matrix[i][j] * 2if self.matrix[i][j] == 2048:self.gamewin = Trueself.matrix[i][k] = 0s = 1breakelse:breakif s == 1:breakfor i in range(0, 4):s = 0for j in range(0, 3):if self.matrix[i][j - s] == 0:self.matrix[i].pop(j - s)self.matrix[i].append(0)s = s + 1return ss# 矩阵右移def down(self):for i in range(0, 4):self.matrix[i].reverse()ss = self.up()for i in range(0, 4):self.matrix[i].reverse()return ss# 矩阵上移def left(self):ss = 0for i in range(0, 4):for j in range(0, 3):s = 0if not self.matrix[j][i] == 0:for k in range(j + 1, 4):if not self.matrix[k][i] == 0:if self.matrix[j][i] == self.matrix[k][i]:ss = ss + self.matrix[k][i]self.matrix[j][i] = self.matrix[j][i] * 2if self.matrix[j][i] == 2048:self.gamewin = Trueself.matrix[k][i] = 0s = 1breakelse:breakif s == 1:breakfor i in range(0, 4):s = 0for j in range(0, 3):if self.matrix[j - s][i] == 0:for k in range(j - s, 3):self.matrix[k][i] = self.matrix[k + 1][i]self.matrix[3][i] = 0s = s + 1return ss# 矩阵下移def right(self):ss = 0for i in range(0, 4):for j in range(0, 3):s = 0if not self.matrix[3 - j][i] == 0:k = 3 - j - 1while k >= 0:if not self.matrix[k][i] == 0:if self.matrix[3 - j][i] == self.matrix[k][i]:ss = ss + self.matrix[k][i]self.matrix[3 - j][i] = self.matrix[3 - j][i] * 2if self.matrix[3 - j][i] == 2048:self.gamewin = Trueself.matrix[k][i] = 0s = s + 1breakelse:breakk = k - 1if s == 1:breakfor i in range(0, 4):s = 0for j in range(0, 3):if self.matrix[3 - j + s][i] == 0:k = 3 - j + swhile k > 0:self.matrix[k][i] = self.matrix[k - 1][i]k = k - 1self.matrix[0][i] = 0s = s + 1return ssclass Game(Frame):def __init__(self, master):Frame.__init__(self, master)self.grid = Grid(master)self.matrix = Matrix(self.grid)self.score = 0self.status = ['run', 'stop']self.grid.canvas.bind_all("<KeyRelease>", self.key_release)# 界面左侧显示分数self.m = StringVar()self.ft1 = ('Times New Roman', 40, "bold")self.m1 = Message(master, textvariable=self.m, aspect=5000, font=self.ft1, bg="#696969")self.m1.pack(side=LEFT, fill=Y)self.m.set("Score:" + str(self.score))self.initial()# 这个方法用于游戏重新开始时初始化游戏def initial(self):self.score = 0self.m.set("Score:" + str(self.score))self.matrix.initial()def key_release(self, event):key = event.keysymif key == "Up":ss = self.matrix.up()self.run(ss)elif key == "Down":ss = self.matrix.down()self.run(ss)elif key == "Left":ss = self.matrix.left()self.run(ss)elif key == "Right":ss = self.matrix.right()self.run(ss)def run(self, ss):if not self.matrix.matrix == self.matrix.matrix_o:self.score = self.score + int(ss)self.m.set("Score:" + str(self.score))if self.matrix.gamewin == True:self.matrix.draw()message = tkMessageBox.showinfo("大吉大利,今晚吃鸡!", "你的分数: %d" % self.score)if message == 'ok':self.initial()else:self.matrix.void()self.matrix.generate()for i in range(0, 4):for j in range(0, 4):self.matrix.matrix_o[i][j] = self.matrix.matrix[i][j]self.matrix.draw()else:v = self.matrix.void()if v < 1:message = tkMessageBox.showinfo("你输了/(ㄒoㄒ)/~~", "你的分数: %d" % self.score)if message == 'ok':self.initial()if __name__ == '__main__':root = Tk()game = Game(root)game.mainloop()

python—2048小游戏相关推荐

  1. python - 2048小游戏

    我们先玩一下2048游戏,看都有哪些特点需要完成 完成效果图: 现在开始编写游戏2048: 1.首先,画出棋盘 import random def draw_sep():print("+-- ...

  2. (Python)2048小游戏核心代码

    算法思想: 1.降维:将二维降为一维列表进行处理 2.去零:相邻相同合并 list_merge = None# 1 def zero_to_end():"""零元素移动到 ...

  3. python游戏代码五子棋_用20行Python代码实现2048小游戏,你会吗?

    前些天在b站上看到有个大佬用c写了一个2048小游戏,我便一下来了兴趣.心想着,我貌似也能用Python来整一波,话不多说,直接开搞. 2048的游戏规则: 2048游戏总共有16个格子,初始时会有两 ...

  4. python秒表游戏代码_用20行Python代码实现2048小游戏,你会吗?

    前些天在b站上看到有个大佬用c写了一个2048小游戏,我便一下来了兴趣.心想着,我貌似也能用Python来整一波,话不多说,直接开搞. 2048的游戏规则: 2048游戏总共有16个格子,初始时会有两 ...

  5. 我的名片能运行Linux和Python,还能玩2048小游戏,成本只要20元

    晓查 发自 凹非寺  量子位 报道 | 公众号 QbitAI 猜猜它是什么?印着姓名.职位和邮箱,看起来是个名片.可是右下角有芯片,看起来又像是个PCB电路板. 其实它是一台超迷你的ARM计算机,不仅 ...

  6. python里graphics的使用_使用graphics.py实现2048小游戏

    1.过年的时候在手机上下载了2048玩了几天,心血来潮决定用py写一个,刚开始的时候想用QT实现,发现依赖有点大.正好看到graphics.py是基于tkinter做的封装就拿来练手,并借用了CSDN ...

  7. Python学习—2048小游戏等4个小练习

    Python学习-2048小游戏等4个小练习 转载于:https://www.cnblogs.com/ChangAn223/p/10627777.html

  8. python小项目——2048小游戏(详解)

    2048游戏 原版游戏地址 第一部分 导入所需要的库 第二部分 确认游戏键位设置,并和对应的操作关联 第三部分 获取用户输入的值,并直到有效键位 第四部分 对矩阵的应用,减少代码量 第五部分 创建棋盘 ...

  9. Python实现2048小游戏

    2048小游戏也算是一款好玩的益智休闲小游戏,下面本博主用 python 语言将该游戏复现,感兴趣的小伙伴点击 关注 哦! 同时博主还用 java 语言复现了该游戏,可点击以下链接浏览博主的另一篇文章 ...

最新文章

  1. 你知道Redis可以实现延迟队列吗?
  2. Even Parity UVA - 11464 (枚举)
  3. 高级数据结构研究-B树系列以及红黑树
  4. VS调试时怎么跳过for循环?
  5. c++callback回调实例
  6. .NET Core 给使用.NET的公司所带来的机遇
  7. 虚拟研讨会:.NET的未来在哪里?
  8. ActiveRecord教程
  9. 【Java】关键词assert的使用
  10. OpenShift 4 - 定制 RHCOS Linux的Kernal参数
  11. 这才是你寻寻觅觅想要的 Python 可视化神器!
  12. 分布式系统常见的事务处理机制
  13. MySQL的Binlog与Redolog
  14. 非递归中序遍历---算法导论12.1-3
  15. GPS之Ublox方案设计
  16. 多功能工具箱微信小程序源码下载-操作简单
  17. 条码打印机如何打印流水号
  18. Unity获取IOS端相机权限的状态
  19. matlab句柄无效怎么解决,新编MATLABSimulink自学一本通第21章 MATLAB程序编译.ppt
  20. 牛客java选择题每日打卡Day2

热门文章

  1. 改变bam文件header的方法:samtools reheader和picard AddOrReplaceReadGroups
  2. ubuntu20.04上openvino安装及环境配置
  3. 用python画雪人-pygame画雪人_函数与图形示例.py
  4. 代码审计之旅之百家CMS
  5. 网站各类备案方法指引
  6. 星球日报 | 虚拟货币挖矿被国家“淘汰”
  7. 解决AS3.x无法新建Module:Project needs to be converted to androidx.* dependencies
  8. 三星GalaxyTab3刷机ROM_我是亲民_新浪博客
  9. 别只用 Selenium,新神器 Pyppeteer 绕过淘宝更简单!
  10. vue+ts中引入组件自动提示 declare module