public void reset() { this.setStatus(RoomStatusByDdz.GAME_WAIT_START); this._matchResult = MATCH_RESULT.EMPTY; //椅子上也许还有人哦 //因此只还原ready setReadyForAllChair(false); setReadyAddForAllChair(""); //红方和黑方,如果人未离开,不用改 this.difen = ""; this.bomb = 0; this.leaveBomb = 0; this.leaveUserId = ""; this.dizhu = ""; this.nongming = ""; this.mingpai = ""; this.turn = ""; //棋盘 reset this._board = new PaiBoardByDdz(); //棋子移动 reset this._record = new RoundModelByDdz(ROUND_TYPE.JIAO_FEN); //回合信息 reset this._round = new List<RoundModelByDdz>(); _isWaitReconnection = false; _curWaitReconnectionTime = 0; this.setWaitReconnection(null); //_waitReconnectionUser = null; }
public RoomModelByDdz(int id, IRuleModel rule, int tab, string gridXml) { this._id = id; this._tab = tab; if ("" == gridXml) { this._name = string.Empty; } else { XmlDocument gridDoc = new XmlDocument(); gridDoc.LoadXml(gridXml); this._name = gridDoc.DocumentElement.Attributes["name"].Value; } this.setStatus(RoomStatusByDdz.GAME_WAIT_START); this._matchResult = MATCH_RESULT.EMPTY; this._chair = new List<IChairModel>(); for (int i = 1; i <= rule.getChairCount(); i++) { this._chair.Add(ChairModelFactory.Create(i, rule)); }//end for //red = ""; //black = ""; this.difen = ""; this.bomb = 0; this.leaveBomb = 0; this.leaveUserId = ""; this.dizhu = ""; this.nongming = ""; this.mingpai = ""; this.turn = ""; this._board = new PaiBoardByDdz(); this._record = new RoundModelByDdz(ROUND_TYPE.JIAO_FEN); this._round = new List<RoundModelByDdz>(); _runAwayMultiG = 1; _isWaitReconnection = false; _curWaitReconnectionTime = 0; _waitReconnectionUser = null; }
/// <summary> /// /// </summary> /// <param name="value"></param> public void setJiaoFen(string value) { // string[] sp = value.Split(','); string userId = sp[0]; int fen = Convert.ToInt32(sp[1]); //底分最多为3分 if (fen > PAI_RULE.JF_MAXVALUE) { fen = PAI_RULE.JF_MAXVALUE; } //loop use int i = 0; int len = this._chair.Count; //save for (i = 0; i < len; i++) { if (this._chair[i].getUser().Id == userId) { //判断一圈结束,save and new if (this._record.isFull()) { this._round.Add(this._record); this._record = new RoundModelByDdz(ROUND_TYPE.JIAO_FEN); } this._record.setFen(fen, userId); // set player //record在后面的使用时注意要判断empty //保存时注意要先逻辑判断完后再保存 //------------------------------------------------------------------- if (RoomStatusByDdz.GAME_START == this.getStatus()) { //3圈全部不叫 if (2 == this._round.Count && false == this._record.isEmpty() && "" != this._record.clock_three) { //check if (PAI_RULE.JF_MINVALUE == (this._round[0] as RoundModelByDdz).clock_one_jiaofen && PAI_RULE.JF_MINVALUE == (this._round[0] as RoundModelByDdz).clock_two_jiaofen && PAI_RULE.JF_MINVALUE == (this._round[0] as RoundModelByDdz).clock_three_jiaofen && PAI_RULE.JF_MINVALUE == (this._round[1] as RoundModelByDdz).clock_one_jiaofen && PAI_RULE.JF_MINVALUE == (this._round[1] as RoundModelByDdz).clock_two_jiaofen && PAI_RULE.JF_MINVALUE == (this._round[1] as RoundModelByDdz).clock_three_jiaofen && PAI_RULE.JF_MINVALUE == this._record.clock_one_jiaofen && PAI_RULE.JF_MINVALUE == this._record.clock_two_jiaofen && PAI_RULE.JF_MINVALUE == this._record.clock_three_jiaofen) { this.setStatus( RoomStatusByDdz.GAMEOVER_ROOMCLEAR_WAIT_START); this._round.Add(this._record); //reset里会new return; } }//end if //判断3分 //满3分当即决出地主 if (PAI_RULE.JF_MAXVALUE == fen) { this.dizhu = userId; this.difen = Convert.ToString(fen); //nongming List<IChairModel> users = this.findUser(this._chair[i].getUser()); // this.setNongMing(users); // this.setStatus(RoomStatusByDdz.GAME_START_CAN_GET_DIZHU); this._round.Add(this._record);//这可能是个不完整的档 this._record = new RoundModelByDdz(ROUND_TYPE.CHU_PAI); return; } if (PAI_RULE.JF_MAXVALUE > fen)//不满3分 { //不满3分,且不是最后一个,继续 if ("" == this._record.clock_three) { return; } else { //此圈都不叫 if (PAI_RULE.JF_MINVALUE == this._record.clock_one_jiaofen && PAI_RULE.JF_MINVALUE == this._record.clock_two_jiaofen && PAI_RULE.JF_MINVALUE == this._record.clock_three_jiaofen) { return; } else { //此圈有至少一个叫,且已经满一圈 //决出地主 //一轮完毕,有叫分,叫分不能重复 int maxJf = MathUtil.selecMaxNumber(this._record.clock_one_jiaofen, this._record.clock_two_jiaofen, this._record.clock_three_jiaofen); if (maxJf == this._record.clock_one_jiaofen) { this.dizhu = this._record.clock_one; this.difen = Convert.ToString(maxJf); //nongming List<IChairModel> users = this.findUser(this._record.clock_one); this.setNongMing(users); } else if (maxJf == this._record.clock_two_jiaofen) { this.dizhu = this._record.clock_two; this.difen = Convert.ToString(maxJf); List<IChairModel> users = this.findUser(this._record.clock_two); this.setNongMing(users); } else if (maxJf == this._record.clock_three_jiaofen) { this.dizhu = this._record.clock_three; this.difen = Convert.ToString(maxJf); List<IChairModel> users = this.findUser(this._record.clock_three); this.setNongMing(users); } else { throw new ArgumentException("can not find max jiao fen"); } // this.setStatus(RoomStatusByDdz.GAME_START_CAN_GET_DIZHU); //操作完再save,此为断挡 this._round.Add(this._record); this._record = new RoundModelByDdz(ROUND_TYPE.CHU_PAI); } } } }//end if break; }//end if }//end for }
private string ByRecord(Dictionary<string, string> rd, RoundModelByDdz _round_j) { if ("" != _round_j.clock_one) { if (!rd.ContainsValue(_round_j.clock_one) && !rd.ContainsKey("A")) { rd.Add("A", _round_j.clock_one); } if (!rd.ContainsValue(_round_j.clock_one) && !rd.ContainsKey("B")) { rd.Add("B", _round_j.clock_one); } if (!rd.ContainsValue(_round_j.clock_one) && !rd.ContainsKey("C")) { rd.Add("C", _round_j.clock_one); } } if ("" != _round_j.clock_two) { if (!rd.ContainsValue(_round_j.clock_two) && !rd.ContainsKey("A")) { rd.Add("A", _round_j.clock_two); } if (!rd.ContainsValue(_round_j.clock_two) && !rd.ContainsKey("B")) { rd.Add("B", _round_j.clock_two); } if (!rd.ContainsValue(_round_j.clock_two) && !rd.ContainsKey("C")) { rd.Add("C", _round_j.clock_two); } } if ("" != _round_j.clock_three) { if (!rd.ContainsValue(_round_j.clock_three) && !rd.ContainsKey("A")) { rd.Add("A", _round_j.clock_three); } if (!rd.ContainsValue(_round_j.clock_three) && !rd.ContainsKey("B")) { rd.Add("B", _round_j.clock_three); } if (!rd.ContainsValue(_round_j.clock_three) && !rd.ContainsKey("C")) { rd.Add("C", _round_j.clock_three); } } string rj = _round_j.toXMLSting(); //replace if(rd.ContainsKey("A")) { rj = rj.Replace(rd["A"], "A"); } if(rd.ContainsKey("B")) { rj = rj.Replace(rd["B"], "B"); } if (rd.ContainsKey("C")) { rj = rj.Replace(rd["C"], "C"); } return rj; }
/// <summary> /// round /// board /// </summary> /// <param name="value"></param> public void setChuPai(string value) { //loop use int i = 0; string[] sp = value.Split(','); string userId = sp[0]; //如果是炸弹则记录 int spLen = sp.Length; if (5 == spLen || 3 == spLen) { //List<int> pcArr = new List<int>(); List<int> pcArr = new List<int>(spLen-1); for (i = 1; i < spLen; i++) { pcArr.Add(PaiCode.convertToCode(sp[i])); } //王炸(火箭)用户要求也算炸弹 if (PaiRuleCompare.validate_bomb(pcArr) || PaiRuleCompare.validate_huojian(pcArr)) { this.bomb++; } } // //判断一圈结束,save and new if (this._record.isFull()) { this._round.Add(this._record); this._record = new RoundModelByDdz(ROUND_TYPE.CHU_PAI); } string pai = string.Empty; // spLen = sp.Length; for (i = 1; i < spLen; i++) { pai += sp[i]; pai += ","; } this._record.setPai(pai, userId); // set player //board spLen = sp.Length; for (i = 1; i < spLen; i++) { this._board.update(sp[i],"del"); } }