Python实现九宫格小游戏破解

前段时间看朋友玩九宫格游戏,我也兴趣来潮突然想玩一下,结果有点停不下来…
直到某一关被难住了…
但是我不舒服啊,特么被一个九宫格游戏难住了。不开心,于是想来个破解器。几番思索和查找,终于写出来了,话不多说,上代码:

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication,QMainWindowclass Table():def __init__(self,widget=None):self.widget=widgetself.dict={1:{1:0,2:0,3:0},2:{1:0,2:0,3:0},3:{1:0,2:0,3:0},}self.defaultList=[]def isDefault(self,row,col):return [row,col] in self.defaultListdef setDefaultValue(self,row,col,value):self.dict[row][col]=valueself.defaultList.append([row,col])def setValue(self,row,col,value):if self.isDefault(row,col):raise ValueError(row,col)self.dict[row][col] = valuedef isRight(self):numList=[]for row in self.dict:for col in self.dict[row]:value=self.dict[row][col]if value!=0:if value not in numList:numList.append(value)else:return Falsereturn Truedef value(self,row,col):return self.dict[row][col]def clearAll(self):self.dict = {1: {1: 0, 2: 0, 3: 0}, 2: {1: 0, 2: 0, 3: 0}, 3: {1: 0, 2: 0, 3: 0},}self.defaultList = []class Ui_MainWindow(object):def __init__(self):self.tableDict={}def initData(self):for index in range(1,10):self.tableDict[index]=Table(self.__dict__['widget_%s'%index])def clearAll(self):for index in range(1,10):table=self.tableDict[index]widget=table.widgettable.clearAll()for row in range(3):for col in range(3):widget.item(row, col).setBackground(QtGui.QBrush(QtGui.QColor(255, 255, 255)))widget.item(row,col).setText('')def reset(self):for index in range(1,10):table=self.tableDict[index]widget=table.widgetfor row in range(3):for col in range(3):if not table.isDefault(row+1,col+1):table.setValue(row+1,col+1,0)widget.item(row, col).setText('')def importValue(self):numList=[str(a) for a in range(1,10)]for index  in range(1,10):table=self.tableDict[index]widget=table.widgetfor row in range(3):for col in range(3):value=widget.item(row,col).text()if value in numList:table.setDefaultValue(row+1,col+1,int(value))widget.item(row,col).setBackground(QtGui.QBrush(QtGui.QColor(255,0,0)))def setValue(self):for index in range(1,10):table=self.tableDict[index]for row in range(1,4):for col in range(1,4):table.widget.item(row-1,col-1).setText(str(table.value(row,col)))def start(self):self.importValue()self.loop()self.setValue()def getTableByIndex(self,index):return self.tableDict[index]def isDefault(self,pos):index, row, col = postable = self.tableDict[index]return table.isDefault(row,col)def next(self,pos):index, row, col = poscol += 1if col > 3:col -= 3row += 1if row > 3:row -= 3index += 1pos=[index,row,col]if index==10:return posif self.isDefault(pos):return self.next(pos)return posdef before(self,pos):index, row, col = poscol -= 1if col<1:col+=3row-=1if row<1:row+=3index-=1if index<1:raise ValueError(pos)pos = [index, row, col]if self.isDefault(pos):return self.before(pos)return posdef nextValue(self,pos):index, row, col = postable=self.tableDict[index]if table.isDefault(row,col):raise ValueError(row,col)value=table.value(row,col)value=value+1if value==10:return Falsetable.setValue(row,col,value)return valuedef clearValue(self,pos):index, row, col = postable = self.tableDict[index]if table.isDefault(row,col):raise ValueError(row,col)table.setValue(row, col, 0)def loop(self):pos=[1,1,1]while 1:if self.isDefault(pos):pos=self.next(pos)else:breakwhile 1:if not self.nextValue(pos):self.clearValue(pos)pos=self.before(pos)elif self.isRight(pos):pos=self.next(pos)if pos[0]==10:breakdef isRight(self, pos):index, row, col=postable = self.tableDict[index]if table.isDefault(row,col):return Trueif not table.isRight():return False# rowtableIndexList = [(index - 1) // 3 * 3 + a for a in range(1, 4)]numList = []for tableIndex in tableIndexList:table = self.tableDict[tableIndex]for colIndex in range(1, 4):value = table.value(row, colIndex)if value != 0:if value not in numList:numList.append(value)else:return False# coltableIndexList = [(index - 1) % 3 + a * 3 + 1 for a in range(3)]numList = []for tableIndex in tableIndexList:table = self.tableDict[tableIndex]for rowIndex in range(1, 4):value = table.value(rowIndex, col)if value != 0:if value not in numList:numList.append(value)else:return Falsereturn Truedef setupUi(self, MainWindow):MainWindow.setObjectName("MainWindow")MainWindow.resize(533, 598)self.centralwidget = QtWidgets.QWidget(MainWindow)self.centralwidget.setObjectName("centralwidget")self.frame = QtWidgets.QFrame(self.centralwidget)self.frame.setGeometry(QtCore.QRect(40, 50, 461, 461))self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel)self.frame.setFrameShadow(QtWidgets.QFrame.Raised)self.frame.setObjectName("frame")self.widget_9 = QtWidgets.QTableWidget(self.frame)self.widget_9.setGeometry(QtCore.QRect(300, 300, 151, 151))self.widget_2 = QtWidgets.QTableWidget(self.frame)self.widget_2.setGeometry(QtCore.QRect(150, 0, 151, 151))self.widget_6 = QtWidgets.QTableWidget(self.frame)self.widget_6.setGeometry(QtCore.QRect(300, 150, 151, 151))self.widget_1 = QtWidgets.QTableWidget(self.frame)self.widget_1.setGeometry(QtCore.QRect(0, 0, 151, 151))self.widget_4 = QtWidgets.QTableWidget(self.frame)self.widget_4.setGeometry(QtCore.QRect(0, 150, 151, 151))self.widget_7 = QtWidgets.QTableWidget(self.frame)self.widget_7.setGeometry(QtCore.QRect(0, 300, 151, 151))self.widget_8 = QtWidgets.QTableWidget(self.frame)self.widget_8.setGeometry(QtCore.QRect(150, 300, 151, 151))self.widget_5 = QtWidgets.QTableWidget(self.frame)self.widget_5.setGeometry(QtCore.QRect(150, 150, 151, 151))self.widget_3 = QtWidgets.QTableWidget(self.frame)self.widget_3.setGeometry(QtCore.QRect(300, 0, 151, 151))for index in range(1,10):widget=self.__dict__['widget_%s'%index]widget.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)widget.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)widget.setObjectName("widget_%s"%index)widget.setColumnCount(3)widget.setRowCount(3)for headIndex in range(3):item = QtWidgets.QTableWidgetItem()widget.setVerticalHeaderItem(headIndex, item)item = QtWidgets.QTableWidgetItem()widget.setHorizontalHeaderItem(headIndex, item)for row in range(3):for col in range(3):item = QtWidgets.QTableWidgetItem()widget.setItem(row, col, item)widget.horizontalHeader().setVisible(False)widget.horizontalHeader().setDefaultSectionSize(50)widget.verticalHeader().setVisible(False)widget.verticalHeader().setDefaultSectionSize(50)widget.setSelectionMode(QtWidgets.QAbstractItemView.NoSelection)self.startButton = QtWidgets.QPushButton(self.centralwidget)self.startButton.setGeometry(QtCore.QRect(77, 540, 75, 23))self.startButton.setObjectName("startButton")self.resetButton = QtWidgets.QPushButton(self.centralwidget)self.resetButton.setGeometry(QtCore.QRect(229, 540, 75, 23))self.resetButton.setObjectName("resetButton")self.clearButton = QtWidgets.QPushButton(self.centralwidget)self.clearButton.setGeometry(QtCore.QRect(381, 540, 75, 23))self.clearButton.setObjectName("clearButton")MainWindow.setCentralWidget(self.centralwidget)self.retranslateUi(MainWindow)self.startButton.clicked.connect(self.start)self.resetButton.clicked.connect(self.reset)self.clearButton.clicked.connect(self.clearAll)QtCore.QMetaObject.connectSlotsByName(MainWindow)def retranslateUi(self, MainWindow):_translate = QtCore.QCoreApplication.translateMainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))self.startButton.setText(_translate("MainWindow", "开始"))self.resetButton.setText(_translate("MainWindow", "重置"))self.clearButton.setText(_translate("MainWindow", "清空"))self.initData()if __name__=='__main__':import sysapp = QApplication(sys.argv)MainWindow = QMainWindow()ui = Ui_MainWindow()ui.setupUi(MainWindow)MainWindow.show()sys.exit(app.exec_())

接下来是运行截图。
ps:界面是用pyqt写的。

启动后

填入数字后

然后点击开始

红色表示是最开始手动填进去的数字。
运行速度个人感觉还是挺快的,一般两三秒搞定。

Python实现九宫格小游戏破解相关推荐

  1. python手机版做小游戏代码大全-python简单小游戏代码 怎么用Python制作简单小游戏...

    1.Python猜拳小游戏代码: 2.import random #导入随机模块 3. 4.num = 1 5.yin_num = 0 6.shu_num = 0 7.while num <= ...

  2. python写游戏脚本-使用Python写一个小游戏

    引言 最近python语言大火,除了在科学计算领域python有用武之地之外,在游戏.后台等方面,python也大放异彩,本篇博文将按照正规的项目开发流程,手把手教大家写个python小游戏,来感受下 ...

  3. python编程小游戏-使用Python写一个小游戏

    引言 最近python语言大火,除了在科学计算领域python有用武之地之外,在游戏.后台等方面,python也大放异彩,本篇博文将按照正规的项目开发流程,手把手教大家写个python小游戏,来感受下 ...

  4. python小游戏代码大全-python简单小游戏代码 怎么用Python制作简单小游戏

    1.Python猜拳小游戏代码: 2.import random #导入随机模块 3. 4.num = 1 5.yin_num = 0 6.shu_num = 0 7.while num <= ...

  5. python设计拼图小游戏_教你用Python自制拼图小游戏,轻松搞定熊孩子

    摘要:本文主要为大家详细介绍了python实现拼图小游戏,文中还有示例代码介绍,感兴趣的小伙伴们可以参考一下. 开发工具 Python版本:3.6.4 相关模块: pygame模块: 以及一些Pyth ...

  6. 教你用Python自制拼图小游戏,轻松搞定熊孩子

    摘要:本文主要为大家详细介绍了python实现拼图小游戏,文中还有示例代码介绍,感兴趣的小伙伴们可以参考一下. 开发工具 Python版本:3.6.4 相关模块: pygame模块: 以及一些Pyth ...

  7. 使用python制作聊天框解谜游戏_使用Python写一个小游戏alien invasion!

    最近python语言大火,除了在科学计算领域python有用武之地之外,在游戏.后台等方面,python也大放异彩,本篇博文将按照正规的项目开发流程,手把手教大家写个python小游戏,来感受下其中的 ...

  8. python拼图游戏编码_教你用Python自制拼图小游戏,轻松搞定熊孩子

    摘要:本文主要为大家详细介绍了python实现拼图小游戏,文中还有示例代码介绍,感兴趣的小伙伴们可以参考一下. 开发工具 Python版本:3.6.4 相关模块: pygame模块: 以及一些Pyth ...

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

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

最新文章

  1. 【引用】在Eclipse中将java Project转换成Dynamic Web Project
  2. 实践人生 —— 一个普通IT人的十年回顾(下)
  3. linux下常用命令之nc
  4. VTK:可视化之CollisionDetection
  5. 2011年吉林大学计算机研究生机试真题
  6. css x轴不滚动_泡沫轴滚动放松是什么原理:你并不了解泡沫轴
  7. js-sdk探索之微信网页分享
  8. 谁是面向对象设计中的霸主?(中)
  9. Nginx服务安全加固
  10. 职称评审英语计算机不作要求,安徽:基层专业技术人员评职称外语计算机不作要求...
  11. 格式化Mac硬盘---DoYourData Super Eraser安全、快速
  12. cmd命令行带参启动程序
  13. 001.DIV 标签添加滚动条
  14. 图灵好书推荐——数学+物理+宇宙
  15. 使用家庭宽带搭建服务器(含个人网盘) [一]-为什么要搭建自己的服务器?能实现公网访问?能实现NAS功能?能在线播放视频?
  16. 本科毕设不通过是什么原因,哪个少年不曾为如何能够顺利优秀毕业而愁眉苦战
  17. 常用的集成TTL门电路
  18. 土木工程计算机仿真学科未来前景,土木工程学院土木工程计算机仿真2010级学历教育硕士--培养方案...
  19. 创新洞见|2023年B2B业务为何必须采用PLG增长策略
  20. Android集成百度人脸识别(一)基础版SDK

热门文章

  1. Western Union 为中国微信用户推出针对国际汇款的收款服务
  2. 多包文,串口采集-labview
  3. [CF538A]Cutting Banner
  4. 电脑锁定之后重新打开屏幕,双屏幕只能显示一个(娱乐向记录,技术向勿入)
  5. 浅谈Bypass Waf - 上(基础篇)
  6. QQ在线咨询代码,MSN在线代码,贸易通在线代码
  7. gg修改器怎么修改服务器文件,gg修改器脚本导入未找到文件范例图片
  8. LEF文件介绍及其生成
  9. 微信电商——对阿里的致命一击
  10. IEC60870-5-102电力系统电能累计量传输通信协议测试方法