diff --git a/Build/Ceed.exe b/Build/Ceed.exe new file mode 100644 index 0000000..8f1f8c4 Binary files /dev/null and b/Build/Ceed.exe differ diff --git a/Code/App.config b/Code/App.config new file mode 100644 index 0000000..56efbc7 --- /dev/null +++ b/Code/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Code/Ceed.csproj b/Code/Ceed.csproj new file mode 100644 index 0000000..9b0d9ba --- /dev/null +++ b/Code/Ceed.csproj @@ -0,0 +1,108 @@ + + + + + Debug + AnyCPU + {620469D7-2681-47A7-9572-F0833596F9ED} + Exe + Ceed__c___speed___lightSpeed_ + Ceed %28c - speed __lightSpeed%29 + v4.7.2 + 512 + true + true + false + C:\Users\djkato\source\CeedPublish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 1 + 1.0.0.%2a + false + true + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + 69D7AE3C70A42E77F0500C8472DC5456AC045D0E + + + Ceed %28c - speed __lightSpeed%29_TemporaryKey.pfx + + + true + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + False + Microsoft .NET Framework 4.7.2 %28x86 and x64%29 + true + + + False + .NET Framework 3.5 SP1 + false + + + + + + + \ No newline at end of file diff --git a/Code/Ceed.csproj.user b/Code/Ceed.csproj.user new file mode 100644 index 0000000..7fb918e --- /dev/null +++ b/Code/Ceed.csproj.user @@ -0,0 +1,17 @@ + + + + + + + + + + en-US + false + ProjectFiles + + + false + + \ No newline at end of file diff --git a/Code/Ceed.sln b/Code/Ceed.sln new file mode 100644 index 0000000..a62555a --- /dev/null +++ b/Code/Ceed.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.29424.173 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ceed", "Ceed.csproj", "{620469D7-2681-47A7-9572-F0833596F9ED}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {620469D7-2681-47A7-9572-F0833596F9ED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {620469D7-2681-47A7-9572-F0833596F9ED}.Debug|Any CPU.Build.0 = Debug|Any CPU + {620469D7-2681-47A7-9572-F0833596F9ED}.Release|Any CPU.ActiveCfg = Release|Any CPU + {620469D7-2681-47A7-9572-F0833596F9ED}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {9E12DDD1-E615-4820-80E0-0D75A25EE98F} + EndGlobalSection +EndGlobal diff --git a/Code/CeedMain/Main.cs b/Code/CeedMain/Main.cs new file mode 100644 index 0000000..f55239a --- /dev/null +++ b/Code/CeedMain/Main.cs @@ -0,0 +1,259 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using SpaceShooter; + +namespace CeedMain +{ + class Program + { + static void Main() + { + int gameStartAction = 0; + //GAMELOOP + while (true) + { + int turnNumber = 0; + Console.SetWindowSize(124, 50); + //MAIN MENU + if (turnNumber == 0) + { + gameStartAction = Renderer.GameStartMenu(false); + } + if (gameStartAction == 2) + { + gameStartAction = Renderer.GameStartMenu(true); + } + if (gameStartAction == 3) + { + break; + } + if (gameStartAction == 1) + { + while (true)//GAME STARTS HERE + { + + bool IWANTTOLEAVE = false; + //INIT PLAYERSHIP + PlayerShip playerShip = new PlayerShip + { + shipHealth = 20, + shipAttackDmg = 1, + shipSpeed = 1, + scannerAmount = 5, + fuelAmount = 20, + Money = 0, + totalDestroyedAsteroids = 0, + totalKilledPirateAmnt = 0 + }; + while (true) //SYSTEM STATS HERE + { + //setup console + Console.SetWindowSize(124, 50); + + //increment explred systems + playerShip.exploredSystemsAmount++; + + //INIT SOLAR SYSTEM + SolarSystem newSolarSystem = new SolarSystem + { + hasAsteroids = SolarSystem.GetRandomBool(), + planetAmount = SolarSystem.SetPlanetAmount(), + hasElectricClouds = SolarSystem.GetRandomBool(), + name = SolarSystem.GenerateName(), + hostility = 0 + }; + + //CREATE AND STORE PLANETS ON A LIST + for (int i = 0; i < newSolarSystem.planetAmount; i++) + { + Planet newPlanet = new Planet + { + areResources = Planet.SetResources(), + isFuel = Planet.SetFuel(), + occupiedByLiving = Planet.SetOccupation(), + name = Planet.GenerateName(), + isDiscovered = false + }; + + //IF THERES INTELIGENT LIFE(newplnt.living==2) SET ITS HOSTILITY AND UPDATE SYSTEMS HOSTILITY TO THE NEW HIGHEST ONE + if (newPlanet.occupiedByLiving == 2) + { + newPlanet.hostility = Planet.SetHostility(); + if (newPlanet.hostility > newSolarSystem.hostility) + { + newSolarSystem.hostility = newPlanet.hostility; + } + + } + else + { + newPlanet.hostility = 0; + } + + //IF PRIMITIVE LIFE = FUEL.TRUE; IF INTELIGENT LIFE=RESORUCES.TRUE, FUEL.TRUE + if (newPlanet.occupiedByLiving == 1) + { + newPlanet.isFuel = true; + + } + else if (newPlanet.occupiedByLiving == 2) + { + newPlanet.isFuel = true; + newPlanet.areResources = true; + } + + newSolarSystem.planetsList.Add(newPlanet); + + } + + //GAME STARTS HERE + while (true) + { + Console.SetWindowSize(124, 50); + + if (playerShip.fuelAmount <= 0 || playerShip.shipHealth <= 0) + { + Console.BackgroundColor = ConsoleColor.DarkMagenta; + Console.ForegroundColor = ConsoleColor.White; + Console.Clear(); + Console.WriteLine(); + Console.WriteLine("You ran out of either HP or Fuel, so you lost!"); + Console.WriteLine("Press any key to go to main menu..."); + Console.ReadKey(); + IWANTTOLEAVE = true; + break; + } + + //IF ITS THE 5TH TURN, ADD SHOP TO SOLARSYSTEM + if (playerShip.exploredSystemsAmount % 3 == 0) + { + newSolarSystem.shop = true; + } + + + //RENDER GUI + int input1 = Renderer.ChooseAction(newSolarSystem, newSolarSystem.planetsList, playerShip); + + //PLAYER WANTS EXPLORE + if (input1 == 1) + { + Console.WriteLine(); + Console.WriteLine("type the index number of the planet you want to explore[ENTER]..."); + int input2 = Convert.ToInt32(Console.ReadLine()); //GETS PLAYERS INDEX OF EXPLORE + + // CHECKS IF THE PLANET CAN BE EXPLORED + if (newSolarSystem.planetsList[input2].isDiscovered) + { + + newSolarSystem.planetsList[input2].isExplored = true; + + //IF PLANET HAS FUEL, ADD FUEL TO SHIP + if (newSolarSystem.planetsList[input2].isFuel) + { + playerShip.fuelAmount += Planet.AddRandomFuelAmount(); + newSolarSystem.planetsList[input2].isFuel = false; + } + + //STARTS MINIGAME IF HOSTILITY > 0 + if(newSolarSystem.planetsList[input2].hostility > 0 || newSolarSystem.hasAsteroids) + { + playerShip = SpaceShooter.MainProgram.ShooterMain(playerShip, newSolarSystem, input2); + } + + + if (newSolarSystem.planetsList[input2].areResources) + { + newSolarSystem.planetsList[input2].areResources = false; + playerShip.scannerAmount += 1; + } + } + + // IF THE PLAYERS INDEX ISNT EPLOREABLE + else + { + Console.WriteLine(); + Console.WriteLine("You cant explore this planet, you havent discovered it yet"); + Console.WriteLine("Press Any key to continue..."); + Console.ReadKey(); + + } + } + else if (input1 == 2) //PLAYER WANTS TO SCAN + { + if (playerShip.scannerAmount > 0) + { + playerShip.scannerAmount -= 1; + int[] scanIndexes = PlayerShip.GetScanIndexes(newSolarSystem); //RETURNS ARRAY OF RANDOM INDEXES TO SCAN + foreach (int a in scanIndexes) //MAKES INDEXES DISCOVERED + { + newSolarSystem.planetsList[a].isDiscovered = true; + } + } + else + { + Console.WriteLine("You dont have enough Scanners!"); + Console.WriteLine("Press any key to continue..."); + Console.ReadKey(); + } + } + else if (input1 == 3) //PLAYER WANDERS + { + int randomPlanetIndex = newSolarSystem.planetsList.IndexOf(newSolarSystem.planetsList[PlayerShip.Wander(newSolarSystem)]); + playerShip = SpaceShooter.MainProgram.ShooterMain(playerShip,newSolarSystem , randomPlanetIndex); + newSolarSystem.planetsList[randomPlanetIndex].isDiscovered = true; + newSolarSystem.planetsList[randomPlanetIndex].isExplored = true; + if (newSolarSystem.planetsList[randomPlanetIndex].isFuel) + { + playerShip.fuelAmount += Planet.AddRandomFuelAmount(); + newSolarSystem.planetsList[randomPlanetIndex].isFuel = false; + } + if (newSolarSystem.planetsList[randomPlanetIndex].areResources) + { + playerShip.scannerAmount += 1; + newSolarSystem.planetsList[randomPlanetIndex].areResources = false; + } + playerShip.fuelAmount -= 3; + + } + else if (input1 == 4) //NEW GALAXY + { + playerShip.fuelAmount -= 10; + break; + } + else if(input1 == 5)//SHOP + { + playerShip = Renderer.Shop(playerShip); + } + else if(input1 == 6) + { + IWANTTOLEAVE = true; + break; + } + + } + + if(IWANTTOLEAVE) + { + break; + } + + } + if (IWANTTOLEAVE) + { + IWANTTOLEAVE = false; + break; + } + } + + + } + } + + + + } + } +} diff --git a/Code/CeedMain/PirateShip.cs b/Code/CeedMain/PirateShip.cs new file mode 100644 index 0000000..250a7a0 --- /dev/null +++ b/Code/CeedMain/PirateShip.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CeedMain +{ + class PirateShip : ShipTemplate + { + + } +} diff --git a/Code/CeedMain/Planet.cs b/Code/CeedMain/Planet.cs new file mode 100644 index 0000000..31cfd17 --- /dev/null +++ b/Code/CeedMain/Planet.cs @@ -0,0 +1,93 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CeedMain +{ + class Planet + { + private static readonly Random _random = new Random(); + public string name; + public bool isExplored; + public int hostility; //0 = peaceful ... 5 = deadly + public int occupiedByLiving; //0 == no;1==primitive;2==intelligent + public bool isFuel; + public bool areResources; + public bool isDiscovered; + + public static int AddRandomFuelAmount() + { + return (_random.Next(1, 5)); + } + public static int SetOccupation() + { + + int tmp = _random.Next(0, 2); + if (tmp == 1) + { + return _random.Next(1, 3); + } + else + { + return 0; + } + } + + public static bool SetFuel() + { + + int tmp = _random.Next(0, 2); + if (tmp == 1) + { + return true; + } + else + { + return false; + } + + } + + public static bool SetResources() + { + + int tmp = _random.Next(0, 2); + if (tmp == 1) + { + return true; + } + else + { + return false; + } + } + + public static int SetHostility() + { + + int tmp = _random.Next(1, 6); + return tmp; + } + + public static string GenerateName() + { + char[] chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".ToCharArray(); + + + int letterLength = _random.Next(1, 10); + + string name = ""; + int i; + for (int f = 0; f < letterLength; f++) + { + i = _random.Next(chars.Length); + name += Char.ToString(chars[i]); + } + + return name; + } + + } +} diff --git a/Code/CeedMain/PlayerShip.cs b/Code/CeedMain/PlayerShip.cs new file mode 100644 index 0000000..3b7a9b8 --- /dev/null +++ b/Code/CeedMain/PlayerShip.cs @@ -0,0 +1,94 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CeedMain +{ + class PlayerShip : ShipTemplate + { + + private static readonly Random _random = new Random(); + public int scannerAmount; + public int fuelAmount; + public int exploredSystemsAmount; + public int Money; + + //SpaceShooter vars + public int totalKilledPirateAmnt = 0; + public int totalDestroyedAsteroids = 0; + public int killedPirateAmnt = 0; + public bool isFiring = false; + public int shipPosY = SpaceShooter.Render.yGridSize * 2 / 3; + public int shipPosX = SpaceShooter.Render.xGridSize / 2; + public string[,] shipModel = new string[4, 10]; + + //OG methods + public static int[] GetScanIndexes(SolarSystem newSolarSytem) + { + var scanAmnt = _random.Next(0, newSolarSytem.planetAmount); + int[] scanIndexs = new int[scanAmnt]; + for (int i = 0; i < scanAmnt; i++) + { + scanIndexs[i] = _random.Next(0, newSolarSytem.planetAmount); + } + return scanIndexs; + + } + public static int Wander(SolarSystem newSolarSystem) + { + return (_random.Next(0, newSolarSystem.planetAmount)); + } + + //SpaceShooter Methods + public static string[,] SetShipModel() + { + string[,] shipGraphic = new string[4, 10]; + shipGraphic[0, 0] = " "; + shipGraphic[0, 1] = " "; + shipGraphic[0, 2] = " "; + shipGraphic[0, 3] = " "; + shipGraphic[0, 4] = "_"; + shipGraphic[0, 5] = "_"; + shipGraphic[0, 6] = " "; + shipGraphic[0, 7] = " "; + shipGraphic[0, 8] = " "; + shipGraphic[0, 9] = " "; + + shipGraphic[1, 0] = " "; + shipGraphic[1, 1] = " "; + shipGraphic[1, 2] = " "; + shipGraphic[1, 3] = "/"; + shipGraphic[1, 4] = " "; + shipGraphic[1, 5] = " "; + shipGraphic[1, 6] = @"\"; + shipGraphic[1, 7] = " "; + shipGraphic[1, 8] = " "; + shipGraphic[1, 9] = " "; + + shipGraphic[2, 0] = "|"; + shipGraphic[2, 1] = " "; + shipGraphic[2, 2] = "_"; + shipGraphic[2, 3] = "|"; + shipGraphic[2, 4] = " "; + shipGraphic[2, 5] = " "; + shipGraphic[2, 6] = "|"; + shipGraphic[2, 7] = "_"; + shipGraphic[2, 8] = " "; + shipGraphic[2, 9] = "|"; + + shipGraphic[3, 0] = "|"; + shipGraphic[3, 1] = "="; + shipGraphic[3, 2] = "|"; + shipGraphic[3, 3] = "_"; + shipGraphic[3, 4] = "|"; + shipGraphic[3, 5] = "|"; + shipGraphic[3, 6] = "_"; + shipGraphic[3, 7] = "|"; + shipGraphic[3, 8] = "="; + shipGraphic[3, 9] = "|"; + return shipGraphic; + } + } +} diff --git a/Code/CeedMain/Renderer.cs b/Code/CeedMain/Renderer.cs new file mode 100644 index 0000000..e3bbb4d --- /dev/null +++ b/Code/CeedMain/Renderer.cs @@ -0,0 +1,413 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net.Http.Headers; +using System.Text; +using System.Threading.Tasks; + +namespace CeedMain +{ + class Renderer + { + + public static int GameStartMenu(bool gameContinuePressed) + { + + + Console.BackgroundColor = ConsoleColor.DarkMagenta; + Console.Clear(); + Console.WriteLine(); + Console.ForegroundColor = ConsoleColor.White; + Console.WriteLine("Welcome to"); + Console.ForegroundColor = ConsoleColor.Magenta; + Console.WriteLine("CeeD"); + Console.ForegroundColor = ConsoleColor.White; + Console.WriteLine(); + Console.WriteLine("Game Rules: The point of the game is to explore as many Solar Systems as possible. Each system has"); + Console.WriteLine("a random amount of Fuel and Resources. Fuel gives you fuel, and Resources give you Scanners, which"); + Console.WriteLine("is an ability to randomly scout out planets, and find out of their details."); + Console.WriteLine("When you start a new game, youll see that you dont know any of the planets, and thats becaue you"); + Console.WriteLine("Havent discovered their location yet, you just see they exist. You use the scanner to find where they are,"); + Console.WriteLine("and if they are worth exploring. Exploring means going to the planet and taking its Resources and Fuel, but"); + Console.WriteLine("be warned, some planets have intelligent life, and can be Hazardous. If you explore a dangerous planet, youll"); + Console.WriteLine("take damage, try to not die! If you run out of scanners, you can use Wander, but that consumes fuel, which is limited"); + Console.WriteLine("too. Every fuel reserve gives you between 1-5 fuel."); + Console.WriteLine("When referencing Planets, Index refers to the number inside the square brackets, for example:"); + Console.WriteLine("RANDOMNAME[1] <- in that case index is 1"); + Console.WriteLine("When using actions, press the index number after it, in the case of Explore, type numbers after it n press enter to submit."); + Console.WriteLine("Minigame Controls:"); + Console.WriteLine("Movement: WASD"); + Console.WriteLine("Shoot: Spacebar"); + Console.ForegroundColor = ConsoleColor.Red; + Console.WriteLine("Try not to die, Good luck ;)"); + Console.ForegroundColor = ConsoleColor.Gray; + Console.WriteLine(); + Console.WriteLine(); + Console.WriteLine("Start new game [SPACE]"); + Console.WriteLine(); + Console.WriteLine(); + if (gameContinuePressed == true) + { + Console.WriteLine("CURRENTLY UNSUPPORTED!"); + } + else + { + Console.WriteLine("Continue game [L]"); + } + Console.WriteLine(); + Console.WriteLine(); + Console.WriteLine("Close game at any time: CTRL + C"); + var input = Console.ReadKey(); + if (input.Key == ConsoleKey.Spacebar) + { + return (1); + } + if (input.Key == ConsoleKey.L) + { + return (2); + } + if (input.Key == ConsoleKey.Escape) + { + return (3); + } + else + { + return (0); + } + } + + /*public static int SystemScreen(int scannerAmount, int fuelAmount, string systemName) + { + + Console.BackgroundColor = ConsoleColor.DarkMagenta; + Console.Clear(); + Console.WriteLine(); + Console.ForegroundColor = ConsoleColor.White; + Console.WriteLine(); + Console.WriteLine("Welcome to System " + systemName); + Console.WriteLine(); + Console.WriteLine(); + if (scannerAmount > 0) + { + Console.WriteLine("Scan System(-1 Scanner{Currently have: " + scannerAmount + ") [1]"); + } + Console.WriteLine(); + if (fuelAmount > 2) + { + Console.WriteLine("Explore System(-2 Fuel{Currently have: " + fuelAmount + ") [2]"); + } + Console.WriteLine(); + Console.WriteLine("Strand [3]"); + Console.WriteLine(); + Console.WriteLine("RageQuit [ESC]"); + + while (true) + { + var input = Console.ReadKey(); + if (input.Key == ConsoleKey.NumPad1) + { + return (1); + } + if (input.Key == ConsoleKey.NumPad2) + { + return (2); + } + if (input.Key == ConsoleKey.NumPad3) + { + return (3); + } + if (input.Key == ConsoleKey.Escape) + { + return (4); + + } + else + { + + } + } + }*/ //DEAD CODE + + public static void DebugScan(SolarSystem newSolarSytem, List planetList) + { + + Console.BackgroundColor = ConsoleColor.DarkMagenta; + Console.Clear(); + Console.WriteLine(); + Console.ForegroundColor = ConsoleColor.White; + Console.WriteLine("Scan results of the system " + newSolarSytem.name + ":"); + string hostilityConverted = ""; + + switch (newSolarSytem.hostility) //Draw Hostility + { + case 0: + hostilityConverted = "Peaceful"; + break; + case 1: + hostilityConverted = "Passive"; + break; + case 2: + hostilityConverted = "Cautious"; + break; + case 3: + hostilityConverted = "Scary"; + break; + case 4: + hostilityConverted = "Dangerous"; + break; + case 5: + hostilityConverted = "Deadly"; + break; + } + Console.WriteLine(); + Console.WriteLine("System is " + hostilityConverted); + + + if (newSolarSytem.hasAsteroids == true) + { + Console.WriteLine(); + Console.WriteLine(); + Console.WriteLine("System contains Asteroid fields"); + } + + if (newSolarSytem.hasAsteroids == true) + { + Console.WriteLine(); + Console.WriteLine(); + Console.WriteLine("System has electric field disturbences present"); + } + + Console.WriteLine(); + Console.WriteLine(); + Console.WriteLine("There are " + newSolarSytem.planetAmount + " planets:"); + + Console.WriteLine(); + Console.WriteLine("-name | hostility | Resources | Fuel | Occupied"); + + foreach (Planet a in planetList) + { + Console.WriteLine(); + Console.Write("- " + a.name); + Console.Write("| " + a.hostility); + Console.Write(" | " + a.areResources); + Console.Write(" | " + a.isFuel); + Console.Write(" | " + a.occupiedByLiving); + a.isDiscovered = true; + } + + Console.ForegroundColor = ConsoleColor.Gray; + Console.WriteLine(); + Console.WriteLine(); + Console.WriteLine("press any key to continue.."); + Console.WriteLine(); + Console.ReadKey(); + } + + public static int ChooseAction(SolarSystem newSolarSystem, List planetList, PlayerShip playerShip) + { + + Console.BackgroundColor = ConsoleColor.DarkMagenta; + Console.ForegroundColor = ConsoleColor.White; + Console.Clear(); + Console.WriteLine(); + Console.WriteLine(); + Console.WriteLine("Welcome to System " + newSolarSystem.name + ", What would you like to do?"); + Console.WriteLine(); + Console.WriteLine(); + Console.WriteLine("Your ship data:"); + Console.WriteLine(); + Console.WriteLine("-Systems Explored: " + playerShip.exploredSystemsAmount); + Console.WriteLine("-Fuel: " + playerShip.fuelAmount); + Console.WriteLine("-Health: " + playerShip.shipHealth); + Console.WriteLine("-Money: " + playerShip.Money + "đ"); + Console.WriteLine("-Scanner Amount: " + playerShip.scannerAmount); + Console.WriteLine("-Total ships destroyed: " + playerShip.totalKilledPirateAmnt); + Console.WriteLine("-total asteroids destroyed: " + playerShip.totalDestroyedAsteroids); + Console.WriteLine(); + Console.WriteLine(); + if (newSolarSystem.hasAsteroids) + { + Console.WriteLine("Solar System has asteroid belts, be wary!"); + } + + Console.WriteLine(); + + if (newSolarSystem.shop) + { + Console.WriteLine("Enter Shop[B/5]"); + } + Console.WriteLine(); + Console.WriteLine(); + Console.WriteLine("There are " + newSolarSystem.planetAmount + " planets:"); + Console.WriteLine(); + Console.WriteLine(); + for (int i = 0; i < newSolarSystem.planetAmount; i++) + { + if (planetList[i].isDiscovered == true) + { + string consoleOutput = "-" + planetList[i].name + "[" + i + "]"; + + if (planetList[i].hostility > 0) + { + consoleOutput += " |hostility:" + planetList[i].hostility; + } + + if (planetList[i].isFuel) + { + consoleOutput += " |Fuel:" + planetList[i].isFuel; + } + + if (planetList[i].areResources) + { + consoleOutput += " |Resources:" + planetList[i].areResources; + } + if (planetList[i].isExplored) + { + consoleOutput += "! HAS BEEN EXPLORED !"; + } + Console.WriteLine(consoleOutput); + } + else + { + Console.WriteLine("-" + "???"); + } + } + Console.WriteLine(); + Console.WriteLine(); + Console.WriteLine("Explore[E/1]"); + Console.WriteLine(); + Console.WriteLine("Scan[S/2]"); + Console.WriteLine(); + Console.WriteLine("Wander[W/3]"); + Console.WriteLine(); + Console.WriteLine("Move to next System(uses 10 fuel)[4,Q]"); + Console.WriteLine(); + Console.WriteLine("Ragequit[ESC]"); + + while (true) //WAIT FOR INPUT + { + var input = Console.ReadKey(); + if (input.Key == ConsoleKey.NumPad1 || input.Key == ConsoleKey.E) + { + return 1; + } + else if (input.Key == ConsoleKey.NumPad2 || input.Key == ConsoleKey.S) + { + return (2); + } + else if (input.Key == ConsoleKey.NumPad3 || input.Key == ConsoleKey.W) + { + return (3); + } + else if (input.Key == ConsoleKey.NumPad4 || input.Key == ConsoleKey.Q) + { + return (4); + } + + else if (input.Key == ConsoleKey.NumPad5 || input.Key == ConsoleKey.B) + { + return (5); + } + + else if (input.Key == ConsoleKey.Escape) + { + return (6); + } + + } + + } + + public static PlayerShip Shop(PlayerShip playerShip) + { + + while (true) + { + + Console.BackgroundColor = ConsoleColor.DarkMagenta; + Console.ForegroundColor = ConsoleColor.White; + Console.Clear(); + Console.WriteLine(); + Console.WriteLine(); + Console.WriteLine("Welcome to the shop!"); + Console.WriteLine(); + Console.WriteLine(); + Console.WriteLine("Your ship data:"); + Console.WriteLine(); + Console.WriteLine("-Systems Explored: " + playerShip.exploredSystemsAmount); + Console.WriteLine("-Fuel: " + playerShip.fuelAmount); + Console.WriteLine("-Health: " + playerShip.shipHealth); + Console.WriteLine("-Money: " + playerShip.Money + "đ"); + Console.WriteLine("-Scanner Amount: " + playerShip.scannerAmount); + Console.WriteLine("-Total ships destroyed: " + playerShip.totalKilledPirateAmnt); + Console.WriteLine("-total asteroids destroyed: " + playerShip.totalDestroyedAsteroids); + Console.WriteLine(); + Console.WriteLine(); + Console.WriteLine(); + Console.WriteLine("Fix ship(+1hp, -5đ)[1]"); + Console.WriteLine(); + Console.WriteLine("Buy 1 Scanner(10đ)[2]"); + Console.WriteLine(); + Console.WriteLine("Buy 1 Fuel(2đ)[3]"); + Console.WriteLine(); + Console.WriteLine("Exit[ESC]"); + + var input = Console.ReadKey(); + if (input.Key == ConsoleKey.NumPad1) + { + if (playerShip.Money >= 5) + { + if (playerShip.shipHealth <= 20) + { + playerShip.Money -= 5; + playerShip.shipHealth += 1; + } + else + { + Console.WriteLine("Youre at full health/out of money!"); + Console.ReadKey(); + } + } + } + else if (input.Key == ConsoleKey.NumPad2) + { + if (playerShip.Money >= 10) + { + playerShip.Money -= 10; + playerShip.scannerAmount += 1; + } + else + { + Console.WriteLine("Youre out of money!"); + Console.ReadKey(); + } + } + else if (input.Key == ConsoleKey.NumPad3 || input.Key == ConsoleKey.W) + { + if (playerShip.Money >= 2) + { + playerShip.Money -= 2; + playerShip.fuelAmount += 1; + } + else + { + Console.WriteLine("Youre out of money!"); + Console.ReadKey(); + } + } + + else if (input.Key == ConsoleKey.Escape) + { + + return playerShip; + } + + + } + + + + } + } + +} diff --git a/Code/CeedMain/ShipTemplate.cs b/Code/CeedMain/ShipTemplate.cs new file mode 100644 index 0000000..e74cb07 --- /dev/null +++ b/Code/CeedMain/ShipTemplate.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CeedMain +{ + class ShipTemplate + { + public int shipSpeed; + public int shipAttackDmg; + public int shipHealth; + } +} diff --git a/Code/CeedMain/SolarSystem.cs b/Code/CeedMain/SolarSystem.cs new file mode 100644 index 0000000..5604547 --- /dev/null +++ b/Code/CeedMain/SolarSystem.cs @@ -0,0 +1,69 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace CeedMain +{ + class SolarSystem + { + private static readonly Random _random = new Random(); + public List planetsList = new List(); + public string name; + public int hostility; //0 = peaceful ... 5 = deadly + public int planetAmount; + public int occupiedByLiving; //0 == no;1==primitive;2==intelligent + public bool hasAsteroids; + public bool shop; + public bool hasElectricClouds; + + public static string GenerateName() + { + char[] chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".ToCharArray(); + + + int letterLength = _random.Next(1, 5); + int numberLength = _random.Next(1, 10); + string name = ""; + int i; + for (int f = 0; f < letterLength; f++) + { + i = _random.Next(chars.Length); + name += Char.ToString(chars[i]); + } + name += "-"; + for (int f = 0; f < numberLength; f++) + { + name += _random.Next(0, 9).ToString(); + } + + return (name); + } + public static int SetPlanetAmount() + { + + + return (_random.Next(2, 13)); + } + public static int SetMoonAmount() + { + + + return (_random.Next(0, 6)); + } + public static bool GetRandomBool() + { + + var temp = _random.Next(0, 2); + if (temp == 0) + { + return false; + } + if (temp == 1) + { + return true; + } + else { return false; } + } + } +} diff --git a/Code/Properties/AssemblyInfo.cs b/Code/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..5ac7d97 --- /dev/null +++ b/Code/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Ceed (c - speed __lightSpeed)")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Ceed (c - speed __lightSpeed)")] +[assembly: AssemblyCopyright("Copyright © 2020")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("620469d7-2681-47a7-9572-f0833596f9ed")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Code/SpaceShooter/Assets.txt b/Code/SpaceShooter/Assets.txt new file mode 100644 index 0000000..42d7390 --- /dev/null +++ b/Code/SpaceShooter/Assets.txt @@ -0,0 +1,25 @@ +ENEMY SHIP + __||__ +|=\ || /=| + \__/ + +Friendly Ship + __ + / \ +| _| |_ | +|=|_||_|=| + +Asteroid + ___ +/ \_ +| \ +\ / + \___/ + Bun + +(\ /) +( . .) +c(") (") + +--MAKE THE WINDOW POS SHAKE WHEN HIT +--MAKE OPTIONS > B/W MODE FOR FPS IMPROVEMENT, BUT ADD COLORS \ No newline at end of file diff --git a/Code/SpaceShooter/Asteroid.cs b/Code/SpaceShooter/Asteroid.cs new file mode 100644 index 0000000..11afeb3 --- /dev/null +++ b/Code/SpaceShooter/Asteroid.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SpaceShooter +{ + class Asteroid + { + public static readonly Random _random = new Random(); + public int asteroidPosX; + public int asteroidPosY; + public int speed; + public string[,] AsteroidModel = new string[5,7]; + public static string[,] SetAsteroidModel() + { + string[,] asteroidGraphic = new string[5,7]; + + asteroidGraphic[0, 0] = " "; + asteroidGraphic[0, 1] = "_"; + asteroidGraphic[0, 2] = "_"; + asteroidGraphic[0, 3] = "_"; + asteroidGraphic[0, 4] = " "; + asteroidGraphic[0, 5] = " "; + asteroidGraphic[0, 6] = " "; + + asteroidGraphic[1, 0] = "/"; + asteroidGraphic[1, 1] = " "; + asteroidGraphic[1, 2] = " "; + asteroidGraphic[1, 3] = " "; + asteroidGraphic[1, 4] = @"\"; + asteroidGraphic[1, 5] = "_"; + + asteroidGraphic[2, 0] = "|"; + asteroidGraphic[2, 1] = " "; + asteroidGraphic[2, 2] = " "; + asteroidGraphic[2, 3] = " "; + asteroidGraphic[2, 4] = " "; + asteroidGraphic[2, 5] = " "; + asteroidGraphic[2, 6] = @"\"; + + asteroidGraphic[3, 0] = @"\"; + asteroidGraphic[3, 1] = " "; + asteroidGraphic[3, 2] = " "; + asteroidGraphic[3, 3] = " "; + asteroidGraphic[3, 4] = " "; + asteroidGraphic[3, 5] = " "; + asteroidGraphic[3, 6] = "/"; + + asteroidGraphic[4, 0] = " "; + asteroidGraphic[4, 1] = @"\"; + asteroidGraphic[4, 2] = "_"; + asteroidGraphic[4, 3] = "_"; + asteroidGraphic[4, 4] = "_"; + asteroidGraphic[4, 5] = "/"; + asteroidGraphic[4, 6] = " "; + + return asteroidGraphic; + } + + } +} diff --git a/Code/SpaceShooter/DEADShip.cs b/Code/SpaceShooter/DEADShip.cs new file mode 100644 index 0000000..47e7c9a --- /dev/null +++ b/Code/SpaceShooter/DEADShip.cs @@ -0,0 +1,70 @@ +using System; +using System.CodeDom.Compiler; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SpaceShooter +{ + class DEADShip + { + public int killedPirateAmnt = 0; + public bool isFiring = false; + public static int speed; + public int health = 20; + public int shipPosY = Render.yGridSize*2/3 ; + public int shipPosX = Render.xGridSize/2; + public string[,] shipModel = new string[4, 10]; + public static string[,] SetShipModel() + { + string[,] shipGraphic= new string[4, 10]; + shipGraphic[0, 0] = " "; + shipGraphic[0, 1] = " "; + shipGraphic[0, 2] = " "; + shipGraphic[0, 3] = " "; + shipGraphic[0, 4] = "_"; + shipGraphic[0, 5] = "_"; + shipGraphic[0, 6] = " "; + shipGraphic[0, 7] = " "; + shipGraphic[0, 8] = " "; + shipGraphic[0, 9] = " "; + + shipGraphic[1, 0] = " "; + shipGraphic[1, 1] = " "; + shipGraphic[1, 2] = " "; + shipGraphic[1, 3] = "/"; + shipGraphic[1, 4] = " "; + shipGraphic[1, 5] = " "; + shipGraphic[1, 6] = @"\"; + shipGraphic[1, 7] = " "; + shipGraphic[1, 8] = " "; + shipGraphic[1, 9] = " "; + + shipGraphic[2, 0] = "|"; + shipGraphic[2, 1] = " "; + shipGraphic[2, 2] = "_"; + shipGraphic[2, 3] = "|"; + shipGraphic[2, 4] = " "; + shipGraphic[2, 5] = " "; + shipGraphic[2, 6] = "|"; + shipGraphic[2, 7] = "_"; + shipGraphic[2, 8] = " "; + shipGraphic[2, 9] = "|"; + + shipGraphic[3, 0] = "|"; + shipGraphic[3, 1] = "="; + shipGraphic[3, 2] = "|"; + shipGraphic[3, 3] = "_"; + shipGraphic[3, 4] = "|"; + shipGraphic[3, 5] = "|"; + shipGraphic[3, 6] = "_"; + shipGraphic[3, 7] = "|"; + shipGraphic[3, 8] = "="; + shipGraphic[3, 9] = "|"; + return shipGraphic; + } + + + } +} diff --git a/Code/SpaceShooter/GameLogic.cs b/Code/SpaceShooter/GameLogic.cs new file mode 100644 index 0000000..740043a --- /dev/null +++ b/Code/SpaceShooter/GameLogic.cs @@ -0,0 +1,254 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.InteropServices; +using System.Security.Cryptography.X509Certificates; +using System.Text; +using System.Threading.Tasks; +using CeedMain; + +namespace SpaceShooter +{ + class GameLogic + { + private static int pirateY = 0; + private static readonly int collisionDistShip = 5; + + private readonly static Random _random = new Random(); + + //SHIP STUFF + public static PlayerShip Controller(PlayerShip _ship) + { + while (true) + { + switch (Console.ReadKey(true).Key) + { + + case ConsoleKey.A: + if (_ship.shipPosX > 5) + { _ship.shipPosX--; } + break; + case ConsoleKey.D: + if (_ship.shipPosX < Render.xGridSize - 5) + { _ship.shipPosX++; } + break; + case ConsoleKey.W: + if (_ship.shipPosY > 3) + { _ship.shipPosY--; } + break; + case ConsoleKey.S: + if (_ship.shipPosY < Render.yGridSize - 3) + { _ship.shipPosY++; } + break; + case ConsoleKey.Spacebar: + _ship.isFiring = true; + break; + } + + return _ship; + + } + } + + //ASTEROID STUFF + public static Asteroid AsteroidGenerator() + { + Asteroid _asteroid = new Asteroid + { + asteroidPosX = _random.Next(-5, Render.xGridSize + 5), + asteroidPosY = 0, + AsteroidModel = Asteroid.SetAsteroidModel(), + speed = _random.Next(1, 3) + }; + return _asteroid; + + } + + public static Asteroid MoveAsteroid(Asteroid _asteroid) + { + _asteroid.asteroidPosY += _asteroid.speed; + return _asteroid; + + } + + //PIRATE STUFF + public static Pirate PirateLogic(Pirate _pirate, PlayerShip _ship) + { + //FOLLOW PLAYERS X AT OWN SPEED; IF PIRATE.PosX = ship.posX, shoot! + if (_pirate.shipPosY >= Render.yGridSize - 3) + { + _pirate.isOutsideBounds = true; + return _pirate; + } + + else + { + _pirate.targetX = _ship.shipPosX; + pirateY++; + + if (_pirate.shipPosX > _pirate.targetX && _pirate.shipPosX < _pirate.targetX+3 || _pirate.shipPosX < _pirate.targetX && _pirate.shipPosX > _pirate.targetX - 3) + { + _pirate.isFiringNum += 1; + if(_pirate.isFiringNum % 5 == 0) + { + + _pirate.isFiring = true; + } + + } + + else if (_pirate.shipPosX > _pirate.targetX) + { + _pirate.isFiring = false; + if (pirateY % 5 == 0) + { + _pirate.shipPosX -= _pirate.speed; + } + + } + else + { + _pirate.isFiring = false; + if (pirateY % 5 == 0) + { + _pirate.shipPosX += _pirate.speed; + } + } + //MOVES the PIRAte SLOOWLY DOWNWARDS + + + pirateY++; + if (pirateY % 5 == 0) + { + _pirate.shipPosY += 1; + } + + return _pirate; + } + } + + //COLISSION STUFF + public static int[] CollisionShipProjectile(PlayerShip _ship, List projectileList) + { + /**output[0] = index of collided element output[1] Damage ship takes **/ + int[] output = new int[2]; + output[0] = 0; + output[1] = 0; + foreach (Projectile a in projectileList) + { + if (a.shotByPlayer == false) + { + if ((_ship.shipPosX - a.position[1]) * (_ship.shipPosX - a.position[1]) + (_ship.shipPosY - a.position[0]) * (_ship.shipPosY - a.position[0]) < collisionDistShip * collisionDistShip) + { + output[0] = projectileList.IndexOf(a); + output[1] = 1; + break; + } + else + { + output[1] = 0; + } + } + } + return output; + } + + public static int[] CollisionShipAsteroid(PlayerShip _ship, List asteroidList) + { + /**output[0] = index of collided element output[1] Damage ship takes **/ + int[] output = new int[2]; + output[0] = 0; + output[1] = 0; + foreach (Asteroid a in asteroidList) + { + if ((_ship.shipPosX - a.asteroidPosX) * (_ship.shipPosX - a.asteroidPosX) + (_ship.shipPosY - a.asteroidPosY) * (_ship.shipPosY - a.asteroidPosY) < collisionDistShip * collisionDistShip) + { + output[0] = asteroidList.IndexOf(a); + output[1] = 2; + break; + } + else + { + output[1] = 0; + } + } + return output; + } + + public static int[] CollisionShipPirate(PlayerShip _ship, List pirateList) + { + /**output[0] = index of collided element output[1] Damage ship takes **/ + int[] output = new int[2]; + output[0] = 0; + output[1] = 0; + foreach (Pirate a in pirateList) + { + if ((_ship.shipPosX - a.shipPosX) * (_ship.shipPosX - a.shipPosX) + (_ship.shipPosY - a.shipPosY) * (_ship.shipPosY - a.shipPosY) < collisionDistShip * collisionDistShip) + { + output[0] = pirateList.IndexOf(a); + output[1] = 2; + break; + } + else + { + output[1] = 0; + } + } + return output; + } + + public static int[] CollisionPirateProjectile(List projectileList, List pirateList) + { + /**output[0] = index of collided projectile, output[1] Damage ship takes, output[2] Index of pirate **/ + int[] output = new int[3]; + foreach (Projectile a in projectileList) + { + foreach (Pirate b in pirateList) + { + if (a.shotByPlayer == true) + { + if ((b.shipPosX - a.position[1]) * (b.shipPosX - a.position[1]) + (b.shipPosY - a.position[0]) * (b.shipPosY - a.position[0]) < collisionDistShip * collisionDistShip) + { + output[0] = projectileList.IndexOf(a); + output[1] = 1; + output[2] = pirateList.IndexOf(b); + break; + } + } + else + { + output[1] = 0; + } + } + } + return output; + } + public static int[] CollisionAsteroidProjectile(List projectileList, List asteroidList) + { + /**output[0] = index of collided projectile, output[1] Damage ship takes, output[2] Index of pirate **/ + int[] output = new int[3]; + foreach (Projectile a in projectileList) + { + foreach (Asteroid b in asteroidList) + { + if (a.shotByPlayer == true) + { + if ((b.asteroidPosX - a.position[1]) * (b.asteroidPosX - a.position[1]) + (b.asteroidPosY - a.position[0]) * (b.asteroidPosY - a.position[0]) < collisionDistShip * collisionDistShip) + { + output[0] = projectileList.IndexOf(a); + output[1] = 1; + output[2] = asteroidList.IndexOf(b); + break; + } + } + else + { + output[1] = 0; + } + } + } + return output; + } + } + +} diff --git a/Code/SpaceShooter/Pirate.cs b/Code/SpaceShooter/Pirate.cs new file mode 100644 index 0000000..6eea801 --- /dev/null +++ b/Code/SpaceShooter/Pirate.cs @@ -0,0 +1,61 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SpaceShooter +{ + class Pirate + { + public bool isFiring; + public int isFiringNum = 0; + public int health = 3; + public int shipPosX = Render.xGridSize/2; + public int shipPosY = 2; + public int targetX; + public int speed = 1; + public string[,] shipModel = new string[4, 6]; + public bool isOutsideBounds = false; + public static string[,] SetShipModel() + { + + string[,] result = new string[3, 10]; + + result[0, 0] = " "; + result[0, 1] = " "; + result[0, 2] = "_"; + result[0, 3] = "_"; + result[0, 4] = "|"; + result[0, 5] = "|"; + result[0, 6] = "_"; + result[0, 7] = "_"; + result[0, 8] = " "; + result[0, 9] = " "; + + result[1, 0] = "|"; + result[1, 1] = "="; + result[1, 2] = @"\"; + result[1, 3] = " "; + result[1, 4] = "|"; + result[1, 5] = "|"; + result[1, 6] = " "; + result[1, 7] = "/"; + result[1, 8] = "="; + result[1, 9] = "|"; + + result[2, 0] = " "; + result[2, 1] = " "; + result[2, 2] = " "; + result[2, 3] = @"\"; + result[2, 4] = "_"; + result[2, 5] = "_"; + result[2, 6] = "/"; + result[2, 7] = " "; + result[2, 8] = " "; + result[2, 9] = " "; + return result; + } + + } +} diff --git a/Code/SpaceShooter/Projectile.cs b/Code/SpaceShooter/Projectile.cs new file mode 100644 index 0000000..4070996 --- /dev/null +++ b/Code/SpaceShooter/Projectile.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SpaceShooter +{ + class Projectile + { + public string[,] positionGrid = new string[Render.yGridSize, Render.xGridSize]; + public static int speed = 2; + public int[] position = new int[2]; + public bool shotByPlayer; + public bool isOutsideBounds = false; + public static Projectile CreateProjectile(int[] position, bool shotByPlayer) + { + + Projectile _projectile = new Projectile(); + _projectile.position[0] = position[0]; + _projectile.position[1] = position[1]; + _projectile.shotByPlayer = shotByPlayer; + _projectile.positionGrid[position[0] - 1, position[1] - 5] = "|"; + _projectile.positionGrid[position[0] - 1, position[1] + 4] = "|"; + return _projectile; + } + public static Projectile MoveProjectie(Projectile _projectile) + { + if (_projectile.shotByPlayer) + { + _projectile.positionGrid[_projectile.position[0] - 1, _projectile.position[1] - 5] = null; + _projectile.positionGrid[_projectile.position[0] - 1, _projectile.position[1] + 4] = null; + if (_projectile.position[0] < 3 || _projectile.position[0] >= Render.yGridSize-2) + { + _projectile.isOutsideBounds = true; + } + else + { + _projectile.position[0] -= Projectile.speed; + _projectile.positionGrid[_projectile.position[0] - 1, _projectile.position[1] - 5] = "|"; + _projectile.positionGrid[_projectile.position[0] - 1, _projectile.position[1] + 4] = "|"; + + } + + } + else + { + _projectile.positionGrid[_projectile.position[0] - 1, _projectile.position[1] - 5] = null; + _projectile.positionGrid[_projectile.position[0] - 1, _projectile.position[1] + 4] = null; + if (_projectile.position[0] < 3 || _projectile.position[0] >= Render.yGridSize - 3) + { + _projectile.isOutsideBounds = true; + } + else + { + _projectile.position[0] += Projectile.speed; + _projectile.positionGrid[_projectile.position[0] - 1, _projectile.position[1] - 5] = "*"; + _projectile.positionGrid[_projectile.position[0] - 1, _projectile.position[1] + 4] = "*"; + + } + + } + return _projectile; + } + } +} diff --git a/Code/SpaceShooter/Render.cs b/Code/SpaceShooter/Render.cs new file mode 100644 index 0000000..87cf5b5 --- /dev/null +++ b/Code/SpaceShooter/Render.cs @@ -0,0 +1,247 @@ +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Input; +using CeedMain; + +namespace SpaceShooter +{ + class Render + { + private static StringBuilder sb = new StringBuilder(); + private static readonly Random _random = new Random(); + public static int xGridSize = 40; + public static int yGridSize = 30; + public string[,] renderGrid = new string[yGridSize, xGridSize]; + + + //Actual code lol + public static string[,] AddBackgroundStars(string[,] _renderGrid) + { + + int starAmnt = _random.Next(0, 500); + for (int i = 0; i < starAmnt; i++) + { + _renderGrid[_random.Next(0, yGridSize), _random.Next(0, xGridSize)] = ","; + } + return _renderGrid; + } + + public static string[,] AddPositionedElement(string[,] Model, int elementSizeX, int elementSizeY, int elementPosX, int elementPosY) + { + + string[,] renderGrid = new string[yGridSize, xGridSize]; + for (int i = 0; i < elementSizeY; i++) + { + for (int t = 0; t < elementSizeX; t++) + { + + int normalizedElementPosX = Math.Min(xGridSize-((int)Math.Ceiling((float)elementSizeX/2)), Math.Max(((int)Math.Ceiling((float)elementSizeY / 2)), elementPosX)); + int normalizedElementPosY = Math.Min(yGridSize - ((int)Math.Ceiling((float)elementSizeY / 2)), Math.Max(((int)Math.Ceiling((float)elementSizeY / 2)), elementPosY)); + /** + int normalizedElementPosX = Math.Min(xGridSize - elementSizeX / 2, Math.Max(elementSizeX / 2, elementPosX)); + int normalizedElementPosY = Math.Min(yGridSize - elementSizeY / 2, Math.Max(elementSizeY / 2, elementPosY)); + **/ + renderGrid[i + normalizedElementPosY - elementSizeY / 2, t + normalizedElementPosX- elementSizeX / 2] = Model[i, t]; + + } + + } + return renderGrid; + } + + public static void OutputFrame(PlayerShip _ship, string[,] renderGrid, List asteroidList,List projectileList, List pirateList) + { + //resets main renderLayer to 0 + for (int i = 0; i < Render.yGridSize; i++) + { + for (int t = 0; t < Render.xGridSize; t++) + { + renderGrid[i, t] = null; + } + } + //Adds all elements to the render frame buffer + string[,] renderGridBackground = AddBackgroundStars(renderGrid); + string[,] renderGridShip = AddPositionedElement(_ship.shipModel, 10, 4, _ship.shipPosX, _ship.shipPosY); + string[,] renderGridAsteroids = new string[yGridSize, xGridSize]; + string[,] renderGridProjectiles = new string[yGridSize, xGridSize]; + string[,] renderGridPirates = new string[yGridSize, xGridSize]; + + //Merges all asteroids into one layer + foreach (Asteroid a in asteroidList) + { + string[,] tempRenderGridAsteroids = AddPositionedElement(a.AsteroidModel, 7, 5, a.asteroidPosX, a.asteroidPosY); + for (int i = 0; i < Render.yGridSize; i++) + { + for (int t = 0; t < Render.xGridSize; t++) + { + if (renderGridAsteroids[i, t] == "" || renderGridAsteroids[i, t] == null) + { + renderGridAsteroids[i, t] = tempRenderGridAsteroids[i, t]; + } + } + } + } + + //Merges all projectiles into one layer + foreach (Projectile a in projectileList) + { + + for (int i = 0; i < Render.yGridSize; i++) + { + for (int t = 0; t < Render.xGridSize; t++) + { + if (renderGridProjectiles[i, t] == null || renderGridProjectiles[i, t] == "") + { + renderGridProjectiles[i, t] = a.positionGrid[i, t]; + } + } + } + } + + //Merges all pirates into one layer + foreach(Pirate a in pirateList) + { + string[,] tempRenderGridPirates = AddPositionedElement(a.shipModel, 10, 3, a.shipPosX, a.shipPosY); + for (int i = 0; i < Render.yGridSize; i++) + { + for (int t = 0; t < Render.xGridSize; t++) + { + if (renderGridPirates[i, t] == "" || renderGridPirates[i, t] == null) + { + renderGridPirates[i, t] = tempRenderGridPirates[i, t]; + } + } + } + } + + //Merges all layers into final renderGrid layer + for (int i = 0; i < Render.yGridSize; i++) + { + for (int t = 0; t < Render.xGridSize; t++) + { + if (renderGrid[i, t] == "" || renderGrid[i, t] == null || renderGrid[i, t] == ",") + { + if (renderGrid[i, t] == "" || renderGrid[i, t] == null || renderGrid[i, t] == ",") + { + renderGrid[i, t] = renderGridShip[i, t]; + } + } + } + } + for (int i = 0; i < Render.yGridSize; i++) + { + for (int t = 0; t < Render.xGridSize; t++) + { + if (renderGrid[i, t] == "" || renderGrid[i, t] == null || renderGrid[i, t] == ",") + { + renderGrid[i, t] = renderGridPirates[i, t]; + } + + } + } + for (int i = 0; i < Render.yGridSize; i++) + { + for (int t = 0; t < Render.xGridSize; t++) + { + if (renderGrid[i, t] == "" || renderGrid[i, t] == null) + { + + renderGrid[i, t] = renderGridProjectiles[i, t]; + + } + } + } + for (int i = 0; i < Render.yGridSize; i++) + { + for (int t = 0; t < Render.xGridSize; t++) + { + if (renderGrid[i, t] == "" || renderGrid[i, t] == null) + { + if (renderGrid[i, t] == "" || renderGrid[i, t] == null) + { + renderGrid[i, t] = renderGridAsteroids[i, t]; + } + } + } + } + for (int i = 0; i < Render.yGridSize; i++) + { + for (int t = 0; t < Render.xGridSize; t++) + { + if (renderGrid[i, t] == "" || renderGrid[i, t] == null) + { + renderGrid[i, t] = renderGridBackground[i, t]; + } + } + } + + //ADDS HUD INFO + + //hp + renderGrid[yGridSize - 2, xGridSize - 5] = "H"; + renderGrid[yGridSize - 2, xGridSize - 4] = "P"; + renderGrid[yGridSize - 2, xGridSize - 3] = ":"; + renderGrid[yGridSize - 2, xGridSize - 2] = _ship.shipHealth.ToString(); + + //_ship.killedPirateAmnt + renderGrid[yGridSize - 1, xGridSize - 8] = "K"; + renderGrid[yGridSize - 1, xGridSize - 7] = "I"; + renderGrid[yGridSize - 1, xGridSize - 6] = "L"; + renderGrid[yGridSize - 1, xGridSize - 5] = "L"; + renderGrid[yGridSize - 1, xGridSize - 4] = "S"; + renderGrid[yGridSize - 1, xGridSize - 3] = ":"; + renderGrid[yGridSize - 1, xGridSize - 2] = Convert.ToString(_ship.killedPirateAmnt); + + + //replaces all nulls with spaces + for (int i = 0; i < yGridSize; i++) + { + for (int t = 0; t < xGridSize; t++) + { + if (renderGrid[i, t] == "" || renderGrid[i, t] == null) + { + renderGrid[i, t] = " "; + } + } + } + + //Sets the window to be the size the game needs & centers position + Console.SetWindowSize(xGridSize+3, yGridSize+4); + + //Sets up console + sb.Clear(); + Console.SetCursorPosition(0, 0); + Console.CursorVisible = false; + + //Renders with frame to Console + sb.AppendLine(""); + for(int i = 0; i < xGridSize;i++) + { + sb.Append("_"); + } + + for (int i = 0; i < yGridSize; i++) + { + sb.Append("|"); + for (int t = 0; t < xGridSize; t++) + { + sb.Append(renderGrid[i, t]); + } + sb.AppendLine("|"); + } + + sb.AppendLine(""); + for (int i = 0; i < xGridSize; i++) + { + sb.Append("_"); + } + Console.WriteLine(sb); + + } + } +} diff --git a/Code/SpaceShooter/SpaceShooterMain.cs b/Code/SpaceShooter/SpaceShooterMain.cs new file mode 100644 index 0000000..f7bdd84 --- /dev/null +++ b/Code/SpaceShooter/SpaceShooterMain.cs @@ -0,0 +1,204 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Input; +using CeedMain; + +namespace SpaceShooter +{ + class MainProgram + { + private static int pirateShipByHostilityAmount = 0; + private readonly static Random _random = new Random(); + public static PlayerShip ShooterMain(PlayerShip _playerShip, SolarSystem _solarSystem, int planetIndex) + { + //initialise console + Console.OutputEncoding = System.Text.Encoding.UTF8; + Render _render = new Render(); + Console.Clear(); + + //setup + Asteroid _asteroids = new Asteroid(); + List projectileList = new List(); + List asteroidList = new List(); + List pirateList = new List(); + _playerShip.killedPirateAmnt = 0; + + //set graphic + _playerShip.shipModel = PlayerShip.SetShipModel(); + //THREAD THAT MANAGES INPUT + new Thread(() => + { + while (true) + { + Thread.CurrentThread.IsBackground = true; + _playerShip = GameLogic.Controller(_playerShip); + } + }).Start(); + + while (true) + { + + //DOES PIRATE STUFF + //makes sure hostility num = amount of pirate ships + if (pirateList.Count <= _solarSystem.planetsList[planetIndex].hostility) + { + + int pirateAmnt = _random.Next(0, 15); + if (pirateAmnt == 4) + { + Pirate tempPirate = new Pirate + { + shipPosX = _random.Next(6, 26), + shipModel = Pirate.SetShipModel() + }; + pirateList.Add(tempPirate); + } + } + for (int i = 0; i < pirateList.Count; i++) + { + pirateList[i] = GameLogic.PirateLogic(pirateList[i], _playerShip); + if (pirateList[i].isOutsideBounds) + { + pirateList.Remove(pirateList[i]); + } + } + + + //IF ASTEROIDS IN SYSTEM, PREPARES ASTEROIDS EACH FRAME + + if(_solarSystem.hasAsteroids) + { + + int asteroidAmnt = _random.Next(0, 20); + if(asteroidAmnt == 3) + { + for (int i = 0; i < asteroidAmnt; i++) + { + Asteroid tempAsteroid = new Asteroid(); + tempAsteroid = GameLogic.AsteroidGenerator(); + asteroidList.Add(tempAsteroid); + } + } + + //move asteroids + for (int i = 0; i < asteroidList.Count; i++) + { + asteroidList[i] = GameLogic.MoveAsteroid(asteroidList[i]); + if (asteroidList[i].asteroidPosY > Render.yGridSize) + { + asteroidList.Remove(asteroidList[i]); + } + } + } + //HANDLE PROJECTILES + + //pirate + for (int i = 0; i < pirateList.Count; i++) + { + if (pirateList[i].isFiring) + { + int[] pos = { pirateList[i].shipPosY, pirateList[i].shipPosX }; + Projectile _projectile = Projectile.CreateProjectile(pos, false); + projectileList.Add(_projectile); + pirateList[i].isFiring = false; + } + + } + + //player + if (_playerShip.isFiring) + { + int[] pos = { _playerShip.shipPosY, _playerShip.shipPosX }; + Projectile _projectile = Projectile.CreateProjectile(pos, true); + projectileList.Add(_projectile); + _playerShip.isFiring = false; + } + if (projectileList.Count > 0) + { + for (int i = 0; i < projectileList.Count; i++) + { + if (projectileList[i].isOutsideBounds) + { + projectileList.Remove(projectileList[i]); + } + else + { + projectileList[i] = Projectile.MoveProjectie(projectileList[i]); + } + } + } + + + //COLLISION STUFF + int[] collisionDataShipProjectile = GameLogic.CollisionShipProjectile(_playerShip, projectileList); + if(collisionDataShipProjectile[1] > 0) + { + _playerShip.shipHealth -= collisionDataShipProjectile[1]; + projectileList.RemoveAt(collisionDataShipProjectile[0]); + + } + + int[] collisionDataShipAsteroid = GameLogic.CollisionShipAsteroid(_playerShip, asteroidList); + if (collisionDataShipAsteroid[1] > 0) + { + _playerShip.shipHealth -= collisionDataShipAsteroid[1]; + _playerShip.totalDestroyedAsteroids += 1; + asteroidList.RemoveAt(collisionDataShipAsteroid[0]); + + } + + int[] collisionDataShipPirate = GameLogic.CollisionShipPirate(_playerShip, pirateList); + if (collisionDataShipPirate[1] > 0) + { + _playerShip.shipHealth -= collisionDataShipPirate[1]; + pirateList.RemoveAt(collisionDataShipPirate[0]); + _playerShip.totalKilledPirateAmnt += 1; + _playerShip.killedPirateAmnt += 1; + _playerShip.Money += 1; + + } + + int[] collisionDataPirateProjectile = GameLogic.CollisionPirateProjectile(projectileList, pirateList); + if (collisionDataPirateProjectile[1] > 0) + { + pirateList[collisionDataPirateProjectile[2]].health -= collisionDataPirateProjectile[1]; + if(pirateList[collisionDataPirateProjectile[2]].health <= 0) + { + _playerShip.Money += 1; + _playerShip.killedPirateAmnt += 1; + _playerShip.totalKilledPirateAmnt += 1; + pirateList.RemoveAt(collisionDataPirateProjectile[2]); + } + projectileList.RemoveAt(collisionDataPirateProjectile[0]); + } + + int[] collisionDataAsteroidProjectile = GameLogic.CollisionAsteroidProjectile(projectileList, asteroidList); + if (collisionDataAsteroidProjectile[1] > 0) + { + asteroidList.RemoveAt(collisionDataAsteroidProjectile[2]); + projectileList.RemoveAt(collisionDataPirateProjectile[0]); + _playerShip.totalDestroyedAsteroids += 1; + _playerShip.Money += 1; + } + if (_playerShip.shipHealth <= 0) + { + return _playerShip; + } + if (_playerShip.killedPirateAmnt >= (_solarSystem.planetsList[planetIndex].hostility* _solarSystem.planetsList[planetIndex].hostility) +1) + { + return _playerShip; + } + + //RENDER IT OUT + Render.OutputFrame(_playerShip, _render.renderGrid, asteroidList, projectileList, pirateList); + Thread.Sleep(70); + Console.Clear(); + } + } + } +}