コード例 #1
0
        // only used for deserializing
        public XSID(InternalPlayer player, BinaryReader reader, EventList events)
            : base()
        {
            this.events = events;

            this.m_player = player;

            LoadFromReader(player.m_scheduler, reader);

            if (xsidEvent_id == -1)
            {
                xsidEvent = null;
            }
            else
            {
                xsidEvent = events.GetEventById(xsidEvent_id) as xSIDEvent;

#if DEBUG
                if (xsidEvent == null)
                {
                    throw new Exception("XSID: xSIDEvent not found");
                }
#endif
            }
        }
コード例 #2
0
        public TwoPlayersTexasHoldemGame(IPlayer firstPlayer, IPlayer secondPlayer, int initialMoney = 1000)
        {
            if (firstPlayer == null)
            {
                throw new ArgumentNullException(nameof(firstPlayer));
            }

            if (secondPlayer == null)
            {
                throw new ArgumentNullException(nameof(secondPlayer));
            }

            if (initialMoney <= 0 || initialMoney > 200000)
            {
                throw new ArgumentOutOfRangeException(nameof(initialMoney), "Initial money should be greater than 0 and less than 200000");
            }

            // Ensure the players have unique names
            if (firstPlayer.Name == secondPlayer.Name)
            {
                throw new ArgumentException($"Both players have the same name: \"{firstPlayer.Name}\"");
            }

            this.firstPlayer = new InternalPlayer(firstPlayer);
            this.secondPlayer = new InternalPlayer(secondPlayer);
            this.allPlayers = new List<InternalPlayer> { this.firstPlayer, this.secondPlayer };
            this.initialMoney = initialMoney;
            this.HandsPlayed = 0;
        }
コード例 #3
0
 // only used for deserializing
 public EventScheduler(InternalPlayer player, BinaryReader reader, int id)
     : base(string.Empty)
 {
     m_id     = id;
     m_player = player;
     LoadFromReader(reader);
 }
コード例 #4
0
 public SID6526(InternalPlayer player)
 {
     m_player       = player;
     m_eventContext = m_player.m_scheduler;
     m_phase        = event_phase_t.EVENT_CLOCK_PHI1;
     rnd            = 0;
     m_taEvent      = new CiaEvent(this);
     clock(0xffff);
     reset(false);
 }
コード例 #5
0
        public SID6510(EventScheduler context, InternalPlayer owner, BinaryReader reader, EventList events)
            : base(context, owner, reader, events)
        {
            delayCycle.func = new ProcessorCycle.FunctionDelegate(sid_delay);

            if (procCycle_id == 2)
            {
                procCycle = new ProcessorCycle[] { delayCycle };
            }
        }
コード例 #6
0
        public SID6510(EventScheduler context, InternalPlayer owner)
            : base(context, owner)
        {
            m_mode      = SID2Types.sid2_env_t.sid2_envR;
            m_framelock = false;

            // The hacks for de.quippy.sidplay.sidplay are done with overridden methods of MOS6510

            // Used to insert busy delays into the CPU emulation
            delayCycle.func = new ProcessorCycle.FunctionDelegate(sid_delay);
        }
コード例 #7
0
        public void Dispose()
        {
            Stop();

            if (_PlayBuffer != IntPtr.Zero)
            {
                Marshal.FreeHGlobal(_PlayBuffer);
                _PlayBuffer = IntPtr.Zero;
            }
            _InternalPlayer = null;
        }
コード例 #8
0
        /// <summary>
        /// Start playing the tune with the selected song
        /// </summary>
        /// <param name="SongNumber">song id (1..count), 0 = default song</param>
        public void Start(int SongNumber)
        {
            if (Stopping)
            {
                return;
            }
            if (_CurrentTune == null)
            {
                return;
            }

            _WavePlayer = new WaveOut();

            WaveFormat fmt = new WaveFormat(_Frequency, 16, 2);

            _BufferedWaveProvider = new BufferedWaveProvider(fmt);
            _BufferedWaveProvider.BufferDuration = TimeSpan.FromSeconds(2); // allow us to get well ahead of ourselves

            _WavePlayer.Init(_BufferedWaveProvider);

            _InternalPlayer = new InternalPlayer();

            sid2_config_t config = _InternalPlayer.config();

            config.frequency     = _Frequency;
            config.playback      = SID2Types.sid2_playback_t.sid2_mono;
            config.optimisation  = SID2Types.SID2_DEFAULT_OPTIMISATION;
            config.sidModel      = (SID2Types.sid2_model_t)_CurrentTune.Info.sidModel;
            config.clockDefault  = SID2Types.sid2_clock_t.SID2_CLOCK_CORRECT;
            config.clockSpeed    = SID2Types.sid2_clock_t.SID2_CLOCK_CORRECT;
            config.clockForced   = false;
            config.environment   = SID2Types.sid2_env_t.sid2_envR;
            config.forceDualSids = false;
            config.volume        = 255;
            config.sampleFormat  = SID2Types.sid2_sample_t.SID2_LITTLE_SIGNED;
            config.sidDefault    = SID2Types.sid2_model_t.SID2_MODEL_CORRECT;
            config.sidSamples    = true;
            config.precision     = SID2Types.SID2_DEFAULT_PRECISION;

            _InternalPlayer.config(config);

            _CurrentTune.selectSong(SongNumber);
            _InternalPlayer.load(_CurrentTune);

            _IsStereo = _CurrentTune.isStereo;

            _InternalPlayer.start();

            _Thread = new Thread(new ThreadStart(ThreadProc));
            _Thread.Start();
        }
コード例 #9
0
        public XSID(InternalPlayer player, SIDEmu sid)
            : base()
        {
            xsidEvent  = new xSIDEvent(this);
            ch4        = new Channel("CH4", player.m_scheduler, this);
            ch5        = new Channel("CH5", player.m_scheduler, this);
            muted      = (false);
            suppressed = (false);
            wasRunning = (false);
            sidSamples(true);

            m_player = player;
            m_sid    = sid;
            m_gain   = 100;
        }
コード例 #10
0
        // only used for deserializing
        public SID6526(InternalPlayer player, BinaryReader reader, EventList events)
        {
            m_player       = player;
            m_eventContext = m_player.m_scheduler;

            LoadFromReader(reader);

            m_taEvent       = events.GetEventById(m_taEvent_id) as CiaEvent;
            m_taEvent.m_cia = this;

#if DEBUG
            if (m_taEvent == null)
            {
                throw new Exception("SID6526: CiaEvent not found");
            }
#endif
        }
コード例 #11
0
ファイル: ReSID.cs プロジェクト: GeorgRottensteiner/SharpSid
        // Must lock the SID before using the standard functions

        /// <summary>
        /// Set execution environment and lock sid to it
        /// </summary>
        /// <param name="player"></param>
        /// <returns></returns>
        public bool _lock(InternalPlayer player)
        {
            if (player == null)
            {
                if (!m_locked)
                {
                    return(false);
                }
                m_locked  = false;
                m_context = null;
            }
            else
            {
                if (m_locked)
                {
                    return(false);
                }
                m_locked  = true;
                m_context = player.m_scheduler;
            }
            return(true);
        }
コード例 #12
0
        private PlayerAction DoPlayerAction(InternalPlayer player, PlayerAction action, int maxMoneyPerPlayer)
        {
            if (action.Type == PlayerActionType.Raise)
            {
                player.Call(maxMoneyPerPlayer);

                if (player.Money <= 0)
                {
                    return PlayerAction.CheckOrCall();
                }

                foreach (var playerToUpdate in this.allPlayers)
                {
                    playerToUpdate.ShouldPlayInRound = true;
                }

                // TODO: Min raise?
                if (player.Money > action.Money)
                {
                    player.PlaceMoney(action.Money);
                }
                else
                {
                    // All-in
                    action.Money = player.Money;
                    player.PlaceMoney(action.Money);
                }
            }
            else if (action.Type == PlayerActionType.CheckCall)
            {
                player.Call(maxMoneyPerPlayer);
            }
            else //// PlayerActionType.Fold
            {
                player.InHand = false;
            }

            return action;
        }
コード例 #13
0
ファイル: C64VIC.cs プロジェクト: GeorgRottensteiner/SharpSid
 // only used for deserializing
 public C64VIC(InternalPlayer player, BinaryReader reader, int newid)
     : base(player.m_scheduler, reader, newid)
 {
     m_player = player;
 }
コード例 #14
0
ファイル: C64VIC.cs プロジェクト: GeorgRottensteiner/SharpSid
 public C64VIC(InternalPlayer player)
     : base(player.m_scheduler)
 {
     m_player = player;
 }
コード例 #15
0
 // only used for deserializing
 public C64cia1(InternalPlayer player, BinaryReader reader, EventList events)
     : base(player.m_scheduler, reader, events)
 {
     m_player = player;
 }
コード例 #16
0
 private void Bet(InternalPlayer player, int amount)
 {
     player.Bet(amount);
     this.Pot += amount;
 }
コード例 #17
0
        // deserializing
        protected void LoadFromReader(InternalPlayer player, EventScheduler context, BinaryReader reader)
        {
            int count = reader.ReadInt32();

            for (int i = 0; i < count; i++)
            {
                int             id  = reader.ReadInt32();
                Event.EventType typ = (Event.EventType)reader.ReadInt16();
                switch (typ)
                {
                case Event.EventType.ciaEvt:
                    this.Add(new CiaEvent(context, reader, id));
                    break;

                case Event.EventType.cpuEvt:
                    this.Add(new CPUEvent(context, reader, id));
                    break;

                case Event.EventType.GalwayEvt:
                    this.Add(new GalwayEvent(context, reader, id));
                    break;

                case Event.EventType.mixerEvt:
                    this.Add(new EventMixer(player, context, reader, id));
                    break;

                case Event.EventType.RtcEvt:
                    this.Add(new EventRTC(context, reader, id));
                    break;

                case Event.EventType.SampleEvt:
                    this.Add(new SampleEvent(context, reader, id));
                    break;

                case Event.EventType.TaEvt:
                    this.Add(new EventTa(context, reader, id));
                    break;

                case Event.EventType.TbEvt:
                    this.Add(new EventTb(context, reader, id));
                    break;

                case Event.EventType.TimeWarpEvt:
                    this.Add(new EventTimeWarp(context, reader, id));
                    break;

                case Event.EventType.TodEvt:
                    this.Add(new EventTod(context, reader, id));
                    break;

                case Event.EventType.vicEvt:
                    this.Add(new C64VIC(context.m_player, reader, id));
                    break;

                case Event.EventType.xSidEvt:
                    this.Add(new xSIDEvent(context, reader, id));
                    break;

                default:
#if DEBUG
                    throw new Exception("EventList.LoadFromReader: unknown Event id");
#else
                    break;
#endif
                }
            }

            context.m_next = GetEventById(context.m_next_id);
            context.m_prev = GetEventById(context.m_prev_id);

            foreach (Event ev in this)
            {
                ev.m_next = GetEventById(ev.m_next_id, context);
                ev.m_prev = GetEventById(ev.m_prev_id, context);

#if DEBUG
                if (ev.m_next_id > -1 && ev.m_next == null)
                {
                    throw new Exception("EventList.LoadFromReader: next Event id not found: " + ev.m_next_id.ToString());
                }
                if (ev.m_prev_id > -1 && ev.m_prev == null)
                {
                    throw new Exception("EventList.LoadFromReader: prev Event id not found: " + ev.m_prev_id.ToString());
                }
#endif
            }
        }
コード例 #18
0
 // only used for deserializing
 public EventList(InternalPlayer player, EventScheduler context, BinaryReader reader)
     : base()
 {
     LoadFromReader(player, context, reader);
 }
コード例 #19
0
 // only used for deserializing
 public EventMixer(InternalPlayer player, EventScheduler context, BinaryReader reader, int newId)
     : base(context, reader, newId)
 {
     m_player = player;
 }
コード例 #20
0
 public EventMixer(InternalPlayer player)
     : base("Mixer")
 {
     m_player = player;
 }
コード例 #21
0
        /// <summary>
        /// Inject regular program and set start address
        /// </summary>
        /// <param name="HexData"></param>
        /// <param name="DataStartAddress"></param>
        /// <param name="InitialAddress"></param>
        /// <returns></returns>
        public bool PlayFromBinary(string HexData, int DataStartAddress, int InitialAddress)
        {
            Stop();

            var byteData = StringToByteArrayFastest(HexData);

            _CurrentTune = new SidTune();

            _CurrentTune.info.loadAddr      = DataStartAddress;
            _CurrentTune.info.c64dataLen    = byteData.Length;
            _CurrentTune.info.initAddr      = InitialAddress;
            _CurrentTune.info.playAddr      = InitialAddress;
            _CurrentTune.info.compatibility = SidTune.SIDTUNE_COMPATIBILITY_R64;
            _CurrentTune.InjectProgramInMemory(byteData, DataStartAddress);
            _CurrentTune.status = true;

            _WavePlayer = new WaveOut();

            WaveFormat fmt = new WaveFormat(_Frequency, 16, 2);

            _BufferedWaveProvider = new BufferedWaveProvider(fmt);
            _BufferedWaveProvider.BufferDuration = TimeSpan.FromSeconds(2); // allow us to get well ahead of ourselves

            _WavePlayer.Init(_BufferedWaveProvider);

            _InternalPlayer = new InternalPlayer();

            sid2_config_t config = _InternalPlayer.config();

            config.frequency     = _Frequency;
            config.playback      = SID2Types.sid2_playback_t.sid2_mono;
            config.optimisation  = SID2Types.SID2_DEFAULT_OPTIMISATION;
            config.sidModel      = (SID2Types.sid2_model_t)_CurrentTune.Info.sidModel;
            config.clockDefault  = SID2Types.sid2_clock_t.SID2_CLOCK_CORRECT;
            config.clockSpeed    = SID2Types.sid2_clock_t.SID2_CLOCK_CORRECT;
            config.clockForced   = false;
            config.environment   = SID2Types.sid2_env_t.sid2_envR;
            config.forceDualSids = false;
            config.volume        = 255;
            config.sampleFormat  = SID2Types.sid2_sample_t.SID2_LITTLE_SIGNED;
            config.sidDefault    = SID2Types.sid2_model_t.SID2_MODEL_CORRECT;
            config.sidSamples    = true;
            config.precision     = SID2Types.SID2_DEFAULT_PRECISION;
            config.environment   = SID2Types.sid2_env_t.sid2_envR;

            _InternalPlayer.load(_CurrentTune);
            _InternalPlayer.config(config);

            // inject code
            for (int i = 0; i < byteData.Length; ++i)
            {
                _InternalPlayer.mem_writeMemByte(DataStartAddress + i, byteData[i]);
            }

            _InternalPlayer.SetCPUPos(InitialAddress);
            _IsStereo = _CurrentTune.isStereo;

            _InternalPlayer.start();

            _Thread = new Thread(new ThreadStart(ThreadProc));
            _Thread.Start();

            return(true);
        }
コード例 #22
0
 public C64cia1(InternalPlayer player)
     : base(player.m_scheduler)
 {
     m_player = (player);
 }