#!/usr/bin/env python
# coding: utf-8
"""
My first test with pygame and twisted
game part

(c) by Julian Habrock, 23.1.09
bytemuehle.de
"""

import sys, pygame, time, os
from pygame.locals import *


BG_COLOR = (0, 0, 0)

def load_image(name, colorkey=None):
    fullname = name#os.path.join('data', name)
    try:
        image = pygame.image.load(fullname)
    except pygame.error, message:
        print 'Cannot load image:', fullname
        raise SystemExit, message
    image = image.convert()
    if colorkey is not None:
        if colorkey is -1:
            colorkey = image.get_at((0,0))
            print "colorkey: ", colorkey
        image.set_colorkey(colorkey, RLEACCEL)
    return image, image.get_rect()


class Player(pygame.sprite.Sprite):
    """
    Simple game object
    you can move your player (self.local == True) between 2 positions with
    the "<-" and "->" keys
    """
    positions = {"left":100, "right":540}
    colors = {"red":(199, 3, 3), "green":(1, 243, 1)}
    rows = {"top":150, "bottom":250}
    def __init__(self, pos, color, row, local=0):
        pygame.sprite.Sprite.__init__(self)
        self.image, self.rect  = load_image("player.gif", -1)
        pxarray = pygame.PixelArray(self.image)
        pxarray.replace((255, 0, 0), self.colors[color])
        self.image = pxarray.make_surface()
        self.image.set_colorkey(self.image.get_at((0,0)), RLEACCEL)
        self.image.convert()
        self.position = pos
        self.row = row
        self.rect.centery = self.rows[row]
        self.local = local
        
    def update(self, events):
        if self.local:
            for event in events:
                if event.type == KEYDOWN:
                    if event.key == K_LEFT:
                        self.position = "left"
                    elif event.key == K_RIGHT:
                        self.position = "right"
                    else:
                        print event.key
        self.rect.centerx = self.positions[self.position]



class Game():
    def __init__(self):

        pygame.init()
        self.screen = pygame.display.set_mode((640, 400))
        pygame.display.set_caption('title')
        pygame.mouse.set_visible(1)

    #Create The Backgound
        self.background = pygame.Surface(self.screen.get_size())
        self.background = self.background.convert()
        #background.fill((250, 250, 250))
        self.background.fill(BG_COLOR)
        

    #Put Text On The Background, Centered
        if pygame.font:
            font = pygame.font.Font(None, 36)
            text = font.render("twisted pygame", 1, (10, 10, 10))
            textpos = text.get_rect(centerx=self.background.get_width()/2)
            self.background.blit(text, textpos)

    #Display The Background
        self.screen.blit(self.background, (0, 0))
        pygame.display.flip()

    #Prepare Game Objects
        
        self.clock = pygame.time.Clock()
    #    boom_sound = load_sound('boom.wav')


        self.allsprites = pygame.sprite.RenderPlain()

        self.player = Player("right", "green", "bottom", 1)
        self.player2 = Player("left", "red", "top")
        self.allsprites.add(self.player, self.player2)
        self.running = True
        

        
    def update(self):
        #Handle Input Events
        events = pygame.event.get()
        for event in events:
            if event.type == QUIT:
                self.running = False
            elif event.type == KEYDOWN:
                if event.key == K_ESCAPE:
                    self.running = False

        self.allsprites.update(events)

    #Draw Everything
        self.screen.blit(self.background, (0, 0))
        self.allsprites.draw(self.screen)
        pygame.display.flip()
        
        
def main():
    """this function is called when the program starts.
       it initializes everything it needs, then runs in
       a loop until the function returns."""
#Initialize Everything
    game = Game()
    

#Main Loop
    while 1:
        game.clock.tick(100)
        game.update()
        if not game.running:
            break

    #Game Over


#this calls the 'main' function when this script is executed
if __name__ == '__main__': main()

