结对-结对编项目作业名称-最终程序
码云地址:https://gitee.com/546840006/22222/tree/master
结对成员:祁昊 刘孝东 学号:2015035107047 学号:2015035107044 结对成员合照:
打开game.py直接运行python即可
实际运行图片:
代码:
import random
import ctypes
def InitTable(size, value):
return [[value for i in range(size)] for j in range(size)]
class LightBoard:
def __init__(self, size, status=""):
self.clickBoard = InitTable(size, -1)
self.lightBoard = InitTable(size, 0)
self.toCheck = []
for i in range(size):
for j in range(size):
self.PushToCheck((i,j))
for pos, value in enumerate(status):
if value == "1":
self.lightBoard[pos/size][pos%size] = 1
self.size = size
def PopToCheck(self):
if len(self.toCheck) > 0:
pos = self.toCheck[-1]
del self.toCheck[-1]
else:
pos = None
return pos
def PushToCheck(self, pos):
self.toCheck.append(pos)
def ConnectedLight(self, pos):
x, y = pos
yield pos
if x - 1 >= 0: yield x-1,y
if x + 1 <self.size: yield x+1,y
if y -1 >= 0: yield x, y-1
if y+1 < self.size: yield x, y+1
def NotCheckLight(self, pos):
return [(x,y) for x, y in self.ConnectedLight(pos) if self.clickBoard[x][y] == -1]
def SetCheck(self, pos, value):
x, y = pos
self.clickBoard[x][y] = value
for x, y in self.ConnectedLight(pos):
self.lightBoard[x][y] = 1 - self.lightBoard[x][y]
def Pass(self, pos):
x, y = pos
self.clickBoard[x][y] = 0
def CancelPass(self, pos):
x, y = pos
self.clickBoard[x][y] = -1
def CheckError(self, pos):
for p in self.ConnectedLight(pos):
x, y = p
if self.lightBoard[x][y] == 0 and len(self.NotCheckLight(p)) == 0:
return True
return False
def Solve(board):
clickpos = board.PopToCheck()
if clickpos == None:
return board.clickBoard
pos = board.NotCheckLight(clickpos)[0]
board.SetCheck(pos, 1)
if not board.CheckError( pos ):
r = Solve(board)
if r: return r
board.SetCheck(pos, -1)
board.Pass(pos)
if not board.CheckError( pos ):
r = Solve(board)
if r: return r
board.CancelPass(pos)
board.PushToCheck(clickpos)
return False
from Tkinter import *
class LightButton(Button):
def __init__(self, parent, pos, board):
Button.__init__(self, parent, width=2)
self.board = board
self.status = 0
self.x, self.y = pos
self.SetColor()
self.bind("<Button-1>",self.onClick)
self.bind("<Button-3>",self.onRightClick)
def SetColor(self):
if self.status == 0:
self.config(bg="#cccccc")
if self.status == 1:
self.config(bg="#ffcccc")
def onClick(self,event):
toclick = [(0, 0), (-1,0), (1,0), (0, 1), (0, -1)]
self.config(text="")
for x,y in toclick:
try:
b = self.board[(self.x-x, self.y-y)]
b.status = 1 - b.status
b.SetColor()
except:
pass
temp = 0
for button in buttons.values():
if button.status == 1:
temp += 1
if temp == Size * Size:
# ctypes.windll.user32.MessageBoxW(0, u'Over!', u'Information', 0)
Clear()
def onRightClick(self, event):
self.status = 1 - self.status
self.SetColor()
if __name__ == "__main__":
from tkSimpleDialog import askinteger
def SolveIt():
boardStatus = ["0"] * Size * Size
for pos, light in buttons.items():
if light.status == 1:
boardStatus[pos[1]*Size+pos[0]] = "1"
clickBoard = Solve(LightBoard(Size, "".join(boardStatus)))
for x, r in enumerate(clickBoard):
for y, c in enumerate(r):
if c == 1:
buttons[(y,x)].config(text="*")
def Clear():
for button in buttons.values():
button.status = 0
button.SetColor()
for y in range(3):
j = random.randint(0, Size - 1)
for x in range(3):
k = random.randint(0, Size - 1)
pos = j, k
c = LightButton(f, pos, buttons)
c.onClick("<Button-1>")
root = Tk()
root.title("Light Solver")
f = Frame(root)
f.pack(side = TOP)
# Button(f, text="Solve", command=SolveIt).pack(side=LEFT)
Button(f, text="Clear", command=Clear).pack(side=LEFT)
buttons = {}
Size = askinteger("Light Solver", "Please Input Board Size", initialvalue=5)
for y in range(Size):
f = Frame(root)
f.pack(side = LEFT)
for x in range(Size):
pos = x, y
b = LightButton(f, pos, buttons)
b.pack()
buttons[pos] = b
for y in range(3):
j = random.randint(0,Size - 1)
for x in range(3):
k = random.randint(0, Size - 1)
pos = j, k
c = LightButton(f, pos, buttons)
c.onClick("<Button-1>")
mainloop()
转载于:https://www.cnblogs.com/qihao10086/p/7840634.html
结对-结对编项目作业名称-最终程序相关推荐
- 《结对-结对编项目作业名称-开发过程》
结对队员:吕爽 我们组做的是四则运算答题器,在数学中,如果出现的是同一级运算可以按照顺序从左到右依次计算,加减互为逆运算,乘除互为逆运算,乘法是加法的简便运算.已经做到同级之间可以实现运算. 遇到的问 ...
- 《结对-结对编项目作业名称-测试过程》
项目托管地址:https://gitee.com/ALaiKeSi/PythonTanChiSheYouXiXiangMu/tree/master 移动测试:使用上,下,左,右键可以使蛇移动 食物生成 ...
- 结对-结对编项目作业名称-开发环境搭建过程
项目名称:点灯游戏 开发工具:python 2.7.13 环境搭建过程: 1.安装 python 2.7.13 2.建立有个N行N列的正方形灯板 3.当你开关其中一盏灯,它和上下左右的灯的状态全部反转 ...
- 《结对-结对编项目作业名称-开发环境搭建过程》
工具/原料 eclipse(安装后大小:260M) jdk(安装前大小:72 M) adt(大小:6-11M,必须是zip格式的) sdk(安装前大小:20-200M) 方法/步骤 一. 首先从网上下 ...
- 结对-结对编项目作业名称-需求分析
[目标要求] 本毕设内容是开发一款网络休闲益智类游戏--五子棋.本系统需要达到以下目标:制定合法规则,能够判断出非法操作,以便博弈公正地进行并分出胜负:支持人人对战,具有精美的操作界面,方便用户的操作 ...
- 结对-结对编项目作业名称-设计文档
根据我们对贪吃蛇的了解,决定先从两个方面入手: 一方面是屏幕食物的刷新 一方面是蛇的移动与吃食物变长 之后再添加上需求的其他功能,就基本结束了 转载于:https://www.cnblogs.com/ ...
- 团队-团队编程项目作业名称-团队信息
团队名称: 牛云社 队长 学号:2015035107074 姓名:孔令辉 成员 学号:2015035107066 姓名:张晓楠 学号:2015035107067 姓名:张旭 学号:2015035107 ...
- 《团队-团队编程项目作业名称-团队信息》
标题:团队编程项目作业 团队信息:组名:BUG组 项目:管理系统 组长:王志昂 组员:郑月,李古宇,孙晨旭,程冠菲,鞠牧孜 转载于:https://www.cnblogs.com/jmz-927/p/ ...
- 《结对-结对编程项目作业名称-结对项目总结》
一. 项目背景: "贪吃蛇"是一款经典的游戏,他因操作简单,娱乐性强而广受欢迎.本文基于Java技术,开发一个操作简单,功能较全的"贪吃蛇"游戏. 二.功能说明 ...
- 团队-团队编程项目作业名称-模块开发过程
项目地址:https://gitee.com/Kuroshitsuji/DianDengYouXi/blob/master/%E8%B1%A1%E6%A3%8B.py 开发模块功能: 人机对战,开发时 ...
最新文章
- 真赞!IDEA中这么玩MyBatis,让编码速度飞起!
- Wireshark默认不抓取本地包的解决方式
- java打印出继承体系的类(包括抽象类)、接口、域字段
- 【转】c# winform 打包部署 自定义界面 或设置开机启动
- mysql_select按照指定的格式输出到文件
- 图像翻译、语义分割、域适应、图像检索、无监督学习cvpr2021
- 6.7级地震!北海道数据中心陷最长停电危机!
- Nginx的rewrite案例之防盗链
- 万年历升级版 Calendar
- 20那天android得知
- perl模块Getopt::Std用法及实例-从命令行读取参数模块
- 几种常见的数据库连接的URL写法(包括国产数据达梦DM)
- MySQL-第二篇SQL语句基础(1)语句分类及DDL语句
- 华三交换机ping大包命令_cmd如何ping大包
- 【原创】STM32低功耗模式及中断唤醒(基于BMI160及RTC)的研究
- C#学习记录——C#项目开发实战:快递单打印精灵(一)
- 用excel制作双层饼图_excel双层饼图怎么做
- java代码实现一个月内不再提醒,通用到期问题
- NOI2022游记,未曾设想的道路
- Qt报错Parse error at “IID“的解决办法