bot_example.py 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. #!/usr/bin/python3
  2. """
  3. Competitive tetris bot example
  4. """
  5. import time
  6. import random
  7. import zmq
  8. import flatbuffers
  9. import numpy as np
  10. import wire_protocol.Command
  11. import wire_protocol.CommandRequest
  12. import wire_protocol.CommandResponse
  13. import wire_protocol.CommandResponseError
  14. def main():
  15. context = zmq.Context()
  16. socket = context.socket(zmq.REQ)
  17. res = socket.connect("tcp://localhost:5555")
  18. print(f"connected: {res}")
  19. while True:
  20. builder = flatbuffers.Builder()
  21. wire_protocol.CommandRequest.Start(builder)
  22. wire_protocol.CommandRequest.AddCommand(
  23. builder,
  24. random.choice([
  25. wire_protocol.Command.Command.ShiftLeft,
  26. wire_protocol.Command.Command.ShiftRight,
  27. wire_protocol.Command.Command.Rotate,
  28. #wire_protocol.Command.Command.Land,
  29. ]))
  30. req = wire_protocol.CommandRequest.End(builder)
  31. builder.Finish(req)
  32. socket.send(builder.Output())
  33. rsp_buf = socket.recv()
  34. rsp = wire_protocol.CommandResponse.CommandResponse.GetRootAs(rsp_buf)
  35. builder = flatbuffers.Builder()
  36. wire_protocol.CommandRequest.Start(builder)
  37. wire_protocol.CommandRequest.AddCommand(
  38. builder,
  39. wire_protocol.Command.Command.GetGameState)
  40. req = wire_protocol.CommandRequest.End(builder)
  41. builder.Finish(req)
  42. socket.send(builder.Output())
  43. rsp_buf = socket.recv()
  44. rsp = wire_protocol.CommandResponse.CommandResponse.GetRootAs(rsp_buf)
  45. cells = rsp.Playfield().CellsAsNumpy()
  46. cells = cells.reshape((rsp.Playfield().Rows(), rsp.Playfield().Cols()))
  47. print(f"cells = \n{cells}\n")
  48. time.sleep(0.24)
  49. if __name__ == "__main__":
  50. main()