Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.09.2017, 14:41   #1
drako08
Пользователь
 
Регистрация: 04.10.2016
Сообщений: 30
По умолчанию 15puzzle

Реализовать игру пятнашки. Обеспечить выбор размерности поля и уровня сложности (насколько сильно доска отличается от состояния «победа»), сделать возможность игры с усложнением, когда вместо хода заданного пользователем происходит некоторое количество рандомных ходов. Реализовать возможность отмены ходов.
С использованием паттернов: Синглетон, Фабричный метод, Команда, Хранитель.

Присутствует только изменение игрового поля и то не через паттерны а еще нужно сделать откат ходов я так понял с помощью паттерна хранитель но что-то не получается помогите.
Код:
using System;

//Game.cs
namespace puzzle15
{
    class Points
    {
        public readonly int x, y;
        public Points(int x, int y)
        {
            this.x = x;
            this.y = y;
        }
    }
    class Game
    {
        public int Length=0;
        const int nw = 4, height = 4;
        int[,] field = new int[nw, height];
        Points[] FieldValue = new Points[16];
        

        public Game(int[] point)
        { 

            int r = 0;
            string[] file = new string[4];
            Length = 16;
          
            mixer(point);

            for (int j = 0; j < height; j++)
            {
                for (int i = 0; i < nw; i++)
                {
                    field[j, i] = point[r];
                    FieldValue[point[r]] = new Points(j, i);
                    r++;

                }
            }
          
        }

        public void mixer(int[] p)
        {

            int tmp = 0;

            Random rnd = new Random();

            for (int i = 0; i < 16; i++)
            {
                bool isExist = false;
                do
                {
                    isExist = false;
                    tmp = rnd.Next(0, 16);
                    for (int j = 0; j < i; j++)
                    {
                        if (tmp == p[j]) { isExist = true; }
                    }
                }
                while (isExist);
                p[i] = tmp;
            }
        }

        private Points GetLocation(int value)
        {

            return FieldValue[value];
        }


        public void drawField()
        {

            Console.WriteLine("----------------------------");
            for (int i = 0; i < nw; i++)
            {
                for (int j = 0; j < height; j++)
                {
                    Console.Write(field[i, j] + "\t");

                }
                Console.WriteLine();

            }

            Console.WriteLine("----------------------------");

        }

        public bool repeat(double Length,int[] point)
        {

            for (int i = 0; i < Length; ++i)
            {
                for (int y = i + 1; y < Length; ++y)
                {
                    if (point[i] == point[y])
                    {
                        Console.WriteLine(point[i] + " ==" + point[y]);
                        throw new ArgumentException("Numbers should not be repeated");
                    }


                }
            }
            return true;
        }

        public Boolean finish()
        {
            bool temp = false;
            int value = 1;
            for (int i = 0; i < nw; ++i)
            {
                for (int j = 0; j < height; ++j)
                {
                    if (field[i, j] == value)
                    {

                        temp = true;
                        ++value;
                        if (value == Length)
                        {
                            value = 0;
                        }
                    }
                    else
                    {
                        return false;
                    }

                }

            }      
            return temp;

        }

        public void Move(int value)
        {

            try
            {
            Console.WriteLine(value);
            if (value > 15 || value < 0)
            {
                throw new ArgumentException();
            }

            int x = GetLocation(0).x;
            int y = GetLocation(0).y;

            int ValueX = GetLocation(value).x;
            int ValueY = GetLocation(value).y;

                if ((ValueX == x && (ValueY == y - 1 || ValueY == y + 1))||(ValueY == y && (ValueX == x - 1 || ValueX == x + 1)))
                {

                    field[x, y] = value;
                    field[ValueX, ValueY] = 0;

                    var vere = FieldValue[0];
                    FieldValue[0] = FieldValue[value];
                    FieldValue[value] = vere;
                }

            }

            catch (ArgumentException)
            {
                Console.WriteLine("There is no such number, try again: ");
            }
            catch (Exception)
            {
                Console.WriteLine("Next to this number is not 0, try again: ");
            }
            
        }
      
    }


    //--------------------------------------------------------------------------------------------------------------------------------------------------------


    class Points2
    {
       ..............................................................................................
    }
    class Game2
    {
        public int Length = 0;
        const int nw = 3, height = 3;
        int[,] field = new int[nw, height];
        Points[] FieldValue = new Points[9];


        public Game2(int[] point)
        {

            int r = 0;
            string[] file = new string[3];
            Length = 9;

            mixer(point);

            for (int j = 0; j < height; j++)
            {
                for (int i = 0; i < nw; i++)
                {
                    field[j, i] = point[r];
                    FieldValue[point[r]] = new Points(j, i);
                    r++;

                }
            }

        }

       .................................................................................................

    }

}


//Program.cs
using System;
using System.Collections.Generic;


namespace puzzle15
...............................................................................................

//вот код начало хранителя
    class GameHistory
    {
        public Stack<Game> History { get; private set; }
        public GameHistory()
        {
            History = new Stack<Game>();
        }
    }

   
}

Последний раз редактировалось drako08; 27.09.2017 в 20:17.
drako08 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц