码云地址: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

结对-结对编项目作业名称-最终程序相关推荐

  1. 《结对-结对编项目作业名称-开发过程》

    结对队员:吕爽 我们组做的是四则运算答题器,在数学中,如果出现的是同一级运算可以按照顺序从左到右依次计算,加减互为逆运算,乘除互为逆运算,乘法是加法的简便运算.已经做到同级之间可以实现运算. 遇到的问 ...

  2. 《结对-结对编项目作业名称-测试过程》

    项目托管地址:https://gitee.com/ALaiKeSi/PythonTanChiSheYouXiXiangMu/tree/master 移动测试:使用上,下,左,右键可以使蛇移动 食物生成 ...

  3. 结对-结对编项目作业名称-开发环境搭建过程

    项目名称:点灯游戏 开发工具:python 2.7.13 环境搭建过程: 1.安装 python 2.7.13 2.建立有个N行N列的正方形灯板 3.当你开关其中一盏灯,它和上下左右的灯的状态全部反转 ...

  4. 《结对-结对编项目作业名称-开发环境搭建过程》

    工具/原料 eclipse(安装后大小:260M) jdk(安装前大小:72 M) adt(大小:6-11M,必须是zip格式的) sdk(安装前大小:20-200M) 方法/步骤 一. 首先从网上下 ...

  5. 结对-结对编项目作业名称-需求分析

    [目标要求] 本毕设内容是开发一款网络休闲益智类游戏--五子棋.本系统需要达到以下目标:制定合法规则,能够判断出非法操作,以便博弈公正地进行并分出胜负:支持人人对战,具有精美的操作界面,方便用户的操作 ...

  6. 结对-结对编项目作业名称-设计文档

    根据我们对贪吃蛇的了解,决定先从两个方面入手: 一方面是屏幕食物的刷新 一方面是蛇的移动与吃食物变长 之后再添加上需求的其他功能,就基本结束了 转载于:https://www.cnblogs.com/ ...

  7. 团队-团队编程项目作业名称-团队信息

    团队名称: 牛云社 队长 学号:2015035107074 姓名:孔令辉 成员 学号:2015035107066 姓名:张晓楠 学号:2015035107067 姓名:张旭 学号:2015035107 ...

  8. 《团队-团队编程项目作业名称-团队信息》

    标题:团队编程项目作业 团队信息:组名:BUG组 项目:管理系统 组长:王志昂 组员:郑月,李古宇,孙晨旭,程冠菲,鞠牧孜 转载于:https://www.cnblogs.com/jmz-927/p/ ...

  9. 《结对-结对编程项目作业名称-结对项目总结》

    一. 项目背景: "贪吃蛇"是一款经典的游戏,他因操作简单,娱乐性强而广受欢迎.本文基于Java技术,开发一个操作简单,功能较全的"贪吃蛇"游戏. 二.功能说明 ...

  10. 团队-团队编程项目作业名称-模块开发过程

    项目地址:https://gitee.com/Kuroshitsuji/DianDengYouXi/blob/master/%E8%B1%A1%E6%A3%8B.py 开发模块功能: 人机对战,开发时 ...

最新文章

  1. 真赞!IDEA中这么玩MyBatis,让编码速度飞起!
  2. Wireshark默认不抓取本地包的解决方式
  3. java打印出继承体系的类(包括抽象类)、接口、域字段
  4. 【转】c# winform 打包部署 自定义界面 或设置开机启动
  5. mysql_select按照指定的格式输出到文件
  6. 图像翻译、语义分割、域适应、图像检索、无监督学习cvpr2021
  7. 6.7级地震!北海道数据中心陷最长停电危机!
  8. Nginx的rewrite案例之防盗链
  9. 万年历升级版 Calendar
  10. 20那天android得知
  11. perl模块Getopt::Std用法及实例-从命令行读取参数模块
  12. 几种常见的数据库连接的URL写法(包括国产数据达梦DM)
  13. MySQL-第二篇SQL语句基础(1)语句分类及DDL语句
  14. 华三交换机ping大包命令_cmd如何ping大包
  15. 【原创】STM32低功耗模式及中断唤醒(基于BMI160及RTC)的研究
  16. C#学习记录——C#项目开发实战:快递单打印精灵(一)
  17. 用excel制作双层饼图_excel双层饼图怎么做
  18. java代码实现一个月内不再提醒,通用到期问题
  19. NOI2022游记,未曾设想的道路
  20. Qt报错Parse error at “IID“的解决办法

热门文章

  1. OC NSNumber NSValue
  2. 【转】javascript弹出固定大小的窗口页面
  3. ((ios开发学习笔记 十二))Nib加载的方式实现自定义TableView
  4. 分享15款很棒的 JavaScript 开发工具
  5. 872. Leaf-Similar Trees - LeetCode
  6. UIImageView三种方式 和 位置分布
  7. Tomcat开发技术之与HTTP服务器的集成
  8. winform 获取当前项目所在的路径
  9. DataWindow修改的单元格文字颜色改变
  10. 广东地下水资源摘录(早期版的)