def __init__(self): Game.__init__(self) self.set_background(color=(255, 255, 255)) self.set_title('Tank AI') titleicon = String(message="Tank AI", fontSize=40, color=(50, 50, 50)) title = Stationary(sprite=titleicon) title.set_position((660, 10)) title.draw()
def __init__(self): Game.__init__(self) self.set_background(color=(40, 40, 80)) self.set_title('pybotwar') titleicon = String(message="pybotwar", fontSize=32) title = Stationary(sprite=titleicon) title.set_position((660, 10)) title.draw()
class TankInfo(object): def __init__(self, n, name): self.n = n filename = 't{0:02d}.png'.format(n) iconsprite = Image(filename=filename) self.icon = Stationary(sprite=iconsprite) self.icon.set_position((630, (60*n+0))) self.icon.draw() health = HealthBar(n) self.health = health
class RobotInfo(object): def __init__(self, n, name): self.n = n filename = 'r{0:02d}.png'.format(n) iconsprite = Image(filename=filename) self.icon = Stationary(sprite=iconsprite) self.icon.set_position((630, (60 * n + 0))) self.icon.draw() namesprite = String(message=name, fontSize=25) self.name = Stationary(sprite=namesprite) self.name.set_position((680, (60 * self.n + 10))) self.name.draw() health = HealthBar(n) self.health = health
class RobotInfo(object): def __init__(self, n, name): self.n = n filename = 'r{0:02d}.png'.format(n) iconsprite = Image(filename=filename) self.icon = Stationary(sprite=iconsprite) self.icon.set_position((630, (60*n+0))) self.icon.draw() namesprite = String(message=name, fontSize=25) self.name = Stationary(sprite=namesprite) self.name.set_position((680, (60*self.n+10))) self.name.draw() health = HealthBar(n) self.health = health
]) BTN_resume.set_position((-300, -300)) SEL = {} SEL['top'] = Stationary(sprite=Image( filename=data.filepath('images/seltop.png'))) SEL['bottom'] = Stationary(sprite=Image( filename=data.filepath('images/seltop.png'))) SEL['left'] = Stationary(sprite=Image( filename=data.filepath('images/selleft.png'))) SEL['right'] = Stationary(sprite=Image( filename=data.filepath('images/selleft.png'))) IMG_title = Stationary(sprite=Image( filename=data.filepath('images/title.png'))) IMG_title.set_position((-200, -200)) IMG_done = Stationary(sprite=Image( filename=data.filepath('images/msgdone.png'))) IMG_done.set_position((-200, -200)) IMG_grats = Stationary(sprite=Image( filename=data.filepath('images/congrat.png'))) IMG_grats.set_position((-200, -200)) IMG_credits = Stationary(sprite=Image( filename=data.filepath('images/credits.png'))) IMG_credits.set_position((810, 0)) IMG_cat = Stationary(sprite=Image( filename=data.filepath('images/helpcat.png'))) IMG_cat.set_position((810, 0)) #Sound.check_sound() SND_stone = load_sound(filename=data.filepath('sounds/stone.ogg'))
def start_level(self, ev=None, kwargs=None): self.state='level-load' self.level.reinit() self.cleanup() BTN_flip.set_callback(self.flip_piece) BTN_select.set_callback(self.select_piece) self.flip=0 self.set_background(img=BG_level) x_offset=X_offset+(int((16-self.level.size[1])/2))*32 y_offset=Y_offset+(int((16-self.level.size[0])/2))*32 self.offset=(x_offset,y_offset) IMG_cat.set_position((10,10)) board=Rectangle(width=(self.level.size[1]+1)*32, height=(self.level.size[0]+1)*32, color=(112,112,112)) self.boardbg=Stationary(sprite=board) self.boardbg.set_position((x_offset, y_offset)) #self.mysprites.add(self.boardbg) line=0 for i in self.level.pieces: col=0 for j in i: if j.kind!='g': j.set_position((col*32+x_offset-6,line*32+y_offset-6)) j.set_callback(self.move_piece,kwargs=j) self.pieces.add(j) self.piece_events.append(j.events) col+=1 line+=1 col+=1 msg='You need '+str(self.level.wcount)+' white and '+str(self.level.bcount)+' black stones.' self.MSG_count=String(message=msg, fontSize=15, color=(250,250,250)) self.MSG_count.set_position((40,5)) self.MSG_count.draw() #self.sprites.add(self.pieces,1) self.events.add(self.piece_events) self.moving_stuff.append(self.level.pieces[0][0]) self.moving=1 #self.moving_stuff.append(self.pieces[0]) #draw select border self.flip_coord=[(0,0)] SEL['top'].set_position((x_offset-1, y_offset-1)) SEL['left'].set_position((x_offset-1, y_offset-1)) SEL['bottom'].set_position((x_offset-1, y_offset+31)) SEL['right'].set_position((x_offset+31, y_offset-1)) self.mysprites.add(SEL.values()) self.sprites.add(self.mysprites, 3) #generate & display preview size=3 #size of squares block=4 #size of the "block" -> border self.preview.empty() x_offset=657+((int((16-self.level.size[1])/2))*block) y_offset=222+((int((16-self.level.size[0])/2))*block) line=0 for i in self.level.map: col=0 for piece in i: tile=None if piece=='w': tile=Stationary(sprite=Rectangle(width=size,height=size,color=(250,250,250))) elif piece=='b': tile=Stationary(sprite=Rectangle(width=size,height=size,color=(0,0,0))) if tile: tile.set_position((col*block+x_offset,line*block+y_offset)) self.preview.add(tile) col+=1 line+=1 # self.sprites.add(self.preview,5) self.step() self.state = 'level-play'
class Slider1000(Game): def initialize(self): SND_twist.set_volume(0.5) SND_music.set_volume(0.5) SND_music.play(-1) self.window.set_title('Slider 1000') self.state=None self.piece_events=[] self.myevents=self.addEventGroup() self.moving=1 self.pieces=self.addGroup() self.preview=self.addGroup() self.mysprites=self.addGroup() self.moving_stuff=[] self.level_list=self.load_levels() self.levelnr = 0 self.level = self.level_list[0] #draw interface buttons self.sprites.add([BTN_flip,BTN_select],3) self.events.add([BTN_select.events, BTN_flip.events]) self.intro() self.start_menu() def cleanup(self): BTN_flip.set_callback(None) BTN_select.set_callback(None) self.sprites.remove(self.mysprites) SEL['top'].set_position((810,0)) SEL['bottom'].set_position((810,0)) SEL['left'].set_position((810,0)) SEL['right'].set_position((810,0)) IMG_title.set_position((-200,-200)) IMG_done.set_position((-200,-200)) IMG_grats.set_position((-300,-300)) IMG_cat.set_position((-300,-300)) BTN_start.set_position((-300,-300)) BTN_quit.set_position((-300,-300)) BTN_nextlvl.set_position((-300,-300)) BTN_tomain.set_position((-300,-300)) BTN_resume.set_position((-300,-300)) BTN_select.set_position((640,334)) BTN_flip.set_position((640,302)) self.moving=0 self.moving_stuff=[] self.mysprites.kill() self.pieces.kill() self.events.remove(self.piece_events) self.events.remove(self.myevents) self.piece_events=[] self.set_background(img=BG_level) self.window.clear() def load_levels(self): levellist=[] for i in LEVELS: levellist.append(Level(i)) return levellist def intro(self): self.state=='intro' for i in INTRO: self.set_background(img=i) self.waitFor(key=K_SPACE, timeout=5000) def start_level(self, ev=None, kwargs=None): self.state='level-load' self.level.reinit() self.cleanup() BTN_flip.set_callback(self.flip_piece) BTN_select.set_callback(self.select_piece) self.flip=0 self.set_background(img=BG_level) x_offset=X_offset+(int((16-self.level.size[1])/2))*32 y_offset=Y_offset+(int((16-self.level.size[0])/2))*32 self.offset=(x_offset,y_offset) IMG_cat.set_position((10,10)) board=Rectangle(width=(self.level.size[1]+1)*32, height=(self.level.size[0]+1)*32, color=(112,112,112)) self.boardbg=Stationary(sprite=board) self.boardbg.set_position((x_offset, y_offset)) #self.mysprites.add(self.boardbg) line=0 for i in self.level.pieces: col=0 for j in i: if j.kind!='g': j.set_position((col*32+x_offset-6,line*32+y_offset-6)) j.set_callback(self.move_piece,kwargs=j) self.pieces.add(j) self.piece_events.append(j.events) col+=1 line+=1 col+=1 msg='You need '+str(self.level.wcount)+' white and '+str(self.level.bcount)+' black stones.' self.MSG_count=String(message=msg, fontSize=15, color=(250,250,250)) self.MSG_count.set_position((40,5)) self.MSG_count.draw() #self.sprites.add(self.pieces,1) self.events.add(self.piece_events) self.moving_stuff.append(self.level.pieces[0][0]) self.moving=1 #self.moving_stuff.append(self.pieces[0]) #draw select border self.flip_coord=[(0,0)] SEL['top'].set_position((x_offset-1, y_offset-1)) SEL['left'].set_position((x_offset-1, y_offset-1)) SEL['bottom'].set_position((x_offset-1, y_offset+31)) SEL['right'].set_position((x_offset+31, y_offset-1)) self.mysprites.add(SEL.values()) self.sprites.add(self.mysprites, 3) #generate & display preview size=3 #size of squares block=4 #size of the "block" -> border self.preview.empty() x_offset=657+((int((16-self.level.size[1])/2))*block) y_offset=222+((int((16-self.level.size[0])/2))*block) line=0 for i in self.level.map: col=0 for piece in i: tile=None if piece=='w': tile=Stationary(sprite=Rectangle(width=size,height=size,color=(250,250,250))) elif piece=='b': tile=Stationary(sprite=Rectangle(width=size,height=size,color=(0,0,0))) if tile: tile.set_position((col*block+x_offset,line*block+y_offset)) self.preview.add(tile) col+=1 line+=1 # self.sprites.add(self.preview,5) self.step() self.state = 'level-play' def tygro(self, ev=None, kwargs=None): self.cleanup() BTN_flip.set_position((-32,-32)) BTN_select.set_position((-32,-32)) self.set_background(img=BG_tygro) self.state='tygro' def credits(self, ev=None, kwargs=None): if self.state!='credits': self.cleanup() self.state='credits' IMG_title.set_position((160,78)) IMG_credits.set_position((223,205)) def move_piece(self, ev, kwargs): """move a piece if it's next to free space""" if self.state=='level-play': self.state='level-move' def free_piece(): free=self.level.free if coord[0]==free[0]: if coord[1]==free[1]+1: return 'left' if coord[1]==free[1]-1: return 'right' elif coord[1]==free[1]: if coord[0]==free[0]+1: return 'up' if coord[0]==free[0]-1: return 'down' return 0 coord=kwargs.coord dest=free_piece() if dest and not kwargs.moving and not kwargs.flipping: SND_stone.play() self.level.move_piece(coord,dest) self.level.free=coord self.moving=1 self.moving_stuff.append(kwargs) self.check_win() self.state='level-play' def select_piece(self, ev=None, kwargs=None): """increase twist-area.. why did I do it like THAT?!..""" if self.state=='level-play': self.flip+=1 self.moving=1 if self.flip <= self.level.size[1] and \ self.flip <= self.level.size[0]: #grow as a square pos=SEL['bottom'].get_position() SEL['bottom'].set_position((pos[0],pos[1]+32)) pos=SEL['right'].get_position() SEL['right'].set_position((pos[0]+32,pos[1])) for i in range(self.flip): self.flip_coord.append((self.flip,i)) self.flip_coord.append((i, self.flip)) self.flip_coord.append((self.flip, self.flip)) SEL['top'].stretch(size=((self.flip+1)*32,2),keepAspectRatio=0) SEL['bottom'].stretch(size=((self.flip+1)*32,2),keepAspectRatio=0) SEL['left'].stretch(size=(2,(self.flip+1)*32),keepAspectRatio=0) SEL['right'].stretch(size=(2,(self.flip+1)*32),keepAspectRatio=0) elif self.flip<= self.level.size[1]: #grow horzontally pos=SEL['right'].get_position() SEL['right'].set_position((pos[0]+32,pos[1])) SEL['right'].stretch(size=(2,(self.level.size[0]+1)*32),keepAspectRatio=0) SEL['top'].stretch(size=((self.flip+1)*32,2),keepAspectRatio=0) SEL['bottom'].stretch(size=((self.flip+1)*32,2),keepAspectRatio=0) for i in range(self.level.size[1]): self.flip_coord.append((i, self.flip)) elif self.flip<=self.level.size[0]: #grow vertically pos=SEL['bottom'].get_position() SEL['bottom'].set_position((pos[0],pos[1]+32)) SEL['bottom'].stretch(size=((self.level.size[1]+1)*32,2),keepAspectRatio=0) SEL['right'].stretch(size=(2,(self.level.size[0]+1)*32),keepAspectRatio=0) SEL['left'].stretch(size=(2,(self.flip+1)*32),keepAspectRatio=0) SEL['right'].stretch(size=(2,(self.flip+1)*32),keepAspectRatio=0) for i in range(self.level.size[0]): self.flip_coord.append((self.flip,i)) else: x_offset=self.offset[0] y_offset=self.offset[1] SEL['bottom'].set_position((x_offset-1, y_offset+31)) SEL['right'].set_position((x_offset+31, y_offset-1)) SEL['top'].stretch(size=(32,2),keepAspectRatio=0) SEL['bottom'].stretch(size=(32,2),keepAspectRatio=0) SEL['left'].stretch(size=(2,32),keepAspectRatio=0) SEL['right'].stretch(size=(2,32),keepAspectRatio=0) self.flip=0 self.flip_coord=[self.flip_coord[0]] def flip_piece(self, ev=None, kwargs=None): """flip colour of the piece next to flip_button""" if self.state=='level-play': new=0 self.state='level-move' for i in self.flip_coord: piece=self.level.get_piece_at(i) if piece: if piece.flipping: break elif piece.kind=='w': self.level.change_piece(i,'b') elif piece.kind=='b': self.level.change_piece(i,'w') self.moving_stuff.append(piece) new=1 if new: self.moving=1 SND_twist.play() #play only if something's twisted self.check_win() self.state='level-play' def check_win(self): if self.level.map==self.level.unsolved_map: self.events.remove(self.piece_events) self.events.remove(self.myevents) while self.moving_stuff: self.step() #wait until pieces stopped moving self.state='menu' self.waitFor(key=None, timeout=600) self.mysprites.kill() if self.levelnr+1 < len(self.level_list): #level done -what now? IMG_done.set_position((238,249)) self.waitFor(key=None, timeout=600) BTN_nextlvl.set_position((385,302)) BTN_nextlvl.set_callback(self.next_lvl) BTN_tomain.set_position((224,302)) BTN_tomain.set_callback(self.start_menu) self.mysprites.add([BTN_nextlvl, BTN_tomain, IMG_done]) self.myevents.add([BTN_nextlvl.events, BTN_tomain.events]) else: #All levels played.. you won! IMG_done.set_position((238,249)) self.waitFor(key=None, timeout=600) IMG_grats.set_position((223,77)) self.waitFor(key=None, timeout=600) BTN_tomain.set_position((224,302)) BTN_tomain.set_callback(self.start_menu) self.mysprites.add([BTN_tomain, IMG_grats]) self.myevents.add(BTN_tomain.events) self.events.add(self.myevents) self.sprites.add(self.mysprites,2) self.state='menu' def next_lvl(self, ev=None, kwargs=None): self.levelnr+=1 self.level=self.level_list[self.levelnr] self.start_level() def start_menu(self, ev=None, kwargs=None): self.cleanup() self.levelnr = 0 self.level = self.level_list[0] self.set_background(img=BG_mmenu) IMG_title.set_position((160,78)) BTN_start.set_position((256,302)) BTN_start.set_callback(self.start_level) BTN_quit.set_position((256,398)) BTN_quit.set_callback(self.quit_game) BTN_flip.set_callback(self.tygro) BTN_select.set_callback(self.credits) buttons=[BTN_start, BTN_quit] button_events=[BTN_start.events, BTN_quit.events] self.mysprites.add(buttons) self.myevents.add(button_events) self.events.add(self.myevents) self.sprites.add(self.mysprites) def mainloop(self, frames=0): """The main game loop. Taken from pygsear Game class @param frames: number of times to loop Defaults to C{0}, which means loop until the game is over. """ while not self.quit: frame = 0 while not self.quit and not self.stop and (frame < frames or not frames): conf.ticks = self.clock.tick(conf.MAX_FPS) self.checkEvents() if self.moving: self.sprites.clear() self.pieces.clear() self.sprites.move() self.pieces.move() self.pieces.draw() self.sprites.draw() pygame.display.update() if self.moving_stuff: if not self.moving_stuff[0].moving \ and not self.moving_stuff[0].flipping: self.moving_stuff=[] self.moving=0 else: self.sprites.clear() self.sprites.move() dirty=self.sprites.draw() # self.checkCollisions() pygame.display.update(dirty) if self.state=='level-load': self.moving=0 self.moving_stuff=[] if self.state=='menu': self.moving=0 self.moving_stuff=[] frame += 1 if not frames and not self.quit: self.gameOver() else: break def quit_game(self, ev=None, kwargs=None): self.quit=1 def splash_screen(self): #pls do not show pygsear splash screen pass def splash_screen_poof(self): #add pygsear logo somewhere in credits or.. pass def configure(self, ev=None): if self.state=='level-play': while self.moving_stuff: self.step() #wait until pieces stopped moving self.state='esc-menu' BTN_tomain.set_position((224,302)) BTN_tomain.set_callback(self.start_menu) BTN_resume.set_position((385,302)) BTN_resume.set_callback(self.resume) self.mysprites.add([BTN_tomain, BTN_resume]) self.myevents.add([BTN_tomain.events, BTN_resume.events]) self.events.add(self.myevents) self.sprites.add(self.mysprites,4) elif self.state=='esc-menu': self.resume() elif self.state=='tygro' or self.state=='credits': self.cleanup() self.start_menu() def resume(self, ev=None, kwargs=None): """destroy esc_menu""" self.events.remove(BTN_tomain.events) self.events.remove(BTN_resume.events) self.myevents.remove(BTN_resume.events) self.myevents.remove(BTN_resume.events) BTN_tomain.kill() BTN_resume.kill() self.moving=1 self.set_background(img=BG_level) self.boardbg.draw() self.preview.draw() IMG_cat.draw() self.MSG_count.draw() self.state='level-play'