r4514 - developers/erin_yueh/pythonEFL-sudoku/src

erin_yueh at docs.openmoko.org erin_yueh at docs.openmoko.org
Tue Jul 8 14:05:54 CEST 2008


Author: erin_yueh
Date: 2008-07-08 14:05:53 +0200 (Tue, 08 Jul 2008)
New Revision: 4514

Modified:
   developers/erin_yueh/pythonEFL-sudoku/src/sudoku_ui.py
Log:
add clear function and some checking rules (Erin Yueh)


Modified: developers/erin_yueh/pythonEFL-sudoku/src/sudoku_ui.py
===================================================================
--- developers/erin_yueh/pythonEFL-sudoku/src/sudoku_ui.py	2008-07-08 08:05:21 UTC (rev 4513)
+++ developers/erin_yueh/pythonEFL-sudoku/src/sudoku_ui.py	2008-07-08 12:05:53 UTC (rev 4514)
@@ -8,24 +8,45 @@
 
 WINDOW_WIDTH = 455
 WINDOW_HEIGHT = 640
-
+GROUP_ROWCOL = {
+                '0': (0,0,0), '1':(1,0,3), '2':(2,0,6),
+                '3': (3,3,0), '4':(4,3,3), '5':(5,3,6),
+                '6': (6,6,0), '7':(7,6,3), '8':(8,6,6),
+               }
 def checkRow(row,value):
     isOK = True
-    
+    puzzle = ee.data["puzzle"]
+    print 'checkRow',row,value
+    for j in xrange(9):
+        print puzzle[row][j]
+        if(value == puzzle[row][j]):
+            isOK = False
     return isOK
     
-def checkLine(line,value):
+def checkColumn(column,value):
     isOK = True
-    
+    puzzle = ee.data["puzzle"]
+    print 'checkColumn',column,value
+    for i in xrange(9):
+        print puzzle[i][column]
+        if(value == puzzle[i][column]):
+            isOK = False
     return isOK
 
 def checkGroup(group,value):
     isOK = True
-    
+    puzzle = ee.data["puzzle"]
+    print 'checkGroup',group,value
+    (group,r,c) = GROUP_ROWCOL[str(group)]
+    for i in xrange (r,r+3):
+        for j in xrange(c,c+3):
+            print puzzle[i][j]
+            if(value == puzzle[i][j]):
+                isOK = False
     return isOK
     
 def analyze(button,value):
-    isOK = False
+    isOK = True
     puzzle = ee.data["puzzle"]
     # button40 2
     addr = button[6:]
@@ -34,19 +55,33 @@
     j = int(addr) % 9
     g = (i/3)*3 + (j/3)
     print i,j,g
-    if not(checkRow(i,value) or checkLine(j,value) or checkGroup(g,value)):
-        isOK = True
+    if(checkRow(i,value) == False or checkColumn(j,value) == False or checkGroup(g,value) == False):
+        return False
+    '''
+    if (checkRow(i,value) == False):
+        return False
+    elif(checkColumn(j,value) == False):
+        return False
+    elif(checkGroup(g,value) == False):
+        return False
+    '''    
+    #if not(checkRow(i,value) or checkColumn(j,value) or checkGroup(g,value)):
+    #    isOK = True
     return isOK
     
 def number_key_cb(zoom_in, emission, source):
     print 'number_key_cb emission,source:',emission,source
     
     if(source == 'clear'):
+        puzzle_clone = ee.data["puzzle_clone"]
         puzzle = ee.data["puzzle"]
         for i in xrange (9):
             for j in xrange(9):
-                value = puzzle[i][j]
-                addr = i + j *9
+                value = puzzle_clone[i][j]
+                
+                print 'i,j,value,puzzle[i][j]',i,j,value,puzzle[i][j]
+                puzzle[i][j] = value
+                addr = j + i *9
                 text_data = "button" + str(addr)
                 text = ee.data[text_data] 
                 text.data["value"] = value
@@ -66,17 +101,25 @@
             text = ee.data[ee.data["clicking"]]
             text.text_set(source)
             text.data["value"] = int(source)
-            if(analyze(ee.data["clicking"],source) == False):
+            button = ee.data["clicking"]
+            addr = button[6:]
+            i = int(addr) / 9
+            j = int(addr) % 9
+            print i,j,addr
+            
+            if(analyze(ee.data["clicking"],int(source)) == False):
                 text.color_set(255,0,0,255)
             else: 
                 text.color_set(255,255,255,255)
+            puzzle = ee.data["puzzle"]    
+            puzzle[i][j] = int(source)    
     return True
 
 def puzzle_key_cb(zoom_in, emission, source):
     print 'puzzle_key_cb emission,source:',emission,source
     
     text = ee.data[source]
-    if(int(text.data["value"]) ==0 ):
+    if(text.data["fixed"] == False):
         text.color_set(255,255,255,255)
         ee.data["clicking"] = source
     
@@ -132,9 +175,19 @@
     board.show()
     
     puzzle = get_puzzle()
+    print 'puzzle',puzzle
+    puzzle_clone = []
+    for i in xrange(9):
+        row = []
+        for j in xrange(9):
+            row.append(puzzle[i][j])
+        puzzle_clone.append(row)
+    print 'puzzle_clone', puzzle_clone
+    
     ee.data["puzzle"] = puzzle
-    print puzzle
+    ee.data["puzzle_clone"] = puzzle_clone
     
+    
     element_w = 455 / 9
     element_h = 455 / 9 
     # put all elements to Text objects
@@ -142,10 +195,12 @@
         for j in xrange(9):
             x = 15 + (element_w * (i))
             y = 15 + (element_h * (j))
-            #print i,j
-            value = puzzle[i][j]
+            
+            value = puzzle[j][i]
+            
             display = str(value)
-            addr = i + j *9
+            addr = j *9 + i
+            print 'row,column,value,addr: ',i,j,value,addr
             text = canvas.Text(text=display, font=("sans serif", 16), color=(0,255,255,255))
             #print i,j,x,y
             if(value>0):
@@ -153,9 +208,13 @@
             text.pos_set(x,y)
             text.show()
             text.data["value"] = value
+            if(value>0):
+                text.data["fixed"] = True
+            else:
+                text.data["fixed"] = False
             text_data = "button" + str(addr)
             ee.data[text_data] = text
-            print 'TRY:',text_data, ee.data[text_data]
+            #print 'TRY:',text_data, ee.data[text_data]
             
     
     





More information about the commitlog mailing list