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; }
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(); }
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; }
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; }
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); }
//IReferee m_referee; public bool AddPlayer(String name) { PlayerData ins = new PlayerData(name); m_players.Add(ins); return true; }
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(); }
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; }
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; }
public bool AddPlayer(PlayerData ins) { m_players.Add(ins); return true; }
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; }
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; }
public bool NewGame() { if (m_players.Count == 0) return false; Reset(); GenerateTiles(); RandomizeTitles(); DistributeTitles(); m_current = m_players[0]; SetPlayerPosition(); return true; }
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; }