public void Execute(Collision collision) { IProjectile proj = ((IProjectile)collision.Collider); IEnvironment envo = (IEnvironment)collision.Collidee; if (envo is LaserField) { proj.BeginDespawn(); } else if (envo is PortalBlock portalBlock) { PortalUtil.HandleProjectilePortal(portalBlock, proj, game.Screen); } else if (proj is BombProjectile && proj.GetHitbox().Width > bombWidth && proj.GetHitbox().Height > bombHeight) { RoomUtil.OpenBombableDoor(game.Screen, envo); } else if (!(proj is SwordBeam) && !(proj is BombProjectile)) { if (collision.IntersectionRec.X >= rightBorder || collision.IntersectionRec.X <= leftBorder || collision.IntersectionRec.Y >= bottomBorder || collision.IntersectionRec.Y <= topBorder) { proj.BeginDespawn(); } } else if (proj is Fireballs) { proj.BeginDespawn(); } }
public void GeneratePseudoRandomNumber_MaxValue10_ExpectLowerThan10() { var maxValue = 10; var result = RoomUtil.GeneratePseudoRandomNumber(maxValue); Assert.IsTrue(result < 10); }
public void ComputeNextRoomId_2X2SizeStartRoom1DirectionE_ExpectResultMinus1() { var roomId = 1; char direction = 'e'; var mazeSize = 2; var result = RoomUtil.ComputeNextRoomId(roomId, direction, mazeSize); Assert.AreEqual(result, -1); }
/// <summary> /// 开启连接 /// </summary> /// <returns></returns> public async Task <bool> ConnectAsync() { _roomId = await RoomUtil.GetLongRoomId(_shotRoomId); if (_roomId == 0) { return(false); } var token = await RoomUtil.GetRoomTokenByShortRoomId(_shotRoomId); if (token.Equals("")) { return(false); } if (!await RoomUtil.ConnectRoomByShortRoomId(_tcpClient, _shotRoomId)) { return(false); } _roomStream = _tcpClient.GetStream(); if (!await SendJoinMsgAsync(token)) { //这是错误处理的代码 return(false); } var headBuffer = new byte[ProtocolHeadLength]; await _roomStream.ReadAsync(headBuffer, 0, headBuffer.Length); DanmuHead danmuHead = DanmuHead.BufferToDanmuHead(headBuffer); if (danmuHead.HeaderLength != ProtocolHeadLength || danmuHead.Action != 8) { //如果头信息的长度不是16,或者Action的的值不是8 (服务器接受认证包后回应的第一个数据) //这是错误处理的代码 return(false); } var dataBuffer = new byte[danmuHead.PacketLength - danmuHead.HeaderLength]; await _roomStream.ReadAsync(dataBuffer, 0, danmuHead.MessageLength()); var s = Encoding.Default.GetString(dataBuffer); var data = JObject.Parse(s); if (int.Parse(data["code"].ToString()) != 0) { return(false); } _connected = true; //循环发送心跳信息 #pragma warning disable 4014 SendHeartbeatLoop(); #pragma warning restore 4014 return(true); }
public int?GetRoom(int roomId, char direction) { var searchedRoomId = RoomUtil.ComputeNextRoomId(roomId, direction, _connectToMaze.GetMazeMapInstance().mazeSize); var room = _connectToMaze.GetMazeMapInstance().mazeRooms.Where(r => r.Id == searchedRoomId).FirstOrDefault(); if (room != null) { return(room.Id); } return(null); }
protected override void Page_Load(object sender, EventArgs e) { //if (!UserIdentity.HasPermission(AccessLevel.Administrator)) //{ // ShowErrors("You don't have permission to view this info, please go away"); // return; //} if (AllCruises.Count == 1 && Request.QueryString["cruiseid"] == null) { Cruise cruise = (Cruise)AllCruises[0]; PageRedirect(string.Format("BookingReportPeriod.aspx?NodeId={0}&SectionId={1}&cruiseid={2}", Node.Id, Section.Id, cruise.Id)); } _util = new RoomUtil(Module); base.Page_Load(sender, e); }
public int ComputeTreasureRoomId(int roomsNumber, List <int> forbiddenIds) { // Set random, only rule not the be in the same room as entrace or trap // Additional business rules could be added. int possibleRoomId = 0; while (true) { possibleRoomId = RoomUtil.GeneratePseudoRandomNumber(roomsNumber); if (!forbiddenIds.Contains(possibleRoomId)) { return(possibleRoomId); } } }
public List <Room> CreateRooms(int roomsNumber, int numberOfTraps) { var rooms = new List <Room>(); List <int> forbiddenIds = new List <int>(); // Not allow to add treasure or trap room id list List <int> trapIds = new List <int>(); // Compute entrance room Id var entranceId = ComputeEntranceRoomId(roomsNumber); forbiddenIds.Add(entranceId); // Compute the list of trap room Ids for (int trap = 0; trap < numberOfTraps; trap++) { var trapIdd = ComputeTrapRoomId(roomsNumber, forbiddenIds); forbiddenIds.Add(trapIdd); // Not to overlapp with another trap trapIds.Add(trapIdd); } // Compute treasure room Id var treasureId = ComputeTreasureRoomId(roomsNumber, forbiddenIds); // Create rooms for (int x = 0; x < Math.Sqrt(roomsNumber); x++) { for (int y = 0; y < Math.Sqrt(roomsNumber); y++) { var roomId = x * (int)Math.Sqrt(roomsNumber) + y; // Create a number based on the tile position in the matrix // TODO add descriptions for room var room = new Room { X = x, // Save tile position Y = y, // Save tile position Id = roomId, HasTrap = trapIds.Contains(roomId), HasTreasure = treasureId == roomId ? true : false, IsEntrance = entranceId == roomId ? true : false, IsVisited = entranceId == roomId ? true : false, }; room.Description = RoomUtil.GenerateRoomDescription(room); rooms.Add(room); } } return(rooms); }
public int ComputeEntranceRoomId(int roomsNumber) { // Random selection of entrance // The only rule is to be on the edges which means that one of axis(x or y) // has to be 0 or maxValue-1 since we are counting from 0. int possibleRoomId = 0; while (true) { possibleRoomId = RoomUtil.GeneratePseudoRandomNumber(roomsNumber - 1); // Get room position on axys -- reverse process of constructing id var size = (int)Math.Sqrt(roomsNumber); var y = possibleRoomId % 10; var x = possibleRoomId / size; // Check that room has external walls on the edge. if (y == 0 || y == size - 1 || x == 0 || x == size - 1) { return(possibleRoomId); } } }
// Collision order: player to item, player to enemy public List <Collision> GetCollisionList() { foreach (IPlayer player in players) { playerHitbox = player.GetPlayerHitbox(); swordHitbox = player.GetSwordHitbox(); // Player/Sword collides with Item foreach (IItem item in ItemList) { if (!DetectionUtil.AddCollision(playerHitbox, item.GetHitbox(), player, item, collisionList) && !InvalidSwordPickups.Contains(item.GetType())) { DetectionUtil.AddCollision(swordHitbox, item.GetHitbox(), player, item, collisionList); } } // Sword collides with Enemy foreach (IEnemy enemy in EnemyList) { foreach (Rectangle enemyHitbox in enemy.GetHitboxes()) { DetectionUtil.AddCollision(swordHitbox, enemyHitbox, player, enemy, collisionList); } } bool collision = false; foreach (IEnvironment environment in CollisionDetectionUtil.DetectionUtil.GetSingleCollisionObjects(EnvironmentList)) { foreach (Rectangle envHitbox in environment.GetHitboxes()) { // Player collides with Environment Rectangle intersectPlayer = Rectangle.Intersect(playerHitbox, envHitbox); if (!intersectPlayer.IsEmpty) { var side = CollisionDetectionUtil.DetectionUtil.DetermineSide(playerHitbox, envHitbox, intersectPlayer); collisionList.Add(new Collision(side, intersectPlayer, player, environment)); if (environment is LoadZone) { foundLoadZoneCollision[outerLoadZoneLoopCounter] = true; } collision = true; break; } } if (collision) { break; } } // Player collides with multi-collision environment foreach (IEnvironment environment in CollisionDetectionUtil.DetectionUtil.GetMultiCollisionObjects(EnvironmentList)) { foreach (Rectangle envHitbox in environment.GetHitboxes()) { DetectionUtil.AddCollision(playerHitbox, envHitbox, player, environment, collisionList); } } // Player collides with Player innerLoadZoneLoopCounter = 0; foreach (IPlayer player2 in players) { Rectangle player2Hitbox = player2.GetPlayerHitbox(); Rectangle intersectPlayer = Rectangle.Intersect(playerHitbox, player2Hitbox); if ((intersectPlayer.Width == playerHitbox.Width && intersectPlayer.Height == playerHitbox.Height) || player.requesting || player2.requesting) { // Do nothing if they are the same or if player is requesting } else if (!intersectPlayer.IsEmpty) { var side = CollisionDetectionUtil.DetectionUtil.DetermineSide(playerHitbox, player2Hitbox, intersectPlayer); collisionList.Add(new Collision(side, intersectPlayer, player, player2)); collision = true; break; } innerLoadZoneLoopCounter++; if (collision) { break; } } //player intersecting with outside bounds foreach (Rectangle bound in roomBounds) { Rectangle intersectPlayer = Rectangle.Intersect(playerHitbox, bound); if (!intersectPlayer.IsEmpty) { var side = CollisionDetectionUtil.DetectionUtil.DetermineSide(playerHitbox, bound, intersectPlayer); collisionList.Add(new Collision(side, intersectPlayer, player, EnvironmentList[0])); //environment object here is passed as a "dummy". There will always be at least 1 evnironment object foundLoadZoneCollision[outerLoadZoneLoopCounter] = true; } } player.requesting = foundLoadZoneCollision[outerLoadZoneLoopCounter]; Rectangle innerRoomInt = Rectangle.Intersect(playerHitbox, roomInner); if (!innerRoomInt.IsEmpty) { RoomUtil.ExitDoor(player.playerID); } else { foundLoadZoneCollision[outerLoadZoneLoopCounter] = true; player.requesting = true; } outerLoadZoneLoopCounter++; } return(collisionList); }
public int ComputeNumberOfTraps(int sizeOfMaze) { var maxNumber = (sizeOfMaze / 3) + 1; return(RoomUtil.GeneratePseudoRandomNumber(maxNumber)); // Total number of traps }