def __init__(self, pos):
		pygame.sprite.Sprite.__init__(self, self.containers)
		self.image = pygame.Surface((64, 448))
		self.image.set_colorkey((0x00,0xff,0x00))
		self.image.fill((0x00,0xff,0x00))
		self.rect=self.image.get_rect()
		self.rect.topleft=pos
		
		self.tpipetile = util.loadPng('pipes.png')
		self.tlateral=util.loadPng('lateral2.png')
    def __init__(self, screen):
        self.screen = screen
        self.clock = pygame.time.Clock()
        self.fps = 60
        self.menu = 0
        self.askname = False

        self.lvl = levelparser.LevelParser()

        self.input = input.Input()
        self.input.bindKey(EXIT, pygame.K_ESCAPE)
        self.input.bindKey(UP, pygame.K_UP, False)
        self.input.bindKey(DOWN, pygame.K_DOWN, False)
        self.input.bindKey(LEFT, pygame.K_LEFT, False)
        self.input.bindKey(RIGHT, pygame.K_RIGHT, False)
        self.input.bindKey(ENTER, pygame.K_RETURN, False)
        self.input.bindKey(BGMUSIC, pygame.K_F11, False)

        menucolor = (0xFF, 0xFF, 0xFF)
        hgcolor = (0xFF, 0xF6, 0x0)
        self.start = util.loadText("New Game", 16, menucolor, "modernab")
        self.hlstart = util.loadText("New Game", 16, hgcolor, "modernab")
        self.cont = util.loadText("Continue   <-  1  ->", 16, menucolor, "modernab")
        self.hlcont = util.loadText("Continue   <-  1  ->", 16, hgcolor, "modernab")
        self.howto = util.loadText("How to play", 16, menucolor, "modernab")
        self.hlhowto = util.loadText("How to play", 16, hgcolor, "modernab")
        self.high = util.loadText("High Scores", 16, menucolor, "modernab")
        self.hlhigh = util.loadText("High Scores", 16, hgcolor, "modernab")
        self.quit = util.loadText("Quit", 16, menucolor, "modernab")
        self.hlquit = util.loadText("Quit", 16, hgcolor, "modernab")

        self.bg = util.loadPng("mainscreen.png")
        self.menuicon = util.loadPng("menuicon.png")
        self.copyright = util.loadText("Created by Wil Alvarez (C) Copyright 2008", 10, (0xA, 0xA, 0xA), "vera")

        self.highscore = objects.HighScore(top=100000, nonames=False)

        self.__reset()

        while True:
            self.clock.tick(self.fps)
            self.__gameInput()

            self.screen.blit(self.bg, (0, 0))
            cx, cy = self.copyright.get_size()
            self.screen.blit(self.copyright, ((512 - cx) / 2, 140))
            self.__updateMenu()

            pygame.display.flip()
	def __init__(self, pos):
		pygame.sprite.Sprite.__init__(self, self.containers)
		tile = util.loadPng("items.png")
		self.image = pygame.Surface((32, 32))
		self.image.set_colorkey((0x00,0xff,0x00))
		self.image.blit(tile, (0,0), (64,0,32,32))
		self.rect = self.image.get_rect()
		self.rect.topleft=pos
		self.blocked=True
	def __init__(self, pos):
		pygame.sprite.Sprite.__init__(self, self.containers)
		self.extinguish=False
		self.pos=pos
		self.move_delay=0
		self.max_move_delay=15
		
		cursor_tile = util.loadPng("cursor.png")
		self.image = pygame.Surface((32, 32))
		self.image.set_colorkey((0x00,0xff,0x00))
		self.image.blit(cursor_tile, (0,0))
		self.rect = self.image.get_rect()
		self.rect.topleft=pos
	def __init__(self, pos, type):
		pygame.sprite.Sprite.__init__(self, self.containers)
		self.blocked=False
		self.flow=False
		self.hp=100
		self.type=type
		
		pipetile = util.loadPng('pipes.png')
		if type=='rightup':
			offset=0
			self.inarray=['right', 'up']
			self.outarray=['down', 'left']
		elif type=='leftup':
			offset=32
			self.inarray=['left', 'up']
			self.outarray=['down', 'right']
		elif type=='rightdown':
			offset=64
			self.inarray=['right','down']
			self.outarray=['up', 'left']
		elif type=='leftdown':
			offset=96
			self.inarray=['left','down']
			self.outarray=['up', 'right']
		elif type=='horizontal':
			offset=128
			self.inarray=['right','left']
			self.outarray=['right', 'left']
		elif type=='vertical':
			offset=160
			self.inarray=['up','down']
			self.outarray=['up','down']
		elif type=='cross':
			offset=192
			self.inarray=['up','down', 'left', 'right']
			self.outarray=['up','down', 'left', 'right']
			
		self.image = pygame.Surface((32, 32))
		self.image.set_colorkey((0x00,0xff,0x00))
		#self.image.fill((0x0,0x0,0xef))
		self.image.blit(pipetile, (0,0), (offset,0,32,32))
		self.rect = self.image.get_rect()
		self.rect.topleft=pos
	def __init__(self, pos, type):
		pygame.sprite.Sprite.__init__(self, self.containers)
		tile = util.loadPng("items.png")
		self.image = pygame.Surface((32, 32))
		self.image.set_colorkey((0x00,0xff,0x00))
		self.rect = self.image.get_rect()
		self.rect.topleft=pos
		self.blocked=True
		self.inarray=[]
		
		if type=='rock1':
			xoffset=96
			yoffset=0
		elif type=='rock2':
			xoffset=128
			yoffset=0
		elif type=='cactus1':
			xoffset=160
			yoffset=0
		elif type=='cactus2':
			xoffset=192
			yoffset=0
		elif type=='bones':
			xoffset=0
			yoffset=32
		elif type=='palmtree':
			xoffset=32
			yoffset=32
		elif type=='shrub1':
			xoffset=64
			yoffset=32
		elif type=='shrub2':
			xoffset=96
			yoffset=32
			
		self.image.blit(tile, (0,0), (xoffset,yoffset,32,32))
    def __init__(self, screen, level, score, highscore):
        self.screen = screen
        self.__loadingScreen()
        self.level = level
        self.score = score
        self.quit = 0
        self.FPS = 60
        self.rdy_delay = self.FPS * 1.5
        self.win_delay = self.FPS * 3
        self.win = None
        self.pause = False
        self.fast = False
        self.clock = pygame.time.Clock()
        self.highscore = highscore
        self.gamingZone = pygame.Rect(0, 0, 448, 448)

        self.__loadSfx()

        self.PAYMENT = 500 * self.level
        self.MIN_PIPES = self.__calculateMinPipes()
        self.TERRAIN = 0  # Loaded from level
        self.MAX_START_DELAY = 1632 - (self.level * 72)  # (192 - 1632)
        self.MAX_FLOW_VALUE = 456 - (self.level * 18)  # (96 - 456)
        self.MIN_FLOW_VALUE = 32

        self.limit_flow_value = self.MAX_FLOW_VALUE
        self.num_pipes = self.MIN_PIPES
        self.usedpipes = 0
        self.currentpipe = None
        self.alarm = False
        self.pumpframe = 0
        self.pumpcount = 0
        self.pipetypes = [
            "rightup",
            "leftup",
            "rightdown",
            "leftdown",
            "horizontal",
            "vertical",
            "cross",
            "horizontal",
            "vertical",
        ]
        self.bartiles = [util.loadPng("lateral0.png"), util.loadPng("lateral1.png"), util.loadPng("scorebar.png")]
        self.stack = []

        self.input = input.Input()
        self.input.bindKey(EXIT, pygame.K_ESCAPE)
        self.input.bindKey(TURBO, pygame.K_SPACE)
        self.input.bindKey(PAUSE, pygame.K_RETURN, False)
        self.input.bindKey(MOTION, input.MOUSE_MOTION)
        self.input.bindKey(BUTTON1, input.MOUSE_BUTTON1, False)

        cursorGroup = pygame.sprite.RenderUpdates()
        pipeGroup = pygame.sprite.RenderUpdates()
        uiGroup = pygame.sprite.RenderUpdates()
        self.messageGroup = pygame.sprite.RenderUpdates()

        objects.Cursor.containers = cursorGroup
        objects.Oil.containers = cursorGroup
        objects.StackBar.containers = uiGroup
        objects.ScoreBar.containers = uiGroup
        objects.Pipe.containers = pipeGroup
        objects.Well.containers = pipeGroup
        objects.Refinery.containers = pipeGroup
        objects.Obstacle.containers = pipeGroup

        self.cursor = objects.Cursor((self.screen.get_width() / 2, self.screen.get_height() / 2))  # (0,0))
        self.stackbar = objects.StackBar((self.screen.get_width() - 64, 0))
        self.scorebar = objects.ScoreBar((0, self.screen.get_height() - 32))

        textcolor = (0xFF, 0xFF, 0xFF)  # (0x02,0x4e,0x02)
        self.leveltxt = util.loadText("Level " + str(self.level), 18, textcolor, "engex")
        self.readytxt = util.loadText("Ready!", 36, textcolor, "engex")
        self.pausetxt = util.loadText("Pause", 36, textcolor, "engex")

        losearray = [
            util.loadText("You have failed", 26, textcolor, "engex"),
            util.loadText("You lost the contract", 26, textcolor, "engex"),
            util.loadText("You're fired!", 26, textcolor, "engex"),
            util.loadText("What are you doing?", 26, textcolor, "engex"),
            util.loadText("Next!", 26, textcolor, "engex"),
            util.loadText("You're a mess!", 26, textcolor, "engex"),
        ]

        self.morepipestxt = util.loadText("You needed more pipes", 26, textcolor, "engex")

        winarray = [
            util.loadText("Good job!", 26, textcolor, "engex"),
            util.loadText("Mission accomplished!", 26, textcolor, "engex"),
            util.loadText("You did it!", 26, textcolor, "engex"),
            util.loadText("Way to go!", 26, textcolor, "engex"),
            util.loadText("Well done!", 26, textcolor, "engex"),
            util.loadText("You're the boss!", 26, textcolor, "engex"),
            util.loadText("You rock!", 26, textcolor, "engex"),
        ]

        self.losetxt = random.choice(losearray)
        self.wintxt = random.choice(winarray)
        self.dialog = util.loadPng("dialog.png")

        for i in range(4):
            self.__pushStack()

        tile = util.loadPng("grounds.png")
        self.bg = pygame.Surface((448, 448))

        lvl = levelparser.LevelParser()
        lvl.saveMaxLevel(self.level)
        level = lvl.parseLevel(self.level)
        offset = 0
        for i in range(14):
            for j in range(14):
                if level[i][j] == (0xB8, 0x16, 0x16, 0xFF):
                    self.oil = objects.Oil((j * 32, i * 32), "right")
                    self.well = objects.Well((j * 32, i * 32))
                    self.bg.blit(tile, (j * 32, i * 32), (0, 0, 32, 32))
                elif level[i][j] == (0xFF, 0xFF, 0xFF, 0xFF):
                    self.refinery = objects.Refinery((j * 32, i * 32))
                    self.bg.blit(tile, (j * 32, i * 32), (32, 0, 32, 32))
                elif level[i][j] == (0x81, 0x81, 0x81, 0xFF):
                    self.bg.blit(tile, (j * 32, i * 32), (random.choice([0, 32]), 0, 32, 32))
                    objects.Obstacle((j * 32, i * 32), "rock1")
                elif level[i][j] == (0x60, 0x4A, 0x20, 0xFF):
                    self.bg.blit(tile, (j * 32, i * 32), (random.choice([0, 32]), 0, 32, 32))
                    objects.Obstacle((j * 32, i * 32), "rock2")
                elif level[i][j] == (0x18, 0x67, 0x00, 0xFF):
                    self.bg.blit(tile, (j * 32, i * 32), (random.choice([0, 32]), 0, 32, 32))
                    objects.Obstacle((j * 32, i * 32), "cactus1")
                elif level[i][j] == (0x3F, 0x9C, 0x22, 0xFF):
                    self.bg.blit(tile, (j * 32, i * 32), (random.choice([0, 32]), 0, 32, 32))
                    objects.Obstacle((j * 32, i * 32), "cactus2")
                elif level[i][j] == (0xC6, 0xC1, 0xB0, 0xFF):
                    self.bg.blit(tile, (j * 32, i * 32), (random.choice([0, 32]), 0, 32, 32))
                    objects.Obstacle((j * 32, i * 32), "bones")
                elif level[i][j] == (0x18, 0x85, 0x51, 0xFF):
                    self.bg.blit(tile, (j * 32, i * 32), (random.choice([0, 32]), 0, 32, 32))
                    objects.Obstacle((j * 32, i * 32), "palmtree")
                elif level[i][j] == (0x0, 0x27, 0x08, 0xFF):
                    self.bg.blit(tile, (j * 32, i * 32), (random.choice([0, 64]), 0, 32, 32))
                    objects.Obstacle((j * 32, i * 32), "shrub1")
                elif level[i][j] == (0xCC, 0xAF, 0x4D, 0xFF):
                    self.bg.blit(tile, (j * 32, i * 32), (random.choice([0, 64]), offset, 32, 32))
                elif level[i][j] == (0xBF, 0xA4, 0x48, 0xFF):
                    self.bg.blit(tile, (j * 32, i * 32), (random.choice([0, 64]), offset, 32, 32))
                elif level[i][j] == (0xB2, 0x99, 0x43, 0xFF):
                    self.bg.blit(tile, (j * 32, i * 32), (96, offset, 32, 32))
                elif level[i][j] == (0xA6, 0x8E, 0x3F, 0xFF):
                    self.bg.blit(tile, (j * 32, i * 32), (128, offset, 32, 32))
                else:
                    continue

        contract = ContractScreen(
            self.screen, self.level, self.MIN_PIPES, self.TERRAIN, self.MAX_FLOW_VALUE, self.PAYMENT
        )
        self.quit = not contract.accept

        bgm = random.choice(["bgm-1.ogg", "bgm-2.ogg", "bgm-3.ogg", "bgm-4.ogg"])
        bgmPlayer("play", bgm)

        while not self.quit:
            self.clock.tick(self.FPS)
            self.screen.blit(self.bg, (0, 0))

            val = self.__prepareGame(pipeGroup, uiGroup, cursorGroup)
            if val == -1:
                continue
            elif val == 1:
                return

            self.__gameInput()

            if self.oil.state == "next":
                list = pygame.sprite.spritecollide(self.oil, objects.Pipe.containers, False)
                if len(list) > 0:
                    self.currentpipe = list[0]
                    if self.oil.dir in self.currentpipe.inarray:
                        if self.num_pipes > 0:
                            self.num_pipes -= 1
                        self.usedpipes += 1
                        self.moneysnd.play()
                        self.score += 50
                        # self.highscore.appendScore('', self.score)
                        self.messageGroup.add(
                            util.Message(self.currentpipe.rect.center, "+50", (0x12, 0x3D, 0x15), 15)
                        )  # (0x02,0x4e,0x02)
                        self.currentpipe.startFlow()
                        i = self.currentpipe.inarray.index(self.oil.dir)
                        self.oil.dir = self.currentpipe.outarray[i]
                        self.oil.flowing()
                    else:
                        self.__spillOil()
                else:
                    self.__spillOil()
            elif (self.oil.state == "flowing") and not self.pause:
                # print 'flow',self.oil.flow_value, self.limit_flow_value
                self.oil.flow_value += self.oil.speed
                if self.currentpipe != None:
                    self.currentpipe.update(self.oil.flow_value, self.limit_flow_value, self.oil.dir)
                if self.oil.flow_value >= self.limit_flow_value:
                    self.oil.moveNext()

                # Check Win (Refinery)
            if self.oil.rect == self.refinery.rect:
                if self.num_pipes == 0:
                    bgmPlayer("stop")
                    self.winsnd.play()
                    self.win = True
                else:
                    self.losesnd.play()
                    self.losetxt = self.morepipestxt
                    self.win = False

            if not self.pause:
                cursorGroup.update()
                self.messageGroup.update()
                pipeGroup.draw(self.screen)
                cursorGroup.draw(self.screen)
                self.messageGroup.draw(self.screen)
            else:
                cx, cy = self.pausetxt.get_size()
                dx, dy = self.dialog.get_size()

                self.screen.blit(self.dialog, ((448 - dx) / 2, (448 - dy) / 2))
                self.screen.blit(self.pausetxt, ((448 - cx) / 2, (416 - cy) / 2 + 16))

            uiGroup.update(self)
            uiGroup.draw(self.screen)

            pygame.display.flip()
    def __init__(self, screen, level, pipes, terrain, pumping, pay):
        self.screen = screen
        self.clock = pygame.time.Clock()
        self.fps = 60
        self.accept = False
        quit = False

        self.input = input.Input()
        self.input.bindKey(ENTER, pygame.K_RETURN, False)
        self.input.bindKey(EXIT, pygame.K_ESCAPE, False)

        fontsize = 11
        fontcolor = (0x0, 0x0, 0x0)

        if terrain == 0:
            type = "Plain"
        elif terrain == 1:
            type = "Rocky"
        elif terrain == 2:
            type = "Wooded"
        elif terrain == 3:
            type = "Mixed"

        if 300 < pumping <= 448:
            pump = "Slow"
        elif 150 < pumping <= 300:
            pump = "Medium"
        else:
            pump = "Fast"

        back = util.loadText("Press 'ENTER' to Accept, 'ESCAPE' to Quit", 10, (0x0, 0x0, 0x0), "vera")
        contracttxt = util.loadText("Contract  " + str(level), 20, (0x0, 0x0, 0x0), "vera")
        mintxt = util.loadText("Minimun Pipes: " + str(pipes), 10, (0x0, 0x0, 0x0), "vera")
        terraintxt = util.loadText("Terrain: " + type, 10, (0x0, 0x0, 0x0), "vera")
        temptxt = util.loadText("Pumping: " + pump, 10, (0x0, 0x0, 0x0), "vera")
        paytxt = util.loadText("Payment: $" + str(pay), 20, (0x0, 0x0, 0x0), "vera")
        leveltxt = util.loadText("A", 20, (0xFF, 0xFF, 0xFF), "vera")

        image = util.loadPng("contract.png")

        bgmPlayer("play", "bgm-contract.ogg")

        while not quit:
            self.clock.tick(self.fps)
            quit = self.__gameInput()

            xoffset = 95
            yoffset = 32
            self.screen.fill((0xA7, 0xA7, 0xA7))
            self.screen.blit(image, (95, 32))

            self.screen.blit(contracttxt, (23 + xoffset, 95 + yoffset))
            self.screen.blit(mintxt, (42 + xoffset, 275 + yoffset))
            self.screen.blit(terraintxt, (42 + xoffset, 295 + yoffset))
            self.screen.blit(temptxt, (42 + xoffset, 315 + yoffset))
            self.screen.blit(paytxt, (42 + xoffset, 340 + yoffset))
            self.screen.blit(leveltxt, (290 + xoffset, 40 + yoffset))
            cx, cy = back.get_size()
            self.screen.blit(back, ((512 - cx) / 2, 420))

            pygame.display.flip()

        bgmPlayer("stop")
	def spill(self):
		tile = util.loadPng("items.png")
		self.image.blit(tile, (0,0), (0,0,32,32))