Example #1
0
 // Use this for initialization
 void Start()
 {
     this.state         = MACHINE_STATE.OFF;
     this.energyLevel   = 0;
     this.operatedHours = 0;
     this.pot           = new Pot();
 }
Example #2
0
        public void WithdrawCash(Money amount)
        {
            switch (_currentState)
            {
            case MACHINE_STATE.INITIAL:
                throw new InvalidOperationException("No card inserted");

            case MACHINE_STATE.CARD_INSERTED:
                throw new InvalidOperationException("Pin not entered");

            case MACHINE_STATE.PIN_ENTERED:
                if (_value < amount)
                {
                    throw new InvalidOperationException("Not enough cash");
                }
                _currentState = MACHINE_STATE.CASH_WITHDRAWN;
                break;

            case MACHINE_STATE.CASH_WITHDRAWN:
                throw new InvalidOperationException("Cash already returned");

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
Example #3
0
        public Associative Collect(Associative param)
        {
            var reelstopleft = null as string;
            var reelstopcenter = null as string;
            var reelstopright = null as string;
            var oshijun = null as string;

            try
            {
                reelstopleft = param["reelStopLeft"];
                reelstopcenter = param["reelStopCenter"];
                reelstopright = param["reelStopRight"];
                oshijun = param["oshijun"];
            }
            catch
            {
                return new Associative() { { "result", "error".DQ() } };
            }

            var result = new Associative();
            result.Add("result", "WIN".DQ());
            result.Add("yaku", "0");
            result.Add("payout", (payout).ToString());

            Logger.Info($"[Ocean][Collect]GameId:{gameId} UserId:{userId} payout:{payout}");

            State = MACHINE_STATE.COLLECT;
            return result;
        }
Example #4
0
        public void UpdateView_SelectedMachineInfo(string strMachineName)
        {
            MachineInfo refMachineInfo = m_machineInfoMgr.Find(strMachineName);

            if (null == refMachineInfo)
            {
                return;
            }

            MACHINE_STATE eMachineState = refMachineInfo.GetState();
            int           nServerCount  = refMachineInfo.ServerInfoMgr.ServerInfoCount;

            string strSelectedMachineInfo;

            strSelectedMachineInfo  = "Machine Name : " + strMachineName + "\r\n";
            strSelectedMachineInfo += "Machine State : " + eMachineState.ToString() + "\r\n";
            strSelectedMachineInfo += "Server Count : " + nServerCount.ToString() + "\r\n";
            strSelectedMachineInfo += "IP Address : " + refMachineInfo.IP.ToString() + "\r\n";
            strSelectedMachineInfo += "Port Number : " + refMachineInfo.Port.ToString() + "\r\n";

            int nPlayerCount = m_machineInfoMgr.GetMachinePlayerCount(strMachineName);

            strSelectedMachineInfo += "Machine Player Count : " + nPlayerCount.ToString();

            m_refView.SelectedNodeInfoText = strSelectedMachineInfo;
        }
Example #5
0
        public void SetDisconnected()
        {
            m_serverInfoMgr.Clear();

            IsConnected      = false;
            IsRequestConnect = false;
            m_nSessionID     = 0;
            eMachineState    = MACHINE_STATE.OFFLINE;
        }
    public void init()
    {
        mNowState    = null;
        mManageState = MACHINE_STATE.NONE;
        mState       = 0;
        mNextState   = 0;
        mPrevState   = 0;

        mStateMap = new Dictionary <int, StateBase>();
    }
        private string GetPinValidated()
        {
            Console.WriteLine("Please Enter your PIN");
            string userInput = Console.ReadLine();

            if (userInput.Trim() == "12345")
            {
                currentState = MACHINE_STATE.CARDS_VALIDATED;
                return("Enter Amount to Widthdraw");
            }
            return("Invalid PIN");
        }
Example #8
0
        private string GetPinValidated()
        {
            Console.WriteLine("Please Enter your Pin");
            string userInput = Console.ReadLine();

            // lets check with the dummy pin
            if (userInput.Trim() == "1234")
            {
                currentState = MACHINE_STATE.CARD_VALIDATED;
                return "Enter the Amount to Withdraw";
            }
                
            // Show only message and no change in state
            return "Invalid PIN";
        }
        private string GetPinValidated()
        {
            Console.WriteLine("Please Enter your Pin");
            string userInput = Console.ReadLine();

            // lets check with the dummy pin
            if (userInput.Trim() == "1234")
            {
                currentMachineState = MACHINE_STATE.CARD_VALIDATED;
                return("Enter the Amount to Withdraw");
            }

            // Show only message and no change in state
            return("Invalid PIN");
        }
Example #10
0
        public void RemoveCard()
        {
            switch (_currentState)
            {
            case MACHINE_STATE.INITIAL:
                throw new InvalidOperationException("No card inserted");

            case MACHINE_STATE.CARD_INSERTED:
            case MACHINE_STATE.PIN_ENTERED:
            case MACHINE_STATE.CASH_WITHDRAWN:
                _currentState = MACHINE_STATE.INITIAL;
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
Example #11
0
        private string WithdrawMoney()
        {
            string userInput = Console.ReadLine();
            int    requestAmount;
            bool   result = Int32.TryParse(userInput, out requestAmount);

            if (result == true)
            {
                if (dummyCashPresent < requestAmount)
                {
                    return("Amount not present");
                }
                dummyCashPresent -= requestAmount;
                currentState      = MACHINE_STATE.CASH_WITHDRAWN;
                return(string.Format(@"Amount of {0} has been withdrawn. press enter to proceed", requestAmount));
            }
            return("Invalid Amount");
        }
        private string WithdrawMoney()
        {
            string userInput = Console.ReadLine();

            int  requestAmount;
            bool result = Int32.TryParse(userInput, out requestAmount);

            if (result == true)
            {
                if (dummyCashPresent < requestAmount)
                {
                    // Show only message and no change in state
                    return("Amount not present");
                }

                dummyCashPresent   -= requestAmount;
                currentMachineState = MACHINE_STATE.CASH_WITHDRAWN;
            }
            return(string.Format(@"Amount of {0} has been withdrawn. Press Enter to proceed", requestAmount));
        }
    public void changeStateNowStatePause(int stateType)
    {
        if (mManageState != MACHINE_STATE.AFTER_INIT &&
            mManageState != MACHINE_STATE.UPDATE_MAIN)
        {
            Debug.Log("StateMachine::changeState");
            Debug.Log(mManageState + " state isnt use changeState");
        }

        if (mNowState != null)
        {
            mNowState.pauseEnable();
            mNextState   = stateType;
            mManageState = MACHINE_STATE.RELEASE;            // 即リリース状態にしているが、PAUSEをかけているので、リリースの処理は呼び出されない
        }
        else
        {
            StateBase val = null;
            mStateMap.TryGetValue(stateType, out val);
            mNowState    = val;
            mManageState = MACHINE_STATE.BEFORE_INIT;
        }
    }
    public void changeState(int stateType)
    {
        // 仮 ここ、直す必要がある。途中で呼び出された場合に、流れがおかしくなる可能性がある
        if (mManageState != MACHINE_STATE.AFTER_INIT &&
            mManageState != MACHINE_STATE.UPDATE_MAIN)
        {
            Debug.Log("StateMachine::changeState");
            Debug.Log((int)mManageState + " state isnt use changeState");
        }

        if (mNowState != null)
        {
            mNextState   = stateType;
            mManageState = MACHINE_STATE.AFTER_MAIN;
        }
        else
        {
            StateBase val = null;
            mStateMap.TryGetValue(stateType, out val);
            mNowState    = val;
            mManageState = MACHINE_STATE.BEFORE_INIT;
        }
    }
Example #15
0
        public void EnterPin(Pin pin)
        {
            switch (_currentState)
            {
            case MACHINE_STATE.INITIAL:
                throw new InvalidOperationException("No card inserted");

            case MACHINE_STATE.CARD_INSERTED:
                if (pin != 1234)
                {
                    throw new InvalidOperationException("incorect pin");
                }
                _currentState = MACHINE_STATE.PIN_ENTERED;
                break;

            case MACHINE_STATE.PIN_ENTERED:
            case MACHINE_STATE.CASH_WITHDRAWN:
                throw new InvalidOperationException("Pin already entered");

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
    public void changeState(int stateType)
    {
        // 仮 ここ、直す必要がある。途中で呼び出された場合に、流れがおかしくなる可能性がある
        if (mManageState != MACHINE_STATE.AFTER_INIT &&
            mManageState != MACHINE_STATE.UPDATE_MAIN		)
        {
            Debug.Log("StateMachine::changeState");
            Debug.Log((int)mManageState + " state isnt use changeState");
        }

        if(mNowState != null)
        {
            mNextState = stateType;
            mManageState = MACHINE_STATE.AFTER_MAIN;
        }
        else
        {
            StateBase val = null;
            mStateMap.TryGetValue(stateType, out val);
            mNowState = val;
            mManageState = MACHINE_STATE.BEFORE_INIT;
        }
    }
Example #17
0
        private string WithdrawMoney()
        {            
            string userInput = Console.ReadLine();

            int requestAmount;
            bool result = Int32.TryParse(userInput, out requestAmount);

            if (result == true)
            {
                if (dummyCashPresent < requestAmount)
                {
                    // Show only message and no change in state
                    return "Amount not present";
                }

                dummyCashPresent -= requestAmount;
                currentState = MACHINE_STATE.CASH_WITHDRAWN;

                return string.Format(@"Amount of {0} has been withdrawn. Press Enter to proceed", requestAmount);
            }

            // Show only message and no change in state
            return "Invalid Amount";
        }
 private string SayGoodBye()
 {
     currentMachineState = MACHINE_STATE.NO_CARD;
     return(string.Format("Thanks you for using us, Amount left in ATM: {0}", dummyCashPresent.ToString()));
 }
Example #19
0
 public void SetConnected()
 {
     IsRequestConnect = false;
     IsConnected      = true;
     eMachineState    = MACHINE_STATE.ONLINE;
 }
Example #20
0
        public Associative Play(Associative param)
        {
            var betcount = null as string;
            var bet = 0;

            try
            {
                betcount = param["betCount"];
                bet = betcount.ParseInt();
            }
            catch
            {
                Logger.Error("[ERROR]Palameter error.");
                return new Associative() { { "result", "error".DQ() } };
            }

            // bet 0 check
            if (bet == 0)
            {
                Logger.Warn("BET 0 ERROR!!!");
                Logger.Warn("BET 0 ERROR!!!");
                Logger.Warn("BET 0 ERROR!!!");
                return new Associative() { { "result", "error".DQ() } };
            }

            mobile.InsertCoin(bet);

            // マシンからのコールバック群

            Action<int> Payout = (coinCount) =>
            {
            };

            var isLeverPulled = false;
            Action<int> ReelStart = (_yaku) =>
            {
                Yaku y = (Yaku)_yaku;
                isLeverPulled = true;
            };

            Action<int, int> ButtonStop = (button, reelIndex) =>
            {
            };

            Action<int> KeyTrigger = (key) =>
            {
            };

            Action Bet = () =>
            {
            };

            var callbacks = new CallbackToController()
            {
                Payout = Payout,
                ReelStart = ReelStart,
                ButtonStop = ButtonStop,
                KeyTrigger = KeyTrigger,
                Bet = Bet
            };

            // レバーを引くまで回す
            while(isLeverPulled == false)
            {
                mobile.ZZ.int_value[Defines.DEF_Z_INT_KEYPRESS] |= (1 << 5);
                mobile.exec(callbacks);
                Thread.Sleep(20);
            }

            var afterCoinCount = mobile.CoinCount;
            var yaku = mobile.Yaku;

            var result = new Associative();
            result.Add("route", "0");
            result.Add("yaku", ((int)yaku).ToString());

            State = MACHINE_STATE.PLAY;

            Logger.Info($"[INFO]Play GameId:{gameId} UserId:{userId} Bet:{bet} ------ Yaku:{yaku}");

            return result;
        }
Example #21
0
        public Associative Collect(Associative param)
        {
            var reelstopleft = null as string;
            var reelstopcenter = null as string;
            var reelstopright = null as string;
            var oshijun = null as string;

            var left = 0;   // ボタン0押下時リール位置
            var center = 0; // ボタン1押下時リール位置
            var right = 0;  // ボタン2押下時リール位置
            var order = null as int[]; // 押し順

            try
            {
                reelstopleft = param["reelStopLeft"];
                reelstopcenter = param["reelStopCenter"];
                reelstopright = param["reelStopRight"];
                oshijun = param["oshijun"];

                left = reelstopleft.ParseInt();
                center = reelstopcenter.ParseInt();
                right = reelstopright.ParseInt();
                order = oshijun.ToCharArray().Select(c => c.ToString().ParseInt()-1).ToArray();
            }
            catch
            {
                return new Associative() { { "result", "error".DQ() } };
            }

            var winCoins = 0;
            var gotCoinCountFlg = false;

            // マシンからのコールバック群

            Action<int> Payout = (coinCount) =>
            {
                winCoins = coinCount;
                gotCoinCountFlg = true;
            };

            Action<int> ReelStart = (_yaku) =>
            {
            };

            Action<int, int> ButtonStop = (button, reelIndex) =>
            {
            };

            Action<int> KeyTrigger = (key) =>
            {
            };

            Action Bet = () =>
            {
            };

            var callbacks = new CallbackToController()
            {
                Payout = Payout,
                ReelStart = ReelStart,
                ButtonStop = ButtonStop,
                KeyTrigger = KeyTrigger,
                Bet = Bet
            };

            var indexis = new int[] { left, center, right };

            mobile.SetClientPressed(indexis);

            // 押し順、押した位置で止める
            while(gotCoinCountFlg == false)
            {
                mobile.ZZ.int_value[Defines.DEF_Z_INT_KEYPRESS] |= (1 << 5);
                mobile.exec(callbacks);
                Thread.Sleep(20);
            }

            var v1 = reelstopleft.Substring(1, (reelstopleft.Length - 1));
            var v2 = reelstopcenter.Substring(1, (reelstopcenter.Length - 1));
            var v3 = reelstopright.Substring(1, (reelstopright.Length - 1));
            var v4 = oshijun.Substring(1, (oshijun.Length - 1));
            var xor = v1 + v2 + v3 + v4;
            var code = (xor.ParseLong()^(0xffeeddcc)).ToString();
            var yaku = code.Substring(4, 2).ParseInt();
            var payout = code.Substring(6, 2).ParseInt();

            var result = new Associative();
            result.Add("result", "WIN".DQ());
            result.Add("payout", payout.ToString());
            result.Add("yaku", ((int)yaku).ToString());

            State = MACHINE_STATE.COLLECT;

            Logger.Info($"[INFO]Collect GameId:{gameId} UserId:{userId} Payout:{winCoins} Yaku:{yaku}");

            // 役を保存しておく
            currentYaku = (Yaku)yaku;

            return result;
        }
Example #22
0
        public Associative Config(Associative param)
        {
            mobile = new Mobile();

            var result = new Associative();
            var seed = mobile.Seed.ToString();
            var setting = this.settingValue;

            Logger.Info($"[INFO][Oomatsuri]Setting:{setting}");

            if (setting == 0)
            {
                mobile.GameManager.SettingZeroMode = true;
                mobile.SetRate(1);
            }
            else
            {
                mobile.GameManager.SettingZeroMode = false;
                mobile.SetRate(setting);
            }

            result.Add("setting", setting.ToString());
            result.Add("reelleft", "0");
            result.Add("reelcenter", "0");
            result.Add("reelright", "0");
            result.Add("seed", seed);

            State = MACHINE_STATE.CONFIG;

            return result;
        }
Example #23
0
 public Associative Init(Associative param)
 {
     var result = new Associative();
     State = MACHINE_STATE.INIT;
     return result;
 }
Example #24
0
 public void ChangeState(MACHINE_STATE state)
 {
     states[(int)state].Init();
     states[(int)state].Enter();
 }
Example #25
0
 private string SayGoodBye()
 {
     currentState = MACHINE_STATE.NO_CARD;
     return string.Format("Thanks you for using us, Amount left in ATM: {0}", dummyCashPresent.ToString());
 }
Example #26
0
        public Associative Config(Associative param)
        {
            var seed = (((int)(Util.GetMilliSeconds())) & 0xFFFF);

            var setting = settingValue;
            Logger.Info($"[INFO][TheOcean]Seed:{seed} Setting:{setting}");

            machine = new TheOceanMachine(seed:seed, setting:setting);

            var result = new Associative()
            {
                //{ "status", "error".DQ() },
                { "setting", setting.ToString() },
                { "reelleft", "0" },
                { "reelcenter", "0" },
                { "reelright", "0" },
                { "seed", seed.ToString() },
            };

            State = MACHINE_STATE.CONFIG;

            return result;
        }
    public void update(float delta)
    {
        if (mNowState == null)
        {
            return;
        }

        switch (mManageState)
        {
        case MACHINE_STATE.BEFORE_INIT:
            if (mNowState.isPause() == true)
            {
                // ポーズ状態だったら、即メインのアップデート処理状態にする
                mManageState = MACHINE_STATE.UPDATE_MAIN;
                mNowState.pauseDisable();
            }
            else
            {
                mManageState = MACHINE_STATE.UPDATE_INIT;
                mNowState._onBeforeInit();
            }
            break;

        case MACHINE_STATE.UPDATE_INIT:
        {
            bool isEnd = mNowState.onUpdateInit(delta);
            if (isEnd == true)
            {
                mManageState = MACHINE_STATE.AFTER_INIT;
            }
        }
        break;

        case MACHINE_STATE.AFTER_INIT:
            mManageState = MACHINE_STATE.BEFORE_MAIN;
            mNowState.onAfterInit();
            break;

        case MACHINE_STATE.BEFORE_MAIN:
            mManageState = MACHINE_STATE.UPDATE_MAIN;
            mNowState.onBeforeMain();
            break;

        case MACHINE_STATE.UPDATE_MAIN:
            mNowState.onUpdateMain(delta);
            break;

        case MACHINE_STATE.AFTER_MAIN:
            mManageState = MACHINE_STATE.BEFORE_END;
            mNowState.onAfterMain();
            break;

        case MACHINE_STATE.BEFORE_END:
            mManageState = MACHINE_STATE.UPDATE_END;
            mNowState.onBeforeEnd();
            break;

        case MACHINE_STATE.UPDATE_END:
        {
            bool isEnd = mNowState.onUpdateEnd(delta);
            if (isEnd == true)
            {
                mManageState = MACHINE_STATE.AFTER_END;
            }
        }
        break;

        case MACHINE_STATE.AFTER_END:
            mManageState = MACHINE_STATE.RELEASE;
            mNowState.onAfterEnd();
            break;

        case MACHINE_STATE.RELEASE:
        {
            mManageState = MACHINE_STATE.BEFORE_INIT;
            if (mNowState.isPause() != true)
            {
                mNowState._onRelease();
            }
            mPrevState = mState;
            mState     = mNextState;

            StateBase val = null;
            mStateMap.TryGetValue(mState, out val);
            mNowState = val;
            break;
        }
        }
    }
Example #28
0
        public Associative Play(Associative param)
        {
            var betcount = null as string;
            var rate = null as string;
            var power = null as string;
            var pow = 0;

            try
            {
                betcount = param["betCount"];
                rate = param["rate"];
                power = param["power"];
                pow = int.Parse(power);
            }
            catch
            {
                return new Associative() { { "result", "error".DQ() } };
            }

            var shootResult = null as TheOceanMachine.ShootResult;

            if (betcount == "0" && power == "0")
            {
                shootResult = machine.Progress();
            }
            else
            {
                // 玉発射
                shootResult = machine.Shoot(pow);
            }

            this.payout = shootResult.payout;

            var result = new Associative();
            result.Add("yaku", ((int)shootResult.yaku).ToString());
            result.Add("route", ((int)shootResult.route).ToString());

            if (shootResult.route != Route.Abandon)
            {
                Logger.Info($"G:{gameId} U:{userId} power:{power} rate:{rate} yaku:{shootResult.yaku} route:{shootResult.route}");
            }

            State = MACHINE_STATE.PLAY;
            return result;
        }
    public void init()
    {
        mNowState       = null;
        mManageState	= MACHINE_STATE.NONE;
        mState			= 0;
        mNextState 		= 0;
        mPrevState 		= 0;

        mStateMap		= new Dictionary<int, StateBase>();
    }
    public void update(float delta)
    {
        if(mNowState == null)
        {
            return;
        }

        switch(mManageState)
        {
        case MACHINE_STATE.BEFORE_INIT:
            if (mNowState.isPause() == true)
            {
                // ポーズ状態だったら、即メインのアップデート処理状態にする
                mManageState = MACHINE_STATE.UPDATE_MAIN;
                mNowState.pauseDisable();
            }
            else
            {
                mManageState = MACHINE_STATE.UPDATE_INIT;
                mNowState._onBeforeInit();
            }
            break;

        case MACHINE_STATE.UPDATE_INIT:
            {
                bool isEnd = mNowState.onUpdateInit(delta);
                if(isEnd == true)
                {
                    mManageState = MACHINE_STATE.AFTER_INIT;
                }
            }
            break;

        case MACHINE_STATE.AFTER_INIT:
            mManageState = MACHINE_STATE.BEFORE_MAIN;
            mNowState.onAfterInit();
            break;

        case MACHINE_STATE.BEFORE_MAIN:
            mManageState = MACHINE_STATE.UPDATE_MAIN;
            mNowState.onBeforeMain();
            break;

        case MACHINE_STATE.UPDATE_MAIN:
            mNowState.onUpdateMain(delta);
            break;

        case MACHINE_STATE.AFTER_MAIN:
            mManageState = MACHINE_STATE.BEFORE_END;
            mNowState.onAfterMain();
            break;

        case MACHINE_STATE.BEFORE_END:
            mManageState = MACHINE_STATE.UPDATE_END;
            mNowState.onBeforeEnd();
            break;

        case MACHINE_STATE.UPDATE_END:
            {
                bool isEnd = mNowState.onUpdateEnd(delta);
                if(isEnd == true)
                {
                    mManageState = MACHINE_STATE.AFTER_END;
                }
            }
            break;

        case MACHINE_STATE.AFTER_END:
            mManageState = MACHINE_STATE.RELEASE;
            mNowState.onAfterEnd();
            break;

        case MACHINE_STATE.RELEASE:
            {
                mManageState = MACHINE_STATE.BEFORE_INIT;
                if (mNowState.isPause() != true)
                {
                    mNowState._onRelease();
                }
                mPrevState = mState;
                mState = mNextState;

                StateBase val = null;
                mStateMap.TryGetValue(mState, out val);
                mNowState = val;
                break;
            }
        }
    }
    public void changeStateNowStatePause(int stateType)
    {
        if (mManageState != MACHINE_STATE.AFTER_INIT &&
            mManageState != MACHINE_STATE.UPDATE_MAIN)
        {
            Debug.Log("StateMachine::changeState");
            Debug.Log(mManageState + " state isnt use changeState");
        }

        if(mNowState != null)
        {
            mNowState.pauseEnable();
            mNextState = stateType;
            mManageState = MACHINE_STATE.RELEASE;// 即リリース状態にしているが、PAUSEをかけているので、リリースの処理は呼び出されない
        }
        else
        {
            StateBase val = null;
            mStateMap.TryGetValue(stateType, out val);
            mNowState = val;
            mManageState = MACHINE_STATE.BEFORE_INIT;
        }
    }
Example #32
0
 public void ChangeState(MACHINE_STATE state)
 {
     states[(int)state].Init();
     states[(int)state].Enter();
 }