move correctly
[curses-crossword.git] / curses-crossword.py
index 75a1a50ae9e8fe04e4a63227e3baf26cae5c3adc..d11568a2ebedf894e1b70216b1df5688514ef7a7 100644 (file)
@@ -157,24 +157,85 @@ def crossword(stdscr, crossworddata):
         curx += 4
     curx -= 1
     stdscr.addch(cury, curx, curses.ACS_LRCORNER)
+    # draw the clues in
+    cury = (len(crossword["grid"]) * 2) + 1
+    curx = 0
+    stdscr.addstr(cury, curx, "Across")
+    cury += 1
+    for cluenumber in crossword["across"].keys():
+        stdscr.addstr(cury, curx, "%3s: %s" %(str(cluenumber), crossword["across"][cluenumber]))
+        cury += 1
+
+    cury += 1
+    stdscr.addstr(cury, curx, "Down")
+    cury += 1
+    for cluenumber in crossword["down"].keys():
+        stdscr.addstr(cury, curx, "%3s: %s" %(str(cluenumber), crossword["down"][cluenumber]))
+        cury += 1
+
     curx = 3
     cury = 1
+    gridx = 0
+    gridy = 0
+
     stdscr.move(1,3)
     while 1:
         c = stdscr.getch()
         if c == curses.ascii.ESC:
             break
         if c == curses.KEY_RIGHT:
-            curx += 4
-            stdscr.move(cury, curx)
+            if gridx < (len(crossword["grid"][0]) - 1):
+                gridx += 1
+                curx += 4
+                while gridx < (len(crossword["grid"][0]) -1) \
+                    and crossword["grid"][gridy][gridx] == "x":
+                    gridx += 1
+                    curx += 4
+                while crossword["grid"][gridy][gridx] == "x":
+                    gridx -= 1
+                    curx -= 4
+                stdscr.move(cury, curx)
         if c == curses.KEY_LEFT:
-            curx -= 4
-            stdscr.move(cury, curx)
+            if gridx > 0:
+                curx -= 4
+                gridx -= 1
+                while gridx > 0 \
+                    and crossword["grid"][gridy][gridx] == "x":
+                        gridx -= 1
+                        curx -= 4
+                while crossword["grid"][gridy][gridx] == "x":
+                    gridx += 1
+                    curx += 4
+                stdscr.move(cury, curx)
         if c == curses.KEY_UP:
-            cury -= 2
-            stdscr.move(cury, curx)
+            if gridy > 0:
+                gridy -= 1
+                cury -= 2
+                while gridy > 0 \
+                    and crossword["grid"][gridy][gridx] == "x":
+                        gridy -= 1
+                        cury -= 2
+                while crossword["grid"][gridy][gridx] == "x":
+                    gridy += 1
+                    cury += 2
+                stdscr.move(cury, curx)
         if c == curses.KEY_DOWN:
-            cury += 2
+            if gridy < (len(crossword["grid"]) - 1):
+                gridy += 1
+                cury += 2
+                while gridy < (len(crossword["grid"]) - 1) \
+                    and crossword["grid"][gridy][gridx] == "x":
+                    gridy += 1
+                    cury += 2
+                while crossword["grid"][gridy][gridx] == "x":
+                    gridy -= 1
+                    cury -= 2
+                stdscr.move(cury, curx)
+        if curses.ascii.isalpha(c) or c == ord(" "):
+            stdscr.addch(cury, curx, c)
+            stdscr.move(cury, curx)
+        if c == curses.KEY_BACKSPACE or c == curses.KEY_DC:
+            stdscr.addch(cury, curx, ord(" "))
             stdscr.move(cury, curx)