Example #1
0
        static void Main()
        {
            double increceSpeed = 0;
            double acceleration = 0.5;

            int playfieldWidth = 5; // shirina na igralnoto pole
            int livesCOunt = 5;
            Console.BufferHeight = Console.WindowHeight = 30;
            Console.BufferWidth = Console.BufferWidth = 50;

            //usercar
            Rock userCar = new Rock();
            userCar.x = 2;//start position
            userCar.y = Console.WindowHeight - 1;//start position
            userCar.c = '@';//symbol car
            userCar.color = ConsoleColor.Yellow;// color
            Random randomGenerator = new Random();

            List<Rock> cars = new List<Rock>();// list of cars with Cars property x ,y, c,colour but in addition we use add option form list property
            while (true)
            {
                if (increceSpeed > 400)
                {
                    increceSpeed += acceleration;
                }

                bool hitted = false;
                //create car
                {//skobite otdelqt newCar ot tuk s newcCar w for cikyla kydeto promenqme y za da dwijime kolichkite
                    Rock newCar = new Rock();
                    newCar.color = ConsoleColor.Green;
                    newCar.x = randomGenerator.Next(0, playfieldWidth);//0-4 beside pW=5
                    newCar.y = 0;//appear on the top
                    newCar.c = '%';
                    cars.Add(newCar);// dobavqme nowata kolichka zapisana w spisyk
                }
                //## Move your car (keyread)// read key = drive car
                if (Console.KeyAvailable)// check is key is pressed if pressed - read key else go down the code
                {
                    ConsoleKeyInfo pressedKey = Console.ReadKey(true);//read key
                    while (Console.KeyAvailable) Console.ReadKey(true);/*read buffer if there are any*/ /*clear buffer keys and read the ast key*/
                    if (pressedKey.Key == ConsoleKey.LeftArrow)
                    {
                        if (userCar.x - 1 >= 0)// we wont get out of the console buffer/field
                        {
                            userCar.x--;
                        }
                    }
                    else if (pressedKey.Key == ConsoleKey.RightArrow)
                    {
                        if (userCar.x + 1 < playfieldWidth)// we wont get out of the console buffer/field
                        {
                            userCar.x++;
                        }
                    }
                }
                //##  Move other Cars
                List<Rock> newList = new List<Rock>(); // zaradi neadekwatnoto dvijenie prawime now spisyk s koli4ki
                // kato swyrshime dobavqneto na nowi elementi na novite kolichki ot stariq spisyk
                // naj nakraq smenqme referenciqta cars = newList; t.e. kym stariq spisyk dobavqme nowi kolichki
                for (int i = 0; i < cars.Count; i++)
                {// uwelichawa Y koordinatite na wsqka kolichka
                    Rock oldCar = cars[i];// wzimame elemnt ot masiwa s kolichkire
                    Rock newCar = new Rock();// nowa kolichka sys sy]ite swojstwa na starata
                    newCar.x = oldCar.x;
                    newCar.y = oldCar.y + 1;//samo za radi towa pisahme wsi4ko ostanalo :D
                    newCar.c = oldCar.c;
                    //## CHeck if Hitted
                    newCar.color = oldCar.color;
                    if (newCar.y == userCar.y && newCar.x == userCar.x)
                    {//prowerka dali nowata kolichka sywpada s mqstoot na nashata ako da maha jiwoti
                        livesCOunt--;
                        hitted = true;// flad za ubyr
                        if (increceSpeed < 400)
                        {
                            increceSpeed += 50;// uweli4awame skorosta pri umirane
                        }

                        if (hitted)
                        {
                            PrintOnPosition(userCar.x, userCar.y, 'X', ConsoleColor.Red);
                        }
                        if (livesCOunt <= 0)
                        {// proverka za priklu4wane na igrata
                            PrintStringOnPosition(8, 7, " GAY OVER ! ! !", ConsoleColor.Red);
                            PrintStringOnPosition(8, 12, " Pres ENTER to exit! ! !", ConsoleColor.Red);

                            Console.ReadLine();// iz4akwasht operator i4akwa da se natisne nqkoj key
                            return; // spirame main metoda
                            // Environment.Exit(0);
                        }
                    }
                    if (newCar.y < Console.WindowHeight)
                    {// za da ne hwyrlq exeption kogato generiranite kolichki stignat  do dolu
                        newList.Add(newCar);
                    }
                }
                cars = newList;// dobavqne na nowite kolichki s novi elementi kym stariq spisyk

                //## Clear the console
                Console.Clear();
                //

                if (hitted)
                {
                    cars.Clear();
                    PrintOnPosition(userCar.x, userCar.y, 'X', ConsoleColor.Red);// pri udyr registrira s druc simvol i cwqt
                }
                else
                {
                    PrintOnPosition(userCar.x, userCar.y, userCar.c, userCar.color);
                }
                foreach (Rock car in cars)
                {//## draw othe cars
                    PrintOnPosition(car.x, car.y, car.c, car.color);
                }
                //## Draw INfo //## score
                PrintStringOnPosition(10, 4, "Lives: " + livesCOunt, ConsoleColor.White);
                PrintStringOnPosition(10, 5, "Speed: " + increceSpeed, ConsoleColor.White);
                PrintStringOnPosition(10, 7, "Speed: " + acceleration, ConsoleColor.White);

                //## Slow fown
                SpeedUP(increceSpeed);

            }
        }
        public void Attack_Rock()
        {
            // setup environment for test
            GameController.StartGame ();
            List<Piece> PL1 = GameController.Players [0].PieceList;
            List<Piece> PL2 = GameController.Players [1].PieceList;
            for (int i = 0; i < PL1.Count; i++)
            {
                PL1 [i].isDead = true;
                PL1 [i].X = -1;
                PL1 [i].Y = -1;
                PL2 [i].isDead = true;
                PL2 [i].X = -1;
                PL2 [i].Y = -1;
            }
            UtilityFunctions.CheckAvaiMoveOfAllPieces ();

            //test piece
            Piece testRock = new Rock (2, 2, true);
            Piece testPawn = null;
            Piece testPawn2 = null;

            //get a pwan from write player for test attack
            foreach (Piece p in PL1)
            {
                if (p.type == PieceType.Pawn)
                {
                    testPawn = p;
                    break;
                }
            }
            testPawn.isDead = false;
            testPawn.X = 2;
            testPawn.Y = 4;
            testRock.AvailableMoves ();
            testRock.Move (2, 4);
            Assert.AreEqual (true, testPawn.isDead);

            //get a pwan from black player for test attack
            foreach (Piece p in PL2)
            {
                if (p.type == PieceType.Pawn)
                {
                    testPawn2 = p;
                    break;
                }
            }
            testPawn2.isDead = false;
            testPawn2.X = 1;
            testPawn2.Y = 4;
            testRock.AvailableMoves ();
            testRock.Move (1, 4);
            Assert.AreEqual (false, testPawn2.isDead);
        }
        public void AvaliableMove_Rock()
        {
            // setup environment for test
            GameController.StartGame ();
            List<Piece> PL1 = GameController.Players [0].PieceList;
            List<Piece> PL2 = GameController.Players [1].PieceList;
            for (int i = 0; i < PL1.Count; i++)
            {
                PL1 [i].isDead = true;
                PL1 [i].X = -1;
                PL1 [i].Y = -1;
                PL2 [i].isDead = true;
                PL2 [i].X = -1;
                PL2 [i].Y = -1;
            }
            UtilityFunctions.CheckAvaiMoveOfAllPieces ();

            //test piece
            Piece testRock = new Rock (2, 2, true);
            testRock.AvailableMoves ();
            Assert.IsTrue (hasContain (testRock.AvaliableMove_X, testRock.AvaliableMove_Y, 0, 2));
            Assert.IsTrue (hasContain (testRock.AvaliableMove_X, testRock.AvaliableMove_Y, 1, 2));
            Assert.IsTrue (hasContain (testRock.AvaliableMove_X, testRock.AvaliableMove_Y, 3, 2));
            Assert.IsTrue (hasContain (testRock.AvaliableMove_X, testRock.AvaliableMove_Y, 4, 2));
            Assert.IsTrue (hasContain (testRock.AvaliableMove_X, testRock.AvaliableMove_Y, 2, 0));
            Assert.IsTrue (hasContain (testRock.AvaliableMove_X, testRock.AvaliableMove_Y, 2, 1));
            Assert.IsTrue (hasContain (testRock.AvaliableMove_X, testRock.AvaliableMove_Y, 2, 3));
            Assert.IsTrue (hasContain (testRock.AvaliableMove_X, testRock.AvaliableMove_Y, 2, 4));

            Piece testRock2 = new Rock (0, 7, false);
            testRock2.AvailableMoves ();
            Assert.IsTrue (hasContain (testRock2.AvaliableMove_X, testRock2.AvaliableMove_Y, 0, 0));
            Assert.IsTrue (hasContain (testRock2.AvaliableMove_X, testRock2.AvaliableMove_Y, 0, 1));
            Assert.IsTrue (hasContain (testRock2.AvaliableMove_X, testRock2.AvaliableMove_Y, 0, 2));
            Assert.IsTrue (hasContain (testRock2.AvaliableMove_X, testRock2.AvaliableMove_Y, 0, 3));
            Assert.IsTrue (hasContain (testRock2.AvaliableMove_X, testRock2.AvaliableMove_Y, 0, 4));
            Assert.IsTrue (hasContain (testRock2.AvaliableMove_X, testRock2.AvaliableMove_Y, 0, 5));
            Assert.IsTrue (hasContain (testRock2.AvaliableMove_X, testRock2.AvaliableMove_Y, 0, 6));
            Assert.IsTrue (hasContain (testRock2.AvaliableMove_X, testRock2.AvaliableMove_Y, 1, 7));
            Assert.IsTrue (hasContain (testRock2.AvaliableMove_X, testRock2.AvaliableMove_Y, 2, 7));
            Assert.IsTrue (hasContain (testRock2.AvaliableMove_X, testRock2.AvaliableMove_Y, 3, 7));
            Assert.IsTrue (hasContain (testRock2.AvaliableMove_X, testRock2.AvaliableMove_Y, 4, 7));
            Assert.IsTrue (hasContain (testRock2.AvaliableMove_X, testRock2.AvaliableMove_Y, 5, 7));
            Assert.IsTrue (hasContain (testRock2.AvaliableMove_X, testRock2.AvaliableMove_Y, 6, 7));
            Assert.IsTrue (hasContain (testRock2.AvaliableMove_X, testRock2.AvaliableMove_Y, 7, 7));
        }
        /// <summary>
        /// Loads the game.
        /// </summary>
        public static void LoadGame()
        {
            string filename = SwinGame.PathToResource ("records.txt");
            string[,] img = {{"Pawn_W","Rock_W","Knight_W","Bishop_W","Queen_W","King_W"},{"Pawn_B","Rock_B","Knight_B","Bishop_B","Queen_B","King_B"}};
            StreamReader sr = new StreamReader (filename);
            _players.Clear ();
            _deadPieceW.Clear ();
            _deadPieceB.Clear ();
            _players.Add (new Player ("", false));
            _players.Add (new Player ("", true));
            _players [0].PieceList.Clear ();
            _players [1].PieceList.Clear ();
            Result = 3;
            //Read names
            _players[0].name = sr.ReadLine();
            _players [1].name = sr.ReadLine ();
            // Modify Pieces Location
            for (int i = 0; i < 2; i++)
            {
                for (int j = 0; j < 16; j++)
                {
                    string carry = "";
                    carry = sr.ReadLine ();
                    Piece p = null;
                    switch (carry [0])
                    {
                    case 'P':
                        p = new Pawn (PieceType.Pawn);
                        p.Image = img [i, 0];
                        break;
                    case 'Q':
                        p = new Queen (PieceType.Queen);
                        p.Image = img [i, 4];
                        break;
                    case 'R':
                        p = new Rock (PieceType.Rock);
                        p.Image = img [i, 1];
                        break;
                    case 'K':
                        p = new King (PieceType.King);
                        p.Image = img [i, 5];
                        break;
                    case 'N':
                        p = new Knight (PieceType.Knight);
                        p.Image = img [i, 2];
                        break;
                    case 'B':
                        p = new Bishop (PieceType.Bishop);
                        p.Image = img [i, 3];
                        break;
                    }

                    p.IsBlack = (i == 1);
                    p.HasBeenMoved = false;
                    if (carry [1] == 'M')
                    {
                        p.HasBeenMoved = true;
                    }
                    if (carry [2] == 'L')
                    {
                        p.isDead = false;
                    }
                    else
                    {
                        p.isDead = true;
                        if (!p.IsBlack)
                        {
                            _deadPieceW.Add (p);
                        }
                        else
                        {
                            _deadPieceB.Add (p);
                        }
                    }
                    if (carry [3] == '-')
                    {
                        p.X = (-1) * (Convert.ToInt32 (carry [4]) - 48);
                        if (carry [5] == '-')
                        {
                            p.Y = (-1) * (Convert.ToInt32 (carry [6]) - 48);
                        }
                        else
                        {
                            p.Y = (Convert.ToInt32 (carry [5]) - 48);
                        }
                    }
                    else
                    {
                        p.X = Convert.ToInt32 (carry [3]) - 48;
                        if (carry [4] == '-')
                        {
                            p.Y = (-1) * (Convert.ToInt32 (carry [5]) - 48);
                        }
                        else
                        {
                            p.Y = (Convert.ToInt32 (carry [4]) - 48);
                        }
                    }
                    GameController.Players [i].PieceList.Add (p);
                }
            }
            SelectedPiece = null;
            string curr = sr.ReadLine();
            int current = Convert.ToInt32 (curr[0]) - 48;
            CurrentPlayerIndex = current;
            CurrentPlayer = Players [current];
            UtilityFunctions.CheckAvaiMoveOfAllPieces ();
            curr = sr.ReadLine ();
            if (curr == "CHECKING")
            {
                GameController.Checking = true;
                if (!MainGameController.CanPreventAttack ())
                {
                    GameController.Result = Math.Abs (GameController.CurrentPlayerIndex - 1);
                    GameController.EndCurrentState (); //Need to be changed later
                }
            }else
            {
                Checking = false;
            }
            AddState (GameState.MainGame);
            sr.Close ();
        }