/// <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); } }
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); }
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); }
/// <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); } }
/// <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)); } }
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); }
/// <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); } }
/// <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); } }
/// <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)); } }
public void SetMainModel(MainGameModel mainGameModel, string id) { repository.SetMainModel(mainGameModel, id); }
// 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(); }