Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/my_turtle.py
diff options
context:
space:
mode:
Diffstat (limited to 'my_turtle.py')
-rw-r--r--my_turtle.py263
1 files changed, 180 insertions, 83 deletions
diff --git a/my_turtle.py b/my_turtle.py
index b99d3bc..8ad269b 100644
--- a/my_turtle.py
+++ b/my_turtle.py
@@ -1,109 +1,206 @@
# my_turtle.py
-import g,pygame,utils
+"""
+ Copyright (C) 2010 Peter Hewitt
+
+ 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 3 of the License, or
+ (at your option) any later version.
+
+"""
+import logging
+import pygame
+
+import g
+import utils
+
+
+class TurtleClass: # used only for keeping track of the right hand turtle
-class TurtleClass: # used only for keeping track of the right hand turtle
-
def setup(self, color):
- steps=0
- for n in self.current: steps=steps+4*n
- self.steps=steps
- self.x1=g.x1+4.0*g.dd; self.y1=g.y1+6.0*g.dd; self.dx=0; self.dy=-g.dd
- self.step_count=0
- self.ms=pygame.time.get_ticks()
- self.running=False; self.crashed=False; self.changed=False
- self.win=False
- self.color=color
-
+ steps = 0
+ for n in self.current:
+ steps = steps + 4 * n
+ self.steps = steps
+ self.x1 = g.x1 + 4.0 * g.dd
+ self.y1 = g.y1 + 6.0 * g.dd
+ self.dx = 0
+ self.dy = -g.dd
+ self.step_count = 0
+ self.ms = pygame.time.get_ticks()
+ self.running = False
+ self.crashed = False
+ self.changed = False
+ self.win = False
+ self.color = color
+
def move(self):
- if self.step_count<self.steps:
- d=pygame.time.get_ticks()-self.ms
- if d<0 or d>g.delay: #time to move
- g.redraw=True
- x2=self.x1+self.dx; y2=self.y1+self.dy
- self.x1=x2; self.y1=y2
- self.step_count+=1
- self.ms=pygame.time.get_ticks()
+ if self.step_count < self.steps:
+ d = pygame.time.get_ticks() - self.ms
+ if d < 0 or d > g.delay: # time to move
+ g.redraw = True
+ x2 = self.x1 + self.dx
+ y2 = self.y1 + self.dy
+ self.x1 = x2
+ self.y1 = y2
+ self.step_count += 1
+ self.ms = pygame.time.get_ticks()
else:
- self.running=False
-
+ self.running = False
+
def help1(self):
- x1=g.x1+4*g.dd; y1=g.y1+6*g.dd; dx=0; dy=-g.dd; steps=0; angle=0; n=0
+ x1 = g.x1 + 4 * g.dd
+ y1 = g.y1 + 6 * g.dd
+ dx = 0
+ dy = -g.dd
+ steps = 0
+ angle = 0
+ n = 0
for j in self.current:
for k in range(j):
- steps+=1
- x2=x1+dx; y2=y1+dy
- pygame.draw.line(g.screen,self.color,(x1,y1),(x2,y2),4)
- x1=x2; y1=y2
- if dy==-g.dd: dx=g.dd;dy=0;angle=90
- elif dx==g.dd: dx=0;dy=g.dd;angle=180
- elif dy==g.dd: dx=-g.dd;dy=0;angle=270
- else: dx=0;dy=-g.dd;angle=0
- n+=1
- if n==g.help1: break
- utils.centre_blit(g.screen,g.turtle,(x2,y2),angle)
- self.step_count=steps
-
+ steps += 1
+ x2 = x1 + dx
+ y2 = y1 + dy
+ pygame.draw.line(g.screen, self.color, (x1, y1), (x2, y2), 4)
+ x1 = x2
+ y1 = y2
+ if dy == -g.dd:
+ dx = g.dd
+ dy = 0
+ angle = 90
+ elif dx == g.dd:
+ dx = 0
+ dy = g.dd
+ angle = 180
+ elif dy == g.dd:
+ dx = -g.dd
+ dy = 0
+ angle = 270
+ else:
+ dx = 0
+ dy = -g.dd
+ angle = 0
+ n += 1
+ if n == g.help1:
+ break
+ utils.centre_blit(g.screen, g.turtle, (x2, y2), angle)
+ self.step_count = steps
+
def draw(self):
- x1=g.x1+4*g.dd; y1=g.y1+6*g.dd; dx=0; dy=-g.dd; steps=0; angle=0
- x2=x1; y2=y1 # in case we haven't moved yet - for turtle image
- done=True; n=0
+ x1 = g.x1 + 4 * g.dd
+ y1 = g.y1 + 6 * g.dd
+ dx = 0
+ dy = -g.dd
+ steps = 0
+ angle = 0
+ x2 = x1
+ y2 = y1 # in case we haven't moved yet - for turtle image
+ done = True
+ n = 0
for i in range(4):
for j in self.current:
for k in range(j):
- steps+=1
+ steps += 1
if not g.show_help:
- if steps>self.step_count: done=False; break
- x2=x1+dx; y2=y1+dy
- pygame.draw.line(g.screen,self.color,(x1,y1),(x2,y2),4)
- x1=x2; y1=y2
+ if steps > self.step_count:
+ done = False
+ break
+ x2 = x1 + dx
+ y2 = y1 + dy
+ pygame.draw.line(g.screen, self.color,
+ (x1, y1), (x2, y2), 4)
+ x1 = x2
+ y1 = y2
if not g.show_help:
- if steps>self.step_count: break
- if dy==-g.dd: dx=g.dd;dy=0;angle=90
- elif dx==g.dd: dx=0;dy=g.dd;angle=180
- elif dy==g.dd: dx=-g.dd;dy=0;angle=270
- else: dx=0;dy=-g.dd;angle=0
+ if steps > self.step_count:
+ break
+ if dy == -g.dd:
+ dx = g.dd
+ dy = 0
+ angle = 90
+ elif dx == g.dd:
+ dx = 0
+ dy = g.dd
+ angle = 180
+ elif dy == g.dd:
+ dx = -g.dd
+ dy = 0
+ angle = 270
+ else:
+ dx = 0
+ dy = -g.dd
+ angle = 0
if g.show_help:
- n+=1
- if n==g.help1: self.step_count=steps; break
+ n += 1
+ if n == g.help1:
+ self.step_count = steps
+ break
if g.show_help:
- if n==g.help1: break
- elif steps>self.step_count: break
- img=g.turtle
- if self.crashed: img=g.crash
- utils.centre_blit(g.screen,img,(x2,y2),angle)
- d8=8*g.dd
+ if n == g.help1:
+ break
+ elif steps > self.step_count:
+ break
+ img = g.turtle
+ if self.crashed:
+ img = g.crash
+ utils.centre_blit(g.screen, img, (x2, y2), angle)
+ d8 = 8 * g.dd
if not g.show_help:
- if abs(x2-g.x1)<.1 or abs(x2-(g.x1+d8))<.1 or abs(y2-g.y1)<.1 or abs(y2-(g.y1+d8))<.1:
- if not self.crashed==True: g.crash_drawn=False
- self.running=False; self.crashed=True
+ if abs(x2 - g.x1) < .1 or abs(x2 - (g.x1 + d8)) < .1 or \
+ abs(y2 - g.y1) < .1 or abs(y2 - (g.y1 + d8)) < .1:
+ if not self.crashed:
+ g.crash_drawn = False
+ self.running = False
+ self.crashed = True
elif done:
- self.win=correct(self.current)
+ self.win = correct(self.current)
if self.win:
- if g.finale==False:
- if g.help2>5: g.help2=5
- g.score=g.score+6-g.help2
- g.finale=True
-
+ if not g.finale:
+ if g.help2 > 5:
+ g.help2 = 5
+ g.score = g.score + 6 - g.help2
+ g.finale = True
+
+
def correct(current):
- return trace(g.goal)==trace(current)
+ return trace(g.goal) == trace(current)
-def trace(l): # returns a list based on the line segments drawn
- hl=[0,0,0,0,0,0,0]; vl=[0,0,0,0,0,0,0]
- x1=3;y1=1;dx=0;dy=1
+
+def trace(l): # returns a list based on the line segments drawn
+ hl = [0, 0, 0, 0, 0, 0, 0]
+ vl = [0, 0, 0, 0, 0, 0, 0]
+ x1 = 3
+ y1 = 1
+ dx = 0
+ dy = 1
for i in range(4):
for j in l:
for k in range(j):
- x2=x1+dx; y2=y1+dy;mark(hl,vl,x1,y1,x2,y2); x1=x2; y1=y2
- if dy==-1: dx=-1;dy=0
- elif dx==1: dx=0;dy=-1
- elif dy==1: dx=1;dy=0
- else: dx=0;dy=1
- return hl+vl
+ x2 = x1 + dx
+ y2 = y1 + dy
+ mark(hl, vl, x1, y1, x2, y2)
+ x1 = x2
+ y1 = y2
+ if dy == -1:
+ dx = -1
+ dy = 0
+ elif dx == 1:
+ dx = 0
+ dy = -1
+ elif dy == 1:
+ dx = 1
+ dy = 0
+ else:
+ dx = 0
+ dy = 1
+ return hl + vl
-def mark(hl,vl,x1,y1,x2,y2):
- twos=[1,2,4,8,16,32]
- if x1==x2: #vertical
- y=min(y1,y2);vl[x1]=vl[x1]|twos[y]
- else:
- x=min(x1,x2);hl[y1]=hl[y1]|twos[x]
+def mark(hl, vl, x1, y1, x2, y2):
+ twos = [1, 2, 4, 8, 16, 32]
+ if x1 == x2: # vertical
+ y = min(y1, y2)
+ vl[x1] = vl[x1] | twos[y]
+ else:
+ x = min(x1, x2)
+ hl[y1] = hl[y1] | twos[x]