Логическая игра "Маджонг"

СОДЕРЖАНИЕ

 

ВВЕДЕНИЕ

Пояснительная записка является полным описанием  готового программного средства и принципа его работы.

Пояснительная записка содержит все необходимые  разделы.

В разделе «Введение» указана оценка современного состояния решаемой проблемы, исходные данные для разработки курсового проекта, перечень решаемых в работе задач.

В разделе «Анализ  задачи» описана предметная область, описаны существующие аналоги, описана  функциональная модель программы, инструменты разработки программного продукта, требования к программе.

В разделе «Проектирования  задачи» описывается организация  данных, концептуальный прототип, система  помощи, средства защиты и разграничения  доступа к данным.

В разделе «Реализация» описывается логическая и физическая организация данных, функциональное тестирование.

В разделе «Применение» описывается назначение программы, область применения, среда разработки, использование системы помощи.

В разделе «Список  использованных источников» указан список литературы и других источников, которые были использованы при написании данной курсовой работы.

В разделе «Приложения» представлен графический материал и таблицы.

 

1 Анализ задачи

1.1 Описание предметной области

Техническое задание  данной работы требует разработать программу в интегрированной среде Microsoft Visual Studio 2012 на языке C#, являющейся логической игрой «Маджонг».

Правила игры:

В ходе игры необходимо очистить игровое поле, убирая одинаковые фишки. Удаляться они могут только в том случае, если у фишки открыта хотя бы одна сторона. Сложность игры зависит от раскладки. Чем больше открытых фишек, тем проще их убирать с поля. Игра может длиться долгое время.

Данная программа  предназначена для развлекательного времяпровождения, а именно:

  • позволяет поиграть в логическую игру «Маджонг» в соответствиями с правилами;
  • улучшает реакцию;
  • повышает внимательность.

Данная программа  должна иметь простой и удобный интерфейс, так как в логическую игру «Маджонг» могут играть люди любого возраста, начиная от 5 лет.

Немало важным является и внешнее оформление программы, всё должно быть выполнено в едином стиле, чтобы не раздражало глаз пользователя.

1.2 Функциональная модель

Данное ПО предоставляет следующие основные функции:

  • выбор уровня сложности игры;
  • управление игровым процессом;
  • переключение изображений фишек;
  • вызов справки о программе;
  • вызов окна с информацией о разработчике;
  • выход из программы.

 

Последовательность  и взаимодействие функций представлено на рисунке 1.1

Рисунок 1.1 – Последовательность и взаимодействие функций

1.3 Модель данных

Вызов окна о программе – выдаёт окно о программе.

Вызов справки – выдаёт справку по работе с программой.

Функция «Новая игра» – позволяет начать новую игру.

Функция «Уровень сложности» – позволяет сменить уровень сложности.

Функция «Фишки» – позволяет сменить изображения фишек.

Функция «Выход» – осуществляет выход из программы.

1.4 Инструменты разработки

Язык разработки: C#.

Среда разработки: Microsoft Visual Studio 2012.

Microsoft Visual Studio 2012 – линейка продуктов компании Microsoft, включающих интегрированную среду разработки программного обеспечения и ряд других инструментальных средств. Данные продукты позволяют разрабатывать как консольные приложения, так и приложения с графическим интерфейсом, в том числе с поддержкой технологии Windows Forms, а также веб-сайты, веб-приложения, веб-службы как в родном, так и в управляемом кодах для всех платформ, поддерживаемых Microsoft Windows, Windows Mobile, Windows CE, .NET Framework, .NET Compact Framework и Microsoft Silverlight.

Средство проектирования и моделирования: Rational Rose.

Rational Rose - средство  объектно-ориентированного моделирования,  поддерживающие методы Буча и  ОMT.

Работа в Rational Rose основывается на построении различного рода диаграмм, описывающих проект.

Основные свойства Rational Rose:

  • охват всех этапов разработки проекта;
  • построение моделей на основе методов Буча и OMT с возможностью автоматического преобразования нотаций;
  • возможность повторного использования программных разработок пользователей за счет средств реинжениринга;
  • наличие средств автоматического контроля, позволяющих вести отладку проекта по мере его разработки;
  • возможность описания проекта на разных уровнях для различных категорий пользователей;
  • удобный для пользователя графический интерфейс;
  • автоматическая генерация кодов на языках С++, Ada (компиляторы поставляются), Smalltalk, SQLWindows, VisualBasic, PowerBuilder;
  • наличие средств групповой разработки;
  • широкий спектр применения системы - базы данных, банковские системы, телекоммуникация, системы реального времени, большие информационные системы и т.д.

Типы диаграмм, поддерживаемые Rational Rose:

  • диаграммы классов (Classes);
  • диаграммы состояний и переходов (State Transition Diagram);
  • диаграммы сценариев объектов (Object Message Diagram);
  • диаграммы сценариев сообщений (Message Trace Diagram);
  • диаграммы модулей (Modules);
  • Диаграммы процессов (Processes);

Rational Rose обеспечивает  единство модели, автоматически  поддерживая согласованность, разрабатываемых  диаграмм. Изменения, внесенные в одну из диаграмм, гарантировано отражаются в остальных.

Программа для  создания справки Help & Manual.

Help & Manual - удобный  инструмент, упрощающий создание  всех стандартных форматов справки  Windows (Справка HTML, Winhelp и MS Help 2.0 / Справка  Visual Studio), а так как Help & Manual непосредственно интегрируется с компиляторами Microsoft для этих форматов, весь Ваш вывод на 100 % совместим со стандартами.

Help & Manual также  генерирует Webhelp, PDF и Word RTF. В дополнение  к этому можно генерировать полностью отформатированные печатные руководства непосредственно из тех же проектов, используемых для всех других форматов.

Вывод PDF и печатанных руководств полностью настраивается  с программой пакета Print Manual Designer: можно  включить оглавление и указатель ключевых слов, автоматическую страницу отношений для ссылок и перекрестных ссылок, настроить разметку страниц, заголовков, нижних колонтитулов, нумерацию страниц, обложку, введение и так далее.

 

1.5 Требования к программе

Программа должна быть разработана в интегрированной среде разработки Microsoft Visual Studio 2012 на языке C#.

Функциональные  требования:

  • выбор уровня сложности игрового процесса;
  • выбор изображений фишек;
  • возможность начала новой игры;
  • наличие окна «О программе»;

1.6 Системные требования

Для нормальной работы программы требуется компьютер  с характеристиками не менее чем:

  • процессор не ниже 1Ггц;
  • ОЗУ не ниже 512 Мб;
  • свободным дисковым пространством не менее 50 Мб;
  • наличие колонок или наушников для поддержки звукового сопровождения.

 

Требования к ОС:

  • Windows XP;
  • Windows 7;
  • Windows 8.

На всех перечисленных  ОС должен быть установлен .NET Framework 4.0.

 

2 Проектирование задачи

2.1 Организация данных

При написании программы был использован объектно-ориентированный подход к программированию.

При заполнении игрового поля, изображения  фишек подгружаются из папок с  программой.

Музыкальные файлы подгружаются при вызове необходимых  событий в процессе работы программы.

2.2 Процессы

Данное  ПО было разработано при помощи языка C#, в среде разработки Microsoft Visual Studio 2012.

Преимуществами  данного приложения являются:

  • не загруженность интерфейса;
  • музыкальное сопровождение игрового процесса;
  • повышение внимательности и улучшение реакции;
  • нет никаких сложностей при установке на ПК.

2.3 Концептуальный прототип

Данная  программа очень удобна в использовании. Программа является логической игрой, состоящую из 8Х8 фишек. Фишки можно выбирать мышью. Игровой процесс состоит из выбора сначала одной фишки, а потом другой. Если фишки совпали, то они удаляются с игрового поля.  Фишки удаляться только в том случае, если они не заблокированы, хотя бы с одной стороны или две одинаковые фишки стоят впритык. Игра длиться до того момента, пока не истечет время, либо пока в процессе игры не  удаляться все фишки.

 

2.4 Система помощи

Система помощи представлена в виде интегрированной справки (рисунок 2.1). Вызывается она с помощью пункта главного меню «Помощь»-> «Справка» на главной форме программы, на которой отображается игровое поле В ней описывается запуск и работа программы.

Рисунок 2.1 – Окно справки

Основные  кнопки:

  • кнопка «Новая» позволяет запустить новую игру;
  • кнопка «Настройка» позволяет сменить изображения фишек и сменить уровень сложности;
  • кнопка «Помощь» позволяет получить информацию о программе и справочную информацию по работе с программой;
  • кнопка «Выход» для закрытия приложения.

 

2.5 Тесты на использование

При запуске программы появляется окно заставки (рисунок 2.2).

Рисунок 2.2 – Заставка

После окна заставки появляется окно выбор уровня сложности игрового процесса (рисунок 2.3).

Рисунок 2.3 – Выбор уровня сложности

 

Главная форма  представляет собой игровое поле 8Х8 фишек.

 

Рисунок 2.4 – Главная форма

 

С главной формы можно вызвать окно справки (рисунок 2.5).

Рисунок 2.5 – Окно справки

А также окно «О программе» (рисунок 2.6).

Рисунок 2.6 – Окно «О программе»

Данная  программа прошла тестирование среди учащихся  группы 132. В результате этого были произведены некоторые изменения в игровом алгоритме программы.

 

3 Реализация

3.1 Функции: логическая и физическая организация

Вся программа основывается на отображении игрового поля 8Х8, состоящего из фишек с изображениями. В данной логической игре требуется, путем удаления одинаковых рядом лежащих или незаблокированных фишек, освободить все игровое поле. На любом этапе выполнения программы можно получить справочную информацию с помощью пункта главного меню «Помощь» -> «Справка», краткую информацию о программе и разработчике с помощью пункта главного меню «О программе».

3.2 Функции и элементы управления

Перечень  основных подпрограмм для решения  задач:

Данная программа является логической игрой «Маджонг», суть которой удалить все ячейки с игрового поля до истечения таймера.

В качестве элементов  управления используются кнопки:

  • кнопка «Новая игра», после нажатия на которую начинается новая игра;
  • кнопка «Настройка» содержит кнопки «Фишки» и «Уровень сложности»;
  • кнопка «Фишки» позволяет сменить изображения фишек;
  • кнопка «Уровень сложности» позволяет сменить уровень сложности игрового процесса;
  • кнопка «Помощь» содержит кнопки «Справка» и «О программе»;
  • кнопка «Справка» для вызова справки;
  • кнопка «О программ» для вызова сведений о программе;
  • кнопка «Выход» для закрытия приложения.

3.3 Функциональное тестирование

Тестирование  процесс исследования программного обеспечения с целью получения информации о качестве продукта.

Конечной  целью любого процесса тестирования является обеспечение такого ёмкого понятия как качество, с учётом всех или наиболее критичных для  данного конкретного случая составляющих.

Качество  можно определить как совокупную характеристику исследуемого ПО с учётом следующих составляющих:

  • надёжность;
  • сопровождаемость;
  • практичность;
  • эффективность;
  • мобильность;
  • функциональность.

Для тестирования данного программного средства мной было выполнено ряд  действий. В таблице 3.1 приведены результаты тестирования программного продукта.

Таблица 3.1 – Результаты тестирования программного продукта

Действие

Результат

Запуск программы

Программа запускается  корректно без ошибок, идёт загрузка.

Выбор уровня сложности

После нажатия  на одну из трех кнопок, появится главная  форма с таймером обратного отсчета  со значением, в зависимости от выбранного уровня сложности.

Нажатие на две  рядом лежащие одинаковые фишки

Фишки удалятся.

Нажатие на две  разные фишки

Фишки не удалятся.

Вызов функции  «Справка»

Отображается  справочная информация по работе с  программой.


В ходе тестирования были обнаружены ошибки в алгоритме программы и ошибки в интерфейсе. Все обнаруженные ошибки были мной устранены, после чего я провел повторное тестирование программы.

3.4 Полное тестирование

Данная  программа была протестирована на различных компьютерах, на ОС Windows XP,Windows 7 и Windows 8 с установленным .NET Framework 4.0, различными пользователями. Никаких ошибок и несоответствия к предъявленным требованиям к данному ПО не обнаружено.

В результате чего, можно сделать вывод, что программа «Маджонг» пригодна для использования конечным пользователем.

 

4 Применение

4.1 Назначение

Логическая  игра «Маджонг» предназначена для развлекательного времяпровождения. Также игра позволяет повысить внимательность и увеличить реакцию. Программа подходит для использования в учреждениях дошкольного типа и школах. В игру могут играть люди от 5 лет. Также программу можно использовать в конкурсах на скорость удаления фишек.

4.2 Среда функционирования

Средой  функционирования являются операционные системы платформы Windows NT: Windows XP, Windows Vista, Windows 7. Также на компьютере должен быть установлен NET Framework 4.0.

4.3 Инсталляция

Для того, чтобы полноценно пользоваться данным программным продуктом, необходимо скопировать папку с программой на жесткий диск.

Рисунок 4.1 – Папка с программой на жестком  диске

 

 

Рисунок 4.2 – Содержимое папки с программой

 

 

4.4 Сообщения системы

При нажатии  на кнопку или «Выход» в любом окне программы выскакивает системное сообщение «Точно выйти?».

При нажатии  на кнопку «Да» вы выходите из программы, при нажатии на кнопку «Нет» отменяете это действие.

Рисунок 4.3 – Окно подтверждения выхода из программы

 

 

 

 

 

 

ЗАКЛЮЧЕНИЕ

Мною была разработана логическая игра «Маджонг» в соответствии с предъявленными требованиями, а именно:

    • удобный и простой  интерфейс;
    • выбор уровня сложности игрового процесса;
    • игровой процесс в соответствии с правилами.

При разработке программы мною были использованы знания полученные в ходе теоритических и практических занятий по предмету «Конструирование программ и языки программирования».

 

    • СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
  1. Методические указания по выполнению курсовых и дипломных проектов. Специальность: 2-40 01 01 «Программное обеспечение информационных технологий»;
  1. Интернет-ресурсы: www.programmersforum.ru, www.cyberforum.ru, www.msdn.microsoft.com, www.habrahabr.ru;
  2. Музыкальные файлы взяты с ресурса www.newgrounds.com по лицензии Creative Commons.

 

 

 

 

ПРИЛОЖЕНИЕ А

(обязательное)

Текст программы

Окно «Заставка»

private void timer1_Tick(object sender, EventArgs e)

        {

            if (progressBar1.Value != 100)

            {

                ++progressBar1.Value;

            }

            else

            {

               

                timer1.Stop();

                this.Close();     

          }

 

Окно «Выбор уровня сложности»

private void button1_Click(object sender, EventArgs e)

        {

            int mtimer = 1;

            SetLevel(mtimer);

            Close();

        }

 

 

        private void button2_Click(object sender, EventArgs e)

        {

           int mtimer = 2;

           SetLevel(mtimer);

           Close();

        }

 

        private void button3_Click(object sender, EventArgs e)

        {

            int mtimer = 3;

            SetLevel(mtimer);

            Close();

        }

 

Окно «Новая игра»

private void button2_Click(object sender, EventArgs e)

        {

            Application.Exit();

        }

 

        private void button1_Click(object sender, EventArgs e)

        {

            Form1 fMainForm = new Form1();

            fMainForm.Close();

            fMainForm.NewGameClick();

        }

 

Окно «Главная форма»

public partial class Form1 : Form

    {

        int x, y, x1, y1, x2, y2,sec;

        public int mtimer=1;

        bool find = false; 

        string path=@"graph\skins\Классика\";

        int[,] cMap = new int[10,10];

        Random random = new Random();

        PictureBox firstClicked = null;

        PictureBox secondClicked = null;

        String[,] MassivA = new String[8, 8];

        int[,] Map = new int[10, 10];

        List<int> xlist = new List<int>();

        List<int> ylist = new List<int>();

        public WMPLib.WindowsMediaPlayer WMP = new WMPLib.WindowsMediaPlayer();

       

     

        public Form1()

        {

            InitializeComponent();

            Splash();

            SelectLevel();

            PlayMusic(@"sound\main.mp3");

            GetSettings();

            AssignIconsToSquares();

            SetMassiv();

            SetMap();

            TimerDown();

        }

 

        private void SetLevel()

        {

           

        }

 

        public void PlayMusic(string sound_path)

        {

            WMP.URL = sound_path;

            WMP.settings.volume = 100;

            WMP.controls.play();

        }

       

        private void SetMassiv()

        {

            int q = 1;

            for (int i = 0; i < 8; i++)

            {

                for (int j = 0; j < 8; j++)

                {

                    MassivA[i, j] = "pictureBox"+q;

                    q++;

                }

            }

          

        }

 

        private void SetMap()

        {

            for (int i = 0; i <10 ; i++)

            {

                for (int j = 0; j < 10; j++)

                {

                    Map[i, j] = 1;

                }

            }

 

        }

 

        private void IndexDefinition(string idLabel)

        {

 

            for (int i = 0; i < 8; i++)

            {

                for (int j = 0; j < 8; j++)

                {

 

                    if (MassivA[i, j] == idLabel)

                    {

                        x = i+1;

                        y = j+1;

                    }

                   

                }

            }

           

        }

 

        private void AssignIconsToSquares()

        {

 

           

            List<string> icons = new List<string>()

        {

            "1.png","1.png","2.png","2.png","3.png","3.png","4.png","4.png",

            "5.png","5.png","6.png","6.png","7.png","7.png","8.png","8.png",

            "1.png","1.png","2.png","2.png","3.png","3.png","4.png","4.png",

            "5.png","5.png","6.png","6.png","7.png","7.png","8.png","8.png",

            "1.png","1.png","2.png","2.png","3.png","3.png","4.png","4.png",

            "5.png","5.png","6.png","6.png","7.png","7.png","8.png","8.png",

            "1.png","1.png","2.png","2.png","3.png","3.png","4.png","4.png",

            "5.png","5.png","6.png","6.png","7.png","7.png","8.png","8.png"

        };

 

 

            foreach (Control control in tableLayoutPanel1.Controls)

            {

                PictureBox iconLabel = control as PictureBox;

                iconLabel.BorderStyle = BorderStyle.FixedSingle;

                iconLabel.BackColor = Color.FromName("Grey");

            }

 

            foreach (Control control in tableLayoutPanel1.Controls)

            {

                PictureBox iconLabel = control as PictureBox;

                if (iconLabel != null)

                {

                    int randomNumber = random.Next(icons.Count);

                    iconLabel.ImageLocation = path + icons[randomNumber];

                    icons.RemoveAt(randomNumber);

                }

            }

        }

 

        private void Form1_Load(object sender, EventArgs e)

        {

           

        }

 

        private void CheckForWinner()

        {

            int count = 0;

            foreach (Control control in tableLayoutPanel1.Controls)

            {

                PictureBox iconLabel = control as PictureBox;

 

                if (iconLabel != null)

                {

                    if (iconLabel.BackColor == Color.FromName("white"))

                    {

                        count++;                       

                       // return;

                    }

                }

            }

            if (count == 62)

            {

                PlayMusic(@"sound\win.mp3");

                timer2.Stop();

                MessageBox.Show("Вы выйграли!!!", "Поздравления");

                NewGame();

            }

        }

 

        private void pictureBox_Click(object sender, EventArgs e)

        {

            if (timer1.Enabled == true)

                return;

            PictureBox clickedLabel = sender as PictureBox;

 

            if (clickedLabel != null)

            {

                if (clickedLabel.BackColor == Color.FromName("White"))

                    return;

                if (firstClicked == null)

                {

                    firstClicked = clickedLabel;

                    IndexDefinition(firstClicked.Name);

                    firstClicked.BorderStyle = BorderStyle.Fixed3D;

                    x1 = x;

                    y1 = y;

                    return;

                }

                secondClicked = clickedLabel;

                IndexDefinition(secondClicked.Name);

                secondClicked.BorderStyle = BorderStyle.Fixed3D;

                x2 = x;

                y2 = y;

                CheckForWinner();

 

 

                if (firstClicked.ImageLocation == secondClicked.ImageLocation)

                {

                    find = false;

                    if (x1+1==x2||x1-1==y2||y1-1==y2||y1+1==y2)

                    {

                        find = true;

                    }

                    else

                    {

                    FindWave(x1, y1, x2, y2);

                    }

                        if (find == true)

                        {

                            Map[x1, y1] = 0;

                            Map[x2, y2] = 0;

                            firstClicked.ImageLocation = "";

                            firstClicked.BackColor = Color.FromName("white");

                            secondClicked.ImageLocation = "";

                            secondClicked.BackColor = Color.FromName("white");

                            firstClicked = null;

                            secondClicked = null;

                            return;

                        }

                    }

                    timer1.Start();

 

 

               

            }

        }

 

        private void timer1_Tick(object sender, EventArgs e)

        {

            timer1.Stop();

            firstClicked.BorderStyle = BorderStyle.FixedSingle;

            secondClicked.BorderStyle = BorderStyle.FixedSingle;

            firstClicked = null;

            secondClicked = null;

        }

 

        private void menuStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e)

        {

 

        }

 

        private void GameOver()

        {

            PlayMusic(@"sound\gameover.mp3");

            MessageBox.Show("Вы проиграли!!!", "");

            NewGame();

           

        }

 

        private void TimerDown()

        {

            sec = mtimer *60 ;

            timer2.Interval = 1000;

            timer2.Enabled = true;

            timer2.Start();

 

 

        }

 

        private bool FindWave(int startX, int startY, int targetX, int targetY)

        {

           if ((startX + 1 == 0 || startX - 1 == 0 || startY + 1 == 0 || startY - 1 == 0) &&

                (targetX + 1 == 0 || targetX - 1 == 0 || targetY + 1 == 0 || targetY - 1 == 0))

            {

                return find = true;

            }

            else

            {

                return find = false;

            }

Логическая игра "Маджонг"