/// <summary> /// ゲーム開始 /// </summary> /// <param name="request"></param> /// <returns></returns> public async Task GameStartAsync(GameStartRequest request) { IsStarted = true; if (WithOther) { // 2P logger.LogInformation($"GameStart at {MineId}"); var param = new Dictionary <string, IReadOnlyList <short> >(); // 2P / 互いの情報取得 var mineLoop = ServerMainGameLoop.TryTakeGame(MineId); var enemLoop = ServerMainGameLoop.TryTakeGame(EnemyId); param[MineId] = mineLoop.PlayingState.Board; param[EnemyId] = enemLoop.PlayingState.Board; BroadcastToSelf(gameRoom).OnGameStart(new GameStartResponse { RoomName = request.RoomName, PlayerBoards = param }); } else { // 1人の場合は速攻で始める logger.LogInformation($"GameStart at {MineId}"); var loop = ServerMainGameLoop.TryTakeGame(MineId); var param = new Dictionary <string, IReadOnlyList <short> >(); param[MineId] = loop.PlayingState.Board; BroadcastToSelf(gameRoom).OnGameStart(new GameStartResponse { RoomName = request.RoomName, PlayerBoards = param }); } await Task.Yield(); }
/// <summary> /// コンストラクタ /// </summary> /// <param name="playing"></param> public NetworkPlayStartState(NetworkPlayingState playing, IMainGameHub impl, GameStartRequest reqeust) { // Exitで渡すため this.playing = playing; toServerImpl = impl; startRequest = reqeust; }
//Odeslání umístění mých lodí serveru, připraven ke hře private void btnSubmitGrid_Click(object sender, EventArgs e) { GameStartRequest gsr = new GameStartRequest(_occupiedPositions, EnemyIp, EnemyPort); NetworkComms.SendObject("GameStartRequest", ServerIp, ServerPort, gsr); btnSubmitGrid.Enabled = false; AcceptButton = btnFire; }
public async Task <ActionResult <GameStartResponse> > Start([FromBody] GameStartRequest model) { switch (model.Type) { case GameType.Dice: if (model.Bet == null || model.Bet.Length < 1 || model.Bet.Length > 5 || model.Bet.Any(x => x < 1 || x > 6)) { return(BadRequest(ErrorResult.Create("Invalid Bet"))); } break; case GameType.TossCoin: if (model.Bet == null || model.Bet.Length != 1 || model.Bet.Single() < 0 || model.Bet.Single() > 1) { return(BadRequest(ErrorResult.Create("Invalid Bet"))); } break; default: throw new NotImplementedException(); } var commit = await randomContributorService.Commit(DateTime.UtcNow.Ticks.ToString()); var list = new List <SignedItem> { new SignedItem() { Type = UserType.Contributor, PubKey = model.PubKey, Nonce = model.Nonce.ToString(), Sign = model.Sign }, commit.ToSignedItem() }; var tx = await protocol.CreateTransaction(list, ChaosProtocolSettings.ByGameType(model.Type)); var rs = new GameStartResponse() { GameId = Guid.NewGuid().ToString("n"), ValidationTx = tx.Id, GameType = model.Type, Bet = model.Bet, BetAmount = model.BetAmount, Items = tx.Items, IpfsHash = tx.Anchor?.Data }; var game = cache.Set(rs.GameId, rs); return(rs); }
//Začátek hry private static void GameStartRequest(PacketHeader packetheader, Connection connection, GameStartRequest gsr) { IPEndPoint clientEndPoint = (IPEndPoint)connection.ConnectionInfo.RemoteEndPoint; Client client = Clients.Find(x => x.Ip == clientEndPoint.Address.ToString() && x.Port == clientEndPoint.Port); Client enemyClient = Clients.Find(x => x.Ip == gsr.EnemyIp && x.Port == gsr.EnemyPort); Game game = Games.Find(x => x.HasClient(enemyClient)); //Hra již existuje, vytvořil ji druhý hráč if (game != null && client != game.Client1) { game.Client2 = client; game.Client2ShipPositions = gsr.ShipsPositions; game.StartGame(_gamesCountId); _gamesCountId++; } //Hra neexistuje, prvotní vytvoření else { Game g = new Game { Client1 = client, Client1ShipPositions = gsr.ShipsPositions }; Games.Add(g); Console.WriteLine($"(Hra #{g.Id}) mezi {client.Name} a {enemyClient.Name} začala!"); } Console.WriteLine($"({client.Name}) je připraven ke hře s uživatelem {enemyClient.Name}"); }