示例#1
0
 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()
示例#2
0
 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()
示例#3
0
    def __init__(self, pos, size):
        cx, cy = trans(pos)
        w, h = scale(size)
        x = cx - (w / 2)
        y = cy - (h / 2)

        sq = Rectangle(width=w, height=h, color=(120, 50, 50))
        Stationary.__init__(self, sprite=sq)
        self.set_position((x, y))
        self.draw()
示例#4
0
    def __init__(self, pos, size):
        cx, cy = trans(pos)
        w, h = scale(size)
        x = cx-(w/2)
        y = cy-(h/2)

        sq = Rectangle(width=w, height=h, color=(150, 210, 200))
        Stationary.__init__(self, sprite=sq)
        self.set_position((x, y))
        self.draw()
示例#5
0
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
示例#6
0
    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
示例#7
0
    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
示例#8
0
 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()
示例#9
0
BTN_nextlvl.set_position((-300, -300))

BTN_tomain = FlipButton(sprites=[
    Image(filename=data.filepath('images/btnretomain1.png')),
    Image(filename=data.filepath('images/btnretomain2.png'))
])
BTN_tomain.set_position((-300, -300))

BTN_resume = FlipButton(sprites=[
    Image(filename=data.filepath('images/btncont1.png')),
    Image(filename=data.filepath('images/btncont2.png'))
])
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')))
示例#10
0
    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'
示例#11
0
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'