예제 #1
0
class SvgTest(unittest.TestCase):
    def testRendering(self):
        self.svg.transform.translate(256, 256)
        self.svg.transform.rotate(3.141592)
        self.svg.draw()
        self.e.video.flip()

    def testRenderToTexture(self):
        scale = 4
        fullwidth, fullheight = 512, 512
        width, height = int(fullwidth / scale), int(fullheight / scale)
        t = Texture()
        self.e.svg.setProjection((0, 0, fullwidth, fullheight))

        glViewport(0, 0, width, height)
        glClear(GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT
                | GL_DEPTH_BUFFER_BIT)
        self.svg.transform.translate(width * scale / 2, height * scale / 2)
        self.svg.transform.rotate(3.141592)
        self.svg.draw()

        glViewport(0, 0, fullwidth, fullheight)
        glMatrixMode(GL_PROJECTION)
        glLoadIdentity()
        gluOrtho2D(0.0, 1.0, 0.0, 1.0)
        glMatrixMode(GL_MODELVIEW)
        glLoadIdentity()

        t.bind()
        glEnable(GL_TEXTURE_2D)
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR)

        glClear(GL_COLOR_BUFFER_BIT)
        glColor3f(1.0, 1.0, 1.0)
        glBegin(GL_TRIANGLE_STRIP)
        glTexCoord2f(0.0, 0.0)
        glVertex2f(0.0, 0.0)
        glTexCoord2f(1.0, 0.0)
        glVertex2f(1.0, 0.0)
        glTexCoord2f(0.0, 1.0)
        glVertex2f(0.0, 1.0)
        glTexCoord2f(1.0, 1.0)
        glVertex2f(1.0, 1.0)
        glEnd()

        self.e.video.flip()
        import time
        time.sleep(2)

    def setUp(self):
        config = Config.load(Version.PROGRAM_UNIXSTYLE_NAME + ".ini",
                             setAsDefault=True)
        self.e = GameEngine(config)
        self.e.loadImgDrawing(self, "svg", "mfhlogo.png")

        while not self.svg:
            self.e.run()

        glClear(GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT
                | GL_DEPTH_BUFFER_BIT)
예제 #2
0
class ViewTest(unittest.TestCase):
    def testTransition(self):
        l1 = TestLayer()
        l2 = TestLayer()
        l3 = TestLayer()
        v = self.e.view

        v.pushLayer(l1)
        v.pushLayer(l2)
        v.pushLayer(l3)

        while l3.visibility < 1.0:
            self.e.run()

        v.popLayer(l3)
        v.popLayer(l2)
        v.popLayer(l1)

        while l1 in v.layers or l2 in v.layers or l3 in v.layers:
            self.e.run()

        assert not v.layers

    def setUp(self):
        self.e = GameEngine()

    def tearDown(self):
        self.e.quit()
예제 #3
0
class ViewTest(unittest.TestCase):
    def testTransition(self):
        l1 = TestLayer()
        l2 = TestLayer()
        l3 = TestLayer()
        v = self.e.view

        v.pushLayer(l1)
        v.pushLayer(l2)
        v.pushLayer(l3)

        while l3.visibility < 1.0:
            self.e.run()

        v.popLayer(l3)
        v.popLayer(l2)
        v.popLayer(l1)

        while l1 in v.layers or l2 in v.layers or l3 in v.layers:
            self.e.run()

        assert not v.layers

    def setUp(self):
        config = Config.load(Version.PROGRAM_UNIXSTYLE_NAME + ".ini", setAsDefault = True)
        self.e = GameEngine(config)

    def tearDown(self):
        self.e.quit()
예제 #4
0
    def __init__(self, config):
        super().__init__(config)

        # initialize the Yaniv game

        players = []

        # if player_config not specified in config, we initialize with two random player
        if not ('player_config' in config):
            players = [RandomPlayer("RandomPlayer1"), RandomPlayer("RandomPlayer2")]
        # otherwise we will find the player_config to generate players
        else:
            for i in range(len(config['player_config'])):
                player_type = config['player_config'][i]
                if player_type == 'DQN':
                    players.append(RandomPlayer('RDQNPlayer' + str(i)))
                elif player_type == 'Random':
                    players.append(RandomPlayer('RandomPlayer' + str(i)))
                elif player_type == 'HC':
                    players.append(HillClimbPlayer('HC' + str(i)))
                elif player_type == 'Minimax':
                    players.append(MinimaxPlayer('Minimax' + str(i)))
                elif player_type == 'SA':
                    players.append(SimulatedAnnealingPlayer('SA' + str(i)))

        self.game = GameEngine(players)
        self.state_shape = [4, 54]
예제 #5
0
파일: ViewTest.py 프로젝트: Gamer125/fofix
class ViewTest(unittest.TestCase):
    def testTransition(self):
        l1 = TestLayer()
        l2 = TestLayer()
        l3 = TestLayer()
        v = self.e.view

        v.pushLayer(l1)
        v.pushLayer(l2)
        v.pushLayer(l3)

        while l3.visibility < 1.0:
            self.e.run()

        v.popLayer(l3)
        v.popLayer(l2)
        v.popLayer(l1)

        while l1 in v.layers or l2 in v.layers or l3 in v.layers:
            self.e.run()

        assert not v.layers

    def setUp(self):
        config = Config.load(Version.appName() + ".ini", setAsDefault=True)
        self.e = GameEngine(config)

    def tearDown(self):
        self.e.quit()
예제 #6
0
class ViewTest(unittest.TestCase):
    def testTransition(self):
        l1 = TestLayer()
        l2 = TestLayer()
        l3 = TestLayer()
        v = self.e.view

        v.pushLayer(l1)
        v.pushLayer(l2)
        v.pushLayer(l3)

        while l3.visibility < 1.0:
            self.e.run()

        v.popLayer(l3)
        v.popLayer(l2)
        v.popLayer(l1)

        while l1 in v.layers or l2 in v.layers or l3 in v.layers:
            self.e.run()

        assert not v.layers

    def setUp(self):
        self.e = GameEngine()

    def tearDown(self):
        self.e.quit()
예제 #7
0
    def __init__(self):
        # initialize game, ball, and player
        self.game = GameEngine()

        self.ball = Ball(self.game, 500, 300, 0)
        self.game.new_ball(self.ball)

        self.player1 = Player(self.game, 400, 300, 1, (0, 0, 255))
        self.game.new_player(self.player1)

        self.player2 = Player(self.game, 400, 300, 1, (0, 0, 255))
        self.game.new_player(self.player2)

        # movement options
        # 0 = v(-1,-1) # 1 = v( 0,-1) # 2 = v( 1, 1)
        # 3 = v(-1, 0)                # 4 = v( 1, 0)
        # 5 = v(-1, 1) # 6 = v( 0, 1) # 7 = v( 1, 1)

        self.states_translation_array = [None] * 8
        self.states_translation_array[0] = pygame.math.Vector2(-1,-1).normalize()
        self.states_translation_array[1] = pygame.math.Vector2(0,-1).normalize()
        self.states_translation_array[2] = pygame.math.Vector2(1, 1).normalize()
        self.states_translation_array[3] = pygame.math.Vector2(-1, 0).normalize()
        self.states_translation_array[4] = pygame.math.Vector2(1, 0).normalize()
        self.states_translation_array[5] = pygame.math.Vector2(-1, 1).normalize()
        self.states_translation_array[6] = pygame.math.Vector2(0, 1).normalize()
        self.states_translation_array[7] = pygame.math.Vector2(1, 1).normalize()
예제 #8
0
    def setUp(self):
        config = Config.load(Version.PROGRAM_UNIXSTYLE_NAME + ".ini", setAsDefault = True)
        self.e = GameEngine(config)
        self.e.loadImgDrawing(self, "svg", "mfhlogo.png")

        while not self.svg:
            self.e.run()

        glClear(GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
예제 #9
0
    def setUp(self):
        self.e = GameEngine()
        self.e.loadSvgDrawing(self, "svg", "koopa.svg")

        while not self.svg:
            self.e.run()

        glClear(GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT
                | GL_DEPTH_BUFFER_BIT)
예제 #10
0
파일: SvgTest.py 프로젝트: Gamer125/fofix
class SvgTest(unittest.TestCase):
  def testRendering(self):
    self.svg.transform.translate(256, 256)
    self.svg.transform.rotate(3.141592)
    self.svg.draw()
    self.e.video.flip()

  def testRenderToTexture(self):
    scale = 4
    fullwidth, fullheight = 512, 512
    width, height = int(fullwidth / scale), int(fullheight / scale)
    t = Texture()
    self.e.svg.setProjection((0, 0, fullwidth, fullheight))
    
    glViewport(0, 0, width, height)
    glClear(GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
    self.svg.transform.translate(width * scale / 2, height * scale / 2)
    self.svg.transform.rotate(3.141592)
    self.svg.draw()

    glViewport(0, 0, fullwidth, fullheight)
    glMatrixMode(GL_PROJECTION)
    glLoadIdentity()
    gluOrtho2D(0.0, 1.0, 0.0, 1.0)
    glMatrixMode(GL_MODELVIEW)
    glLoadIdentity()

    t.bind()
    glEnable(GL_TEXTURE_2D)
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR)

    glClear(GL_COLOR_BUFFER_BIT)
    glColor3f(1.0, 1.0, 1.0)
    glBegin(GL_TRIANGLE_STRIP)
    glTexCoord2f(0.0, 0.0)
    glVertex2f(0.0, 0.0)
    glTexCoord2f(1.0, 0.0)
    glVertex2f(1.0, 0.0)
    glTexCoord2f(0.0, 1.0)
    glVertex2f(0.0, 1.0)
    glTexCoord2f(1.0, 1.0)
    glVertex2f(1.0, 1.0)
    glEnd()

    self.e.video.flip()
    import time
    time.sleep(2)

  def setUp(self):
    config = Config.load(Version.appName() + ".ini", setAsDefault = True)
    self.e = GameEngine(config)
    self.e.loadImgDrawing(self, "svg", "mfhlogo.png")

    while not self.svg:
      self.e.run()

    glClear(GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
예제 #11
0
class DialogTestInteractive(unittest.TestCase):
  def testGetTest(self):
    text = getText(self.e, "Please enter your name:", "Wario")
     
  def setUp(self):
    self.e = GameEngine()
    
  def tearDown(self):
    self.e.quit()
예제 #12
0
class DialogTestInteractive(unittest.TestCase):
    def testGetTest(self):
        text = getText(self.e, "Please enter your name:", "Wario")

    def setUp(self):
        self.e = GameEngine()

    def tearDown(self):
        self.e.quit()
예제 #13
0
class ResourceTest(unittest.TestCase):
    def testAsynchLoad(self):
        self.r = Resource()
        self.e.addTask(self.r, synchronized=False)

        self.r.load(self, "result", lambda: loader())

        while not self.result:
            self.e.run()

        assert self.result == 0xdada

    def testSynchLoad(self):
        self.r = Resource()
        self.e.addTask(self.r, synchronized=False)

        assert self.r.load(self, "result2", loader, synch=True) == 0xdada
        assert self.result2 == 0xdada

    def testAsynchLoadSeries(self):
        self.r = Resource()
        self.e.addTask(self.r, synchronized=False)

        for i in range(10):
            self.r.load(self, "result%d" % i, loader)

        while not self.result9:
            self.e.run()

        assert self.result9 == 0xdada

    def testCallback(self):
        self.r = Resource()
        self.e.addTask(self.r, synchronized=False)

        self.quux = None

        def loaded(r):
            self.quux = r

        self.r.load(self, "fuuba", loader, onLoad=loaded).join()

        while not self.fuuba:
            self.e.run()

        assert self.fuuba == self.quux

    def setUp(self):
        Config.load(Version.PROGRAM_UNIXSTYLE_NAME + ".ini", setAsDefault=True)
        # Resource expects game_priority to be an integer,
        # Config won't know unless we define it as such.
        Config.define("performance", "game_priority", int, 2)
        self.e = GameEngine()

    def tearDown(self):
        self.e.quit()
예제 #14
0
class DialogTestInteractive(unittest.TestCase):
  def testGetTest(self):
    text = getText(self.e, "Please enter your name:", "Wario")
     
  def setUp(self):
    config = Config.load(Version.appName() + ".ini", setAsDefault = True)
    self.e = GameEngine(config)
    
  def tearDown(self):
    self.e.quit()
예제 #15
0
class ResourceTest(unittest.TestCase):
    def testAsynchLoad(self):
        self.r = Resource()
        self.e.addTask(self.r, synchronized = False)

        self.r.load(self, "result", lambda: loader())

        while not self.result:
            self.e.run()

        assert self.result == 0xdada

    def testSynchLoad(self):
        self.r = Resource()
        self.e.addTask(self.r, synchronized = False)

        assert self.r.load(self, "result2", loader, synch = True) == 0xdada
        assert self.result2 == 0xdada

    def testAsynchLoadSeries(self):
        self.r = Resource()
        self.e.addTask(self.r, synchronized = False)

        for i in range(10):
            self.r.load(self, "result%d" % i, loader)

        while not self.result9:
            self.e.run()

        assert self.result9 == 0xdada

    def testCallback(self):
        self.r = Resource()
        self.e.addTask(self.r, synchronized = False)

        self.quux = None
        def loaded(r):
            self.quux = r

        self.r.load(self, "fuuba", loader, onLoad = loaded).join()

        while not self.fuuba:
            self.e.run()

        assert self.fuuba == self.quux

    def setUp(self):
        Config.load(Version.PROGRAM_UNIXSTYLE_NAME + ".ini", setAsDefault = True)
        # Resource expects game_priority to be an integer,
        # Config won't know unless we define it as such.
        Config.define("performance", "game_priority", int, 2)
        self.e = GameEngine()

    def tearDown(self):
        self.e.quit()
예제 #16
0
class MenuTest(unittest.TestCase):
    def testMenuNavigation(self):
        m = Menu(self.e, rootMenu)
        self.e.view.pushLayer(m)

    def setUp(self):
        config = Config.load(Version.PROGRAM_UNIXSTYLE_NAME + ".ini", setAsDefault = True)
        self.e = GameEngine(config)

    def tearDown(self):
        self.e.quit()
예제 #17
0
파일: MenuTest.py 프로젝트: Gamer125/fofix
class MenuTest(unittest.TestCase):
    def testMenuNavigation(self):
        m = Menu(self.e, rootMenu)
        self.e.view.pushLayer(m)

    def setUp(self):
        config = Config.load(Version.appName() + ".ini", setAsDefault=True)
        self.e = GameEngine(config)

    def tearDown(self):
        self.e.quit()
예제 #18
0
 def testVideoPlayerLayer(self):
   config = Config.load(Version.appName() + ".ini", setAsDefault = True)
   self.e = GameEngine(config)
   winWidth, winHeight = (self.e.view.geometry[2], self.e.view.geometry[3])
   vidPlayer = VideoPlayer(framerate, self.src, (winWidth, winHeight),
                           loop = False)
   self.e.view.pushLayer(vidPlayer)
   while not vidPlayer.finished:
     self.e.run()
   self.e.view.popLayer(vidPlayer)
   self.e.audio.close()
   self.e.quit()
예제 #19
0
class MenuTestInteractive(unittest.TestCase):
    def testMenuNavigation(self):
        m = Menu(self.e, rootMenu)
        self.e.view.pushLayer(m)

        while self.e.view.layers:
            rootMenu[0][0] = "%.1f FPS" % self.e.fpsEstimate
            self.e.run()

    def setUp(self):
        self.e = GameEngine()

    def tearDown(self):
        self.e.quit()
예제 #20
0
def simulateGamesForCol(game: GameData):
    win = game.board.add_to_col(game.col, game.color)
    if win:
        return game.N
    p1 = MachineRandomPlayer(Color.RED if game.color ==
                             Color.YELLOW else Color.YELLOW)
    p2 = MachineRandomPlayer(game.color)
    eng = GameEngine()
    wins = 0
    for i in range(game.N):
        winner = eng.play_game(copy.deepcopy(game.board), p1, p2, False, False)
        if winner == game.color:
            wins += 1
    return wins
예제 #21
0
class MenuTestInteractive(unittest.TestCase):
    def testMenuNavigation(self):
        m = Menu(self.e, rootMenu)
        self.e.view.pushLayer(m)

        while self.e.view.layers:
            rootMenu[0][0] = "%.1f FPS" % self.e.timer.fpsEstimate
            self.e.run()

    def setUp(self):
        self.e = GameEngine()

    def tearDown(self):
        self.e.quit()
예제 #22
0
파일: MenuTest.py 프로젝트: Gamer125/fofix
class MenuTestInteractive(unittest.TestCase):
  def testMenuNavigation(self):
    m = Menu(self.e, rootMenu)
    self.e.view.pushLayer(m)

    while self.e.view.layers:
      self.e.run()

  def setUp(self):
    config = Config.load(Version.appName() + ".ini", setAsDefault = True)
    self.e = GameEngine(config)
    
  def tearDown(self):
    self.e.quit()
예제 #23
0
    def __init__(self, parent, controller):
        Frame.__init__(self, parent)
        self.controller = controller
        label = Label(self, text="Game", font=LARGE_FONT)
        label.pack(pady=10, padx=10)

        #self.round = casino.getGameTable()
        #flag for human as last capturer
        #self.lastCapturer = "None"
        #set true as deafault

        #NewGameReference = self.controller.get_page(NewGame)
        self.LoadGameReference = self.controller.get_page(LoadGame)
        self.NewGameReference = self.controller.get_page(NewGame)

        #required to prevent reloading the game when clicking the update button
        self.flag = -1

        self.casino = GameEngine()
        self.moveInfo = []

        self.buttonUpdate = Button(self,
                                   text="Update Board",
                                   command=lambda: self.updateBoard())
        self.buttonUpdate.pack()
        self.buttonSave = Button(
            self,
            text="Save",
            bg="blue",
            command=lambda: self.controller.show_frame(SaveGame))
        self.buttonSave.pack(side=TOP)

        #updateable varibales
        self.listHumanHand = []
        self.listComputerHand = []
        self.listTableCard = []
        self.prompt = Label(self)
        self.labelHuman = Label(self)
        self.labelComputer = Label(self)
        self.labelHumanPile = Label(self)
        self.labelComputerPile = Label(self)
        self.labelTable = Label(self)
        self.status = Label(self)

        self.buttonTrail = Button(self)
        self.buttonCapture = Button(self)
        self.buttonBuild = Button(self)
        self.buttonHelp = Button(self)
        self.buttonComputer = Button(self)
예제 #24
0
class MenuTest(unittest.TestCase):
    def testMenuNavigation(self):
        m = Menu(self.e, rootMenu)
        self.e.view.pushLayer(m)

        while self.e.view.layers and 0:
            rootMenu[0][0] = "%.1f FPS" % self.e.timer.fpsEstimate
            self.e.run()
        # FIXME: keyboard event injection for testing

    def setUp(self):
        self.e = GameEngine()

    def tearDown(self):
        self.e.quit()
예제 #25
0
class MenuTest(unittest.TestCase):
    def testMenuNavigation(self):
        m = Menu(self.e, rootMenu)
        self.e.view.pushLayer(m)

        while self.e.view.layers and 0:
            rootMenu[0][0] = "%.1f FPS" % self.e.fpsEstimate
            self.e.run()
        # FIXME: keyboard event injection for testing

    def setUp(self):
        self.e = GameEngine()

    def tearDown(self):
        self.e.quit()
예제 #26
0
파일: MenuTest.py 프로젝트: vemel/fofix
class MenuTestInteractive(unittest.TestCase):
    def testMenuNavigation(self):
        m = Menu(self.e, rootMenu)
        self.e.view.pushLayer(m)

        while self.e.view.layers:
            self.e.run()

    def setUp(self):
        config = Config.load(Version.PROGRAM_UNIXSTYLE_NAME + ".ini",
                             setAsDefault=True)
        self.e = GameEngine(config)

    def tearDown(self):
        self.e.quit()
예제 #27
0
    def playersQtyInputScreen(self):
        qty = -1
        while qty == -1:
            try:
                qty = int(input("Informe a quantidade de jogadores: "))

                if (qty < 2) or (qty > 4):
                    print("Número de jogadores:")
                    print("Máximo: 4")
                    print("Mínimo: 2")
                    qty = -1
                else:
                    self.__gameEngine = GameEngine(qty)
            except:
                print("Digite apenas números!")
                qty = -1
예제 #28
0
 def testVideoPlayerLayer(self):
     config = Config.load(Version.PROGRAM_UNIXSTYLE_NAME + ".ini",
                          setAsDefault=True)
     self.e = GameEngine(config)
     winWidth, winHeight = (self.e.view.geometry[2],
                            self.e.view.geometry[3])
     vidPlayer = VideoPlayer(framerate,
                             self.src, (winWidth, winHeight),
                             loop=False,
                             startTime=10000,
                             endTime=14000)
     self.e.view.pushLayer(vidPlayer)
     while not vidPlayer.finished:
         self.e.run()
     self.e.view.popLayer(vidPlayer)
     self.e.audio.close()
     self.e.quit()
예제 #29
0
  def setUp(self):
    self.e = GameEngine()
    self.e.loadSvgDrawing(self, "svg", "koopa.svg")

    while not self.svg:
      self.e.run()

    glClear(GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
예제 #30
0
파일: SvgTest.py 프로젝트: Gamer125/fofix
  def setUp(self):
    config = Config.load(Version.appName() + ".ini", setAsDefault = True)
    self.e = GameEngine(config)
    self.e.loadImgDrawing(self, "svg", "mfhlogo.png")

    while not self.svg:
      self.e.run()

    glClear(GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
예제 #31
0
  def testLoading(self):
    e = GameEngine()
    infoFile   = e.resource.fileName("songs", "defy", "song.ini")
    guitarFile = e.resource.fileName("songs", "defy", "guitar.ogg")
    songFile   = e.resource.fileName("songs", "defy", "song.ogg")
    noteFile   = e.resource.fileName("songs", "defy", "notes.mid")
    song = Song(e, infoFile, guitarFile, songFile, None, noteFile)

    assert int(song.bpm) == 122
예제 #32
0
    def testLoading(self):
        config = Config.load(Version.appName() + ".ini", setAsDefault=True)
        e = GameEngine(config)
        infoFile = e.resource.fileName("tutorials", "bangbang", "song.ini")
        guitarFile = e.resource.fileName("tutorials", "bangbang", "guitar.ogg")
        songFile = e.resource.fileName("tutorials", "bangbang", "song.ogg")
        noteFile = e.resource.fileName("tutorials", "bangbang", "notes.mid")
        song = Song(e, infoFile, guitarFile, songFile, None, noteFile)

        assert int(song.bpm) == 120
예제 #33
0
 def testVideoPlayerLayer(self):
   config = Config.load(Version.PROGRAM_UNIXSTYLE_NAME + ".ini", setAsDefault = True)
   self.e = GameEngine(config)
   winWidth, winHeight = (self.e.view.geometry[2], self.e.view.geometry[3])
   vidPlayer = VideoPlayer(framerate, self.src, (winWidth, winHeight),
                           loop = False, startTime = 10000, endTime = 14000)
   self.e.view.pushLayer(vidPlayer)
   while not vidPlayer.finished:
     self.e.run()
   self.e.view.popLayer(vidPlayer)
   self.e.audio.close()
   self.e.quit()
예제 #34
0
 def testAnimationPlayerLayer(self):
     loop = 10
     config = Config.load(Version.PROGRAM_UNIXSTYLE_NAME + ".ini",
                          setAsDefault=True)
     self.e = GameEngine(config)
     animPlayer = AnimationPlayer(
         framerate,
         self.path,
         self.basename, (self.e.view.geometry[2], self.e.view.geometry[3]),
         loop=loop)
     print "Rendering as a GameEngine Layer for %d loops." % loop
     self.e.view.pushLayer(animPlayer)
     startTime = pygame.time.get_ticks()
     while not animPlayer.finished:
         self.e.run()
     stopTime = pygame.time.get_ticks()
     totalTime = stopTime - startTime
     print "nbrFrames: %d, nbrLoops: %d, Total time: %.02f s, Average fps: %.02f" % \
           (animPlayer.nbrFrames, loop, totalTime/1000.0, \
            (float(1000.0*animPlayer.nbrFrames*(loop+1)) / float(totalTime)))
     self.e.view.popLayer(animPlayer)
     self.e.quit()
class firstCase(unittest.TestCase):

    def setUp(self):
        self.GameEngine = GameEngine()
        self.ai = _AI('hard')
        

    def testIsFinished1(self):
        board = [[None,None,None],[None,None,None],[None,None,None]]
        assert self.GameEngine.isFinished(board) == False,\
            "Wrong with empty board."

    def testIsFinished2(self):
        board = [['X','X','X'], [None, None, None],[None, None, None]]
        assert self.GameEngine.isFinished(board) == True, \
            "Wrong with win in a row."

    def testIsFinished3(self):
        board = [['X', None, None], [None,'X',None],[None, None, 'X']]
        assert self.GameEngine.isFinished(board) == True, \
                "Wrong with diagonal win."

    def testIsFinished4(self):
        board = [['X','O','X'], [None, None, None], [None, None, None]]
        assert self.GameEngine.isFinished(board) == False,\
        "Three values in a row, but theyre not from the same player."

    def testChangePlayer(self):
        currentPlayer = 'X' #Game always starts with player X.
        self.GameEngine.changePlayer()
        differentPlayer = self.GameEngine.getPlayer()
        assert differentPlayer == 'O', \
                "Doesn't switch players properly."

    def testUpdateBoard1(self):
        currentPlayer = 'X'
        self.GameEngine.updateBoard(currentPlayer, (0,1))
        board = self.GameEngine.getBoard()
        assert board == [[None, 'X', None], [None, None, None], [None, None, None]], "Wrong when updating board"
예제 #36
0
    def testSaving(self):
        config = Config.load(Version.PROGRAM_UNIXSTYLE_NAME + ".ini",
                             setAsDefault=True)
        e = GameEngine(config)

        # Make a temp copy
        tmp = "songtest_tmp"
        files = ["song.ini", "guitar.ogg", "song.ogg", "notes.mid"]
        try:
            os.mkdir(tmp)
            for f in files:
                shutil.copy(e.resource.fileName("tutorials", "bangbang", f),
                            tmp)

            infoFile = os.path.join(tmp, "song.ini")
            guitarFile = os.path.join(tmp, "guitar.ogg")
            songFile = os.path.join(tmp, "song.ogg")
            noteFile = os.path.join(tmp, "notes.mid")
            song = Song(e, infoFile, guitarFile, songFile, None, noteFile)

            events1 = song.track[0].getAllEvents()

            song.save()
            song = Song(e, infoFile, guitarFile, songFile, None, noteFile)

            events2 = song.track[0].getAllEvents()

            notes1 = [(time, event) for time, event in events1
                      if isinstance(event, Note)]
            notes2 = [(time, event) for time, event in events2
                      if isinstance(event, Note)]

            for i, event in enumerate(zip(notes1, notes2)):
                t1, n1 = event[0]
                t2, n2 = event[1]

                if "-v" in sys.argv:
                    print "%8d. %.3f + %.3f\t%2d\t     %.3f + %.3f\t%2d" % (
                        i, t1, n1.length, n1.number, t2, n2.length, n2.number)

                # Allow 2ms of rounding error
                assert abs(t1 - t2) < 2
                assert abs(n1.length - n2.length) < 2
                assert n1.number == n2.number
        finally:
            # Load another song to free the copy
            pygame.mixer.music.load(
                e.resource.fileName("tutorials", "bangbang", "guitar.ogg"))
            shutil.rmtree(tmp)
예제 #37
0
def runMultiGames(num_of_play, run_name=""):
    r_wins = 0
    y_wins = 0
    print()
    print('============ {0} start ================'.format(run_name))
    print("Player 1 (RED) = Heuristic VS Player 2 (Yellow) MonteCarlo")
    for i in range(num_of_play):
        b = Board()
        p1 = MachineLogicPlayer(b, Color.RED)
        p2 = MonteCarloPlayer(b, Color.YELLOW)
        # p2 = MachineRandomPlayer(Color.YELLOW)
        eng = GameEngine()
        eng.play_game(b, p1, p2, False, False)
        # b.print_board()
        if b.winner == Color.YELLOW:
            y_wins += 1
        elif b.winner == Color.RED:
            r_wins += 1
        print(str(i + 1) + " " + str(b.winner) + " wins - " + str(datetime.datetime.now().time()))
        # print('red wins: {0} yellow wins: {1} games: {2}'.format(r_wins, y_wins, i + 1))

    print('============ {0} complete ================'.format(run_name))
    print('red wins: {0} total games: {1} ratio: {2}'.format(r_wins, num_of_play, r_wins / num_of_play))
    return r_wins
예제 #38
0
파일: Game.py 프로젝트: mrketchup/playball
    def __init__(self, engine=None, home_team=None, away_team=None):
        self.state = GameState()
        if home_team is None:
            home_team = Team()
        if away_team is None:
            away_team = Team()
        self.state.homeTeam = home_team
        self.state.awayTeam = away_team
        self.event_callbacks = []
        self.game_end_callbacks = []

        if engine is None:
            self.engine = GameEngine()
        else:
            self.engine = engine
예제 #39
0
 def testAnimationPlayerLayer(self):
   loop = 10
   config = Config.load(Version.PROGRAM_UNIXSTYLE_NAME + ".ini", setAsDefault = True)
   self.e = GameEngine(config)
   animPlayer = AnimationPlayer(framerate, self.path, self.basename,
                                (self.e.view.geometry[2],
                                 self.e.view.geometry[3]), loop = loop)
   print "Rendering as a GameEngine Layer for %d loops." % loop
   self.e.view.pushLayer(animPlayer)
   startTime = pygame.time.get_ticks()
   while not animPlayer.finished:
     self.e.run()
   stopTime = pygame.time.get_ticks()
   totalTime = stopTime - startTime
   print "nbrFrames: %d, nbrLoops: %d, Total time: %.02f s, Average fps: %.02f" % \
         (animPlayer.nbrFrames, loop, totalTime/1000.0, \
          (float(1000.0*animPlayer.nbrFrames*(loop+1)) / float(totalTime)))
   self.e.view.popLayer(animPlayer)
   self.e.quit()
예제 #40
0
class Solver:
    def __init__(self, game, bots):
        self.game = game
        self.bots = bots
        self.engine = GameEngine()

    def solve(self):
        self.engine.load_configuration(self.game, self.bots)
        game_statistics = self.__game_loop()
        return game_statistics

    def __game_loop(self):
        while self.engine.is_game_playing():
            self.engine.update()

        return self.engine.get_statistics()
예제 #41
0
class SvgTest(unittest.TestCase):
  def testRendering(self):
    self.svg.transform.translate(256, 256)
    self.svg.transform.rotate(3.141592)
    self.svg.draw()
    self.e.video.flip()

  def testRenderToTexture(self):
    scale = 4
    fullwidth, fullheight = 512, 512
    width, height = int(fullwidth / scale), int(fullheight / scale)
    t = Texture()
    self.e.svg.setProjection((0, 0, fullwidth, fullheight))
    
    t.prepareRenderTarget(width, height)
    t.setAsRenderTarget()
    glViewport(0, 0, width, height)
    glClear(GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
    self.svg.transform.translate(width * scale / 2, height * scale / 2)
    self.svg.transform.rotate(3.141592)
    self.svg.draw()
    t.resetDefaultRenderTarget()

    glViewport(0, 0, fullwidth, fullheight)
    glMatrixMode(GL_PROJECTION)
    glLoadIdentity()
    gluOrtho2D(0.0, 1.0, 0.0, 1.0)
    glMatrixMode(GL_MODELVIEW)
    glLoadIdentity()

    t.bind()
    glEnable(GL_TEXTURE_2D)
    if not t.framebuffer.emulated:
      glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR)
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR)

    glClear(GL_COLOR_BUFFER_BIT)
    glColor3f(1.0, 1.0, 1.0)
    glBegin(GL_TRIANGLE_STRIP)
    glTexCoord2f(0.0, 0.0)
    glVertex2f(0.0, 0.0)
    glTexCoord2f(1.0, 0.0)
    glVertex2f(1.0, 0.0)
    glTexCoord2f(0.0, 1.0)
    glVertex2f(0.0, 1.0)
    glTexCoord2f(1.0, 1.0)
    glVertex2f(1.0, 1.0)
    glEnd()

    self.e.video.flip()
    import time
    time.sleep(2)

  def setUp(self):
    self.e = GameEngine()
    self.e.loadSvgDrawing(self, "svg", "koopa.svg")

    while not self.svg:
      self.e.run()

    glClear(GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
예제 #42
0
def main():
  playing = None
  configFile = None
  fullscreen = None
  resolution = None
  theme = None
  #debug = False
  difficulty = None
  part = None
  mode = 0
  nbrplayers = 1
  for opt, arg in opts:
    if opt in ["--verbose", "-v"]:
      Log.quiet = False
    if opt in ["--config", "-c"]:
      configFile = arg
    if opt in ["--fullscreen", "-f"]:
      fullscreen = arg
    if opt in ["--resolution", "-r"]:
      resolution = arg
    if opt in ["--theme", "-t"]:
      theme = arg
    if opt in ["--song", "-s"]:
      playing = arg
    if opt in ["--part", "-p"]:
      part = arg
    if opt in ["--diff", "-d", "-l"]:
      difficulty = arg      
    #evilynux - Multiplayer and mode selection support
    if opt in ["--mode", "-m"]:
      mode = int(arg)
    if opt in ["--nbrplayers", "-n"]:
      nbrplayers = int(arg)

  # Load the configuration file.
  if configFile is not None:
    if configFile.lower() == "reset":
      fileName = os.path.join(Resource.getWritableResourcePath(), Version.PROGRAM_UNIXSTYLE_NAME + ".ini")
      os.remove(fileName)
      config = Config.load(Version.PROGRAM_UNIXSTYLE_NAME + ".ini", setAsDefault = True)
    else:
      config = Config.load(configFile, setAsDefault = True)
  else:
    config = Config.load(Version.PROGRAM_UNIXSTYLE_NAME + ".ini", setAsDefault = True)

  #Lysdestic - Allow support for manipulating fullscreen via CLI
  if fullscreen is not None:
    Config.set("video", "fullscreen", fullscreen)

  #Lysdestic - Change resolution from CLI
  if resolution is not None:
    Config.set("video", "resolution", resolution)

  #Lysdestic - Alter theme from CLI
  if theme is not None:
    Config.set("coffee", "themename", theme)

  engine = GameEngine(config)
  engine.cmdPlay = 0

  # Check for a valid invocation of one-shot mode.
  if playing is not None:
    Log.debug('Validating song directory for one-shot mode.')
    library = Config.get("game","base_library")
    basefolder = os.path.join(Version.dataPath(),library,"songs",playing)
    if not (os.path.exists(os.path.join(basefolder, "song.ini")) and (os.path.exists(os.path.join(basefolder, "notes.mid")) or os.path.exists(os.path.join(basefolder, "notes-unedited.mid"))) and (os.path.exists(os.path.join(basefolder, "song.ogg")) or os.path.exists(os.path.join(basefolder, "guitar.ogg")))):
      Log.warn("Song directory provided ('%s') is not a valid song directory. Starting up FoFiX in standard mode." % playing)
      engine.startupMessages.append(_("Song directory provided ('%s') is not a valid song directory. Starting up FoFiX in standard mode.") % playing)
      playing = None

  # Set up one-shot mode if the invocation is valid for it.
  if playing is not None:
    Log.debug('Entering one-shot mode.')
    Config.set("game", "selected_library", "songs")
    Config.set("game", "selected_song", playing)
    engine.cmdPlay = 1
    if difficulty is not None:
      engine.cmdDiff = int(difficulty)
    if part is not None:
      engine.cmdPart = int(part)
    #evilynux - Multiplayer and mode selection support
    
    if nbrplayers == 1:
      engine.cmdMode = nbrplayers, mode, 0
    
    else:
      engine.cmdMode = nbrplayers, 0, mode

  encoding = Config.get("game", "encoding")
  if encoding is not None:
    #stump: XXX: Everything I have seen indicates that this is a
    # horrible, horrible hack.  Is there another way?  Do we even need this?
    reload(sys)
    sys.setdefaultencoding(encoding)

  # Play the intro video if it is present, we have the capability, and
  # we are not in one-shot mode.
  videoLayer = False
  if videoAvailable and not engine.cmdPlay:
    # TODO: Parameters to add to theme.ini:
    #  - intro_video_file
    #  - intro_video_start_time
    #  - intro_video_end_time
    themename = Config.get("coffee", "themename")
    vidSource = os.path.join(Version.dataPath(), 'themes', themename, \

                             'menu', 'intro.mp4')
    if os.path.isfile(vidSource):
      winWidth, winHeight = engine.view.geometry[2:4]
      songVideoStartTime = 0
      songVideoEndTime = None
      vidPlayer = VideoPlayer(-1, vidSource, (winWidth, winHeight),
                              startTime = songVideoStartTime,
                              endTime = songVideoEndTime)
      if vidPlayer.validFile:
        engine.view.pushLayer(vidPlayer)
        videoLayer = True
        try:
          engine.ticksAtStart = pygame.time.get_ticks()
          while not vidPlayer.finished:
            engine.run()
          engine.view.popLayer(vidPlayer)
          engine.view.pushLayer(MainMenu(engine))
        except KeyboardInterrupt:
          engine.view.popLayer(vidPlayer)
          engine.view.pushLayer(MainMenu(engine))
  if not videoLayer:
    engine.setStartupLayer(MainMenu(engine))

  #stump: make psyco optional
  if Config.get("performance", "use_psyco"):
    try:
      import psyco
      psyco.profile()
    except:
      Log.error("Unable to enable psyco as requested: ")

  # Run the main game loop.
  try:
    engine.ticksAtStart = pygame.time.get_ticks()
    while engine.run():
      pass
  except KeyboardInterrupt:
    Log.notice("Left mainloop due to KeyboardInterrupt.")
    # don't reraise

  # Restart the program if the engine is asking that we do so.
  if engine.restartRequested:
    Log.notice("Restarting.")
    engine.audio.close()
    try:
      # Extra arguments to insert between the executable we call and our
      # command line arguments.
      args = []
      # Figure out what executable to call.
      if hasattr(sys, "frozen"):
        if os.name == "nt":
          # When py2exe'd, sys.executable is the name of the EXE.
          exe = os.path.abspath(unicode(sys.executable, sys.getfilesystemencoding()))
        elif sys.frozen == "macosx_app":
          # When py2app'd, sys.executable is a Python interpreter copied
          # into the same dir where we live.
          exe = os.path.join(os.path.dirname(sys.executable), 'FoFiX')  # FIXME: don't hard-code "FoFiX" here
        else:
          raise RuntimeError, "Don't know how to restart when sys.frozen is %s" % repr(sys.frozen)
      else:
        # When running from source, sys.executable is the Python interpreter
        # being used to run the program.
        exe = sys.executable
        # Pass the optimization level on iif python version >= 2.6.0 as
        # sys.flags has been introduced in 2.6.0.
        if sys.version_info[:3] >= (2,6,0) and sys.flags.optimize > 0:
          args.append('-%s' % ('O' * sys.flags.optimize))
        args.append(sys.argv[0])
      os.execv(exe, [sys.executable] + args + sys.argv[1:])
    except:
      Log.error("Restart failed: ")
      raise

  # evilynux - MainMenu class already calls this - useless?
  engine.quit()
예제 #43
0
  try:
    opts, args = getopt.getopt(sys.argv[1:], "vp:", ["verbose", "play="])
  except getopt.GetoptError:
    print usage
    sys.exit(1)

  songName = None
  for opt, arg in opts:
    if opt in ["--verbose", "-v"]:
      Log.quiet = False
    elif opt in ["--play", "-p"]:
      songName = arg

  while True:
    config = Config.load(Version.appName() + ".ini", setAsDefault = True)
    engine = GameEngine(config)
    menu   = MainMenu(engine, songName = songName)
    engine.setStartupLayer(menu)

    try:
      import psyco
      psyco.profile()
    except:
      Log.warn("Unable to enable psyco.")

    try:
      while engine.run():
        pass
    except KeyboardInterrupt:
        pass
예제 #44
0
class VideoPlayerTest(unittest.TestCase):
  # Simplest way to use the video player, use it as a Layer
  def testVideoPlayerLayer(self):
    config = Config.load(Version.appName() + ".ini", setAsDefault = True)
    self.e = GameEngine(config)
    winWidth, winHeight = (self.e.view.geometry[2], self.e.view.geometry[3])
    vidPlayer = VideoPlayer(framerate, self.src, (winWidth, winHeight),
                            loop = False)
    self.e.view.pushLayer(vidPlayer)
    while not vidPlayer.finished:
      self.e.run()
    self.e.view.popLayer(vidPlayer)
    self.e.audio.close()
    self.e.quit()

  # Keep tight control over the video player
  def testVideoPlayerSlave(self):
    winWidth, winHeight = 800, 600
    pygame.init()
    flags = DOUBLEBUF|OPENGL|HWPALETTE|HWSURFACE
    pygame.display.set_mode((winWidth, winHeight), flags)
    vidPlayer = VideoPlayer(framerate, self.src, (winWidth, winHeight))
    glViewport(0, 0, winWidth, winHeight) # Both required as...
    glScissor(0, 0, winWidth, winHeight)  # ...GameEngine changes it
    glClearColor(0, 0, 0, 1.)
    while not vidPlayer.finished:
      vidPlayer.run()
      vidPlayer.render()
      pygame.display.flip()
    pygame.quit()

  # Grab the texture, use the CallList and do whatever we want with it;
  # We could also _just_ use the texture and take care of the polygons ourselves
  def testVideoPlayerSlaveShowOff(self):
    winWidth, winHeight = 500, 500
    pygame.init()
    flags = DOUBLEBUF|OPENGL|HWPALETTE|HWSURFACE
    pygame.display.set_mode((winWidth, winHeight), flags)
    vidPlayer = VideoPlayer(-1, self.src, (winWidth, winHeight))
    glViewport(0, 0, winWidth, winHeight) # Both required as...
    glScissor(0, 0, winWidth, winHeight)  # ...GameEngine changes it
    glClearColor(0, 0, 0, 1.)
    x, y = 0.0, 1.0
    fx, fy, ftheta = 1, 1, 1
    theta = 0.0
    time = 0.0
    clock = pygame.time.Clock()
    while not vidPlayer.finished:
      vidPlayer.run()
      vidPlayer.textureUpdate()
      # Save and clear both transformation matrices
      glMatrixMode(GL_PROJECTION)
      glPushMatrix()
      glLoadIdentity()
      glMatrixMode(GL_MODELVIEW)
      glPushMatrix()
      glLoadIdentity()

      glClear(GL_COLOR_BUFFER_BIT)
      glColor3f(1., 1., 1.)
      glBindTexture(GL_TEXTURE_2D, vidPlayer.videoTex)
      glTranslatef(x, y, 0)
      glRotatef(theta, 0, 0, 1.)
      glScalef(.5, .5, 1.)
      glCallList(vidPlayer.videoList)

      # Restore both transformation matrices
      glPopMatrix()
      glMatrixMode(GL_PROJECTION)
      glPopMatrix()

      pygame.display.flip()

      x = (x + fx*time)
      y = (y + fy*time)
      theta = theta + ftheta
      if x > 1.0 or x < -1.0:
        fx = fx * -1
      if y > 1.0 or y < -1.0:
        fy = fy * -1
      if theta > 90 or theta < -90:
        ftheta = ftheta * -1
      time = time + 0.00001
      clock.tick(60)
    pygame.quit()

  def setUp(self):
    self.src = os.path.join(Version.dataPath(), vidSource)
    self.assert_(os.path.exists(self.src), "File %s does not exist!" % self.src)
   
  def tearDown(self):
    pass
예제 #45
0
def main():
  """Main thread"""

  try:
    opts, args = getopt.getopt(sys.argv[1:], "vdc:p:D:P:m:N:", ["verbose", "debug", "config=", "play=", "diff=", "part=", "mode=", "nbrplayers="])
  except getopt.GetoptError:
    print usage
    sys.exit(1)
    
  playing = None
  configFile = None
  debug = False
  difficulty = 0
  part = 0
  mode = 0
  nbrplayers = 1
  for opt, arg in opts:
    if opt in ["--verbose", "-v"]:
      Log.quiet = False
    if opt in ["--debug", "-d"]:
      debug = True
    if opt in ["--config", "-c"]:
      configFile = arg
    if opt in ["--play", "-p"]:
      playing = arg
    if opt in ["--diff", "-D"]:
      difficulty = arg      
    if opt in ["--part", "-P"]:
      part = arg
    #evilynux - Multiplayer and mode selection support
    if opt in ["--mode", "-m"]:
      mode = int(arg)
    if opt in ["--nbrplayers", "-N"]:
      nbrplayers = int(arg)
      
  while True:
    if configFile != None:
      if configFile.lower() == "reset":
        fileName = os.path.join(Resource.getWritableResourcePath(), Version.appName() + ".ini")
        os.remove(fileName)
        config = Config.load(Version.appName() + ".ini", setAsDefault = True)
      else:
        config = Config.load(configFile, setAsDefault = True)
    else:
      config = Config.load(Version.appName() + ".ini", setAsDefault = True)
    engine = GameEngine(config)
    engine.cmdPlay = 0
    
    if playing != None:
      Config.set("game", "selected_library", "songs")
      Config.set("game", "selected_song", playing)
      engine.cmdPlay = 1
      engine.cmdDiff = int(difficulty)
      engine.cmdPart = int(part)
      #evilynux - Multiplayer and mode selection support
      Config.set("game", "players", nbrplayers)
      Config.set("player0","mode_1p", mode)
      Config.set("player1","mode_2p", mode)

    if debug == True:
      engine.setDebugModeEnabled(not engine.isDebugModeEnabled())
      engine.debugLayer.debugOut(engine)
      engine.quit()
      break
      
    encoding = Config.get("game", "encoding")
    if encoding != None:
      reload(sys)
      sys.setdefaultencoding(encoding)
    engine.setStartupLayer(MainMenu(engine))

    try:
      import psyco
      psyco.profile()
    except:
      Log.warn("Unable to enable psyco.")

    try:
      while engine.run():
        pass
    except KeyboardInterrupt:
        pass
    if engine.restartRequested:
      Log.notice("Restarting.")
      engine.audio.close()
      try:
        # Determine whether were running from an exe or not
        if hasattr(sys, "frozen"):
          if os.name == "nt":
            os.execl("FretsOnFire.exe", "FretsOnFire.exe", *sys.argv[1:])
          elif sys.frozen == "macosx_app":
            import string
            import subprocess
            appname = string.join(string.split(sys.executable, '/')[:-1], '/')
            appname = appname+"/Frets on Fire"
            subprocess.Popen(`appname`, shell=True)
          else:
            os.execl("./FretsOnFire", "./FretsOnFire", *sys.argv[1:])
        else:
          if os.name == "nt":
            bin = "c:/python24/python"
          else:
            bin = "/usr/bin/python2.4"
          os.execl(bin, bin, "FretsOnFire.py", *sys.argv[1:])
      except:
        Log.warn("Restart failed.")
        raise
      break
    else:
      break
  engine.quit()
예제 #46
0
class AnimationPlayerTest(unittest.TestCase):
    # Simplest way to use the Animation player, use it as a Layer
    def testAnimationPlayerLayer(self):
        loop = 10
        config = Config.load(Version.PROGRAM_UNIXSTYLE_NAME + ".ini",
                             setAsDefault=True)
        self.e = GameEngine(config)
        animPlayer = AnimationPlayer(
            framerate,
            self.path,
            self.basename, (self.e.view.geometry[2], self.e.view.geometry[3]),
            loop=loop)
        print "Rendering as a GameEngine Layer for %d loops." % loop
        self.e.view.pushLayer(animPlayer)
        startTime = pygame.time.get_ticks()
        while not animPlayer.finished:
            self.e.run()
        stopTime = pygame.time.get_ticks()
        totalTime = stopTime - startTime
        print "nbrFrames: %d, nbrLoops: %d, Total time: %.02f s, Average fps: %.02f" % \
              (animPlayer.nbrFrames, loop, totalTime/1000.0, \
               (float(1000.0*animPlayer.nbrFrames*(loop+1)) / float(totalTime)))
        self.e.view.popLayer(animPlayer)
        self.e.quit()

    # Keep tight control over the Animation player
    def testAnimationPlayerSlave(self):
        loop = 5
        winWidth, winHeight = 800, 600
        pygame.init()
        flags = DOUBLEBUF | OPENGL | HWPALETTE | HWSURFACE
        pygame.display.set_mode((winWidth, winHeight), flags)
        animPlayer = AnimationPlayer(framerate,
                                     self.path,
                                     self.basename, (winWidth, winHeight),
                                     loop=loop)
        glViewport(0, 0, winWidth, winHeight)  # Both required as...
        glScissor(0, 0, winWidth, winHeight)  # ...GameEngine changes it
        glClearColor(0, 0, 0, 1.)
        print "Rendering independently and fullscreen for %d loops." % loop
        clock = pygame.time.Clock()
        startTime = pygame.time.get_ticks()
        while not animPlayer.finished:
            ticks = clock.get_time()
            animPlayer.run(ticks)
            animPlayer.render()
            pygame.display.flip()
            clock.tick()
        stopTime = pygame.time.get_ticks()
        totalTime = stopTime - startTime
        print "nbrFrames: %d, nbrLoops: %d, Total time: %.02f s, Average fps: %.02f" % \
              (animPlayer.nbrFrames, loop, totalTime/1000.0,
               1000.0*animPlayer.nbrFrames*(loop+1) / float(totalTime))

        # Testing animation change
        # FIXME: another set of files would be more relevant (e.g. diff. resolution)
        loop = 5
        print "Let's go for another ride of %d loops." % loop
        animPlayer.loop = loop
        animPlayer.loadAnimation(self.path, self.basename)
        startTime = pygame.time.get_ticks()
        while not animPlayer.finished:
            ticks = clock.get_time()
            animPlayer.run(ticks)
            animPlayer.render()
            pygame.display.flip()
            clock.tick()
        stopTime = pygame.time.get_ticks()
        totalTime = stopTime - startTime
        print "nbrFrames: %d, nbrLoops: %d, Total time: %.02f s, Average fps: %.02f" % \
              (animPlayer.nbrFrames, loop, totalTime/1000.0,
               1000.0*animPlayer.nbrFrames*(loop+1) / float(totalTime))
        pygame.quit()

    # Grab the texture, use the CallList and do whatever we want with it;
    # We could also _just_ use the texture and take care of the polygons ourselves
    def testAnimationPlayerSlaveShowOff(self):
        winWidth, winHeight = 500, 500
        loop = 4
        pygame.init()
        flags = DOUBLEBUF | OPENGL | HWPALETTE | HWSURFACE
        pygame.display.set_mode((winWidth, winHeight), flags)
        animPlayer = AnimationPlayer(framerate,
                                     self.path,
                                     self.basename, (winWidth, winHeight),
                                     loop=loop)
        print "Rendering ourselves, doing what we want with the texture, for %d loops." % loop
        glViewport(0, 0, winWidth, winHeight)  # Both required as...
        glScissor(0, 0, winWidth, winHeight)  # ...GameEngine changes it
        glClearColor(0, 0, 0, 1.)
        x, y = 0.0, 1.0
        fx, fy, ftheta = 1, 1, 1
        theta = 0.0
        time = 0.0
        clock = pygame.time.Clock()
        startTime = pygame.time.get_ticks()
        while not animPlayer.finished:
            ticks = clock.get_time()
            animPlayer.run(ticks)
            texture = animPlayer.getTexture()
            # Save and clear both transformation matrices
            glMatrixMode(GL_PROJECTION)
            glPushMatrix()
            glLoadIdentity()
            glMatrixMode(GL_MODELVIEW)
            glPushMatrix()
            glLoadIdentity()

            glClear(GL_COLOR_BUFFER_BIT)
            glColor3f(1., 1., 1.)
            glBindTexture(GL_TEXTURE_2D, texture)
            glTranslatef(x, y, 0)
            glRotatef(theta, 0, 0, 1.)
            glScalef(.5, .5, 1.)
            glCallList(animPlayer.animList)

            # Restore both transformation matrices
            glPopMatrix()
            glMatrixMode(GL_PROJECTION)
            glPopMatrix()

            pygame.display.flip()

            x = (x + fx * time)
            y = (y + fy * time)
            theta = theta + ftheta
            if x > 1.0 or x < -1.0:
                fx = fx * -1
            if y > 1.0 or y < -1.0:
                fy = fy * -1
            if theta > 90 or theta < -90:
                ftheta = ftheta * -1
            time = time + 0.00001
            clock.tick(60)
        stopTime = pygame.time.get_ticks()
        totalTime = stopTime - startTime
        print "nbrFrames: %d, nbrLoops %d, Total time: %.02f s, Average fps: %.02f" % \
              (animPlayer.nbrFrames, loop, totalTime/1000.0, \
               (float(1000.0*animPlayer.nbrFrames*(loop+1)) / float(totalTime)))

        pygame.quit()

    def setUp(self):
        self.path = os.path.join(Version.dataPath(), animPath)
        self.basename = animBasename
        print "Initializing..."

    def tearDown(self):
        pass
예제 #47
0
 def setUp(self):
     config = Config.load(Version.appName() + ".ini", setAsDefault=True)
     self.e = GameEngine(config)
     self.src = os.path.join(Version.dataPath(), vidSource)
예제 #48
0
파일: Game.py 프로젝트: mrketchup/playball
class Game():
    """
    The game to be played. Contains game logic.
    """

    def __init__(self, engine=None, home_team=None, away_team=None):
        self.state = GameState()
        if home_team is None:
            home_team = Team()
        if away_team is None:
            away_team = Team()
        self.state.homeTeam = home_team
        self.state.awayTeam = away_team
        self.event_callbacks = []
        self.game_end_callbacks = []

        if engine is None:
            self.engine = GameEngine()
        else:
            self.engine = engine

    def register_event_callback(self, callback):
        self.event_callbacks.append(callback)

    def fire_event_callbacks(self, pre_state, post_state, event):
        for callback in self.event_callbacks:
            callback(pre_state, post_state, event)

    def register_game_end_callback(self, callback):
        self.game_end_callbacks.append(callback)

    def fire_game_end_callbacks(self, state):
        for callback in self.game_end_callbacks:
            callback(state)

    def play(self):
        for pre_state, post_state, event in self._play_inning():
            self.fire_event_callbacks(pre_state, post_state, event)
        self.fire_game_end_callbacks(self.state)

    def _play_inning(self):
        while not self.state.completed and (self.state.inning <= 9 or self.state.homeRuns == self.state.awayRuns):
            # play top half of inning
            for preState, postState, event in self._play_half_inning():
                yield preState, postState, event

            # play bottom half of inning
            if self.state.inning < 9 or self.state.homeRuns <= self.state.awayRuns:
                for preState, postState, event in self._play_half_inning():
                    yield preState, postState, event
            else:
                self.state.completed = True

    def _play_half_inning(self):
        self.state.outs = 0
        self.state.clear_bases()
        while self.state.outs < 3 and self._continue_playing():
            event = self.engine.next_event(self.state)
            prestate = self.state
            if isinstance(event, GameEvent.Play):
                poststate = self.state.add_event(event)
            elif isinstance(event, GameEvent.Substitution):
                # TODO - move this to a function (add_substitution)
                team = self.state.homeTeam if event.team == 1 else self.state.awayTeam
                if event.offensiveLineupIndex > 0:
                    team.offensiveLineup[event.offensiveLineupIndex - 1] = event.player
                if 0 < event.defensiveLineupIndex <= 9:
                    team.defensiveLineup[event.defensiveLineupIndex - 1] = event.player
                poststate = prestate
            elif isinstance(event, GameEvent.Comment):
                poststate = prestate
            else:
                raise Exception("Unsupported event type")

            yield prestate, poststate, event

            self.state = poststate
        if self.state.inningBottom:
            self.state.inning += 1
        self.state.inningBottom = not self.state.inningBottom

    def _continue_playing(self):
        return not (self.state.inningBottom and
                    self.state.homeRuns > self.state.awayRuns and
                    self.state.inning >= 9)
예제 #49
0
    def testNetworking(self):
        config = Config.load(Version.PROGRAM_UNIXSTYLE_NAME + ".ini", setAsDefault = True)
        e1 = GameEngine(config)

        e1.startServer()
        session1 = e1.connect("localhost")
        session2 = e1.connect("localhost")

        while not session1.isConnected() or not session2.isConnected():
            e1.run()

        session1.world.createPlayer("mario")
        session2.world.createPlayer("luigi")

        for i in range(10):
            e1.run()

        assert len(e1.server.world.players) == 2
        assert len(session1.world.players) == 2
        assert len(session2.world.players) == 2

        session3 = e1.connect("localhost")

        for i in range(10):
            e1.run()

        assert len(session3.world.players) == 2

        session1.disconnect()

        for i in range(10):
            e1.run()

        assert len(e1.server.world.players) == 1
        assert len(session2.world.players) == 1

        e1.quit()
예제 #50
0
 def setUp(self):
     config = Config.load(Version.PROGRAM_UNIXSTYLE_NAME + ".ini", setAsDefault = True)
     self.e = GameEngine(config)
예제 #51
0
파일: FoFiX.py 프로젝트: davwong/fofix
  else:
    config = Config.load(Version.PROGRAM_UNIXSTYLE_NAME + ".ini", setAsDefault = True)

  #Lysdestic - Allow support for manipulating fullscreen via CLI
  if fullscreen is not None:
    Config.set("video", "fullscreen", fullscreen)

  #Lysdestic - Change resolution from CLI
  if resolution is not None:
    Config.set("video", "resolution", resolution)

  #Lysdestic - Alter theme from CLI
  if theme is not None:
    Config.set("coffee", "themename", theme)

  engine = GameEngine(config)
  engine.cmdPlay = 0

  # Check for a valid invocation of one-shot mode.
  if playing is not None:
    Log.debug('Validating song directory for one-shot mode.')
    library = Config.get("setlist","base_library")
    basefolder = os.path.join(Version.dataPath(),library,"songs",playing)
    if not (os.path.exists(os.path.join(basefolder, "song.ini")) and (os.path.exists(os.path.join(basefolder, "notes.mid")) or os.path.exists(os.path.join(basefolder, "notes-unedited.mid"))) and (os.path.exists(os.path.join(basefolder, "song.ogg")) or os.path.exists(os.path.join(basefolder, "guitar.ogg")))):
      Log.warn("Song directory provided ('%s') is not a valid song directory. Starting up FoFiX in standard mode." % playing)
      engine.startupMessages.append(_("Song directory provided ('%s') is not a valid song directory. Starting up FoFiX in standard mode.") % playing)
      playing = None

  # Set up one-shot mode if the invocation is valid for it.
  if playing is not None:
    Log.debug('Entering one-shot mode.')
예제 #52
0
파일: FoFiX.py 프로젝트: Gamer125/fofix
def main():
  """Main thread"""

  try:
    opts, args = getopt.getopt(sys.argv[1:], "vdc:f:r:t:s:l:p:m:n:", ["verbose", "debug", "config=", "fullscreen=", "resolution=", "theme=", "song=", "diff=", "part=", "mode=", "nbrplayers="])
  except getopt.GetoptError:
    print usage
    sys.exit(1)
    
  playing = None
  configFile = None
  fullscreen = None
  resolution = None
  theme = None
  debug = False
  difficulty = None
  part = None
  mode = 0
  nbrplayers = 1
  for opt, arg in opts:
    if opt in ["--verbose", "-v"]:
      Log.quiet = False
    if opt in ["--debug", "-d"]:
      debug = True
    if opt in ["--config", "-c"]:
      configFile = arg
    if opt in ["--fullscreen", "-f"]:
      fullscreen = arg
    if opt in ["--resolution", "-r"]:
      resolution = arg
    if opt in ["--theme", "-t"]:
      theme = arg
    if opt in ["--song", "-s"]:
      playing = arg
    if opt in ["--diff", "-l"]:
      difficulty = arg      
    if opt in ["--part", "-p"]:
      part = arg
    #evilynux - Multiplayer and mode selection support
    if opt in ["--mode", "-m"]:
      mode = int(arg)
    if opt in ["--nbrplayers", "-n"]:
      nbrplayers = int(arg)
      
  while 1:
    if configFile != None:
      if configFile.lower() == "reset":
        fileName = os.path.join(Resource.getWritableResourcePath(), Version.appName() + ".ini")
        os.remove(fileName)
        config = Config.load(Version.appName() + ".ini", setAsDefault = True)
      else:
        config = Config.load(configFile, setAsDefault = True)
    else:
      config = Config.load(Version.appName() + ".ini", setAsDefault = True)

    #Lysdestic - Allow support for manipulating fullscreen via CLI
    if fullscreen != None:
      Config.set("video", "fullscreen", fullscreen)

    #Lysdestic - Change resolution from CLI
    if resolution != None:
      Config.set("video", "resolution", resolution)

    #Lysdestic - Alter theme from CLI
    if theme != None:
      Config.set("coffee", "themename", theme)
    
    if playing != None:
      library = Config.get("game","base_library")
      basefolder = os.path.join(Version.dataPath(),library,"songs",playing)
      if not (os.path.exists(os.path.join(basefolder, "song.ini")) and (os.path.exists(os.path.join(basefolder, "notes.mid")) or os.path.exists(os.path.join(basefolder, "notes-unedited.mid"))) and (os.path.exists(os.path.join(basefolder, "song.ogg")) or os.path.exists(os.path.join(basefolder, "guitar.ogg")))):
        Log.warn("Song directory provided ('%s') is not a valid song directory. Starting up FoFiX in standard mode." % playing)
        playing = None

    engine = GameEngine(config)
    engine.cmdPlay = 0
    
    if playing != None:
      Config.set("game", "selected_library", "songs")
      Config.set("game", "selected_song", playing)
      engine.cmdPlay = 1
      if difficulty is not None:
        engine.cmdDiff = int(difficulty)
      if part is not None:
        engine.cmdPart = int(part)
      #evilynux - Multiplayer and mode selection support
      Config.set("game", "players", nbrplayers)
      if nbrplayers == 1:
        Config.set("game", "game_mode", mode)
      else:
        Config.set("game", "game_mode", 0)
        Config.set("game", "multiplayer_mode", mode)

    if debug == True:
      engine.setDebugModeEnabled(not engine.isDebugModeEnabled())
      engine.debugLayer.debugOut(engine)
      engine.quit()
      break
      
    encoding = Config.get("game", "encoding")
    if encoding != None:
      reload(sys)
      sys.setdefaultencoding(encoding)
    engine.setStartupLayer(MainMenu(engine))

    #stump: make psyco optional
    if Config.get("performance", "use_psyco"):
      try:
        import psyco
        psyco.profile()
      except:
        Log.warn("Unable to enable psyco.")

    try:
      engine.ticksAtStart = pygame.time.get_ticks()
      while engine.run():
        pass
    except KeyboardInterrupt:
        pass
    if engine.restartRequested:
      Log.notice("Restarting.")
      engine.audio.close()
      try:
        # Determine whether were running from an exe or not
        if hasattr(sys, "frozen"):
          if os.name == "nt":
            os.execl("FoFiX.exe", "FoFiX.exe", *sys.argv[1:])
          elif sys.frozen == "macosx_app":
            import string
            import subprocess
            appname = string.join(string.split(sys.executable, '/')[:-1], '/')
            appname = appname+"/FoFiX"
            subprocess.Popen(`appname`, shell=True)
          else:
            os.execl("./FoFiX", "./FoFiX", *sys.argv[1:])
        else:
          # stump: sys.executable points to the active python interpreter
          os.execl(sys.executable, sys.executable, "FoFiX.py", *sys.argv[1:])
      except:
        Log.warn("Restart failed.")
        raise
      break
    else:
      break
  # evilynux - MainMenu class already calls this - useless?
  engine.quit()
예제 #53
0
class VideoPlayerTest(unittest.TestCase):
    # Simplest way to use the video player, use it as a Layer
    def testVideoPlayerLayer(self):
        vidPlayer = VideoPlayer(self.e, framerate, self.src, loop=False)
        self.e.view.pushLayer(vidPlayer)
        while not vidPlayer.finished:
            self.e.run()

    # Keep tight control over the video player
    def testVideoPlayerSlave(self):
        winWidth, winHeight = 800, 600
        pygame.init()
        flags = DOUBLEBUF | OPENGL | HWPALETTE | HWSURFACE
        pygame.display.set_mode((winWidth, winHeight), flags)
        vidPlayer = VideoPlayer(self.e, framerate, self.src,
                                (winWidth, winHeight))
        glViewport(0, 0, winWidth,
                   winHeight)  # Required as GameEngine changes it
        font = self.e.data.font
        while not vidPlayer.finished:
            vidPlayer.run()
            vidPlayer.render()
            pygame.display.flip()

    # Grab the texture, use the CallList and do whatever we want with it;
    # We could also _just_ use the texture and take care of the polygons ourselves
    def testVideoPlayerSlaveShowOff(self):
        winWidth, winHeight = 500, 500
        pygame.init()
        flags = DOUBLEBUF | OPENGL | HWPALETTE | HWSURFACE
        pygame.display.set_mode((winWidth, winHeight), flags)
        vidPlayer = VideoPlayer(self.e, -1, self.src, (winWidth, winHeight))
        glViewport(0, 0, winWidth,
                   winHeight)  # Required as GameEngine changes it
        glClearColor(0, 0, 0, 1.)
        x, y = 0.0, 1.0
        fx, fy, ftheta = 1, 1, 1
        theta = 0.0
        time = 0.0
        clock = pygame.time.Clock()
        while not vidPlayer.finished:
            vidPlayer.run()
            vidPlayer.textureUpdate()
            # Save and clear both transformation matrices
            glMatrixMode(GL_PROJECTION)
            glPushMatrix()
            glLoadIdentity()
            glMatrixMode(GL_MODELVIEW)
            glPushMatrix()
            glLoadIdentity()

            glClear(GL_COLOR_BUFFER_BIT)
            glColor3f(1., 1., 1.)
            glBindTexture(GL_TEXTURE_2D, vidPlayer.videoTex)
            glTranslatef(x, y, 0)
            glRotatef(theta, 0, 0, 1.)
            glScalef(.5, .5, 1.)
            glCallList(vidPlayer.videoList)

            # Restore both transformation matrices
            glPopMatrix()
            glMatrixMode(GL_PROJECTION)
            glPopMatrix()

            pygame.display.flip()

            x = (x + fx * time)
            y = (y + fy * time)
            theta = theta + ftheta
            if x > 1.0 or x < -1.0:
                fx = fx * -1
            if y > 1.0 or y < -1.0:
                fy = fy * -1
            if theta > 90 or theta < -90:
                ftheta = ftheta * -1
            time = time + 0.00001
            clock.tick(60)

    def setUp(self):
        config = Config.load(Version.appName() + ".ini", setAsDefault=True)
        self.e = GameEngine(config)
        self.src = os.path.join(Version.dataPath(), vidSource)

    def tearDown(self):
        self.e.quit()
예제 #54
0
 def setUp(self):
     self.e = GameEngine()
예제 #55
0
        if opt in ["--mode", "-m"]:
            mode = int(arg)
        if opt in ["--nbrplayers", "-N"]:
            nbrplayers = int(arg)

    while True:
        if configFile != None:
            if configFile.lower() == "reset":
                fileName = os.path.join(Resource.getWritableResourcePath(), Version.appName() + ".ini")
                os.remove(fileName)
                config = Config.load(Version.appName() + ".ini", setAsDefault=True)
            else:
                config = Config.load(configFile, setAsDefault=True)
        else:
            config = Config.load(Version.appName() + ".ini", setAsDefault=True)
        engine = GameEngine(config)
        engine.cmdPlay = 0

        if playing != None:
            Config.set("game", "selected_library", "songs")
            Config.set("game", "selected_song", playing)
            engine.cmdPlay = 1
            engine.cmdDiff = int(difficulty)
            engine.cmdPart = int(part)
            # evilynux - Multiplayer and mode selection support
            Config.set("game", "players", nbrplayers)
            Config.set("player0", "mode_1p", mode)
            Config.set("player1", "mode_2p", mode)

        if debug == True:
            engine.setDebugModeEnabled(not engine.isDebugModeEnabled())
예제 #56
0
파일: Main.py 프로젝트: callumlawson/PiCore
'''
Created on 9 Sep 2012

@author: Callum
'''

from GameEngine import GameEngine
import pygame
from pygame.locals import *

if __name__ == '__main__':
    
    ### Start!
    pygameDisplay=pygame.display.set_mode((800,800),RESIZABLE)
    pygame.display.set_caption("PiCore")
    engine = GameEngine(pygameDisplay) #Create engine
    engine.run() #Get going....
    
    pass
예제 #57
0
 def __init__(self, game, bots):
     self.game = game
     self.bots = bots
     self.engine = GameEngine()
예제 #58
0
 def setUp(self):
   config = Config.load(Version.appName() + ".ini", setAsDefault = True)
   self.e = GameEngine(config)