/// <summary>
        /// функционал карты Neutralize
        /// </summary>
        public static MainGameModel NeutralizeShag(int userId, int sessionId)
        {
            try {
                var session = CardManager.Sessions.FirstOrDefault(w => w.SessionId == sessionId);
                if (session == null)
                {
                    return(null);
                }
                var mainPack = session.MainPackModel;
                var boomb    = mainPack.Users
                               .First(w => w.UserId == userId)
                               .Cards.FirstOrDefault(a => a.Type == TypeCardEnum.Boomb);


                if (boomb != null)
                {
                    mainPack.Users
                    .First(w => w.UserId == userId)
                    .Cards
                    .Remove(boomb);
                }
                session.SelectedCardsIdsList.Clear();
                session.MainPackModel = mainPack;
                CardManager.UpdateSession(session);
                var result = new MainGameModel(session);
                return(result);
            } catch (Exception ex) {
                return(null);
            }
        }
Пример #2
0
        public void CreateGame(List <string> players, string gameId, string pass)
        {
            if (GetAllGameIds().Contains(gameId))
            {
                throw new Exception();
            }
            Log.Debug("Create game" + gameId);
            repository.AddGuid(gameId, Guid.NewGuid());
            SetTimeForGame(gameId, _clock.Now);
            repository.SetPassword(gameId, pass);
            var game = new MainGameModel();

            SetPlayersForGameId(players, gameId);
            game.Users = _userService.GetPLayersByGameId(gameId);
            var t = Enumerable.Range(0, 25).Select(p => new Cell()
            {
                Id = p
            }).ToList();
            var word = _wordService.GetRandomWord(5);

            t[10].Letter = word[0].ToString();
            t[11].Letter = word[1].ToString();
            t[12].Letter = word[2].ToString();
            t[13].Letter = word[3].ToString();
            t[14].Letter = word[4].ToString();
            game.Cells   = t;
            _userService.SetCurrentUser(players[0], gameId);
            SetMainModel(game, gameId);
        }
Пример #3
0
        public void Setup()
        {
            var kernel = new StandardKernel(new TestDIModule());

            mockClock = new Mock <IClock>();
            kernel.Rebind <IClock>().ToConstant(mockClock.Object);
            gameBoard = kernel.Get <GameBoard>();
            gameBoard.ClearState();

            var t = Enumerable.Range(0, 25).Select(p => new Cell()
            {
                Id = p
            }).ToList();

            t[0].Letter = "T";
            t[1].Letter = "O";
            t[2].Letter = "D";
            t[3].Letter = "A";
            t[4].Letter = "Y";
            model       = new MainGameModel()
            {
                Cells = t
            };
            gameBoard.SetMainModel(model, testGameName);
        }
Пример #4
0
        /// <summary>
        /// отменить шаг
        /// </summary>
        public static MainGameModel InternalCanselShag(string data)
        {
            try {
                if (string.IsNullOrEmpty(data))
                {
                    return(null);
                }
                var mdl     = JsonConvert.DeserializeObject <ApiCanselShagModel>(data);
                var session = Sessions.FirstOrDefault(a => a.SessionId == mdl.SessionId);
                if (session == null)
                {
                    return(null);
                }

                mdl.CardIds.ToList().ForEach(id => {
                    session
                    .SelectedCardsIdsList
                    .Remove(id);
                });
                UpdateSession(session);
                var result = new MainGameModel(session);
                return(result);
            } catch (Exception ex) {
                return(null);
            }
        }
Пример #5
0
        /// <summary>
        /// генерация колоды
        /// </summary>
        public static ResultModel InternalGeneratePack(int userCount)
        {
            try {
                var sessionId = CardManager.CreateMainPack();
                var users     = new List <MainUserModel>();

                var session = CardManager
                              .Sessions
                              .FirstOrDefault(a => a.SessionId == sessionId);
                if (session == null)
                {
                    return(new ResultModel(false, "sessionId is wrong"));
                }

                for (var j = 1; j <= userCount; j++)
                {
                    users.Add(CreateUserPack(j, sessionId));
                }

                session.MainPackModel.Users = users;
                session.MainPackModel.Users.First().IsActivated = true;
                session.MainPackModel.Users.First().IsConnected = true;
                session.ExpectedUserCount = users.Count;
                session.MainPackModel.Cards
                    = CardManager.MixCards(session.MainPackModel.Cards.ToList()).ToArray();

                CardManager.UpdateSession(session);
                var result = new MainGameModel(session);
                return(new ResultModel(true, result));
            } catch (Exception ex) {
                return(new ResultModel(false));
            }
        }
Пример #6
0
 public void SetMainModel(MainGameModel mainGameModel, string id)
 {
     if (items["AllGameBoards"] == null)
     {
         items["AllGameBoards"] = new List <string>();
     }
     (items["AllGameBoards"] as List <string>).Add(id);
     items["GameBoard" + id] = mainGameModel;
 }
        /// <summary>
        /// функционал карты mix
        /// </summary>
        public static MainGameModel MixShag(int userId, int sessionId)
        {
            var session = CardManager.Sessions.FirstOrDefault(w => w.SessionId == sessionId);

            if (session == null)
            {
                return(null);
            }
            var mainPack = session.MainPackModel;

            mainPack.Cards = CardManager.MixCards(
                mainPack.Cards
                .ToList()).ToArray();
            session.SelectedCardsIdsList.Clear();
            session.MainPackModel = mainPack;
            CardManager.UpdateSession(session);
            var result = new MainGameModel(session);

            return(result);
        }
Пример #8
0
        /// <summary>
        /// передаем ход другому пользователю
        /// </summary>
        public static MainGameModel InternalChangeActiveUser(int sessionId)
        {
            try {
                var session = CardManager.Sessions.FirstOrDefault(a => a.SessionId == sessionId);

                if (session == null)
                {
                    return(null);
                }
                var mainPack = session.MainPackModel;

                var oldActiveUserId = mainPack.Users.First(a => a.IsActivated).UserId;
                var minUserId       = mainPack.Users.Select(a => a.UserId).Min();
                var maxUserId       = mainPack.Users.Select(a => a.UserId).Max();

                mainPack.Users.First(a => a.IsActivated).IsActivated = false;

                if (maxUserId > oldActiveUserId)
                {
                    mainPack
                    .Users.First(a => a.UserId == maxUserId).IsActivated = true;
                }
                else
                {
                    mainPack
                    .Users.First(a => a.UserId == minUserId).IsActivated = true;
                }

                // удаляем карты из списка выбранных, чтобы "сбежать" работало корректно
                session.SelectedCardsIdsList.Clear();
                session.MainPackModel = mainPack;
                CardManager.UpdateSession(session);

                var result = new MainGameModel(session);
                return(result);
            } catch (Exception ex) {
                return(null);
            }
        }
Пример #9
0
        /// <summary>
        /// активируем пользователя
        /// </summary>
        public static MainGameModel InternalActivateUser(int userId, int sessionId)
        {
            try {
                var session = CardManager.Sessions.FirstOrDefault(a => a.SessionId == sessionId);
                if (session == null)
                {
                    return(null);
                }
                if (session.ExpectedUserCount <= session.MainPackModel.Users.Count(a => a.IsConnected))
                {
                    return(null);
                }

                session.MainPackModel.Users
                .First(a => a.UserId == userId).IsConnected = true;
                CardManager.UpdateSession(session);
                var result = new MainGameModel(session);
                return(result);
            } catch (Exception ex) {
                return(null);
            }
        }
Пример #10
0
        /// <summary>
        /// получаем инфу по состоянию колоды в данный момент
        /// </summary>
        public static ResultModel InternalGetCurrentPack(int sessionId)
        {
            try {
                var workModel = CardManager.Sessions.FirstOrDefault(a => a.SessionId == sessionId)?.MainPackModel;

                if (workModel == null ||
                    workModel.Count == 0 ||
                    workModel.Users.Count == 0)
                {
                    return(new ResultModel(false, "колода пуста"));
                }

                var session = CardManager.Sessions?.FirstOrDefault(a => a.SessionId == sessionId);
                if (session == null)
                {
                    return(new ResultModel(false, "SessionId is wrong!"));
                }

                var result = new MainGameModel(session);
                return(new ResultModel(true, result));
            } catch (Exception ex) {
                return(new ResultModel(false, ex.Message));
            }
        }
Пример #11
0
 public void SetMainModel(MainGameModel mainGameModel, string id)
 {
     repository.SetMainModel(mainGameModel, id);
 }
Пример #12
0
    // Use this for initialization
    void Start()
    {
        //モデル初期化
        _model = new MainGameModel();

        //AudioSourceコンポーネントを取得し、変数に格納
        _typeSound = GetComponent <AudioSource>();

        //キーを並べる
        makeKeyPos();

        //キーボードからの入力を取得する
        var keyStream = Observable.EveryUpdate()
                        .Select(_ => Input.inputString)
                        .Where(xs => Input.anyKeyDown);

        //同時押しの間隔を200msにする
        keyStream.Buffer(keyStream.Throttle(TimeSpan.FromMilliseconds(200)))
        .Where(xs => xs.Count >= 1)
        .Subscribe(x =>
        {
            bool rtn = CheckTargetCharactor(nowTargetChara(), x);
            //Debug.Log(rtn);
            //Debug.Log("入力文字:" +  Util.GetKeybordCharactor(x));
            InputResult(rtn);
            if (rtn == true)
            {
                //正解!
                //タイプ音
                _typeSound.PlayOneShot(_typeSound.clip);

                //次のターゲット文字列を設定する
                _model.NextTargetChara();
            }
        });

        //カウンター監視
        _model.TargetIndex
        .Subscribe(x =>
        {
            //現在の入力文字を表示する
            _view.UpdateTargetChara(nowTargetChara());

            //ガイドの設定
            _view.UpdateGuide(guildString(nowTargetChara()));

            ChangeSelectKeyborde(nowTargetChara());

            Debug.Log("targetカウンター更新:" + _model.TargetIndex.Value);
        });

        //練習対象の文字列変更ボタンが押された
        _model.TrainingHistoryIndex
        .Subscribe(x =>
        {
            //練習対象の文字列の設定
            string data = _model.TrainingHistory[x].caption;
            _view.SelectCaption(data);
            Debug.Log("TrainingHistoryIndex更新:" + _model.TrainingHistoryIndex.Value);

            //テキスト設定
            _model.ResetTargetCharas(x);
            //現在の入力文字を表示する
            _view.UpdateTargetChara(nowTargetChara());

            //ガイドの設定
            _view.UpdateGuide(guildString(nowTargetChara()));

            ChangeSelectKeyborde(nowTargetChara());
        });

        //現在の入力文字を表示する
        _view.UpdateTargetChara(nowTargetChara());

        //ガイドの設定
        _view.UpdateGuide(guildString(nowTargetChara()));
        //ChangeSelectKeyborde(nowTargetChara());

        //モバイルキーボードを表示する
        //TouchScreenKeyboard.Open("", TouchScreenKeyboardType.ASCIICapable);

        //イベント設定
        SetEvent();
    }