Преглед изворни кода

Added turn time to get state response

Alexey Dorokhov пре 3 година
родитељ
комит
084a0dfd6c
4 измењених фајлова са 23 додато и 8 уклоњено
  1. 1 0
      bot_example.py
  2. 5 2
      competitive_tetris.py
  3. 1 0
      wire_protocol.fbs
  4. 16 6
      wire_protocol/GameState.py

+ 1 - 0
bot_example.py

@@ -133,6 +133,7 @@ def main():
                 score = rsp.GameState().Score())
         state.next_piece_func = dummy_next_piece_func
 
+        millis_before_down = rsp.GameState().MillisBeforeDown()
 
         next_moves = create_shifts_and_rotates(state)
         if len(next_moves) > 0:

+ 5 - 2
competitive_tetris.py

@@ -4,6 +4,7 @@
 Competitive tetris server
 """
 import random
+import math
 import pygame
 import zmq
 import flatbuffers
@@ -196,7 +197,7 @@ def handle_other(state):
     return state, builder
 
 
-def handle_get_game_state(state):
+def handle_get_game_state(state, millis_before_down):
     error_code = wire_protocol.CommandResponseError.CommandResponseError.OK
     builder = flatbuffers.Builder()
 
@@ -214,6 +215,7 @@ def handle_get_game_state(state):
     wire_protocol.GameState.AddPieceRow(builder, state.data.row)
     wire_protocol.GameState.AddPieceCol(builder, state.data.col)
     wire_protocol.GameState.AddScore(builder, state.data.score)
+    wire_protocol.GameState.AddMillisBeforeDown(builder, millis_before_down)
     wire_protocol.GameState.AddGrid(builder, grid_vector)
     game_state_msg = wire_protocol.GameState.End(builder)
 
@@ -267,7 +269,8 @@ def main(win):
             elif req.Command() == wire_protocol.Command.Command.Land:
                 state, builder = handle_land(state)
             elif req.Command() == wire_protocol.Command.Command.GetGameState:
-                state, builder = handle_get_game_state(state)
+                state, builder = handle_get_game_state(
+                        state, int(math.floor(max(0, 500 - frame_time))))
             else:
                 state, builder = handle_other(state)
 

+ 1 - 0
wire_protocol.fbs

@@ -34,6 +34,7 @@ table GameState {
   piece_row:short;
   piece_col:short;
   score:short;
+  millis_before_down:short;
   grid:[ubyte];
 }
 

+ 16 - 6
wire_protocol/GameState.py

@@ -81,8 +81,15 @@ class GameState(object):
         return 0
 
     # GameState
-    def Grid(self, j):
+    def MillisBeforeDown(self):
         o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(20))
+        if o != 0:
+            return self._tab.Get(flatbuffers.number_types.Int16Flags, o + self._tab.Pos)
+        return 0
+
+    # GameState
+    def Grid(self, j):
+        o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(22))
         if o != 0:
             a = self._tab.Vector(o)
             return self._tab.Get(flatbuffers.number_types.Uint8Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 1))
@@ -90,24 +97,24 @@ class GameState(object):
 
     # GameState
     def GridAsNumpy(self):
-        o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(20))
+        o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(22))
         if o != 0:
             return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Uint8Flags, o)
         return 0
 
     # GameState
     def GridLength(self):
-        o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(20))
+        o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(22))
         if o != 0:
             return self._tab.VectorLen(o)
         return 0
 
     # GameState
     def GridIsNone(self):
-        o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(20))
+        o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(22))
         return o == 0
 
-def GameStateStart(builder): builder.StartObject(9)
+def GameStateStart(builder): builder.StartObject(10)
 def Start(builder):
     return GameStateStart(builder)
 def GameStateAddRows(builder, rows): builder.PrependInt16Slot(0, rows, 0)
@@ -134,7 +141,10 @@ def AddPieceCol(builder, pieceCol):
 def GameStateAddScore(builder, score): builder.PrependInt16Slot(7, score, 0)
 def AddScore(builder, score):
     return GameStateAddScore(builder, score)
-def GameStateAddGrid(builder, grid): builder.PrependUOffsetTRelativeSlot(8, flatbuffers.number_types.UOffsetTFlags.py_type(grid), 0)
+def GameStateAddMillisBeforeDown(builder, millisBeforeDown): builder.PrependInt16Slot(8, millisBeforeDown, 0)
+def AddMillisBeforeDown(builder, millisBeforeDown):
+    return GameStateAddMillisBeforeDown(builder, millisBeforeDown)
+def GameStateAddGrid(builder, grid): builder.PrependUOffsetTRelativeSlot(9, flatbuffers.number_types.UOffsetTFlags.py_type(grid), 0)
 def AddGrid(builder, grid):
     return GameStateAddGrid(builder, grid)
 def GameStateStartGridVector(builder, numElems): return builder.StartVector(1, numElems, 1)