diff --git a/Torpedo/Torpedo/AIPlayer.cs b/Torpedo/Torpedo/AIPlayer.cs index 6a3aa5b..bb15927 100644 --- a/Torpedo/Torpedo/AIPlayer.cs +++ b/Torpedo/Torpedo/AIPlayer.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -26,7 +27,24 @@ namespace Torpedo public static void Attack() { - //TODO + int x, y; + do + { + x = rand.Next(Game.GameSize.Width); + y = rand.Next(Game.GameSize.Height); + } while (Player.Player2.Shots.Any(p => p.X == x && p.Y == y)); + Ship ship = Ship.GetShipAtField(Player.CurrentEnemy, x, y); + if (ship == null) + { + Player.CurrentOwn.Shots.Add(new Point(x, y)); + } + else + { + if (ship.Direction == ShipDirection.Horizontal) + ship.DamagedParts[x - ship.X] = true; + else + ship.DamagedParts[y - ship.Y] = true; + } } } } diff --git a/Torpedo/Torpedo/Game.cs b/Torpedo/Torpedo/Game.cs index 90c4b1e..f4395cf 100644 --- a/Torpedo/Torpedo/Game.cs +++ b/Torpedo/Torpedo/Game.cs @@ -114,12 +114,20 @@ namespace Torpedo GameForm.Instance.Reset(); return; } + if (Player.CurrentOwn.Ships.All(s => s.DamagedParts.All(d => d))) + { + MessageBox.Show("Vereség!"); + GameForm.Instance.Reset(); + return; + } if (Type == GameType.Singleplayer) { + GameForm.Instance.SetPanelsEnabled(false); Player.SwapPlayers(); if (Player.CurrentOwn == Player.Player2) - AIPlayer.PlaceShips(); + AIPlayer.Attack(); Player.SwapPlayers(); + GameForm.Instance.SetPanelsEnabled(true); } else if (Type == GameType.Multiplayer) { diff --git a/Torpedo/Torpedo/GameRenderer.cs b/Torpedo/Torpedo/GameRenderer.cs index 118ac04..ea9fbd5 100644 --- a/Torpedo/Torpedo/GameRenderer.cs +++ b/Torpedo/Torpedo/GameRenderer.cs @@ -98,6 +98,8 @@ namespace Torpedo { int width = Parent.Width / Game.GameSize.Width; int height = Parent.Height / Game.GameSize.Height; + if (x > Game.GameSize.Width || x < 0 || y > Game.GameSize.Height || y < 0) + throw new InvalidOperationException("A koordináták a játéktéren kívül esnek."); gr.FillRectangle(new SolidBrush(color), x * width, y * height, width, height); } } diff --git a/Torpedo/Torpedo/OwnGameRenderer.cs b/Torpedo/Torpedo/OwnGameRenderer.cs index 96fce66..de462bc 100644 --- a/Torpedo/Torpedo/OwnGameRenderer.cs +++ b/Torpedo/Torpedo/OwnGameRenderer.cs @@ -18,8 +18,10 @@ namespace Torpedo private static ReadOnlyDictionary FieldTypes = new ReadOnlyDictionary(new Dictionary() { - {FieldTypeOwn.OwnShip, Color.LightGray}, - {FieldTypeOwn.OwnShipDamaged, Color.DarkRed} + { FieldTypeOwn.OwnShip, Color.LightGray }, + { FieldTypeOwn.OwnShipDamaged, Color.DarkRed }, + { FieldTypeOwn.OwnShipDestroyed, Color.Black }, + { FieldTypeOwn.Missed, Color.LightBlue } }); public void UpdateField(int x, int y, FieldTypeOwn fieldtype) @@ -30,12 +32,18 @@ namespace Torpedo public override void RenderShip(Ship ship) { //TODO: Képek az egyes hajótípusokhoz + bool destroyed = ship.DamagedParts.All(p => p); for (int i = 0; i < ship.Size; i++) { + FieldTypeOwn fto = FieldTypeOwn.OwnShip; + if (destroyed) + fto = FieldTypeOwn.OwnShipDestroyed; + else if (ship.DamagedParts[i]) + fto = FieldTypeOwn.OwnShipDamaged; if (ship.Direction == ShipDirection.Horizontal) - UpdateField(ship.X + i, ship.Y, FieldTypeOwn.OwnShip); + UpdateField(ship.X + i, ship.Y, fto); else - UpdateField(ship.X, ship.Y + i, FieldTypeOwn.OwnShip); + UpdateField(ship.X, ship.Y + i, fto); } //TODO: Rárajzolni a képet a mezőkre } @@ -43,12 +51,15 @@ namespace Torpedo public override void RenderGameField() { Player.CurrentOwn.Ships.ForEach(s => RenderShip(s)); + Player.CurrentEnemy.Shots.ForEach(s => UpdateField(s.X, s.Y, FieldTypeOwn.Missed)); } } public enum FieldTypeOwn { OwnShip, - OwnShipDamaged + OwnShipDamaged, + OwnShipDestroyed, + Missed } }