コード例 #1
0
ファイル: Frontend.py プロジェクト: pipsqueaker/2048
class Frontend(pyglet.window.Window):

    def __init__(self, GameX, GameY, Wx=512, Wy=512):
        super().__init__(width=Wx, height=Wy, visible=True)
        self.GameX = GameX
        self.GameY = GameY
        self.Wx = Wx
        self.Wy = Wy

        #pyglet.clock.schedule_interval(self.update, 1/60.0)

        self.font = pyglet.font.load("Helvetica", Wx/16)

        self.GameInstance = Board(GameX, GameY)
        self.GameInstance.BoardArray = self.GameInstance.SpawnATile(self.GameInstance.BoardArray)

        #pyglet.clock.schedule_interval(self.GameInstance.PrintBoard(self.GameInstance.BoardArray), 5)
        #THE ABOVE LINE CAUSES CREASHES- WHY?

    def update(self, dt):
        self.on_draw()
        if self.GameInstance.GameOver(self.GameInstance.BoardArray):
            self.close()

    def TextMode(self):
        while not self.GameInstance.GameOver(self.GameInstance.BoardArray):
            self.GameInstance.BoardArray = self.GameInstance.SpawnATile(self.GameInstance.BoardArray)
            self.GameInstance.PrintBoard(self.GameInstance.BoardArray)

            n = input("Move?")
            while n not in ["up", "down", "left", "right"] or self.GameInstance.BoardArray \
                    == self.GameInstance.Move(n, self.GameInstance.BoardArray):
                n = input("Invalid move, pick again")

            self.GameInstance.Move(n, self.GameInstance.BoardArray)

        print("Game Over!")

    def on_draw(self):
        self.clear()
        for x in range(self.GameX)[::1]:
            for y in range(self.GameY):
                self.draw_tile(y, x, self.GameInstance.BoardArray[x][y])

    def draw_square(self, x, y, Xsize=128, Ysize=128, c=[255,255,255]):
        glBegin(GL_POLYGON)
        glColor3f(c[0], c[1], c[2])
        glVertex2f(x,y)
        glVertex2f(x+Xsize,y)
        glVertex2f(x+Xsize,y+Ysize)
        glVertex2f(x, y+Ysize)
        glEnd()

    def draw_tile(self, x, y, size):
        dx = self.Wx/self.GameX
        dy = self.Wy/self.GameY
        self.draw_square(x*dx, self.Wy - self.Wy/self.GameY - y*dy, dx, dy)
        self.draw_square(x*dx+6, self.Wy - self.Wy/self.GameY - y*dy + 6, dx-12, dy-12, [0,0,0])

        text = pyglet.font.Text(
            self.font,
            size.__str__(),
            x=x*dx + dx/2,
            y= self.Wy -(y*dy + dy/2),
            halign=pyglet.font.Text.CENTER,
            valign=pyglet.font.Text.CENTER,
            color=(1, 1, 1, 0.5),
        )
        text.draw()

    def on_key_press(self, symbol, modifiers):
        super().on_key_press(symbol, modifiers)

        if symbol == key.A or symbol == key.LEFT:
            if self.GameInstance.Move("left", self.GameInstance.BoardArray) \
                    != self.GameInstance.BoardArray:
                self.GameInstance.BoardArray = self.GameInstance.iterate("left", self.GameInstance.BoardArray)
        if symbol == key.D or symbol == key.RIGHT:
            if self.GameInstance.Move("right", self.GameInstance.BoardArray) \
                    != self.GameInstance.BoardArray:
                self.GameInstance.BoardArray = self.GameInstance.iterate("right", self.GameInstance.BoardArray)
        if symbol == key.W or symbol == key.UP:
            if self.GameInstance.Move("up", self.GameInstance.BoardArray) \
                    != self.GameInstance.BoardArray:
                self.GameInstance.BoardArray = self.GameInstance.iterate("up", self.GameInstance.BoardArray)
        if symbol == key.D or symbol == key.DOWN:
            if self.GameInstance.Move("down", self.GameInstance.BoardArray) \
                    != self.GameInstance.BoardArray:
                self.GameInstance.BoardArray = self.GameInstance.iterate("down", self.GameInstance.BoardArray)