public override Graphic enterCommand(String command) { Player player = hb.getPlayer(); Graphic graphic = new Graphic(player.Coord, null, ""); Move where = Move.STALL; switch (command) //see if movement command { case "FORWARD": where = Move.FORWARD; break; case "RIGHT": where = Move.RIGHT; break; case "BACKWARD": where = Move.BACKWARD; break; case "LEFT": where = Move.LEFT; break; } if (where != Move.STALL) //It is a move command { //TODO not just a wall but maybe an elevator. if (!player.move(where)) graphic.Text = "You can't move there." + System.Environment.NewLine; else { graphic.setImage(player.Coord, null); } } else if (command == "ENTER DOWN") { enterElevator(false, graphic); //false for Down } else if (command == "ENTER UP") { enterElevator(true, graphic); //true for Up } else if (command == "ENTER DOOR") { DoorState result = player.enterDoor(); switch (result) { case DoorState.UNLOCKED: graphic.Text = ""; graphic.ExtraFlag = 1; break; case DoorState.LOCKED: graphic.Text = "The door is locked."; break; case DoorState.NOTNEAR: graphic.Text = "You are not near a door."; break; default: graphic.Text = "This should not happen."; break; } } else if (command == "PICKUP") { Item i = player.pickup(); graphic.Text = "You picked up " + (i != null ? i.name() : "nothing") + System.Environment.NewLine; if (i != null && i.name() == "Hourglass") { graphic.ExtraFlag = ((Hourglass)i).getMoreTime(); graphic.Text += "+" + graphic.ExtraFlag + " secs" + System.Environment.NewLine; } } else if (command == "INVT") { graphic.Text = "You are carrying: " + player.showInventory() + System.Environment.NewLine; } else if (command == "INSPECT") { graphic.Text = player.inspectItems() + System.Environment.NewLine; } else if (command == "FLASHLIGHT") { //reveal surrounding areas graphic.Text = "Used Flashlight." + System.Environment.NewLine; graphic.setImage(player.Coord, player.useFlashLight(graphic)); } return graphic; }
//Command ENTER UP & ENTER Down helper private void enterElevator(bool up, Graphic graphic) { Player player = hb.getPlayer(); Floor[] floors = hb.getFloors(); CorrectElevator[] correct_elevator = hb.getCorrectElevators(); WrongElevator[] wrong_elevator = hb.getWrongElevators(); int currX = player.Coord.x; int currY = player.Coord.y; int currfloor = player.Floor.Number - 1; int newFloor = player.Floor.Number - 1; int flag = -1; if (correct_elevator[currfloor].isThereElevator(currX, currY)) { //An attempt to go up or down a correct elevator is made and an elevator exists if (up ? correct_elevator[currfloor].canGoUp() : correct_elevator[currfloor].canGoDown()) { int lastFloor = correct_elevator[currfloor].getLast(); int nextFloor = correct_elevator[currfloor].getNext(); //determined that you are out of sequence if ( (player.getLastFloor() == lastFloor) || (player.getLastFloor() == nextFloor)) { //obtain the nextfloor in sequence newFloor = up ? correct_elevator[currfloor].go_up() : correct_elevator[currfloor].go_down(); newFloor--; //save the last floor of where the player was player.UpdateLastFloor(currfloor+1); flag = 2; } else { flag = 0; } } else flag = 1; } if (wrong_elevator[currfloor].isThereElevator(currX, currY)) //ive yet to work on it { //the last and next elevator that is correct in int lastCorrect = correct_elevator[currfloor].getLast(); int nextCorrect = correct_elevator[currfloor].getNext(); if (up ? wrong_elevator[currfloor].canGoUp() : wrong_elevator[currfloor].canGoDown()) { //We want to avoid sending a player to a correct floor and thus allowing entrance to a correct elevator do { //obtain a random floor to go to. newFloor = up ? wrong_elevator[currfloor].go_up() : wrong_elevator[currfloor].go_down(); } while ((newFloor == lastCorrect) || (newFloor == nextCorrect)); newFloor--; //save the last floor of where the player was if (newFloor == 9) { player.UpdateLastFloor(-1); } //allows for another chance to reach the first floor in sequence else { player.UpdateLastFloor(currfloor + 1); } flag = 2; } else flag = 1; } switch (flag) { case 2: //Elevator taken player.dropItems(); player.Floor = floors[newFloor]; //set the new floor player.Coord = player.Floor.randElevatorCoord(); graphic.Text = "Taking Elevator..." + System.Environment.NewLine; graphic.Text = "Came from elevator " + (player.getLastFloor()) + System.Environment.NewLine; graphic.setImage(player.Coord, null); break; case 1: //Elevator limit reached graphic.Text = "You can't go further " + (up ? "up." : "down."); break; case 0: //Attempting to take correct elevator out of sequence graphic.Text = "Unfortunately you can't take this elevator! (out of sequence)" + System.Environment.NewLine; break; default: graphic.Text = "You are not near an elevator! You are at " + player.stringCoord() + System.Environment.NewLine; break; } }
//Return a list of NamedCoord that are near the current player's coordinate; public ArrayList useFlashLight(Graphic graphic) { ArrayList marks = new ArrayList(); foreach (NamedCoord mark in floor.Coordinates) { if (nearMe(mark.coord)) { marks.Add(mark); if (mark.name == "Monster") { graphic.Text += "Monster!" + System.Environment.NewLine; } } } return marks; }