コード例 #1
0
		public GameService(int mapSizeX, int mapSizeY, string playerName)//char[,] initialMap)
		{
			this.playerName = playerName;
			Random r = RandomNumberGenerator.GlobalRandom;
			Generator = new MapGenerator(mapSizeX, mapSizeY);
			Creatures = new List<Creature>();
			Player = new Creature(40)
			{
				CreatureType = "Hero", 
				MeleeWeapon = new MeleeWeapon(){Damage=3, BrokeChance=0.001}, 
				RangedWeapon = new RangedWeapon(){Damage=2, Range=3, Chance=0.5, Ammo=15}, 
				GrenadeWeapon = new GrenadeWeapon{Damage=5, Range=5, Spread=2, Ammo=2}
			};
			Player.MianownikName = "Gracz";
			Player.BiernikName = "gracza";
			Map = Generator.GenerateMap(Player);// new Map(initialMap);
			CreatureVisitor.map = Map;
			Creatures.AddRange(Generator.GeneratedCreatures);

			bool playerPlaced = false;
			while (playerPlaced == false)
			{
				playerPlaced = Map[r.Next(Map.MapWidth), r.Next(Map.MapHeight)].putCreature(Player);
			}
		}
コード例 #2
0
		public ShootCommand(Creature attacker, Creature target, Map map, IRandomNumberGenerator randomNumberGenerator)
		{
			this.randomNumberGenerator = randomNumberGenerator;
			this.deffender = target;
			this.attacker = attacker;
			this.map = map;
		}
コード例 #3
0
		public ThrowCommand(Creature thrower, Field targetField, Map map, IRandomNumberGenerator randomNumberGenerator)
		{
			this.thrower = thrower;
			this.targetField = targetField;
			this.map = map;
			this.randomNumberGenerator = randomNumberGenerator;
		}
コード例 #4
0
		public void CreatureColisionTest()
		{
			Creature opponent = new Creature(10);
			map[0, 1].putCreature(opponent);
			target.interactWithField(map[0, 1]);
			Assert.AreEqual(5, opponent.Health);
		}
コード例 #5
0
		public MoveCommand(Creature creature, Direction moveDirection, Map map)
		{
			this.creature = creature;
			this.moveDirection = moveDirection;
			this.map = map;
			this.interactIfCreature = true;
		}
コード例 #6
0
		public void MyTestInitialize()
		{
			map = TestObjects.GetTestMap();
			CreatureVisitor.map = map;
			target = new Creature(10) { MeleeWeapon = new MeleeWeapon() { Damage = 5 }, RangedWeapon = new RangedWeapon() { Damage = 5, Range = 5, Chance = 0.5} };
			map[0, 0].putCreature(target);
		}
コード例 #7
0
		public void MoveCreatureTest()
		{
			Creature playersCreature = new Creature(10) { MeleeWeapon = new MeleeWeapon() { Damage = 5 } };
			map[0,0].putCreature(playersCreature);
			new MoveCommand(playersCreature, MoveCommand.Direction.Right, map).execute();
			Assert.AreEqual(1, playersCreature.X);
			Assert.AreEqual(0, playersCreature.Y);
		}
コード例 #8
0
		public static bool CanShoot(Map map, Creature attacker, Creature target)
		{
			if (attacker.RangedWeapon != null
				&& map.getDistanceBetweenFields(attacker.Field, target.Field) <= attacker.RangedWeapon.Range
				&& map.isSightBetweenFields(attacker.Field, target.Field))
				return true;
			return false;
		}
コード例 #9
0
		public void ConstructorTest()
		{
			try
			{
				Creature target = new Creature(-10);
				Assert.Fail("spodziewany był wyjątek");
			} catch(CreatureException) { }
		}
コード例 #10
0
		public void MyTestInitialize()
		{
			map = TestObjects.GetTestMap();
			attacker = new Creature(10) { RangedWeapon = new RangedWeapon() { Damage = 5, Range = 1, Chance = 0.5 } };
			deffender = new Creature(10);
			map[0,0].putCreature(attacker);
			map[0,1].putCreature(deffender);
		}
コード例 #11
0
		public void MyTestInitialize()
		{
			map = TestObjects.GetTestMap();
			attacker = new Creature(10){MeleeWeapon = new MeleeWeapon(){Damage=1}};
			deffender = new Creature(10);
			map[0,0].putCreature(attacker);
			map[0,1].putCreature(deffender);
		}
コード例 #12
0
		public void PlaceMultipleCreaturesTest()
		{
			Creature thing = new Creature(10);
			Creature thing2 = new Creature(10);
			Field target = new Floor(0, 0);

			Assert.IsTrue(target.putCreature(thing));
			Assert.IsFalse(target.putCreature(thing2));
		}
コード例 #13
0
		public void PlaceCreatureTest()
		{
			Creature thing = new Creature(10);
			Field target = new Wall(0, 0);
			Assert.IsFalse(target.putCreature(thing));
			Field target2 = new Floor(0, 0);
			Assert.IsTrue(target2.putCreature(thing));
			Assert.AreEqual(0,target2.X);
			Assert.AreEqual(0, target2.Y);
		}
コード例 #14
0
		public void MeeleAttackRangeTest()
		{
			Creature enemy = new Creature(10);
			map[1, 2].putCreature(enemy);

			ICreatureCommand command = new AttackCommand(attacker, deffender, map);
			Assert.IsTrue(command.isExecutable());
			command = new AttackCommand(attacker, enemy, map);
			Assert.IsFalse(command.isExecutable());
		}
コード例 #15
0
		public void objectPickedBy(Creature creature)
		{
			int oldHealth = creature.Health;

			if(creature.Health + this.Health <= creature.MaxHealth)
				creature.Health += this.Health;
			else
				creature.Health = creature.MaxHealth;

			AbstractLogger.Current.Log(creature.MianownikName + " wyleczył " + (creature.Health - oldHealth) + " zdrowia.");
		}
コード例 #16
0
		public void RangedAttackRangeTest()
		{

			Creature enemy = new Creature(10);
			map[1, 2].putCreature(enemy);

			ICreatureCommand command = new ShootCommand(attacker, deffender, map, new TestRandom(0.1));
			Assert.IsTrue(command.isExecutable());

			command = new ShootCommand(attacker, enemy, map, new TestRandom(0.1));
			Assert.IsFalse(command.isExecutable());
		}
コード例 #17
0
		public AI(Map map, Creature player, Creature creature)
		{
			this.map = map;
			this.player = player;
			this.creature = creature;

			Random r = new Random();
			if(r.Next(2) == 0)
				Sniper = true;
			else
				Sniper = false;

		}
コード例 #18
0
		public override bool putCreature(Creature thing)
		{
			if (this.Creature == null)
			{
				this.Creature = thing;
				this.Creature.Field = this;
				return true;
			}
			else
			{
				return false;
			}
		}
コード例 #19
0
		public static Image CreateCreatureImage(Creature creature)
		{
			if (creature.CreatureType == "Hero")
			{
				return LoadImage("player.png");
			}
			else if (creature.CreatureType == "Enemy")
			{
				return LoadImage("enemy.png");
			}
			else
				return null;
		}
コード例 #20
0
		public void CreatureNotOnTheMapTest()
		{
			// arrange
			Creature playersCreature = new Creature(10) { MeleeWeapon = new MeleeWeapon() { Damage = 5 } };
			bool exceptionThrown = false;

			// act
			try
			{
				new MoveCommand(playersCreature, MoveCommand.Direction.Right, map).execute();
			}
			catch (CreatureException) { exceptionThrown = true;  }

			// assert
			Assert.IsTrue(exceptionThrown);
		}
コード例 #21
0
		public Creature GetRandomCreature()
		{
			Random r = RandomNumberGenerator.GlobalRandom;

			Creature enemy = new Creature(7 + r.Next(13))
			{
				CreatureType = "Enemy",
				MianownikName = "Gangster",
				BiernikName = "gangstera",
				MeleeWeapon = new MeleeWeapon() { Damage = 1 + r.Next(2), BrokeChance = 0 },
				RangedWeapon = new RangedWeapon() { Chance = (double)(10 + r.Next(80)) / 100, Damage = 1, Range = 2 + r.Next(7), Ammo = 5 + r.Next(15) }
			};

			return enemy;

		}
コード例 #22
0
		public MoveCommand(Creature creature, int xDir, int yDir, Map map, bool interactIfCreature)
		{
			Direction moveDirection = Direction.Down;
			if (xDir == -1 && yDir == -1) moveDirection = Direction.LeftUp;
			if (xDir == -1 && yDir == 0) moveDirection = Direction.Left;
			if (xDir == -1 && yDir == 1) moveDirection = Direction.LeftDown;
			if (xDir == 0 && yDir == -1) moveDirection = Direction.Up;
			if (xDir == 0 && yDir == 0) moveDirection = Direction.Stop;
			if (xDir == 0 && yDir == 1) moveDirection = Direction.Down;
			if (xDir == 1 && yDir == -1) moveDirection = Direction.RightUp;
			if (xDir == 1 && yDir == 0) moveDirection = Direction.Right;
			if (xDir == 1 && yDir == 1) moveDirection = Direction.RightDown;

			this.creature = creature;
			this.moveDirection = moveDirection;
			this.map = map;
			this.interactIfCreature = interactIfCreature;
		}
コード例 #23
0
		public Creature GenerateRandomCreature(Map map, Creature player)
		{
			Random r = RandomNumberGenerator.GlobalRandom;
			Creature enemy = new CreatureGenerator().GetRandomCreature();

			bool success = false;

			while(success == false)
			{
				success = map[r.Next(map.MapWidth), r.Next(map.MapHeight)].putCreature(enemy);
			}
			AI ai = new AI(map, player, enemy);
			enemy.AI = ai;
			return enemy;

		}
コード例 #24
0
		public void objectPickedBy(Creature creature)
		{
			creature.Money += Value;
			creature.PickedPointsCount++;
			AbstractLogger.Current.Log(creature.MianownikName + " zebrał " + Value + " punktów.");
		}
コード例 #25
0
		public abstract bool putCreature(Creature thing);
コード例 #26
0
		public CreatureVisitor(Creature creature)
		{
			this.creature = creature;
		}
コード例 #27
0
		public override void objectPickedBy(Creature creature)
		{
			creature.GrenadeWeapon = this;
			AbstractLogger.Current.Log(creature.MianownikName + " zebrał granat zadający " + this.Damage + " obrażeń, o obszarze o średnicy " + this.Spread + "pól i zasięgu " + this.Range);
		}
コード例 #28
0
		public abstract void objectPickedBy(Creature creature);
コード例 #29
0
 public void objectPickedBy(Creature creature)
 {
     creature.Money += Value;
     creature.PickedPointsCount++;
     AbstractLogger.Current.Log(creature.MianownikName + " zebrał " + Value + " punktów.");
 }
コード例 #30
0
		public override void objectPickedBy(Creature creature)
		{
			creature.RangedWeapon = this;
			AbstractLogger.Current.Log(creature.MianownikName + " zebrał pistolet zadający " + this.Damage + " obrażeń, o celności " + (Math.Round(this.Chance * 100)).ToString() + "%" + " i zasięgu " + this.Range);
		}
コード例 #31
0
		public Map GenerateMap(Creature player)
		{
			mapTemplate = new char[SizeX, SizeY];

			// na początku wszystko jest terenem po którym można chodzić + obwódka ze ścian
			for (int i = 0; i < SizeX; ++i)
				for (int j = 0; j < SizeY; ++j)
					if (i == 0 || j == 0 || i == SizeX - 1 || j == SizeY - 1)
						mapTemplate[i, j] = '#';
					else
						mapTemplate[i, j] = '.';

			List<Building> buildings = new List<Building>();
			for (int i = 0; i < maxBuildingNumber; ++i)
			{
				bool success = false;
				int counter = 0;
				while (success == false && counter < maxBuildingCounter)
				{
					Building b = Building.NewRandomBuilding(2, 2, SizeX - 2, SizeY - 2);
					if (!intersects(b, buildings))
					{
						success = true;
						buildings.Add(b);
					}
					++counter;
				}
			}

			foreach(Building b in buildings)
				b.DrawOnTemplate(mapTemplate);

			foreach (Building b in buildings)
				b.DrawDoors(mapTemplate);

			Map map = new Map(mapTemplate);

			foreach (Building b in buildings)
				b.GenerateLoot(map);

			int pointsCounter = 0;
			int tryCounter = 0;
			while (pointsCounter < PointObjectsCount)
			{
				++tryCounter;
				if (buildings.Count == 0 || tryCounter > 10)
				{
					map[1, 1].placeObject(new Points() { Value = 10 });
					++pointsCounter;
				}
				foreach(Building b in buildings)
				{
					if (b.GeneratePoints(map) == true)
						++pointsCounter;
					if (pointsCounter >= PointObjectsCount)
						break;
				}
			}

			foreach (Building b in buildings)
			{
				GeneratedCreatures.AddRange(b.GenerateCreatures(map, player));
			}
			return map;
		}