r4523 - in developers/erin_yueh/pythonEFL-sudoku/src: . sudoku

erin_yueh at docs.openmoko.org erin_yueh at docs.openmoko.org
Mon Jul 14 06:15:41 CEST 2008


Author: erin_yueh
Date: 2008-07-14 06:15:40 +0200 (Mon, 14 Jul 2008)
New Revision: 4523

Removed:
   developers/erin_yueh/pythonEFL-sudoku/src/sudoku/sudoku_generator.py
Modified:
   developers/erin_yueh/pythonEFL-sudoku/src/sudoku/generator.py
   developers/erin_yueh/pythonEFL-sudoku/src/sudoku/solver.py
   developers/erin_yueh/pythonEFL-sudoku/src/sudoku_ui.py
Log:
merge with pyefl-sudoku project files (Erin Yueh)



Modified: developers/erin_yueh/pythonEFL-sudoku/src/sudoku/generator.py
===================================================================
--- developers/erin_yueh/pythonEFL-sudoku/src/sudoku/generator.py	2008-07-10 11:59:08 UTC (rev 4522)
+++ developers/erin_yueh/pythonEFL-sudoku/src/sudoku/generator.py	2008-07-14 04:15:40 UTC (rev 4523)
@@ -1,199 +1,105 @@
-#!/usr/bin/python
+"""
+/* sudoku_ui.py - sudoku puzzle UI game
+ *
+ * Copyright 2007-2008 OpenMoko, Inc.
+ * Authored by Erin Yueh <erin_yueh at openmoko.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * Inspired by NMAccessPoint from libnm-glib.
+ */
+"""
 
-import ecore.evas
-import ecore
-import math
+#!/usr/bin/python
+import os, sys, time, getopt
 import random
+from sudoku import solver
 
-def generateDummyGroup(ee,number):
-	group = ee.data['group_list']
-	(g,start_row,start_line) = group[str(number)]
-	items = [1,2,3,4,5,6,7,8,9]
-	random.shuffle(items)
-	for i in range (start_row, start_row+3):
-		for j in range(start_line, start_line+3):
-			key = (i,j)
-			obj = ee.data[key]
-			obj.color_set(0,255,0,255)
-			value = items.pop()
-			obj.text_set(str(value))
-			obj.data['value'] = value
-	return True
+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 checkGroupRule(ee,number):
-	group = ee.data['group_list']
-	(g,start_row,start_line) = group[str(number)]
-	used_items = [0]
-	
-	for i in range (start_row,start_row+3):
-		for j in range(start_line,start_line+3):
-			key = (i,j)
-			obj = ee.data[key]
-			value = int(obj.data['value'])
-			if(value>0):
-				used_items.append(value)
-	#print 'check group:',number,'used_items =',used_items
-	return used_items
+def generate_dummygroup(puzzle):
+    # generate 3 dummy group
+    for g in (0,4,8):
+        items = [1,2,3,4,5,6,7,8,9]
+        random.shuffle(items)
+        (group,r,c) = GROUP_ROWCOL[str(g)]
+        for i in xrange (r,r+3):
+            for j in xrange(c,c+3):
+                value = items.pop()
+                puzzle[i][j] = value
 
-def checkRowRule(ee,number):
-	used_items = [0]
-	for i in range(1,10):
-		key = (number,i) # row
-		obj = ee.data[key]
-		value = int(obj.data['value'])
-		if(value>0):
-			used_items.append(value)
-    #print 'check row:', number, 'used_items = ',used_items
-	return used_items
+    return True
 
-def checkLineRule(ee,number):
-	used_items = [0]
-	for i in range(1,10):
-		key = (i,number) # line
-		obj = ee.data[key]
-		value = int(obj.data['value'])
-		if(value>0):
-			used_items.append(value)
-    #print 'check line:', number, 'used_items = ',used_items
-	return used_items
-
-def CheckAndMergeUsed(group_used,row_used,line_used):
-	items = [1,2,3,4,5,6,7,8,9]
-	for k in range(len(group_used)):
-		if(group_used[k] in items):
-			items.remove(group_used[k])
-	for i in range(len(row_used)):
-		if(row_used[i] in items):
-			items.remove(row_used[i])
-	for j in range(len(line_used)):
-		if(line_used[j] in items):
-			items.remove(line_used[j])
-	
-	if(len(items)==0):
-		return False
-	else:
-		return True
-
-def fillinByGroup(ee,number):
-	group = ee.data['group_list']
-	(g,start_row,start_line) = group[str(number)]
-	items = [1,2,3,4,5,6,7,8,9]
-	random.shuffle(items)
-	
-	group_used = checkGroupRule(ee,number)
-	needed = len(items) - len(group_used) + 1
-	bingo = 0
-	
-	for i in range (start_row,start_row+3):
-		for j in range(start_line,start_line+3):
-			key = (i,j)
-			obj = ee.data[key]
-			value = int(obj.data['value'])
-			if(value==0):
-				group_used = checkGroupRule(ee,number)
-				row_used = checkRowRule(ee,i)
-				line_used = checkLineRule(ee,j)
-				if(CheckAndMergeUsed(group_used,row_used,line_used) == False):
-					return 1
-				for v in range(len(items)):
-					ball = items[v]
-					if(ball not in group_used and 
-						ball not in row_used and ball not in line_used):
-						obj.data['value'] = ball
-						obj.text_set(str(ball))
-						obj.color_set(255,0,0,255)
-						bingo+=1
-						break
-	if(bingo==needed):
-		return 0
-	else:
-		return 1
-
-def refreshByGroup(ee,number):
-	group = ee.data['group_list']
-	(g,start_row,start_line) = group[str(number)]
-	
-	for i in range (start_row,start_row+3):
-		for j in range(start_line,start_line+3):
-			key = (i,j)
-			obj = ee.data[key]
-			obj.text_set('0')
-			obj.data['value'] = 0
-	
-	return True
-	
-
+def remove_elements(puzzle,level):
+    
+    for i in xrange(9):
+        remove = random.sample([0,1,2,3,4,5,6,7,8],int(level))
+        for j in remove:
+            puzzle[i][j] = 0
+    return True
+    
+def exit_with_usage():
+    print globals()['__doc__']
+    os._exit(1)
+    
+def arrangetoLine(puzzle):
+    line = ""
+    for i in xrange(9):
+        for j in xrange(9):
+            line += str(puzzle[i][j])
+    
+    return line
 def main():
-	ee = ecore.evas.SoftwareX11(w=360, h=360)
-	canvas = ee.evas
-	group = {
- 		'1': (1,1,1), '2':(2,1,4), '3':(3,1,7),
-		'4': (4,4,1), '5':(5,4,4), '6':(6,4,7),
-		'7': (7,7,1), '8':(8,7,4), '9':(9,7,7),
-	}
+    
+    try:
+        optlist, args = getopt.getopt(sys.argv[1:], 'h:f:n:l:', ['help','h','?'])
 	
-	ee.data['group_list'] = group
-	
-	# create a black backgound 
-	bg = canvas.Rectangle(color=(0, 0, 0, 255))
-	bg.size = canvas.size
-	bg.show()
-	
-	element_w = 360 / 9
-	element_h = 360 / 9 
-	
-	# put all elements to Text objects
-	for i in range (1,10):
-		for j in range(1,10):
-			x = 5 + (element_w * (i-1))
-			y = 5 + (element_h * (j-1))
-			value = 0
-			display = str(value)
-			text = canvas.Text(text=display, font=("sans serif", 12), color=(0,255,255,255))
-			text.pos_set(x,y)
-			text.data['row'] = j
-			text.data['line'] = i
-			text.data['value'] = value
-			text.show()
-			addr = (text.data['row'],text.data['line'])
-			ee.data[addr] = text
-			text.text_set(str(addr))
+    except Exception, e:
+        print str(e)
+        exit_with_usage()
 
-	dummy_group = (9,5,1)
-	#not_dummy_group = (2,8,7,4,6,1,5,9,3)
-	not_dummy_group = (2,8,3,4,6,7)
-	flag = False
-	times = 0
-	counter = 0
-	curr_time = ecore.time_get()
-	print 'start to run:', times, curr_time
-	while(flag == False):
-		counter = 1
-		# generate three dummy group
-		for i in range(len(dummy_group)):
-			#print 'generateDummyGroup', dummy_group[i]
-			generateDummyGroup(ee,dummy_group[i])
-		# clean up other groups
-		for j in range(len(not_dummy_group)):
-			#print 'refreshByGroup', not_dummy_group[j]
-			refreshByGroup(ee,not_dummy_group[j])
-		# fill in by group
-		for k in range(len(not_dummy_group)):
-			#print 'fillinByGroup', not_dummy_group[k]
-			counter = fillinByGroup(ee,not_dummy_group[k])
-			if(counter==1):
-				break
-		if(counter ==1):
-			flag = False
-		elif(counter ==0):
-			flag = True
-		times += 1
-	
-	print 'times = ', times, 'running time = ',(ecore.time_get() - curr_time)
-	
-	ee.show()
-	ecore.animator_frametime_set(1.0 / 10.0)
-	ecore.main_loop_begin()
- 
+    options = dict(optlist)
+    if [elem for elem in options if elem in ['-h','--h','-?','--?','--help']]:
+       print "Help:"
+       exit_with_usage()
+
+    (number,level) = (1000,3)
+    if '-n' in options:
+       number = options["-n"]
+    if '-l' in options:
+        level = options["-l"]
+    
+    output = 'puzzle_' + str(number) + '_' +str(level)
+    f = open(output, 'w') 
+    for x in xrange(int(number)):
+        puzzle = []
+        for i in xrange(9):
+            row = [0,0,0,0,0,0,0,0,0]
+            puzzle.append(row)
+        generate_dummygroup(puzzle)
+        verify = solver.SudokuSolver()
+        if (verify.solve(puzzle)):
+            pass
+        remove_elements(puzzle,int(level))
+        line = arrangetoLine(puzzle)
+        f.write(line)
+        f.write("\n")
+    f.close()    
 if __name__ == "__main__":
 	main()
\ No newline at end of file

Modified: developers/erin_yueh/pythonEFL-sudoku/src/sudoku/solver.py
===================================================================
--- developers/erin_yueh/pythonEFL-sudoku/src/sudoku/solver.py	2008-07-10 11:59:08 UTC (rev 4522)
+++ developers/erin_yueh/pythonEFL-sudoku/src/sudoku/solver.py	2008-07-14 04:15:40 UTC (rev 4523)
@@ -1,3 +1,26 @@
+"""
+/* solver.py - sudoku solver
+ *
+ * Copyright 2007-2008 OpenMoko, Inc.
+ * Authored by Chia-I Wu <olv at openmoko.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * Inspired by NMAccessPoint from libnm-glib.
+ */
+""" 
 #!/usr/bin/python
 
 import sys

Deleted: developers/erin_yueh/pythonEFL-sudoku/src/sudoku/sudoku_generator.py
===================================================================
--- developers/erin_yueh/pythonEFL-sudoku/src/sudoku/sudoku_generator.py	2008-07-10 11:59:08 UTC (rev 4522)
+++ developers/erin_yueh/pythonEFL-sudoku/src/sudoku/sudoku_generator.py	2008-07-14 04:15:40 UTC (rev 4523)
@@ -1,199 +0,0 @@
-#!/usr/bin/python
-
-import ecore.evas
-import ecore
-import math
-import random
-
-def generateDummyGroup(ee,number):
-	group = ee.data['group_list']
-	(g,start_row,start_line) = group[str(number)]
-	items = [1,2,3,4,5,6,7,8,9]
-	random.shuffle(items)
-	for i in range (start_row, start_row+3):
-		for j in range(start_line, start_line+3):
-			key = (i,j)
-			obj = ee.data[key]
-			obj.color_set(0,255,0,255)
-			value = items.pop()
-			obj.text_set(str(value))
-			obj.data['value'] = value
-	return True
-
-def checkGroupRule(ee,number):
-	group = ee.data['group_list']
-	(g,start_row,start_line) = group[str(number)]
-	used_items = [0]
-	
-	for i in range (start_row,start_row+3):
-		for j in range(start_line,start_line+3):
-			key = (i,j)
-			obj = ee.data[key]
-			value = int(obj.data['value'])
-			if(value>0):
-				used_items.append(value)
-	#print 'check group:',number,'used_items =',used_items
-	return used_items
-
-def checkRowRule(ee,number):
-	used_items = [0]
-	for i in range(1,10):
-		key = (number,i) # row
-		obj = ee.data[key]
-		value = int(obj.data['value'])
-		if(value>0):
-			used_items.append(value)
-    #print 'check row:', number, 'used_items = ',used_items
-	return used_items
-
-def checkLineRule(ee,number):
-	used_items = [0]
-	for i in range(1,10):
-		key = (i,number) # line
-		obj = ee.data[key]
-		value = int(obj.data['value'])
-		if(value>0):
-			used_items.append(value)
-    #print 'check line:', number, 'used_items = ',used_items
-	return used_items
-
-def CheckAndMergeUsed(group_used,row_used,line_used):
-	items = [1,2,3,4,5,6,7,8,9]
-	for k in range(len(group_used)):
-		if(group_used[k] in items):
-			items.remove(group_used[k])
-	for i in range(len(row_used)):
-		if(row_used[i] in items):
-			items.remove(row_used[i])
-	for j in range(len(line_used)):
-		if(line_used[j] in items):
-			items.remove(line_used[j])
-	
-	if(len(items)==0):
-		return False
-	else:
-		return True
-
-def fillinByGroup(ee,number):
-	group = ee.data['group_list']
-	(g,start_row,start_line) = group[str(number)]
-	items = [1,2,3,4,5,6,7,8,9]
-	random.shuffle(items)
-	
-	group_used = checkGroupRule(ee,number)
-	needed = len(items) - len(group_used) + 1
-	bingo = 0
-	
-	for i in range (start_row,start_row+3):
-		for j in range(start_line,start_line+3):
-			key = (i,j)
-			obj = ee.data[key]
-			value = int(obj.data['value'])
-			if(value==0):
-				group_used = checkGroupRule(ee,number)
-				row_used = checkRowRule(ee,i)
-				line_used = checkLineRule(ee,j)
-				if(CheckAndMergeUsed(group_used,row_used,line_used) == False):
-					return 1
-				for v in range(len(items)):
-					ball = items[v]
-					if(ball not in group_used and 
-						ball not in row_used and ball not in line_used):
-						obj.data['value'] = ball
-						obj.text_set(str(ball))
-						obj.color_set(255,0,0,255)
-						bingo+=1
-						break
-	if(bingo==needed):
-		return 0
-	else:
-		return 1
-
-def refreshByGroup(ee,number):
-	group = ee.data['group_list']
-	(g,start_row,start_line) = group[str(number)]
-	
-	for i in range (start_row,start_row+3):
-		for j in range(start_line,start_line+3):
-			key = (i,j)
-			obj = ee.data[key]
-			obj.text_set('0')
-			obj.data['value'] = 0
-	
-	return True
-	
-
-def main():
-	ee = ecore.evas.SoftwareX11(w=360, h=360)
-	canvas = ee.evas
-	group = {
- 		'1': (1,1,1), '2':(2,1,4), '3':(3,1,7),
-		'4': (4,4,1), '5':(5,4,4), '6':(6,4,7),
-		'7': (7,7,1), '8':(8,7,4), '9':(9,7,7),
-	}
-	
-	ee.data['group_list'] = group
-	
-	# create a black backgound 
-	bg = canvas.Rectangle(color=(0, 0, 0, 255))
-	bg.size = canvas.size
-	bg.show()
-	
-	element_w = 360 / 9
-	element_h = 360 / 9 
-	
-	# put all elements to Text objects
-	for i in range (1,10):
-		for j in range(1,10):
-			x = 5 + (element_w * (i-1))
-			y = 5 + (element_h * (j-1))
-			value = 0
-			display = str(value)
-			text = canvas.Text(text=display, font=("sans serif", 12), color=(0,255,255,255))
-			text.pos_set(x,y)
-			text.data['row'] = j
-			text.data['line'] = i
-			text.data['value'] = value
-			text.show()
-			addr = (text.data['row'],text.data['line'])
-			ee.data[addr] = text
-			text.text_set(str(addr))
-
-	dummy_group = (9,5,1)
-	#not_dummy_group = (2,8,7,4,6,1,5,9,3)
-	not_dummy_group = (2,8,3,4,6,7)
-	flag = False
-	times = 0
-	counter = 0
-	curr_time = ecore.time_get()
-	print 'start to run:', times, curr_time
-	while(flag == False):
-		counter = 1
-		# generate three dummy group
-		for i in range(len(dummy_group)):
-			#print 'generateDummyGroup', dummy_group[i]
-			generateDummyGroup(ee,dummy_group[i])
-		# clean up other groups
-		for j in range(len(not_dummy_group)):
-			#print 'refreshByGroup', not_dummy_group[j]
-			refreshByGroup(ee,not_dummy_group[j])
-		# fill in by group
-		for k in range(len(not_dummy_group)):
-			#print 'fillinByGroup', not_dummy_group[k]
-			counter = fillinByGroup(ee,not_dummy_group[k])
-			if(counter==1):
-				break
-		if(counter ==1):
-			flag = False
-		elif(counter ==0):
-			flag = True
-		times += 1
-	
-	print 'times = ', times, 'running time = ',(ecore.time_get() - curr_time)
-	
-	ee.show()
-	ecore.animator_frametime_set(1.0 / 10.0)
-	ecore.main_loop_begin()
- 
-if __name__ == "__main__":
-	main()
\ No newline at end of file

Modified: developers/erin_yueh/pythonEFL-sudoku/src/sudoku_ui.py
===================================================================
--- developers/erin_yueh/pythonEFL-sudoku/src/sudoku_ui.py	2008-07-10 11:59:08 UTC (rev 4522)
+++ developers/erin_yueh/pythonEFL-sudoku/src/sudoku_ui.py	2008-07-14 04:15:40 UTC (rev 4523)
@@ -1,3 +1,27 @@
+"""
+/* sudoku_ui.py - sudoku puzzle UI game
+ *
+ * Copyright 2007-2008 OpenMoko, Inc.
+ * Authored by Erin Yueh <erin_yueh at openmoko.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * Inspired by NMAccessPoint from libnm-glib.
+ */
+""" 
+
 #!/usr/bin/python
 
 import ecore.evas
@@ -20,7 +44,8 @@
     for j in xrange(9):
         #print puzzle[row][j]
         if(value == puzzle[row][j]):
-            isOK = False
+            #print 'checkRow', row,j,value
+            return False
     return isOK
     
 def checkColumn(column,value):
@@ -30,7 +55,8 @@
     for i in xrange(9):
         #print puzzle[i][column]
         if(value == puzzle[i][column]):
-            isOK = False
+            #print 'checkColumn',i,column,value
+            return False
     return isOK
 
 def checkGroup(group,value):
@@ -42,38 +68,52 @@
         for j in xrange(c,c+3):
             #print puzzle[i][j]
             if(value == puzzle[i][j]):
-                isOK = False
+                #print 'checkGroup',group,i,j,value
+                return False
+                #isOK = False
     return isOK
 
 def solve():
     isOK = True
     puzzle = ee.data["puzzle"]
+    row = [[],[],[],[],[],[],[],[],[]]
+    column = [[],[],[],[],[],[],[],[],[]]
+    group = [[],[],[],[],[],[],[],[],[]]
     for i in xrange (9):
         for j in xrange(9):
             value = puzzle[i][j]
             g = (i/3)*3 + (j/3)
-            print i,j,g,value
-            if(checkRow(i,value) == False or checkColumn(j,value) == False or checkGroup(g,value) == False):
-                return False
+            #print i,j,g,value
+            row[i].append(value)
+            column[j].append(value)
+            group[g].append(value)
+    # should only display once
+    for x in xrange(9):
+        for v in xrange(1,10):
+            #print 'r,c,g,v: ',row[x].count(v), column[x].count(v), group[x].count(v),v
+            if not(row[x].count(v) == 1 and column[x].count(v) ==1 and group[x].count(v) ==1):
+                isOK = False
+
     return isOK
 
 def analyze(button,value):
     isOK = True
     #puzzle = ee.data["puzzle"]
     addr = button[6:]
-    print addr, value
+    #print addr, value
     i = int(addr) / 9
     j = int(addr) % 9
     g = (i/3)*3 + (j/3)
-    print i,j,g,addr,value
+    #print i,j,g,addr,value
     if(checkRow(i,value) == False or checkColumn(j,value) == False or checkGroup(g,value) == False):
         return False
 
     return isOK
     
 def number_key_cb(zoom_in, emission, source):
-    print 'number_key_cb emission,source:',emission,source
-    
+    #print 'number_key_cb emission,source:',emission,source
+    action = ee.data["action_txt"]
+    action.text_set("")
     if(source == 'clear' or source == 'create'):
         # init undo redo action track
         ee.data["undo_counter"] = 0
@@ -94,18 +134,17 @@
                     text = ee.data[text_data] 
                     text.text_set(str(value))
                     if(value>0):
-                        text.color_set(10,10,10,200)
+                        text.color_set(50,50,50,180)
                     elif(value==0):
                         text.text_set("")
-            print 'clear all data!!'
+            #print 'clear all data!!'
         elif(source == 'create'):
-            print 'create new puzzle'
+            #print 'create new puzzle'
             createNewPuzzle()
     elif(source =='undo'):
-        print 'undo'
         if(ee.data["undo_counter"] == 0):
             return
-        print ee.data["undo_counter"], ee.data["undo_track"]
+        #print ee.data["undo_counter"], ee.data["undo_track"]
         undo_counter = ee.data["undo_counter"]
         (addr,value) = ee.data["undo_track"][undo_counter-1]
         redo = ee.data["undo_track"].pop()
@@ -116,18 +155,15 @@
         j = int(addr) % 9
         original_value = ee.data["puzzle_clone"][i][j]
         text = ee.data["button"+str(addr)]
-        print i,j,original_value,text
-        text.text_set(str(original_value))
-        text.color_set(0,255,0,255)
+        #print i,j,original_value,text
+        text.text_set("")
         ee.data["puzzle"][i][j] = original_value
-        #text.data["value"] = original_value
         if(undo_counter>0):
             ee.data["undo_counter"] = undo_counter-1
     elif(source == 'redo'):
-        print 'redo'
         if(ee.data["redo_counter"] == 0):
             return
-        print ee.data["redo_counter"], ee.data["redo_track"]
+        #print ee.data["redo_counter"], ee.data["redo_track"]
         redo_counter = ee.data["redo_counter"]
         (addr,value) = ee.data["redo_track"][redo_counter-1]
         undo = ee.data["redo_track"].pop()
@@ -138,20 +174,19 @@
         i = int(addr) / 9
         j = int(addr) % 9
         text = ee.data["button"+str(addr)]
-        print i,j,value,text
+        #print i,j,value,text
         text.text_set(str(value))
         text.color_set(0,0,255,255)
         ee.data["puzzle"][i][j] = int(value)
-        #text.data["value"] = int(value)
         if(redo_counter>0):
             ee.data["redo_counter"] = redo_counter-1
         
     elif(source == 'solve'):
-        print 'is solved?!'
+        
         if(solve() == False):
-            print 'NO'
+            action.text_set("FAILED!!")
         else:
-            print 'YES'
+            action.text_set("Congratulations!")
 
     else: 
         # fill in key number
@@ -163,7 +198,7 @@
             addr = ee.data["clicking"][6:]
             i = int(addr) / 9
             j = int(addr) % 9
-            print i,j,addr
+            #print i,j,addr
             
             if(analyze(ee.data["clicking"],int(source)) == False):
                 text.color_set(255,0,0,255)
@@ -179,21 +214,38 @@
             ee.data["undo_track"].append(step)
             #print 'undo_counter:',ee.data["undo_counter"]
             #print 'undo_track:',ee.data["undo_track"]
+
     return True
 
+def getButtonPos(source):
+    addr = source[6:]
+    i = int(addr) / 9
+    j = int(addr) % 9
+    #print i,j,addr
+    
+    x = 5 + j *50
+    y = i *50
+    
+    return x,y
+
 def puzzle_key_cb(zoom_in, emission, source):
-    print 'puzzle_key_cb emission,source:',emission,source
+    #print 'puzzle_key_cb emission,source:',emission,source
     
     text = ee.data[source]
     if(text.data["fixed"] == False):
         text.color_set(255,255,255,255)
         ee.data["clicking"] = source
-    
+        # display focus 
+        focus = ee.data["focus"]
+        focus.color_set(0,0,0,100)
+        focus.stack_below(text)
+        (x,y) = getButtonPos(source)
+        focus.pos_set(x,y)
     return True
 
 def get_puzzle():
 
-        file_name = "/usr/share/sudoku/puzzle/1000"
+        file_name = "/usr/share/pyefl-sudoku/puzzle/1000"
         fIn = open(file_name, 'r')
         fIn.seek(82*(random.randint(1, 1000)))
         l = fIn.readline()
@@ -213,7 +265,7 @@
 def createNewPuzzle():
     
     puzzle = get_puzzle()
-    print 'new puzzle',puzzle
+    #print 'new puzzle',puzzle
     for i in xrange(9):
         for j in xrange(9):
             ee.data["puzzle"][i][j] = puzzle[i][j]
@@ -224,11 +276,11 @@
             text = ee.data[text_data] 
             text.text_set(str(value))
             if(value>0):
-                text.color_set(10,10,10,200)
+                text.color_set(50,50,50,180)
                 text.data["fixed"] = True
             elif(value==0):
+                text.data["fixed"] = False
                 text.text_set("")
-                text.data["fixed"] = False
 
     return True
 
@@ -242,14 +294,14 @@
     canvas = ee.evas
 
     # create a background 
-    bg = edje.Edje(canvas, file="/usr/share/sudoku/sudoku.edj", group="pythonEFL-sudoku/background")
+    bg = edje.Edje(canvas, file="/usr/share/pyefl-sudoku/sudoku.edj", group="pythonEFL-sudoku/background")
     bg.pos = (0, 0)
     bg.size = canvas.size
     bg.show()
     ee.data["bg"] = bg
 
     # create number keyboard and action icons
-    area = edje.Edje(canvas, file="/usr/share/sudoku/sudoku.edj", group="pythonEFL-sudoku/panel")
+    area = edje.Edje(canvas, file="/usr/share/pyefl-sudoku/sudoku.edj", group="pythonEFL-sudoku/panel")
     area.signal_callback_add("mouse,clicked,*", "*", number_key_cb)
     area.pos = (0, 0)
     area.size = canvas.size
@@ -257,7 +309,7 @@
     area.data["area"] = area
 
     # create puzzle board
-    board = edje.Edje(canvas, file="/usr/share/sudoku/sudoku.edj", group="pythonEFL-sudoku/board")
+    board = edje.Edje(canvas, file="/usr/share/pyefl-sudoku/sudoku.edj", group="pythonEFL-sudoku/board")
     board.signal_callback_add("mouse,clicked,*", "*", puzzle_key_cb)
     board.pos = (0, 0)
     board.show()
@@ -270,7 +322,7 @@
         for j in xrange(9):
             row.append(puzzle[i][j])
         puzzle_clone.append(row)
-    print 'puzzle',puzzle, puzzle_clone
+    #print 'puzzle',puzzle, puzzle_clone
     ee.data["puzzle"] = puzzle
     ee.data["puzzle_clone"] = puzzle_clone
     ee.data["clicking"] = None
@@ -291,10 +343,10 @@
             value = puzzle[j][i]
             addr = j *9 + i
             #print 'row,column,value,addr: ',i,j,value,addr
-            text = canvas.Text(text=str(value), font=("sans serif", 16), color=(0,255,255,255))
+            text = canvas.Text(text=str(value), font=("sans serif", 20), color=(0,255,255,255))
             if(value>0):
                 text.data["fixed"] = True
-                text.color_set(10,10,10,200)
+                text.color_set(50,50,50,180)
             else:
                 text.data["fixed"] = False
                 text.text_set("")
@@ -302,7 +354,20 @@
             text.show()
             text_data = "button" + str(addr)
             ee.data[text_data] = text
-
+    
+    # display action
+    action = canvas.Text(text="", font=("sans serif", 20), color=(200,0,0,155))
+    action.pos_set(150,550)
+    action.show()
+    ee.data["action_txt"] = action
+    
+    # display a focus rectangle
+    focus = canvas.Rectangle()
+    focus.pos_set(5,0)
+    focus.size_set(50,50)
+    focus.color_set(0,0,0,0)
+    ee.data["focus"] = focus
+    focus.show()
     ee.show()
     #ecore.animator_add(animate_line)
     #ecore.animator_frametime_set(1.0 / 30.0)   





More information about the commitlog mailing list