665 lines
22 KiB
C#
665 lines
22 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace App1 {
|
|
class Game {
|
|
public void start() {
|
|
Console.BackgroundColor = ConsoleColor.White;
|
|
Console.ForegroundColor = ConsoleColor.Black;
|
|
|
|
Introduction();
|
|
}
|
|
|
|
public string Level { get; private set; } = "Introduction";
|
|
public int Food { get; private set; } = 10;
|
|
public int Water { get; private set; } = 10;
|
|
public int Comfort { get; private set; } = 5;
|
|
public int PlayerHunger { get; private set; } = 10;
|
|
public int PlayerHealth { get; private set; } = 10;
|
|
public int Radiation { get; private set; } = 0;
|
|
public int TimePassed { get; private set; } = 0;
|
|
public bool EatSuccess { get; private set; } = false;
|
|
public bool RadiationSuit { get; private set; } = false;
|
|
|
|
|
|
private void Save() {
|
|
Console.Clear();
|
|
|
|
string SaveGame = Level + "," + Food + "," + Water + "," + Comfort + ","
|
|
+ PlayerHealth + "," + PlayerHunger + "," + Radiation + "," + RadiationSuit;
|
|
|
|
var SaveGameBytes = Encoding.UTF8.GetBytes(SaveGame);
|
|
string SaveGame64 = Convert.ToBase64String(SaveGameBytes);
|
|
|
|
Console.WriteLine("Saving the game will overwrite any existing saves, are you sure you want to continue? Y/N");
|
|
var response = Console.ReadKey();
|
|
Console.WriteLine();
|
|
switch (response.KeyChar) {
|
|
case 'Y':
|
|
case 'y':
|
|
File.WriteAllText("Save.sav", SaveGame64);
|
|
return;
|
|
case 'N':
|
|
case 'n':
|
|
return;
|
|
}
|
|
return;
|
|
}
|
|
|
|
private void Load() {
|
|
Console.Clear();
|
|
|
|
if (File.Exists("Save.sav")) {
|
|
int LoadSuccess = 1;
|
|
|
|
while (LoadSuccess == 1) {
|
|
if (Food > 10) {
|
|
LoadSuccess = 0;
|
|
} else if (Water > 10) {
|
|
LoadSuccess = 0;
|
|
} else if (PlayerHealth > 10) {
|
|
LoadSuccess = 0;
|
|
} else if (Comfort > 10) {
|
|
LoadSuccess = 0;
|
|
} else {
|
|
string content64 = File.ReadAllText("Save.sav");
|
|
var contentbytes = Convert.FromBase64String(content64);
|
|
string content = Encoding.UTF8.GetString(contentbytes);
|
|
|
|
string[] variables = content.Split(',');
|
|
|
|
string level = variables[0];
|
|
Food = int.Parse(variables[1]);
|
|
Water = int.Parse(variables[2]);
|
|
Comfort = int.Parse(variables[3]);
|
|
PlayerHealth = int.Parse(variables[4]);
|
|
PlayerHunger = int.Parse(variables[5]);
|
|
Radiation = int.Parse(variables[6]);
|
|
RadiationSuit = Convert.ToBoolean(variables[7]);
|
|
|
|
Console.WriteLine("Succesfully loaded the games state");
|
|
Console.WriteLine("Press enter to continue");
|
|
Console.ReadKey();
|
|
|
|
switch (level) {
|
|
case "Introduction":
|
|
Introduction();
|
|
break;
|
|
case "GameStart":
|
|
GameStart();
|
|
break;
|
|
case "Branch_1_1":
|
|
Branch_1_1();
|
|
break;
|
|
case "Branch_2_1":
|
|
Branch_2_1();
|
|
break;
|
|
case "Branch_3_1":
|
|
Branch_3_1();
|
|
break;
|
|
case "Branch_1_1_1":
|
|
Branch_1_1_1();
|
|
break;
|
|
case "Branch_1_1_2":
|
|
Branch_1_1_2();
|
|
break;
|
|
case "Branch_1_1_3":
|
|
Branch_1_1_3();
|
|
break;
|
|
case "Branch_2_1_1":
|
|
Branch_2_1_1();
|
|
break;
|
|
case "Branch_2_1_2":
|
|
Branch_2_1_2();
|
|
break;
|
|
case "Branch_2_1_3":
|
|
Branch_2_1_3();
|
|
break;
|
|
case "Branch_3_1_1":
|
|
Branch_3_1_1();
|
|
break;
|
|
case "Branch_3_1_2":
|
|
Branch_3_1_2();
|
|
break;
|
|
case "Branch_3_1_3":
|
|
Branch_3_1_3();
|
|
break;
|
|
}
|
|
return;
|
|
}
|
|
}
|
|
|
|
if (LoadSuccess == 0) {
|
|
Console.WriteLine("The load failed, maybe you eddited a value or there is an invalid entry");
|
|
Console.WriteLine("Press enter to continue");
|
|
Console.ReadKey();
|
|
Introduction();
|
|
}
|
|
} else {
|
|
Console.WriteLine("There is no savegame available");
|
|
Console.WriteLine("Press enter to continue");
|
|
Console.ReadKey();
|
|
Introduction();
|
|
}
|
|
}
|
|
|
|
|
|
#region Engine
|
|
|
|
private void NextLevelFunction() {
|
|
Timepassed();
|
|
|
|
}
|
|
|
|
private void Timepassed() {
|
|
//timepased based on moves, call at every function start
|
|
}
|
|
|
|
private string GetRadiation() {
|
|
string radiation = null;
|
|
|
|
radiation = Convert.ToString(Radiation);
|
|
|
|
if (Radiation == 10) {
|
|
YouDied("Radiation Poisoning");
|
|
}
|
|
|
|
return radiation;
|
|
}
|
|
|
|
public void RadiationZone(int FalloutLevel) //DO DIS WHERE IF THERE IS LESS FALLOUT THEN LESS RADIATION POISONING
|
|
{
|
|
if (RadiationSuit == false) {
|
|
if (FalloutLevel >= 8) {
|
|
Radiation++;
|
|
Radiation++;
|
|
Radiation++;
|
|
} else if (FalloutLevel == 7 || FalloutLevel == 6) {
|
|
Radiation++;
|
|
Radiation++;
|
|
} else if (FalloutLevel == 5 || FalloutLevel == 4 || FalloutLevel == 3) {
|
|
Radiation++;
|
|
}
|
|
}
|
|
|
|
if (Radiation == 8 || Radiation == 7) {
|
|
PlayerHealth--;
|
|
} else if (Radiation > 9) {
|
|
PlayerHealth--;
|
|
PlayerHealth--;
|
|
}
|
|
|
|
if (Radiation == 10) {
|
|
YouDied("Radiation Poisoning");
|
|
}
|
|
}
|
|
|
|
public string HaveRadiationSuit() {
|
|
string have = null;
|
|
|
|
if (RadiationSuit) {
|
|
have = "You have a radiation suit";
|
|
} else {
|
|
have = "You do not have a radiation suit";
|
|
}
|
|
|
|
return have;
|
|
}
|
|
|
|
private string GetComfort() {
|
|
string localComfort = null;
|
|
Comfort--;
|
|
|
|
if (Comfort == 4 || Comfort == 5 || Comfort == 6) {
|
|
localComfort = "You are comfortable, but could certainly be more comfterble";
|
|
}
|
|
|
|
|
|
if (Comfort <= 0) {
|
|
YouDied("Bored to death");
|
|
}
|
|
|
|
return localComfort;
|
|
}
|
|
|
|
private string Hungry() {
|
|
string Localhunger = null;
|
|
|
|
if (PlayerHunger >= 10) {
|
|
Localhunger = "You are not hungry";
|
|
} else if (PlayerHunger == 9 || PlayerHunger == 8 || PlayerHunger == 7) {
|
|
Localhunger = "Could do with a snack";
|
|
} else if (PlayerHunger == 6 || PlayerHunger == 5) {
|
|
Localhunger = "You are hungry now, but can go on for a while without food for a little while longer";
|
|
} else if (PlayerHunger == 4) {
|
|
Localhunger = "You are getting quite hungry now, you should probably think about eating";
|
|
} else if (PlayerHunger == 3) {
|
|
Localhunger = "You are getting really hungry now";
|
|
} else if (PlayerHunger == 2) {
|
|
Localhunger = "You are getting really hungry now, you cant go on much longer without food";
|
|
} else if (PlayerHunger == 1) {
|
|
Localhunger = "You are starving now, if you dont eat, you will surely die";
|
|
} else {
|
|
YouDied("Starvation");
|
|
}
|
|
|
|
return Localhunger;
|
|
}
|
|
|
|
private string Eat() {
|
|
if (Food <= 0 || Water <= 0 || PlayerHunger >= 10) {
|
|
EatSuccess = false;
|
|
} else if (Food > 0 && Water > 0) {
|
|
EatSuccess = true;
|
|
}
|
|
|
|
string eatstring = EatString();
|
|
|
|
return eatstring;
|
|
}
|
|
private string EatString() {
|
|
string EatString = null;
|
|
|
|
if (EatSuccess) {
|
|
EatString = "You have eaten";
|
|
PlayerHunger++;
|
|
Food--;
|
|
Water--;
|
|
} else {
|
|
EatString = "You do not have enough food to do that";
|
|
}
|
|
|
|
return EatString;
|
|
}
|
|
|
|
public string GetHealth() {
|
|
string health = "Your health is at " + PlayerHealth + "/10";
|
|
|
|
if (PlayerHealth <= 0) {
|
|
YouDied("Your health reached 0");
|
|
}
|
|
|
|
return health;
|
|
}
|
|
|
|
public void HungerDown() {
|
|
Random rnd = new Random();
|
|
int HungerDown = rnd.Next(1, 3);
|
|
if (HungerDown == 1) {
|
|
PlayerHunger--;
|
|
}
|
|
return;
|
|
}
|
|
|
|
public void YouDied(string CauseOfDeath) {
|
|
Console.BackgroundColor = ConsoleColor.DarkRed;
|
|
Console.Clear();
|
|
Console.WriteLine("You died");
|
|
Console.WriteLine("Cause of death: {0}", CauseOfDeath);
|
|
Console.WriteLine("You can try (A)gain, or (Q)uit");
|
|
var response = Console.ReadKey();
|
|
Console.WriteLine();
|
|
switch (response.KeyChar) {
|
|
case 'A':
|
|
case 'a':
|
|
Console.BackgroundColor = ConsoleColor.White;
|
|
Introduction();
|
|
break;
|
|
case 'Q':
|
|
case 'q':
|
|
Console.WriteLine("Thanks for playing");
|
|
Environment.Exit(0);
|
|
break;
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public void Introduction() {
|
|
GetHealth();
|
|
Level = "Introduction";
|
|
Console.Clear();
|
|
Console.WriteLine("Welcome to this game about the boring apocolipse");
|
|
Console.WriteLine("In this game you have to make decisions in order to progress though the game");
|
|
Console.WriteLine("To load from a previous save press L");
|
|
Console.WriteLine("You can press S to save at any point throughout the game");
|
|
Console.WriteLine("Do you wish to continue?");
|
|
|
|
Console.WriteLine();
|
|
Console.WriteLine("(C)ontinue (Q)uit (L)oad");
|
|
|
|
var response = Console.ReadKey();
|
|
Console.WriteLine();
|
|
switch (response.KeyChar) {
|
|
case 'C':
|
|
case 'c':
|
|
GameStart();
|
|
break;
|
|
|
|
case 'Q':
|
|
case 'q':
|
|
Console.WriteLine("Thanks for playing");
|
|
break;
|
|
|
|
case 'L':
|
|
case 'l':
|
|
Load();
|
|
break;
|
|
|
|
case 'S':
|
|
case 's':
|
|
Save();
|
|
Introduction();
|
|
break;
|
|
}
|
|
}
|
|
|
|
private void GameStart() {
|
|
Level = "GameStart";
|
|
Console.Clear();
|
|
Console.WriteLine("Our story starts in a suburb of New York");
|
|
Console.WriteLine("You hear a nuclear siren, and your phone warns you off a possible nuclear strike at your location");
|
|
Console.WriteLine("You are faced with a decision to either get to the nuclear bunker, hide in your house or do nothing");
|
|
|
|
Console.WriteLine();
|
|
Console.WriteLine("Neuclear bunker (1) Hide (2) Do nothing (3)");
|
|
|
|
var response = Console.ReadKey();
|
|
Console.WriteLine();
|
|
switch (response.KeyChar) {
|
|
case '1':
|
|
Console.WriteLine("You choose Get to the Bunker");
|
|
break;
|
|
|
|
case '2':
|
|
Console.Clear();
|
|
Console.WriteLine("You choose Hide");
|
|
Console.WriteLine("Enter to continue");
|
|
Console.ReadKey();
|
|
YouDied("Nuclear annihilation");
|
|
break;
|
|
|
|
case '3':
|
|
Console.Clear();
|
|
Console.WriteLine("You choose Do Nothing");
|
|
Console.WriteLine("Enter to continue");
|
|
Console.ReadKey();
|
|
YouDied("Nuclear annihilation");
|
|
break;
|
|
|
|
case 'S':
|
|
case 's':
|
|
Save();
|
|
GameStart();
|
|
break;
|
|
}
|
|
|
|
HungerDown();
|
|
GetHealth();
|
|
|
|
Eaten:
|
|
Console.Clear();
|
|
Console.WriteLine("You are now in the Nuclear Bunker");
|
|
Console.WriteLine("You have survived the initial nuclear blast you now have to continue to survive");
|
|
Console.WriteLine();
|
|
Console.WriteLine("You managed to grab {0} food and {1} water before the blast", Food, Water);
|
|
Console.WriteLine("F to eat 1 food (your hunger level is now at {0}/10)", PlayerHunger);
|
|
Console.WriteLine(Hungry());
|
|
Console.WriteLine();
|
|
Console.WriteLine("From here, you can go outside and search for supplies, search the fallout bunker for a radiation suit or " +
|
|
"rest and wait for the fallout to pass slightly, reducing the chance of radiation poisoning (this will consume 6 hunger)");
|
|
|
|
Console.WriteLine();
|
|
Console.WriteLine("Go outside (1) Search inside (2) Rest and wait (3)");
|
|
|
|
response = Console.ReadKey();
|
|
Console.WriteLine();
|
|
switch (response.KeyChar) {
|
|
case '1':
|
|
Branch_1_1();
|
|
break;
|
|
|
|
case '2':
|
|
Branch_2_1();
|
|
break;
|
|
|
|
case '3':
|
|
Branch_3_1();
|
|
break;
|
|
|
|
case 'F':
|
|
case 'f':
|
|
Eat();
|
|
goto Eaten;
|
|
|
|
case 'S':
|
|
case 's':
|
|
Save();
|
|
GameStart();
|
|
break;
|
|
}
|
|
}
|
|
|
|
private void Branch_1_1() {
|
|
Level = "Branch_1_1";
|
|
RadiationZone(1); //THIS NEEDS TO CHANGE ONCE U DONE THE THING WITH CALCULATING FALLOUT BASED ON TIME PASSED
|
|
HungerDown();
|
|
GetHealth();
|
|
|
|
Eaten:
|
|
Console.Clear();
|
|
Console.WriteLine("You choose to go outside and search for any possible supplies");
|
|
Console.WriteLine("You currently have {0} water {1} food", Water, Food);
|
|
Console.WriteLine();
|
|
Console.WriteLine("You are outside of the bunker now, it is radioactive out here, your current radioactivity level is {0}/10." +
|
|
"The higher it gets, the more dangerous it is. Bad stuff happens when your radioactivity level gains. The longer " +
|
|
"you spend outside, the higher it will get. If you have a radiation suit, all radiation and damage will be " +
|
|
"negated.", GetRadiation());
|
|
Console.WriteLine();
|
|
Console.WriteLine(HaveRadiationSuit());
|
|
Console.WriteLine(GetHealth());
|
|
Console.WriteLine();
|
|
Console.WriteLine("F to eat 1 food (your hunger level is now at {0}/10)", PlayerHunger);
|
|
Console.WriteLine(Hungry());
|
|
Console.WriteLine();
|
|
Console.WriteLine("From here, you can search for Food, Water or Comforts to make you more comfortable this will mean that you get less " +
|
|
"bored and therefore are less likely to die, your current comfort level is {0}/10, the lower your health the lower your" +
|
|
"comfort and a higher chance of death.", Comfort);
|
|
|
|
Console.WriteLine();
|
|
Console.WriteLine("Food (1) Water (2) Comforts (3)");
|
|
|
|
var response = Console.ReadKey();
|
|
Console.WriteLine();
|
|
switch (response.KeyChar) {
|
|
case '1':
|
|
Branch_1_1_1();
|
|
break;
|
|
|
|
case '2':
|
|
Branch_1_1_2();
|
|
break;
|
|
|
|
case '3':
|
|
Branch_1_1_3();
|
|
break;
|
|
|
|
case 'F':
|
|
case 'f':
|
|
Eat();
|
|
goto Eaten;
|
|
|
|
case 'S':
|
|
case 's':
|
|
Save();
|
|
Branch_1_1();
|
|
break;
|
|
}
|
|
|
|
}
|
|
|
|
private void Branch_2_1() {
|
|
Level = "Branch_2_1";
|
|
HungerDown();
|
|
GetHealth();
|
|
|
|
Eaten:
|
|
Console.Clear();
|
|
Console.WriteLine("You choose to stay inside and search the fallout shelter for a radiation suit");
|
|
Console.WriteLine("You currently have {0} water {1} food", Water, Food);
|
|
Console.WriteLine();
|
|
Console.WriteLine("You wonder the inside of the bunker in search for a radiation suit, this is a very mundane task, you are getting " +
|
|
"quite bored, {0}, you should probably try and find comforts when you get out of the bunker.", GetComfort());
|
|
Console.WriteLine("You can see a radiation suit in the distance. However it is smotherd in flames and there is no easy way to get it.");
|
|
Console.WriteLine();
|
|
Console.WriteLine(HaveRadiationSuit());
|
|
Console.WriteLine(GetHealth());
|
|
Console.WriteLine();
|
|
Console.WriteLine("F to eat 1 food (your hunger level is now at {0}/10)", PlayerHunger);
|
|
Console.WriteLine(Hungry());
|
|
Console.WriteLine();
|
|
Console.WriteLine("From here you can try and grab the radiation suit from the fire, try and use the water you have to extinguish" +
|
|
"the flames, or disregard the radiation sut and go outside anyway.");
|
|
|
|
Console.WriteLine();
|
|
Console.WriteLine("Go for it (1) Extinguish flames (2) Disregard (3)");
|
|
|
|
var response = Console.ReadKey();
|
|
Console.WriteLine();
|
|
switch (response.KeyChar) {
|
|
case '1':
|
|
Branch_2_1_1();
|
|
break;
|
|
|
|
case '2':
|
|
Branch_2_1_2();
|
|
break;
|
|
|
|
case '3':
|
|
Branch_1_1();
|
|
break;
|
|
|
|
case 'F':
|
|
case 'f':
|
|
Eat();
|
|
goto Eaten;
|
|
|
|
case 'S':
|
|
case 's':
|
|
Save();
|
|
Branch_2_1();
|
|
break;
|
|
}
|
|
}
|
|
|
|
private void Branch_3_1() {
|
|
Level = "Branch_3_1";
|
|
HungerDown();
|
|
GetHealth();
|
|
|
|
Eaten:
|
|
Console.Clear();
|
|
Console.WriteLine("You choose to");
|
|
Console.WriteLine("You currently have {0} water {1} food", Water, Food);
|
|
Console.WriteLine();
|
|
Console.WriteLine("");
|
|
Console.WriteLine("");
|
|
Console.WriteLine();
|
|
Console.WriteLine(HaveRadiationSuit());
|
|
Console.WriteLine(GetHealth());
|
|
Console.WriteLine();
|
|
Console.WriteLine("F to eat 1 food (your hunger level is now at {0}/10)", PlayerHunger);
|
|
Console.WriteLine(Hungry());
|
|
Console.WriteLine();
|
|
Console.WriteLine("From here you can ");
|
|
|
|
Console.WriteLine();
|
|
Console.WriteLine("Go for it (1) Extinguish flames (2) Disregard (3)");
|
|
|
|
var response = Console.ReadKey();
|
|
Console.WriteLine();
|
|
switch (response.KeyChar) {
|
|
case '1':
|
|
Branch_3_1_1();
|
|
break;
|
|
|
|
case '2':
|
|
Branch_3_1_2();
|
|
break;
|
|
|
|
case '3':
|
|
Branch_3_1_3();
|
|
break;
|
|
|
|
case 'F':
|
|
case 'f':
|
|
Eat();
|
|
goto Eaten;
|
|
|
|
case 'S':
|
|
case 's':
|
|
Save();
|
|
Branch_3_1();
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
private void Branch_1_1_1() {
|
|
Level = "Branch_1_1_1";
|
|
HungerDown();
|
|
}
|
|
|
|
private void Branch_1_1_2() {
|
|
Level = "Branch_1_1_2";
|
|
HungerDown();
|
|
}
|
|
|
|
private void Branch_1_1_3() {
|
|
Level = "Branch_1_1_3";
|
|
HungerDown();
|
|
}
|
|
|
|
|
|
|
|
private void Branch_2_1_1() {
|
|
Level = "Branch_2_1_1";
|
|
HungerDown();
|
|
}
|
|
|
|
private void Branch_2_1_2() {
|
|
Level = "Branch_2_1_2";
|
|
HungerDown();
|
|
}
|
|
private void Branch_2_1_3() {
|
|
Level = "Branch_2_1_3";
|
|
HungerDown();
|
|
}
|
|
|
|
|
|
|
|
public void Branch_3_1_1() {
|
|
Level = "Branch_3_1_1";
|
|
HungerDown();
|
|
}
|
|
|
|
public void Branch_3_1_2() {
|
|
Level = "Branch_3_1_2";
|
|
HungerDown();
|
|
}
|
|
|
|
public void Branch_3_1_3() {
|
|
Level = "Branch_3_1_3";
|
|
HungerDown();
|
|
}
|
|
}
|
|
} |