public void TestWorldMethod() { world world1 = new world(); star s = new star(0, new Vector2D(0, 200), 1); projectile p1 = new projectile(1, new Vector2D(0, 376), new Vector2D(0, 0), true, 2); Ship ship = new Ship(1, new Vector2D(0, 0), new Vector2D(0, 0), false, "s", 5, 0); String A = s.ToString(); star s1 = JsonConvert.DeserializeObject <star>(A); world1.addStar(s); world1.setFrame(0); world1.addShip(ship); world1.Fire(1); world1.addproj(p1); world1.setRespawn(300); world1.setSize(750); Assert.AreEqual(world1.getProj().Values.Count, 1); Assert.AreEqual(world1.getShip().Values.Count, 1); Assert.AreEqual(world1.getStar().Values.Count, 1); ship = new Ship(1, new Vector2D(0, 0), new Vector2D(0, 0), true, "s", 5, 0); for (int i = 0; i <= 4; i++) { world1.getShip()[1].hpdecrease(); } world1.respawn(ship); world1.addLostID(1); world1.cleanup(); world1.removeProjectile(p1); world1.removeStar(s); world1.removeShip(ship); Assert.AreEqual(world1.getShip().Values.Count, 0); Assert.AreEqual(world1.getShip().Values.Count, 0); Assert.AreEqual(world1.getStar().Values.Count, 0); world1.update(); s.update(51); s.update(102); s.update(160); s.update(230); }
//get the content information of the current world from the server // and using the JSon to get the objects private void ReceiveWorld(SocketState state) { string totalData = state.sb.ToString(); string[] parts = Regex.Split(totalData, @"(?<=[\n])"); // Loop until we have processed all messages. // We may have received more than one. Ship sp = null; star st = null; projectile pj = null; foreach (string p in parts) { // Ignore empty strings added by the regex splitter if (p.Length == 0) { continue; } // The regex splitter will include the last string even if it doesn't end with a '\n', // So we need to ignore it if this happens. if (p[p.Length - 1] != '\n') { break; } if (p[0] == '{' && p[p.Length - 2] == '}') { JObject jsonObject = JObject.Parse(p); JToken tokenShip = jsonObject["ship"]; //gte the ship object from the server JToken tokenStar = jsonObject["star"]; // get the star object from the server JToken tokenProj = jsonObject["proj"]; // get the projectiles from the server if (tokenShip != null) { sp = JsonConvert.DeserializeObject <Ship>(p);// if ship is not null,get the ship } if (tokenStar != null) { st = JsonConvert.DeserializeObject <star>(p);// if the star is not null, get the star } if (tokenProj != null) { pj = JsonConvert.DeserializeObject <projectile>(p);// if the projectile is not null, get the projectile } //avoid the race condition lock (theworld) { if (sp != null) { if (sp.getHp() > 0) { theworld.addShip(sp);// if the hp is greater than 0, add to the current world if (ships.Contains(sp.getID()) == false) { ships.Add(sp.getID()); handlescore(sp); } } else { handledie(sp); ships.Remove(sp.getID()); theworld.removeShip(sp);//remove the destoryed ship } } if (pj != null) { // if the projectile is still alive, add it to the projectils group if (pj.checkAlive() == true) { theworld.addproj(pj); } // if projectile is not alive, remove it from the projectile group else { theworld.removeProjectile(pj); } } //check the star then add to the star group if (st != null) { theworld.addStar(st); } } } // Then remove it from the SocketState's growable buffer state.sb.Remove(0, p.Length); frametick(); } state.callMe = ReceiveWorld; Handlekey(); NController.GetData(state); }