当前位置: 首页>>代码示例>>Python>>正文


Python GameState.start方法代码示例

本文整理汇总了Python中GameState.GameState.start方法的典型用法代码示例。如果您正苦于以下问题:Python GameState.start方法的具体用法?Python GameState.start怎么用?Python GameState.start使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在GameState.GameState的用法示例。


在下文中一共展示了GameState.start方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。

示例1: Server

# 需要导入模块: from GameState import GameState [as 别名]
# 或者: from GameState.GameState import start [as 别名]
class Server(object):
  """
  Klasa serwera zajmuje się zarządzaniem połączeniami.
  """
  def __init__(self):
    """
    Konstruktor klasy.

    Ładuje on konfigurację, ustawia socket nasłuchujący na połączenia oraz
    definiuje struktury wymagane do działania serwera.
    """
    Logger.log('Witam!')

    self._cfg = JSONConfig(open('config.json', 'r'))
    self._gamestate = GameState(self._cfg)
    
    # Inicjalizujemy kolejkę epoll.
    self._poller = select.epoll(3)
    self._init_listen_socket()

    # Odpowiednie hashmapy do odpytywania socketów i pakietów do wysłania.
    self._client_sockets = {}
    self._packet_queues = {}
    self._player_bindings = {}

    # Tworzymy obiekt protokołu:
    self._proto = Protocol(self._gamestate, self._client_sockets,
      self._packet_queues)
    

  def _init_listen_socket(self):
    """
    Inicjalizuje gniazdko nasłuchujące na połączenia.

    Do ustalenia hosta i portu stosujemy wartości z pliku konfiguracyjnego.
    """
    host, port = self._cfg['connection.host'], self._cfg['connection.port']

    self._sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    self._sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    self._sock.bind((host, port))
    self._sock.listen(2)

    Logger.log("Rejestrujemy SID serwera #%d do epoll..." % self._sock.fileno())
    self._poller.register(self._sock.fileno(), select.EPOLLIN | 
      select.EPOLLERR | select.EPOLLRDHUP | select.EPOLLHUP | select.EPOLLPRI)


  def _register_in_poll(self, sock):
    """
    Rejestruje gniazdko sieciowe klienta do kolejki EPOLL.

    Dodatkowo, tworzymy odpowiednie dowiązania do kolejek pakietów i hashmapy
    socketów, z kluczem ustawionym na deskryptor gniazda.
    """
    Logger.log("Rejestrujemy SID klienta #%d do epoll..." % sock.fileno())
    self._poller.register(sock.fileno(), select.EPOLLIN | select.EPOLLHUP |
        select.EPOLLERR | select.EPOLLRDHUP | select.EPOLLPRI | select.EPOLLOUT)
    self._client_sockets[sock.fileno()] = sock
    self._packet_queues[sock.fileno()] = deque()


  def _add_player(self): 
    """
    Dodaje połączenie gracza do serwera.

    Wchodzi w to sprawdzanie, czy może się połączyć (serwer nie jest pełen),
    oraz odpowiednie zapisanie i rejestrację danych po stronie serwera.
    """
    client_sock, _ = self._sock.accept()
    if len(self._client_sockets) == 2:
      client_sock.close()
      return
  
    client_sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
    self._register_in_poll(client_sock)
    pl = 0
    for key in self._player_bindings:
      if self._player_bindings[key] == 0:
        pl = 1
        break
    self._player_bindings[client_sock.fileno()] = pl
    self._proto.push_player(client_sock.fileno(), pl+1)

    if len(self._client_sockets) == 2:
      Logger.log('Mamy dwóch graczy, startujemy grę!')
      self._gamestate.start()
      self._proto.push_start()


  def loop(self):
    """
    Główna pętla serwera.

    Służy głównie do czytania zdarzeń z epolla i sprawdzaniu, czy gra nie
    została ukończona.
    """
    while True:
      if self._gamestate.completed():
        Logger.log('Gra skończona! Reset...')
#.........这里部分代码省略.........
开发者ID:Killavus,项目名称:CLI-BattleShips,代码行数:103,代码来源:Server.py


注:本文中的GameState.GameState.start方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。