public void Test_CreateAndDisposeRoom() { #warning Нужно использовать stub и mock объекты! Rooms rooms = new Rooms(); int count = rooms.CollectionRooms.Count; //создаем комнату с одним игроком rooms.AddRoom(new List <QueueGamer>() { new QueueGamer( new ConnectedClient <IMessage>(new TcpClient(), new AuthorizationController()), new DataOfAccount("", "", 0, 0, 0, new TimeSpan())), new QueueGamer( new ConnectedClient <IMessage>(new TcpClient(), new AuthorizationController()), new DataOfAccount("", "", 0, 0, 0, new TimeSpan())) }); Assert.AreEqual(count + 1, rooms.CollectionRooms.Count); RoyalRoom royalRoom = (RoyalRoom)rooms.CollectionRooms[0]; GameObject player = (GameObject)royalRoom.GameLogic.RoomModel.Players[0]; player.SetDestroyed(); royalRoom.GameLogic.RoomModel.MakeStep(1000); Thread.Sleep(500); Assert.AreEqual(count, rooms.CollectionRooms.Count); }
public void TestMethod4() { var rs = new Rooms(10); var rnd = new Random(); var pool = new AttendeePool(); for (int i = 0; i < 5; i++) { Room r = rs.AddRoom("Room" + i.ToString()); for (int t = 0; t < 5; t++) { Event e = new Event("event" + i.ToString() + "_" + t.ToString()); r.addEvent(e); for (int j = 0; j < 3; j++) { e.attendees.Add(pool.Get("Attendee" + rnd.Next(10).ToString())); } } } Action <int, int, double> callback = (int epoch, int iter, double lossval) => { StreamWriter fs = File.AppendText(@"C:\Users\user\Desktop\result.txt"); fs.Write(epoch); fs.Write("\t"); fs.Write(iter); fs.Write("\t"); fs.WriteLine(lossval); fs.Close(); }; rs.anneal(50.0, 30, 1000, 1.2, callback); }
internal void DoAlignment(int max_slot, int nepoch, int niter, double tconst) { Chart chart = (Chart)form.GetControl("グラフ"); Label countlabel = (Label)form.GetControl("重複数"); Check_DB_is_not_open(); // 部屋を準備 rooms = new Rooms(max_slot); var all_room = new List <Room>(); foreach (var room_name in excel2DB.DB.EachRoom()) { all_room.Add(rooms.AddRoom(room_name)); } // 不都合日程の部屋 var p_room = rooms.AddRoom("不都合日程"); p_room.unchangable(); all_room.Add(p_room); // 部屋が使えない日時を設定 foreach (var t in excel2DB.DB.EachProhibitRoom()) { var room_id = t.Item1; var slot = t.Item2; all_room[room_id - 1].events[slot - 1] = Event.Prohibit; } // すべてのイベントを適当に部屋に割り当てる int room_no = 0; var pool = new AttendeePool(); foreach (var event_str in excel2DB.DB.EachEventString()) { var ev = new Event(event_str[1]); //学籍番号 for (int i = 5; i < 10; i++) { if (event_str[i] != "") { ev.Attendees.Add(pool.Get(event_str[i])); } } try { all_room[room_no].addEvent(ev); } catch { room_no++; if (!all_room[room_no].changable) { throw new Exception("イベントが多すぎます"); } all_room[room_no].addEvent(ev); } } // 不都合日程割り当て for (int slot = 0; slot < max_slot; slot++) { var ev = new Event("不都合" + slot.ToString()); foreach (var prof_id in excel2DB.DB.GetProhibitProfs(slot + 1)) { var name = excel2DB.DB.GetProfessorName(prof_id); ev.Attendees.Add(pool.Get(name)); } p_room.addEvent(ev); } // テスト用 //rooms.shuffle(1000); // ここから本番 void callbacklinear(int epoch, int iter, double lossval, int losscount) { int n = epoch * niter + iter; series.Points.AddXY(n, lossval); chart.Update(); countlabel.Text = losscount.ToString(); countlabel.Refresh(); form.SetIterNum(n); } double inittemp = 50.0; for (int failiter = 0; failiter < 3; failiter++) { series = new Series(); //chart.ChartAreas.First().AxisX.IsLogarithmic = true; chart.Series.Add(series); // 全ルームの全スロットで入れ替え rooms.anneal(inittemp, nepoch, niter, tconst, pool.maxid + 1, callbacklinear, false); chart.Series.Clear(); // 重複解消できたか if (countlabel.Text == "0") { break; } inittemp /= 10; } // 全ルームの同スロットで入れ替え double inittemp2 = 0.1; series = new Series(); chart.Series.Add(series); rooms.anneal(inittemp2, nepoch, niter, tconst, pool.maxid + 1, callbacklinear, true); string resultfilename = Program.GetFilename("output.csv", "Text CSV (*.csv)|*.csv|All files(*.*)|*.*"); if (resultfilename == null) { MessageBox.Show("中止しました", "Aborted", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return; } OutputResult(resultfilename, "<?xml version = \"1.0\" encoding = \"UTF-8\" ?>" + rooms.ToString()); //OutputResult("output.csv", "<?xml version = \"1.0\" encoding = \"UTF-8\" ?>"+rooms.ToString()); string listfilename = Program.GetFilename("alllist.csv", "Text CSV (*.csv)|*.csv|All files(*.*)|*.*"); if (resultfilename == null) { MessageBox.Show("中止しました", "Aborted", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return; } excel2DB.DB.WriteProfDefenseList(listfilename); }
internal void DoAlignment1(int max_slot, int nepoch, int niter, double tconst, int[,] slotevent) { Chart chart = (Chart)form.GetControl("グラフ"); Label countlabel = (Label)form.GetControl("重複数"); Check_DB_is_not_open(); // 部屋を準備 rooms = new Rooms(max_slot); var all_room = new List <Room>(); foreach (var room_name in excel2DB.DB.EachRoom()) { all_room.Add(rooms.AddRoom(room_name)); } // 不都合日程の部屋 var p_room = rooms.AddRoom("不都合日程"); p_room.unchangable(); all_room.Add(p_room); // すべてのイベントを部屋に割り当てる int n_event = excel2DB.DB.EventCount(); var pool = new AttendeePool(); var room_no = new int[max_slot]; for (int i = 0; i < max_slot; i++) { room_no[i] = 0; } int max_room = all_room.Count - 1; for (int event_id = 0; event_id < n_event; event_id++) { bool event_allocated = false; for (int slot = 0; slot < max_slot; slot++) { if (room_no[slot] == max_room) { continue; } if (slotevent[slot, event_id] == 1) { DefenseEvent d_ev = excel2DB.DB.GetEvent(event_id + 1); var ev = new Event(d_ev.Student_No); for (int i = 0; i < 5; i++) { if (d_ev.Referee_id[i] != -1) { ev.Attendees.Add(pool.Get(excel2DB.DB.GetProfessorName(d_ev.Referee_id[i]))); } } all_room[room_no[slot]].addEvent(ev, slot); room_no[slot]++; event_allocated = true; break; } } if (!event_allocated) { MessageBox.Show("審査" + event_id.ToString() + "が割り当てられませんでした", "Impossible", MessageBoxButtons.OK, MessageBoxIcon.Information); } } // 不都合日程割り当て for (int slot = 0; slot < max_slot; slot++) { var ev = new Event("不都合" + slot.ToString()); foreach (var prof_id in excel2DB.DB.GetProhibitProfs(slot + 1)) { var name = excel2DB.DB.GetProfessorName(prof_id); ev.Attendees.Add(pool.Get(name)); } p_room.addEvent(ev); } // ここから本番 void callbacklinear(int epoch, int iter, double lossval, int losscount) { series.Points.AddXY(epoch * niter + iter, lossval); chart.Update(); countlabel.Text = losscount.ToString(); countlabel.Refresh(); } double inittemp = 50.0; for (int failiter = 0; failiter < 3; failiter++) { series = new Series(); //chart.ChartAreas.First().AxisX.IsLogarithmic = true; chart.Series.Add(series); // 全ルームの全スロットで入れ替え rooms.anneal(inittemp, nepoch, niter, tconst, pool.maxid + 1, callbacklinear, false); chart.Series.Clear(); // 重複解消できたか if (countlabel.Text == "") { break; } inittemp /= 10; } // 全ルームの同スロットで入れ替え double inittemp2 = 0.1; series = new Series(); chart.Series.Add(series); rooms.anneal(inittemp2, nepoch, niter, tconst, pool.maxid + 1, callbacklinear, true); string resultfilename = Program.GetFilename("output.csv", "Text CSV (*.csv)|*.csv|All files(*.*)|*.*"); if (resultfilename == null) { MessageBox.Show("中止しました", "Aborted", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return; } OutputResult(resultfilename, "<?xml version = \"1.0\" encoding = \"UTF-8\" ?>" + rooms.ToString()); }
public static void Handle_EnterFarm(ClientConnection Client, PacketReader packetReader, byte last) { //FF D1 01 00 13 EA 25 00 00 00 00 00 04 Account User = Client.CurrentAccount; byte subopcode = packetReader.ReadByte(); int farmindex = packetReader.ReadLEInt32();//13 EA 25 00 id?? bool existRoom = Rooms.RoomList.Values.Any(rm => rm.FarmIndex == farmindex); NormalRoom room; if (!existRoom) { string FarmName = string.Empty; string Password = string.Empty; int RoomServerNum, RoomHandle; using (var con = new MySqlConnection(Conf.Connstr)) { con.Open(); var cmd = new MySqlCommand(string.Empty, con); cmd.Parameters.Clear(); cmd.CommandType = CommandType.StoredProcedure; cmd.CommandText = "usp_Farm_GetRoomInfo"; cmd.Parameters.Add("pFarmUniqueNum", MySqlDbType.Int32).Value = farmindex; MySqlDataReader reader = cmd.ExecuteReader(CommandBehavior.SingleRow); if (reader.HasRows) { reader.Read(); FarmName = reader["FarmName"].ToString(); Password = reader["Password"].ToString(); RoomServerNum = Convert.ToInt32(reader["RoomServerNum"]); RoomHandle = Convert.ToInt32(reader["RoomHandle"]); } cmd.Dispose(); reader.Close(); con.Close(); } room = new NormalRoom(); room.setID(Rooms.RoomID); room.setName(FarmName); room.setPassword(Password); room.setItemType(0); room.setIsStepOn(false); room.setRoomKindID(75); room.setIsTeamPlay(0); room.FarmIndex = farmindex; room.Players.Add(User); if (RoomHolder.RoomKindInfos.TryGetValue(75, out var roomkindinfo)) { room.setGameMode(roomkindinfo); } //取得第一個位置 0 User.RoomPos = (byte)(User.Attribute == 3 ? 100 : room.PosList.First()); room.PosList.Remove(User.RoomPos); room.setRoomMasterIndex(User.RoomPos); //User.IsRoomMaster = true; User.InGame = true; User.CurrentRoomId = Rooms.RoomID; Rooms.RoomID += 1; room.StartAutoChangeRoomMaster(); Rooms.AddRoom(room.ID, room); } else { room = Rooms.RoomList.Values.Where(rm => rm.FarmIndex == farmindex).FirstOrDefault(); room.EnterRoom(Client, string.Empty, last); } Client.SendAsync(new GameRoom_Hex("A3", last)); if (!existRoom) { Client.SendAsync(new SendFarmInfo(User, room, farmindex, last)); } Client.SendAsync(new GameRoom_SendPlayerInfo(User, last)); Client.SendAsync(new EnterFarm_0x2DD(last)); Client.SendAsync(new EnterFarm_0x646(last)); }