aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Bitspace/Bitspace/Biome.cs19
-rw-r--r--Bitspace/Bitspace/Bitspace.csproj1
-rw-r--r--Bitspace/Bitspace/Mob.cs70
-rw-r--r--Bitspace/Bitspace/Program.cs147
-rw-r--r--Bitspace/Bitspace/Weapon.cs73
5 files changed, 218 insertions, 92 deletions
diff --git a/Bitspace/Bitspace/Biome.cs b/Bitspace/Bitspace/Biome.cs
index 2713f80..653cb2c 100644
--- a/Bitspace/Bitspace/Biome.cs
+++ b/Bitspace/Bitspace/Biome.cs
@@ -11,8 +11,8 @@ namespace Game
private string name;
private char floor; //floor literally what the mobs "step on"
private ConsoleColor color;
- private ushort damage;
- private bool suffocate;
+ private ushort damage;
+ private bool suffocate; //if true it will firstly drain the air var and then will drain health
public string Name
{
@@ -43,5 +43,20 @@ namespace Game
set { suffocate = value; }
get { return suffocate; }
}
+
+ public Biome(string name, char floor, ConsoleColor color) : this(name, floor, color, 0, false)
+ { }
+
+ public Biome(string name, char floor, ConsoleColor color, ushort damage) : this(name, floor, color, damage, false)
+ { }
+
+ public Biome(string name, char floor, ConsoleColor color, ushort damage, bool suffocate)
+ {
+ Name = name;
+ Floor = floor;
+ Color = color;
+ Damage = damage;
+ Suffocate = suffocate;
+ }
}
}
diff --git a/Bitspace/Bitspace/Bitspace.csproj b/Bitspace/Bitspace/Bitspace.csproj
index bec126c..2e4673a 100644
--- a/Bitspace/Bitspace/Bitspace.csproj
+++ b/Bitspace/Bitspace/Bitspace.csproj
@@ -48,6 +48,7 @@
<Compile Include="Mob.cs" />
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
+ <Compile Include="Weapon.cs" />
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
diff --git a/Bitspace/Bitspace/Mob.cs b/Bitspace/Bitspace/Mob.cs
index dc51a04..cece13f 100644
--- a/Bitspace/Bitspace/Mob.cs
+++ b/Bitspace/Bitspace/Mob.cs
@@ -8,12 +8,13 @@ namespace Game
{
class Mob
{
- //Mobile objects = Mobs
- private bool alive;
+ public bool Alive { set; get; }
private ushort health;
private ushort maxHealth;
+ private List<Weapon> weaponsList;
+
private ushort armour;
private ushort maxArmour;
@@ -34,18 +35,9 @@ namespace Game
Console.Write(Body);
}
- public void PrintStats() //prints the mob's stats, i.e. health, armour, lung capacity, only used for player
+ public string Stats() //prints the mob's stats, i.e. health, armour, lung capacity, only used for player
{
- Console.WriteLine();
- Console.ForegroundColor = ConsoleColor.Gray;
- Console.WriteLine($"Health: {Health} | Armour: {Armour} | Air: {new string('O', LungCapacity)}");
- Console.WriteLine($"X: {XPos} | Y: {YPos}");
- }
-
- public bool Alive
- {
- set { alive = value; }
- get { return alive; }
+ return $"Health: {Health} | Armour: {Armour} | Air: {new string('O', LungCapacity)}\r\nX: {XPos} | Y: {YPos}";
}
public ushort Health
@@ -116,5 +108,57 @@ namespace Game
set { yPos = value; }
get { return yPos; }
}
+
+ public List<Weapon> WeaponsList
+ {
+ set { weaponsList = value; }
+ get { return weaponsList; }
+ }
+
+ public Mob(string name, char body, ConsoleColor color, ushort health) : this(name, body, color, health, 0, 0, health, 0, 0, 0, 0, true)
+ { }
+
+ public Mob(string name, char body, ConsoleColor color, ushort health, int xPos, int yPos) : this(name, body, color, health, 0, 0, health, 0, 0, xPos, yPos, true)
+ { }
+
+ public Mob(string name, char body, ConsoleColor color, ushort health, ushort armour) : this(name, body, color, health, armour, 0, health, armour, 0, 0, 0, true)
+ { }
+
+ public Mob(string name, char body, ConsoleColor color, ushort health, ushort armour, int xPos, int yPos) : this(name, body, color, health, armour, 0, health, armour, 0, xPos, yPos, true)
+ { }
+
+ public Mob(string name, char body, ConsoleColor color, ushort health, byte lungCapacity) : this(name, body, color, health, 0, lungCapacity, health, 0, lungCapacity, 0, 0, true)
+ { WeaponsList = new List<Weapon>(); }
+
+ public Mob(string name, char body, ConsoleColor color, ushort health, byte lungCapacity, int xPos, int yPos) : this(name, body, color, health, 0, lungCapacity, health, 0, lungCapacity, xPos, yPos, true)
+ { }
+
+ public Mob(string name, char body, ConsoleColor color, ushort health, ushort armour, byte lungCapacity) : this(name, body, color, health, armour, lungCapacity, health, armour, lungCapacity, 0, 0, true)
+ { }
+
+ public Mob(string name, char body, ConsoleColor color, ushort health, ushort armour, byte lungCapacity, int xPos, int yPos) : this(name, body, color, health, armour, lungCapacity, health, armour, lungCapacity, xPos, yPos, true)
+ { }
+
+ public Mob(string name, char body, ConsoleColor color, ushort health, ushort armour, byte lungCapacity, ushort maxHealth, ushort maxArmour, byte maxLungCapacity) : this(name, body, color, health, armour, lungCapacity, maxHealth, maxArmour, maxLungCapacity, 0, 0, true)
+ { }
+
+ public Mob(string name, char body, ConsoleColor color, ushort health, ushort armour, byte lungCapacity, ushort maxHealth, ushort maxArmour, byte maxLungCapacity, int xPos, int yPos) : this(name, body, color, health, armour, lungCapacity, maxHealth, maxArmour, maxLungCapacity, xPos, yPos, true)
+ { }
+
+ public Mob(string name, char body, ConsoleColor color, ushort health, ushort armour, byte lungCapacity, ushort maxHealth, ushort maxArmour, byte maxLungCapacity, int xPos, int yPos, bool alive)
+ {
+ Alive = alive;
+ Health = health;
+ MaxHealth = maxHealth;
+ Armour = armour;
+ MaxArmour = maxArmour;
+ LungCapacity = lungCapacity;
+ MaxLungCapacity = maxLungCapacity;
+ Name = name;
+ Body = body;
+ Color = color;
+ XPos = xPos;
+ YPos = yPos;
+ }
}
}
diff --git a/Bitspace/Bitspace/Program.cs b/Bitspace/Bitspace/Program.cs
index 1e8e842..c119aee 100644
--- a/Bitspace/Bitspace/Program.cs
+++ b/Bitspace/Bitspace/Program.cs
@@ -12,29 +12,36 @@ namespace Game
//collection of all biomes, WARNING: biomes that do damage must be ON TOP of biomes that do not
private static Dictionary<string, Biome> biomeDict = new Dictionary<string, Biome>
{
- { "Water", new Biome { Name = "Water",Floor = '-', Color = ConsoleColor.Blue, Damage = 1 , Suffocate = true } },
- { "Grass land", new Biome { Name = "Grass land",Floor = ',', Color = ConsoleColor.Green} },
- { "Rocks", new Biome { Name = "Rocks",Floor = '.', Color = ConsoleColor.Gray} }
+ { "Water", new Biome("Water", '-', ConsoleColor.Blue, 1, true) },
+ { "Grass land", new Biome("Grass land", ',', ConsoleColor.Green) },
+ { "Rocks", new Biome("Rocks", '.', ConsoleColor.Gray) }
};
//collection of all mobs
private static Dictionary<string, Mob> mobDict = new Dictionary<string, Mob>
{
- { "Player", new Mob {Name = "Player", Color = ConsoleColor.White, Body = '@', Alive = true, MaxHealth = 100, Health = 100, MaxLungCapacity = 10, LungCapacity = 10} },
- { "Smiley", new Mob {Name = "Smiley", Color = ConsoleColor.Magenta, Body = 'U', Alive = true, MaxHealth = 5, Health = 5, MaxLungCapacity = 5, LungCapacity = 5} },
- { "Smiley1", new Mob {Name = "Smiley1", Color = ConsoleColor.Magenta, Body = 'U', Alive = true, MaxHealth = 5, Health = 5, MaxLungCapacity = 5, LungCapacity = 5} },
- { "Smiley2", new Mob {Name = "Smiley2", Color = ConsoleColor.Magenta, Body = 'U', Alive = true, MaxHealth = 5, Health = 5, MaxLungCapacity = 5, LungCapacity = 5} }
+ { "Player", new Mob("Player", '@', ConsoleColor.White, 100, 10) },
+ { "Smiley", new Mob("Smiley", 'U', ConsoleColor.Magenta, 5, 5) },
+ { "Smiley1", new Mob("Smiley1", 'U', ConsoleColor.Magenta, 5, 5) },
+ { "Smiley2", new Mob("Smiley1", 'U', ConsoleColor.Magenta, 5, 5) }
+ };
+
+ private static Dictionary<string, Weapon> weaponDict = new Dictionary<string, Weapon>()
+ {
+ { "Stick", new Weapon("Stick", 1, '-', '|') }
};
static void Main(string[] args)
{
Console.BackgroundColor = ConsoleColor.Black;
int s = MapSize();
-
+
+ mobDict["Player"].WeaponsList = new List<Weapon> { weaponDict["Stick"]}; //temporary, just for tests
string[] map = new string[s];
MapGenerate(map);
+ ushort gameTick = 0;
while (mobDict["Player"].Alive == true)
{
if (Console.KeyAvailable) // checkes if the player has pressed any key
@@ -49,90 +56,66 @@ namespace Game
case ConsoleKey.A: if (mobDict["Player"].XPos > 0) mobDict["Player"].XPos--; break;
case ConsoleKey.D: if (mobDict["Player"].XPos < map.Length * 2 - 1) mobDict["Player"].XPos++; break;
- case ConsoleKey.UpArrow: DamageDealing(map, ConsoleKey.UpArrow); break;
- case ConsoleKey.DownArrow: DamageDealing(map, ConsoleKey.DownArrow); break;
- case ConsoleKey.LeftArrow: DamageDealing(map, ConsoleKey.LeftArrow); break;
- case ConsoleKey.RightArrow: DamageDealing(map, ConsoleKey.RightArrow); break;
+ case ConsoleKey.UpArrow: mobDict["Player"].WeaponsList.First().Direction = 3; break;
+ case ConsoleKey.DownArrow: mobDict["Player"].WeaponsList.First().Direction = 4; break;
+ case ConsoleKey.LeftArrow: mobDict["Player"].WeaponsList.First().Direction = 1; break;
+ case ConsoleKey.RightArrow: mobDict["Player"].WeaponsList.First().Direction = 2; break;
}
}
- //chooses random movement for mobs (that arent player)
- var rndDirection = new Random();
- foreach (var mob in mobDict.Values.Where(m => m.Name != "Player" && m.Alive == true))
+ if(gameTick == 1)
{
- switch (rndDirection.Next(6))
+ //chooses random movement for mobs (that arent player)
+ var rndDirection = new Random();
+ foreach (var mob in mobDict.Values.Where(m => m.Name != "Player" && m.Alive == true))
{
- case 1: if (mob.YPos > 0) mob.YPos--; break;
- case 2: if (mob.YPos < map.Length - 1) mob.YPos++; break;
- case 3: if (mob.XPos > 0) mob.XPos--; break;
- case 4: if (mob.XPos < map.Length * 2 - 1) mob.XPos++; break;
- case 5: break; //this is for the mob to do nothing, so it can just stay where it is
+ switch (rndDirection.Next(10))
+ {
+ case 1: if (mob.YPos > 0) mob.YPos--; break;
+ case 2: if (mob.YPos < map.Length - 1) mob.YPos++; break;
+ case 3: if (mob.XPos > 0) mob.XPos--; break;
+ case 4: if (mob.XPos < map.Length * 2 - 1) mob.XPos++; break;
+ case 5: break; //this is for the mob to do nothing, so it can just stay where it is
+ }
}
}
- //damage-regeneation mechanism, at the moment you only get damaged in water, program crashes when player dies
- foreach (var mob in mobDict.Values.Where(m => m.Alive == true))
+ if (gameTick == 2)
{
- foreach(var biome in biomeDict.Values)
+ //damage-regeneation mechanism, at the moment you only get damaged in water, program crashes when player dies
+ foreach (var mob in mobDict.Values.Where(m => m.Alive == true))
{
- if (biome.Floor == map[mob.YPos][mob.XPos] && biome.Damage > 0)
+ foreach (var biome in biomeDict.Values)
{
- if (mob.LungCapacity > 0 && biome.Suffocate) mob.LungCapacity--;
- else mob.Health -= biome.Damage;
+ if (biome.Floor == map[mob.YPos][mob.XPos] && biome.Damage > 0)
+ {
+ if (mob.LungCapacity > 0 && biome.Suffocate) mob.LungCapacity--;
+ else mob.Health -= biome.Damage;
- break;
+ break;
+ }
+ else
+ {
+ if (mob.LungCapacity < mob.MaxLungCapacity) mob.LungCapacity++;
+ if (mob.Health < mob.MaxHealth) mob.Health++;
+ }
}
- else
- {
- if (mob.LungCapacity < mob.MaxLungCapacity) mob.LungCapacity++;
- if (mob.Health < mob.MaxHealth) mob.Health++;
- }
+
+ if (mob.Health == 0) mob.Alive = false;
}
- if (mob.Health == 0) mob.Alive = false;
+ gameTick = 0;
}
ReWriteScreen(map);
Thread.Sleep(80);
+ gameTick++;
}
Console.WriteLine("GAME OVER. YOU DIED.");
ConsoleKey endProgram = Console.ReadKey().Key;
}
- private static void DamageDealing(string[] map, ConsoleKey direction)
- {
- int x = mobDict["Player"].XPos;
- int y = mobDict["Player"].YPos;
- char weapon = '.';
-
- switch (direction)
- {
- case ConsoleKey.UpArrow: if (y > 0) { y--; weapon = '|'; } break;
- case ConsoleKey.DownArrow: if (y < map.Length - 1) { y++; weapon = '|'; } break;
- case ConsoleKey.LeftArrow: if (x > 0) { x--; weapon = '-'; } break;
- case ConsoleKey.RightArrow: if (x < map.Length * 2 - 1) { x++; weapon = '-'; } break;
- }
-
- if(weapon != '.')
- {
- Console.SetCursorPosition(x, y);
- Console.Write(weapon);
-
- List<string> damagedMobs = mobDict.Values.Where(m => m.Alive == true && m.XPos == x && m.YPos == y).Select(m => m.Name).ToList();
- if (damagedMobs.Count > 0)
- {
- foreach (var dMob in damagedMobs)
- {
- mobDict[dMob].Health -= 1;
- if (mobDict[dMob].Health == 0) mobDict[dMob].Alive = false;
- }
- }
- }
-
- Thread.Sleep(80);
- }
-
private static void MapGenerate(string[] map)
{
Random rnd = new Random();
@@ -160,20 +143,30 @@ namespace Game
Console.ForegroundColor = biomeDict.Values.ToList().Find(x => x.Floor == map[i].Last()).Color;
Console.WriteLine(map[i].TrimStart(map[i].First()));
- }
- //Prints mobs in their positions
- foreach(var mob in mobDict.Values.Where(m => m.Alive == true))
- {
- mob.Print();
- }
+ //If an alive mob is at the same line as the cycle is, print it
+ foreach (var mob in mobDict.Values.Where(m => m.YPos == i && m.Alive == true))
+ {
+ mob.Print();
- //Prints the player status, i.e. health, armour, lung capacity (it's made with a string of "bubbles")
- Console.SetCursorPosition(0, map.Length + 1);
- mobDict["Player"].PrintStats();
+ if (mob.WeaponsList.Count > 0)
+ {
+ foreach (var weapon in mob.WeaponsList)
+ {
+
+ weapon.Print(mobDict["Player"].XPos, mobDict["Player"].YPos, map.Length * 2, map.Length);
- //Console.WriteLine(biomeDict.Values.ToList().Find(b => map[mobDict["Player"].YPos][mobDict["Player"].XPos] == b.Floor).Name);
+ if (weapon.Direction != 4) weapon.Direction = 0;
+ }
+ }
+ }
+ Console.SetCursorPosition(0, i + 1);
+ }
+ //Prints the player status, i.e. health, armour, lung capacity (it's made with a string of "bubbles")
+ Console.SetCursorPosition(0, map.Length + 1); //sets cursor at the very end
+ Console.ForegroundColor = ConsoleColor.Gray;
+ Console.WriteLine(mobDict["Player"].Stats());
Console.CursorVisible = false;
}
diff --git a/Bitspace/Bitspace/Weapon.cs b/Bitspace/Bitspace/Weapon.cs
new file mode 100644
index 0000000..4ecd62c
--- /dev/null
+++ b/Bitspace/Bitspace/Weapon.cs
@@ -0,0 +1,73 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Game
+{
+ class Weapon
+ {
+ private string name;
+ private ushort damage;
+
+ private byte direction;
+
+ private char skinLeft;
+ private char skinRight;
+ private char skinUp;
+ private char skinDown;
+
+ public void Print(int xPos, int yPos, int maxX, int maxY)
+ {
+ char swordChar = SwordSwing(direction);
+
+ if(swordChar != '\0')
+ {
+ switch (direction)
+ {
+ case 1: if (xPos > 0) { Console.SetCursorPosition(xPos - 1, yPos); Console.Write(swordChar); } break;
+ case 2: if (xPos < maxX - 1) { Console.SetCursorPosition(xPos + 1, yPos); Console.Write(swordChar); } break;
+ case 3: if (yPos > 0) { Console.SetCursorPosition(xPos, yPos - 1); Console.Write(swordChar); } break;
+ case 4: if (yPos < maxY - 1) { Console.SetCursorPosition(xPos, yPos + 1); Console.Write(swordChar); } break;
+ }
+ }
+ }
+
+ private char SwordSwing(byte direction)
+ {
+ switch (direction)
+ {
+ case 1: return SkinLeft; //no need for break;, return works like a break
+ case 2: return SkinRight;
+ case 3: return SkinUp;
+ case 4: return SkinDown;
+ default: return '\0'; // \0 is the char equivalent of null (you can't just write null)
+ }
+ }
+
+ public Weapon(string name, ushort damage, char tetraChar) : this(name, damage, tetraChar, tetraChar, tetraChar, tetraChar)
+ { }
+
+ public Weapon(string name, ushort damage, char leftRight, char upDown) : this(name, damage, leftRight, leftRight, upDown, upDown)
+ { }
+
+ public Weapon(string name, ushort damage, char skinLeft, char skinRight, char skinUp, char skinDown)
+ {
+ Damage = damage;
+ SkinLeft = skinLeft;
+ SkinRight = skinRight;
+ SkinUp = skinUp;
+ SkinDown = skinDown;
+ Name = name;
+ }
+
+ public ushort Damage { get => damage; set => damage = value; }
+ public char SkinLeft { get => skinLeft; set => skinLeft = value; }
+ public char SkinRight { get => skinRight; set => skinRight = value; }
+ public char SkinUp { get => skinUp; set => skinUp = value; }
+ public char SkinDown { get => skinDown; set => skinDown = value; }
+ public byte Direction { get => direction; set => direction = value; }
+ public string Name { get => name; set => name = value; }
+ }
+}