python—2048小游戏
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小游戏相关推荐
- python - 2048小游戏
我们先玩一下2048游戏,看都有哪些特点需要完成 完成效果图: 现在开始编写游戏2048: 1.首先,画出棋盘 import random def draw_sep():print("+-- ...
- (Python)2048小游戏核心代码
算法思想: 1.降维:将二维降为一维列表进行处理 2.去零:相邻相同合并 list_merge = None# 1 def zero_to_end():"""零元素移动到 ...
- python游戏代码五子棋_用20行Python代码实现2048小游戏,你会吗?
前些天在b站上看到有个大佬用c写了一个2048小游戏,我便一下来了兴趣.心想着,我貌似也能用Python来整一波,话不多说,直接开搞. 2048的游戏规则: 2048游戏总共有16个格子,初始时会有两 ...
- python秒表游戏代码_用20行Python代码实现2048小游戏,你会吗?
前些天在b站上看到有个大佬用c写了一个2048小游戏,我便一下来了兴趣.心想着,我貌似也能用Python来整一波,话不多说,直接开搞. 2048的游戏规则: 2048游戏总共有16个格子,初始时会有两 ...
- 我的名片能运行Linux和Python,还能玩2048小游戏,成本只要20元
晓查 发自 凹非寺 量子位 报道 | 公众号 QbitAI 猜猜它是什么?印着姓名.职位和邮箱,看起来是个名片.可是右下角有芯片,看起来又像是个PCB电路板. 其实它是一台超迷你的ARM计算机,不仅 ...
- python里graphics的使用_使用graphics.py实现2048小游戏
1.过年的时候在手机上下载了2048玩了几天,心血来潮决定用py写一个,刚开始的时候想用QT实现,发现依赖有点大.正好看到graphics.py是基于tkinter做的封装就拿来练手,并借用了CSDN ...
- Python学习—2048小游戏等4个小练习
Python学习-2048小游戏等4个小练习 转载于:https://www.cnblogs.com/ChangAn223/p/10627777.html
- python小项目——2048小游戏(详解)
2048游戏 原版游戏地址 第一部分 导入所需要的库 第二部分 确认游戏键位设置,并和对应的操作关联 第三部分 获取用户输入的值,并直到有效键位 第四部分 对矩阵的应用,减少代码量 第五部分 创建棋盘 ...
- Python实现2048小游戏
2048小游戏也算是一款好玩的益智休闲小游戏,下面本博主用 python 语言将该游戏复现,感兴趣的小伙伴点击 关注 哦! 同时博主还用 java 语言复现了该游戏,可点击以下链接浏览博主的另一篇文章 ...
最新文章
- 你知道Redis可以实现延迟队列吗?
- Even Parity UVA - 11464 (枚举)
- 高级数据结构研究-B树系列以及红黑树
- VS调试时怎么跳过for循环?
- c++callback回调实例
- .NET Core 给使用.NET的公司所带来的机遇
- 虚拟研讨会:.NET的未来在哪里?
- ActiveRecord教程
- 【Java】关键词assert的使用
- OpenShift 4 - 定制 RHCOS Linux的Kernal参数
- 这才是你寻寻觅觅想要的 Python 可视化神器!
- 分布式系统常见的事务处理机制
- MySQL的Binlog与Redolog
- 非递归中序遍历---算法导论12.1-3
- GPS之Ublox方案设计
- 多功能工具箱微信小程序源码下载-操作简单
- 条码打印机如何打印流水号
- Unity获取IOS端相机权限的状态
- matlab句柄无效怎么解决,新编MATLABSimulink自学一本通第21章 MATLAB程序编译.ppt
- 牛客java选择题每日打卡Day2
热门文章
- 改变bam文件header的方法:samtools reheader和picard AddOrReplaceReadGroups
- ubuntu20.04上openvino安装及环境配置
- 用python画雪人-pygame画雪人_函数与图形示例.py
- 代码审计之旅之百家CMS
- 网站各类备案方法指引
- 星球日报 | 虚拟货币挖矿被国家“淘汰”
- 解决AS3.x无法新建Module:Project needs to be converted to androidx.* dependencies
- 三星GalaxyTab3刷机ROM_我是亲民_新浪博客
- 别只用 Selenium,新神器 Pyppeteer 绕过淘宝更简单!
- vue+ts中引入组件自动提示 declare module