Пример #1
0
        /// <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();
        }
Пример #2
0
        /// <summary>
        /// コンストラクタ
        /// </summary>
        /// <param name="playing"></param>
        public NetworkPlayStartState(NetworkPlayingState playing, IMainGameHub impl, GameStartRequest reqeust)
        {   // Exitで渡すため
            this.playing = playing;

            toServerImpl = impl;
            startRequest = reqeust;
        }
Пример #3
0
        //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;
        }
Пример #4
0
        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);
        }
Пример #5
0
        //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}");
        }