Exemple #1
0
        public List<Mahjong.Plugin.IReferee.m_rulepossibility> Execute(List<PlayerData> players, PlayerData current)
        {
            List<Mahjong.Plugin.IReferee.m_rulepossibility> findrules = new List<IReferee.m_rulepossibility>();
            PlayerData tmp = GetRejectTilePlayer(players);
            if (tmp == null)
                return findrules;
            if (tmp == current)
                return findrules;
            Tile rejected = tmp.GetRejected();
            if (rejected == null)
                return findrules;
            Group gtmp = current.GetHand();

            Mahjong.Plugin.IReferee.m_rulepossibility rulepos = new IReferee.m_rulepossibility();
            rulepos.Rule = this;
            rulepos.Player = current;
            rulepos.Group = new Group();
            for (int i = 0; i < gtmp.Count; i++)
            {
                Tile ttmp = gtmp[i];
                if ((rejected.GetNumber() == ttmp.GetNumber()) && (rejected.GetFamily() == ttmp.GetFamily()))
                {
                    rulepos.Group.Add(ttmp);
                    if (rulepos.Group.Count == 2)
                        findrules.Add(rulepos);
                }
            }

            return findrules;
        }
Exemple #2
0
        private void button1_Click(object sender, EventArgs e)
        {
            p1 = new PlayerData("Player 1");
            p2 = new PlayerData("Player 2");
            p3 = new PlayerData("Player 3");
            refe = new Mahjong.Referee.HongKong.Referee();

            refe.AddPlayer(p1);
            refe.AddPlayer(p2);
            refe.AddPlayer(p3);
            refe.NewGame();
            Draw();
        }
Exemple #3
0
        private PlayerData GetPreviousPlayer(List<PlayerData> players, PlayerData current)
        {
            for (int i = 0; i < players.Count; i++)
            {
                if (players[i] == current)
                {
                    int j = i - 1;
                    if (j == -1)
                        j = players.Count - 1;
                    return players[j];
                }

            }
            return null;
        }
Exemple #4
0
        public List<Mahjong.Plugin.IReferee.m_rulepossibility> Execute(List<PlayerData> players, PlayerData current)
        {
            List<Mahjong.Plugin.IReferee.m_rulepossibility> findrules = new List<IReferee.m_rulepossibility>();
            PlayerData PrevPlayer = GetPreviousPlayer(players, current);
            Tile ttmp = PrevPlayer.GetRejected();

            if (ttmp == null)
                return findrules;
            if ((ttmp.GetFamily() == Tile.Family.Flower) || (ttmp.GetFamily() == Tile.Family.Season) || (ttmp.GetFamily() == Tile.Family.Wind) || (ttmp.GetFamily() == Tile.Family.Dragon))
                return findrules;

            if ((HaveTile(current, ttmp.GetFamily(), ttmp.GetNumber() - 2)) && (HaveTile(current, ttmp.GetFamily(), ttmp.GetNumber() - 1)))
            {
                Mahjong.Plugin.IReferee.m_rulepossibility rulepos = new IReferee.m_rulepossibility();
                rulepos.Rule = this;
                rulepos.Player = current;
                rulepos.Group = new Group();

                rulepos.Group.Add(GetTile(current, ttmp.GetFamily(), ttmp.GetNumber() - 2));
                rulepos.Group.Add(GetTile(current, ttmp.GetFamily(), ttmp.GetNumber() - 1));
                findrules.Add(rulepos);
            }

            if ((HaveTile(current, ttmp.GetFamily(), ttmp.GetNumber() - 1)) && (HaveTile(current, ttmp.GetFamily(), ttmp.GetNumber() + 1)))
            {
                Mahjong.Plugin.IReferee.m_rulepossibility rulepos = new IReferee.m_rulepossibility();
                rulepos.Rule = this;
                rulepos.Player = current;
                rulepos.Group = new Group();

                rulepos.Group.Add(GetTile(current, ttmp.GetFamily(), ttmp.GetNumber() - 1));
                rulepos.Group.Add(GetTile(current, ttmp.GetFamily(), ttmp.GetNumber() + 1));
                findrules.Add(rulepos);
            }

            if ((HaveTile(current, ttmp.GetFamily(), ttmp.GetNumber() + 1)) && (HaveTile(current, ttmp.GetFamily(), ttmp.GetNumber() + 2)))
            {
                Mahjong.Plugin.IReferee.m_rulepossibility rulepos = new IReferee.m_rulepossibility();
                rulepos.Rule = this;
                rulepos.Player = current;
                rulepos.Group = new Group();

                rulepos.Group.Add(GetTile(current, ttmp.GetFamily(), ttmp.GetNumber() + 1));
                rulepos.Group.Add(GetTile(current, ttmp.GetFamily(), ttmp.GetNumber() + 2));
                findrules.Add(rulepos);
            }
            return findrules;
        }
Exemple #5
0
        public void PongSimple3()
        {
            PlayerData p1 = new PlayerData("toto");
            PlayerData p2 = new PlayerData("toto2");

            p1.AddHand(new Tile(Tile.Family.Bamboo, 1));
            p1.AddHand(new Tile(Tile.Family.Bamboo, 1));
            p1.AddHand(new Tile(Tile.Family.Bamboo, 1));

            p2.AddRejected(new Tile(Tile.Family.Bamboo, 1));
            IRule rule = new Pong();

            List<PlayerData> lpd = new List<PlayerData>();
            lpd.Add(p1);
            lpd.Add(p2);

            List<Mahjong.Plugin.IReferee.m_rulepossibility> possi = rule.Execute(lpd, p1);
            Assert.AreEqual(possi.Count, 1);
        }
Exemple #6
0
 //IReferee m_referee;
 public bool AddPlayer(String name)
 {
     PlayerData ins = new PlayerData(name);
     m_players.Add(ins);
     return true;
 }
Exemple #7
0
 private void Form1_Load(object sender, EventArgs e)
 {
     Plugin p = new Plugin(Environment.CurrentDirectory);
     refe = p.GetReferees()[0];
     p1 = new PlayerData("Player 1");
     refe.AddPlayer(p1);
     p2 = new PlayerData("Player 2");
     refe.AddPlayer(p2);
     p3 = new PlayerData("Player 3");
     refe.AddPlayer(p3);
     p4 = new PlayerData("Player 4");
     refe.AddPlayer(p4);
     refe.NewGame();
     Draw();
 }
Exemple #8
0
        private Tile GetTile(PlayerData p, Tile.Family f, int pos)
        {
            Group g = p.GetHand();

            for (int i = 0; i < g.Count; i++)
            {
                if ((g[i].GetFamily() == f) && (g[i].GetNumber() == pos))
                    return g[i];
            }
            return null;
        }
Exemple #9
0
        private bool HaveTile(PlayerData p, Tile.Family f, int pos)
        {
            Group g = p.GetHand();

            for (int i = 0; i < g.Count; i++)
            {
                if ((g[i].GetFamily() == f) && (g[i].GetNumber() == pos))
                    return true;
            }
            return false;
        }
Exemple #10
0
 public bool AddPlayer(PlayerData ins)
 {
     m_players.Add(ins);
     return true;
 }
Exemple #11
0
 public Tile Take(PlayerData p)
 {
     if (p != m_current)
         return null;
     if (m_mutextaken == true)
         return null;
     try
     {
         Tile tmp = GetNewTile();
         m_current.AddHand(tmp);
         m_mutextaken = true;
         Tile ttmp = GetPreviousPlayer().GetRejected();
         TilePosition tp = GetTilePosition(ttmp);
         if (tp == TilePosition.Rejected)
         {
             ChangeTileStatus(GetPreviousPlayer().GetRejected(), TilePosition.Cemetery);
             GetPreviousPlayer().AddCemetery(GetPreviousPlayer().GetRejected());
             GetPreviousPlayer().AddRejected(null);
         }
         return tmp;
     }
     catch (EndGameException edg)
     {
         ///
     }
     return null;
 }
Exemple #12
0
        public bool Rejected(PlayerData p, Tile t)
        {
            if (p != m_current)
                return false;
            if (m_mutextaken == false)
                return false;
            m_mutextaken = false;
            m_current.GetHand().Remove(t);
            GetPreviousPlayer().AddRejected(null);
            m_current.AddRejected(t);
            ChangeTileStatus(t, TilePosition.Rejected);
            m_current = GetNextPlayer();

            return true;
        }
Exemple #13
0
        public bool NewGame()
        {
            if (m_players.Count == 0)
                return false;
            Reset();
            GenerateTiles();
            RandomizeTitles();
            DistributeTitles();
            m_current = m_players[0];
            SetPlayerPosition();

            return true;
        }
Exemple #14
0
        public List<m_rulepossibility> GetRulesPossibilities(PlayerData player)
        {
            List<m_rulepossibility> ins = new List<m_rulepossibility>();

            for (int i = 0; i < m_rules.Count; i++)
            {
                List<m_rulepossibility> tmp = m_rules[i].Execute(m_players, player);
                for (int j = 0; j < tmp.Count; j++)
                    ins.Add(tmp[j]);
            }

            return ins;
        }