public void RemoveBoom() { int index = TimerClass.GetIndex(xPos, yPos); if (index != 0) { Program.mygame.GameObjects[index].Destroy(index, false); } CrossBomb(xPos, yPos); }
public override void Update() { //körs en gång if (!temp) { temp = true; //starta en loop av AIs Action2 vilket är movement int index = TimerClass.GetCharIndex(XPosition, YPosition); TimerClass.AddTimer(index, 500, 500, 10000, Program.mygame.Characters[index].Action2); } }
// Skapar en ny bomb och lägger ut den. public static void LayBomb(int XPosition, int YPosition) { Bomb latestBoom = new Bomb(XPosition, YPosition); // Lägg till i gameobjects Program.mygame.GameObjects.Add(latestBoom); // Lägg till timer int index = Collision.GetIndex(latestBoom.XPosition, latestBoom.YPosition); TimerClass.AddTimer(index, 1000, 500, 20, Program.mygame.GameObjects[index].Action2); }
// Metod som startas när spelet gör det static void Main(string[] args) { // Sätter musen till osynlig Console.CursorVisible = false; // Skapar Meny. Menu.MainMenu(); // Ändra storlek på konsolfönstret till största möjliga Console.SetWindowSize(Console.LargestWindowWidth - 10, Console.LargestWindowHeight - 9); // Kalla på drawboard metoden för att rita ut alla saker i walls listan. den körs bara en gång eftersom väggarna inte behöver uppdateras mygame.DrawBoard(); Stopwatch stopwatch = new Stopwatch(); // Denna metoden körs hela tiden while (true) { stopwatch.Start(); // Ritar ut alla gameobjects i listan GameObjects mygame.DrawStuff(); // Kallar på update i alla GameObjects mygame.UpdateBoard(); // Kolla om någon timer ska kallas på TimerClass.TimeMethod(); // Stoppa stopwatch stopwatch.Stop(); // Uppdatera elapsedtime TimerClass.elapsedTime = (int)stopwatch.ElapsedMilliseconds; // Om det tar 5 minuter fölorar du. if (stopwatch.ElapsedMilliseconds == 300000) { End end = new End(); end.GameOver(false); } } }
public override void Blow() { if (f < blinkTimes - 1) { colorSwitch = !colorSwitch; f++; } else { RemoveBoom(); int index = TimerClass.GetIndex(XPosition, YPosition); TimerClass.TimeList.Add(Program.mygame.GameObjects[index].RemoveBlow); int[] list = { 1000, 1000, 1, index, 0, 0 }; TimerClass.intList.Add(list); } }
public override void Action2() { //om det finns positioner att gå till if (posList.Count != 0) { //spara gamla positionen int oldX = XPosition; int oldY = YPosition; //uppdatera position XPosition = posList[0][0]; YPosition = posList[0][1]; //rita ut Draw(0, 0); //ta bort gamla position Delete(oldX, oldY); } //om AI ska bomba else if (shouldBomb && layBomb) { //ropa på "sätt ut bomb action" Action3(); //så att AI inte spammar bomber layBomb = false; //ropa på Action1 efter 3500 millisekunder för att sätta laybomb till true int index = TimerClass.GetCharIndex(XPosition, YPosition); TimerClass.AddTimer(index, 6000, 6000, 1, Program.mygame.Characters[index].Action1); } //hitta bästa rutten posList = FindPath(new int[] { Program.mygame.player.XPosition, Program.mygame.player.YPosition }); }
public override void Action3() { TimerClass.AddTimer(0, 5000, 0, 1, Action2); Move.LayBomb(XPosition, YPosition); }
public void CrossBomb(int oldX, int oldY) { //håller position för explosion, börjar med bombens position List <int> position = new List <int> { XPosition, YPosition }; //mult kollar hur långt bort från bomben explosionen ska hamna int Mult = 0; //vi jobbar med x/2 oldX = oldX / 2; //bools för alla sidor för att hålla reda på vilka som fortfarande används bool right = true; bool left = true; bool up = true; bool down = true; //lägg till explosion ovanpå bomben upList.Add(position); while (true) { //mult blir en större varje gång Mult++; //börjar med höger if (right) { //om vi inte träffar något så lägger vi bara till i listan if (Collision.Wall((oldX + Mult) * 2, oldY)) { position = new List <int> { (oldX + Mult) * 2, oldY }; rightslist.Add(position); } //om vi träffar en vägg och väggen kan sprängas så sätter vi ut en explosion där och tar bort bomben //sen sätter vi right till false så att bomben slutar spränga i den riktningen else { if (Program.mygame.Walls[Collision.GetWallIndex((oldX + Mult) * 2, oldY)].CanBlow) { position = new List <int> { (oldX + Mult) * 2, oldY }; Program.mygame.Walls[0].Destroy(Collision.GetWallIndex((oldX + Mult) * 2, oldY), true); rightslist.Add(position); } right = false; } } //samma sak fast vänster if (left) { if (Collision.Wall((oldX - Mult) * 2, oldY)) { position = new List <int> { (oldX - Mult) * 2, oldY }; leftList.Add(position); } else { if (Program.mygame.Walls[Collision.GetWallIndex((oldX - Mult) * 2, oldY)].CanBlow) { position = new List <int> { (oldX - Mult) * 2, oldY }; Program.mygame.Walls[0].Destroy(Collision.GetWallIndex((oldX - Mult) * 2, oldY), true); leftList.Add(position); } left = false; } } //samma sak fast upp if (up) { if (Collision.Wall(oldX * 2, oldY + Mult)) { position = new List <int> { oldX * 2, oldY + Mult }; upList.Add(position); } else { if (Program.mygame.Walls[Collision.GetWallIndex(oldX * 2, oldY + Mult)].CanBlow) { position = new List <int> { oldX * 2, oldY + Mult }; Program.mygame.Walls[0].Destroy(Collision.GetWallIndex(oldX * 2, oldY + Mult), true); upList.Add(position); } up = false; } } //samma sak fast ner if (down) { if (Collision.Wall(oldX * 2, oldY - Mult)) { position = new List <int> { oldX * 2, oldY - Mult }; downList.Add(position); } else { if (Program.mygame.Walls[Collision.GetWallIndex(oldX * 2, oldY - Mult)].CanBlow) { position = new List <int> { oldX * 2, oldY - Mult }; Program.mygame.Walls[0].Destroy(Collision.GetWallIndex(oldX * 2, oldY - Mult), true); downList.Add(position); } down = false; } } //om alla riktningar är klara slutar vi skapa explosioner if (!down && !up && !left && !right) { break; } //sätt ut timer för att ta bort explosionerna index = Collision.GetIndex(XPosition, YPosition); TimerClass.AddTimer(index, 500, 500, 1, Program.mygame.GameObjects[index].Action3); } }
public override void Update() { // Återställ oldX +old Y int oldX = XPosition; int oldY = YPosition; ConsoleKey input = new ConsoleKey(); //kollar efter spelarens input. OBS måste bytas ut för att inte bli turnbased eftersom readkey väntar på knapptryck. if (Console.KeyAvailable) { input = Console.ReadKey(true).Key; } //movement beroende på knapptryck, xpos är två steg i taget eftersom den är två pixlar bred if (input == ConsoleKey.W) { Move.Up(this); Delete(oldX, oldY); } if (input == ConsoleKey.S) { Move.Down(this); Delete(oldX, oldY); } if (input == ConsoleKey.D) { Move.Right(this); Delete(oldX, oldY); } if (input == ConsoleKey.A) { Move.Left(this); Delete(oldX, oldY); } //om collisionCheck träffar något så står vi stilla och deletar inte något if (!Collision.Wall(XPosition, YPosition)) { XPosition = oldX; YPosition = oldY; } else { Draw(0, 0); } // Lägg bomb if (input == ConsoleKey.Spacebar && canBomb) { List <int> position = new List <int> { XPosition, YPosition }; Move.LayBomb(XPosition, YPosition); canBomb = false; //om sex sekunder kan spelaren bomba igen int index = TimerClass.GetCharIndex(XPosition, YPosition); TimerClass.AddTimer(index, 6000, 6000, 1, Program.mygame.Characters[index].Action2); } }