Bam! An Update On Roving Robots
even though I fell off the face of the Internet over here due to graduating from high school, going to college and finding a job (ps: need a python/assembly programmer?) I have actually been actively working on THIS, my github of roving-robots. I had decided that I would stop really talking much about it until the hardest parts for me were done or structured in a way that I could do it.
so; lets crack down on what I got:
the main block class:
class block(object):
#non interface stuff
def __init__(self,img,lable=None,num=None):
'''example init:::
block(os.path.join(~~~~~),pygame.font.render(~~~~~),1)
we draw img's onto fake smaller surface so that we can use IT for an absilute topleft'''
##TODO::: make "active" setting for textbox, and other settings???
if type(img) == str:
self.img = lib.common.load_img(img)
else:
self.img=img
self.lable = lable
self.lable_pos = 7,11
self.surf = pygame.Surface((80,80))
self.surf = self.surf.convert_alpha()
if num is not None:
if isinstance(num,input.Input):
self.tbox = num
else:
self.tbox = input.Input(y=y,maxlength=3, color=(255,0,0), prompt=' ', restricted='0123456789')
else:
#used to let us know NOT to try and render this section
self.tbox = None
#nothing can link by default to a default block, use a subclass!
self.link_down = False
self.link_up = False
self.link_left = False
self.link_right = False
#block-linkers:
self._dblock=None
self._ublock=None
self._rblock=None
self._lblock=None
def draw(self,screen,rect):
if self.lable:
self.surf.blit(self.lable,self.lable_pos)
if self.tbox:
self.tbox.draw(self.surf)
self.surf.blit(self.img,(0,0))
screen.blit(self.surf,rect)
def event_engine(self,events):
for event in events:
if event.type == MOUSEBUTTONDOWN:
print 'happy days!'
##link block decorators:::
##if "set", tey set themselves to other, and also set other.xblock to self(or none if unlinking)
@lib.decorators.propget
def dblock(self):
return self._dblock
@lib.decorators.propset
def dblock(self,other):
if other is None:
#set the other block's corrisponing to None as well...
#use name in self because other is None right now...
self._dblock._ublock = None
else:
other._ublock = self
self._dblock = other
@lib.decorators.propget
def ublock(self):
return self._ublock
@lib.decorators.propset
def ublock(self,other):
if other is None:
#set the other block's corrisponing to None as well...
self._ublock._dblock = None
else:
other._dblock = self
self._ublock = other
@lib.decorators.propget
def lblock(self):
return self._lblock
@lib.decorators.propset
def lblock(self,other):
if other is None:
#set the other block's corrisponing to None as well...
self._lblock._rblock = None
else:
other._rblock = self
self._lblock = other
@lib.decorators.propget
def rblock(self):
return self._rblock
@lib.decorators.propset
def rblock(self,other):
if other is None:
#set the other block's corrisponing to None as well...
self._rblock._lblock = None
else:
other._lblock = self
self._rblock = other
##location properties
@lib.decorators.propget
def loc(self):
return self.__loc
@lib.decorators.propset
def loc(self,value):
self.__loc = value
#action stuff
def action(self,robot):
'''robotic action to take (turn, go fwd, scan/make desision)'''
pass
def next(self,robot):
'''what is the next block? (give (x,y) or instance?)'''
pass
def drag(self):
'''cleans up object for a 'drop' '''
pass
def able_drop(self,pos,pmap):
'''find any problems with the drop and return False if obstructed.
else return True'''
pass
def drop(self,pos,pmap):
'''finalize a drop. actually places block on grid'''
pass
def save(self):
'''return a string which will allow recreation of this block (type,lable,num,pos,binding)'''
pass
def load(self,s):
'''places block and recreates block based on "s" '''
pass
note: a HECK a lot o' stuff!
but here, most of it is, quick and simple, or a place holder for future updates.
lets look at the key functions of our block:
- __init__
here we just set things up. load the image into the object, set lable text, try to use text_box system(if given), and set up our fake render surface.
- draw
simply draw what is needed to fake surface, making it simpler to align everything, then draw to screen
- event_engine
simple place holder for when i start working on handling the whole text_box thing. might change.
- Xblock(set and get)
magical system that took me so long to figure out. simply put: tries to inject this block into corresponding other block, AND clear link if set to None. example: if block X is trying to link upwards with the block above it: Y; X calls Y.dblock = X (Y's Downblock equals X)
- loc(ation)
place holder for when the block need to be able to be saved to a file (pickle FTW!)
- action
place holder that a subclass over-rides to dictate what the robot does in this "code block" (call corresponding robot function/play animation?)
- next
returns the next block in the sequence of code. the point of it being a whole function is for when we have a conditional block, and needs to respond differently than others.
- drop
subclass place holder
- able_drop
subclass place holder
- drag
subclass place holder
- save
to be worked on when saving gets started. I know I am going to have to change a lot of how things load right now, but that is OK. I want it working first.
- load
ditto for load as for save.
there, now I hope understanding some of this spaghetti wasn't so bad?
well, this was just an update to show that I am no longer dead, and once again working.
next time will be going over the sub classing system for creating new blocks!

2 Comments
Recommended Comments
Please sign in to comment
You will be able to leave a comment after signing in
Sign In Now