Игровое приложение «Тетрис»

Автор работы: Пользователь скрыл имя, 27 Марта 2013 в 20:28, курсовая работа

Описание работы

Ещё один способ графического отображения фигур и поля тетриса - использование готовых элементов языка программирования. Наиболее часто для этих целей используют таблицы. Изменяя цвет ячеек таблицы через определенные промежутки времени можно отобразить на экране движение фигур и заполненные области поля. Также возможно использование таких элементов, как кнопки, области для надписей (Label). Изменяя их цвет, также можно отобразить движение фигур и заполненные области. Но у такого способа есть огромный минус - объявление большого числа таких элементов.

Содержание работы

1. Постановка задачи…………………………………………………………………………………..…4
2. Спецификация………………………………………….................………………………………...…6
2.1 Спецификация……………………………………………………………………………………6

3. Текст программы………………………………………………………………………………………8
Аннотация………………………………………………………………………………………………8
Оглавление…………………..…..……………………………………………………………………..9
3.1 Тест программы…………………………………………………………………………………..10
3.2 Результаты тестирования………………………………………………………………………...31

4. Описание программы…………………………………………………………………………………34
Аннотация…………..………………………………………………………………………………..34
Оглавление…………………………………………………………………………………………...35
4.1 Общие сведения………………………………………………………………………………….36
4.2 Функциональное значение………....……………………………………………………………36
4.3 Описание логической структуры……………………………………………………………….36
4.4 Спецификация…………………………………………………………………………………....36
4.6 Используемые технические средства…………………………………………………………..39
4.7 Вызов и загрузка…………………………………………………………………………………39
4.8 Входные данные и выходные данные.…………………………………………………………39

5. Описание применения ………………………………………………………………………………41
Аннотация……………………………………………………………………………………………41
Оглавление……………………………………………………………………………………………42
5.1 Назначение программы…………………………………………………………………………43
5.2 Условия применения……………………………………………………………………………43
5.3 Описание задачи………………………………………………………………………………...43
5.4 Входные и выходные данные…………………………………………………………………..43
5.5 Характеристики занимаемой памяти…………………………………………………………..43

Заключение…………………………………………………………………………………………….44
Список используемой литературы………………………………………………………………...…45

Файлы: 1 файл

Курсовая_работа_Тетрис_С#.doc

— 235.00 Кб (Скачать файл)

 

        private void Form1_Load(object sender, EventArgs e)

        {

            c = Graphics.FromImage(POLE);

            c.FillRectangle(new SolidBrush(Color.FromArgb(0, 45, 45)), 0, 0, 210+ 4, 420 + 4);

            for (int x = 0; x < 11; x++) { c.DrawLine(new Pen(Color.FromArgb(0, 70, 70)), x * 21 + 1, 1, x * 21, 420 + 3); }

            for (int x = 0; x < 21; x++) { c.DrawLine(new Pen(Color.FromArgb(0, 70, 70)), 1, x * 21 + 1, 210 + 3, x * 21); }

            Cirpich = new Bitmap[COLR.Length];

            for (int i = 0; i < COLR.Length; i++)

            {

                Cirpich[i] = new Bitmap(21, 21);

                c = Graphics.FromImage(Cirpich[i]);

                c.FillRectangle(COLR[i], 0, 0, 21, 21);

                c.DrawLine(new Pen(Color.FromArgb(70, Color.Black), 2), new Point(1, 20), new Point(20, 20));

                c.DrawLine(new Pen(Color.FromArgb(70, Color.Black), 2), new Point(20, 20), new Point(20, 1));

            }

            string[] figuri = { "3840", "3712", "1632", "17952", "3648", "3616", "9792" };

            for (int i = 0; i < figuri.Length; i++)

                mfig[i] = new Figura(figuri[i]);

        }

        private void Form1_Paint(object sender, PaintEventArgs e)

        {

            e.Graphics.DrawImage(POLE, 0, 0);

            if (fig != null)

            {

                for (int x = 0; x < 4; x++)

                    for (int y = 0; y < 4; y++)

                    {

                        if (fig.pic[x, y])

                            e.Graphics.DrawImage(Cirpich[fig.Col], (fig.x + x) * 21 + 1, (fig.y + y) * 21 + 1);

                    }

            }

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

                for (int y = 0; y < 20; y++)

                {

                    if (Area[x, y] > 0)

                    {

                         e.Graphics.DrawImage(Cirpich[Area[x, y]], x * 21 + 1, y * 21 + 1);

                    }

                }

 

        }

        private bool figure_ok()

        {

            for (int x = 0; x < 4; x++)

            {

                for (int y = 0; y < 4; y++)

                {

                    if (fig.y + y > -1)

                        if (fig.pic[x, y])

                            if (x + fig.x < 0 | x + fig.x == 10) return false;

                            else if (Area[x + fig.x, y + fig.y] > 0 | fig.y + y == 20)

                                return false;

                }

            }

            return true;

        }

        private void Stop_figur()

        {

            byte numLine = 0;

            int[] DLine = new int[4];

            for (int y = 0; y < 4; y++)

            {

                for (int x = 0; x < 4; x++)

                {

                    if (fig.y + y > -1)

                        if (fig.pic[x, y])

                        {

                            Area[fig.x + x, fig.y + y] = fig.Col;

                            DLine[numLine] = fig.y + y;

                            bool DL = true;

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

                            {

                                if (Area[i, DLine[numLine]] == 0) { DL = false; DLine[numLine] = 0; }

                            }

                            if (DL) numLine += 1;

                        }

                }

            }

            if (DLine[0] > 0) DelLine(DLine);

        }

        private void DelLine(int[] d)

        {

            double iL = 0;

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

            {

                int y1 = d[i];

                if (d[i] == 0) break;

                iL += 1;

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

                {

                    for (int y = y1; y > 0; y--)

                    {

                        Area[x, y] = Area[x, y - 1];

                    }

                }

            }

            this.Refresh();

        }

        private void timer1_Tick(object sender, EventArgs e)

        {

            if (fig == null)

            {

                fig = new Figura(); fig.pic = mfig[rnd.Next(0, 7)].pic;

                if (!figure_ok())

                {

                    Stop_figur();

                    fig = null; timer1.Enabled = false;

                    return;

                }

            }

            fig.y++;

            if (!figure_ok())

            {

                fig.y--; Stop_figur();

                fig = null;

            } this.Refresh();

 

        }

        private void Form1_KeyDown(object sender, KeyEventArgs e)

        {

            if (fig == null) return;

            switch (e.KeyValue)

            {

                case 37:

                    fig.x -= 1; if (!figure_ok()) fig.x += 1;

                    break;

                case 32:

                    if (timer1.Enabled) timer1.Enabled = false;

                    else timer1.Enabled = true;

                    break;

                case 39:

                    fig.x += 1; if (!figure_ok()) fig.x -= 1;

                    break;

                case 38:

                     fig.rotate(); if (!figure_ok()) fig.urotate();

                    break;

                case 40:

                    fig.y += 1;

                    if (!figure_ok())

                        fig.y -= 1;

                    break;

            }

            this.Refresh();

        }

 

    }

}

public class Figura

{

    public sbyte x, y;

    public byte Col;

    public bool[,] pic;

   public Figura()

    {

        Random rnd = new Random();

        x = 3; y = -2;

        Col = Convert.ToByte(rnd.Next(1, 9));

    }

    public Figura(string f)

    {

        pic = new bool[4, 4];

        for (int x = 0; x < 4; x++)

            for (int y = 0; y < 4; y++)

            {

                string h9 = Convert.ToString((Convert.ToInt32(f) >> y * 4 + x) & 1, 2);

                if (h9 == "1") pic[x, y] = true;

                else pic[x, y] = false;

            }

    }

    public void rotate()

   {

        bool[,] p2 = new bool[4, 4];

        for (int x = 0; x < 4; x++)

        {

            for (int y = 0; y < 4; y++)

                p2[3 - y, x] = pic[x, y];

        }

        pic = p2;

    }

    public void urotate()

    {

        bool[,] p2 = new bool[4, 4];

        for (int x = 0; x < 4; x++)

        {

            for (int y = 0; y < 4; y++)

            {

                p2[x, y] = pic[3 - y, x];

            }

        }

        pic = p2;

    }

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3.2 Результаты тестирования

 

 

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

Федеральное государственное  автономное образовательное учреждение высшего профессионального образования

«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

АЭРОКОСМИЧЕСКОГО ПРИБОРОСТРОЕНИЯ»

КАФЕДРА ВЫЧИСЛИТЕЛЬНЫХ СИСТЕМ И СЕТЕЙ

 

 

 

 

 

ПРОГРАММА

Игровое приложение «Тетрис»

Описание программы

  • 44.4141.12-13

  •  

     

    РАБОТУ ВЫПОЛНИЛ

    СТУДЕНТ ГР.

    4141

         

    М.Г.Олейник

         

    подпись, дата

     

    инициалы, фамилия


     

     

     

     

     

     

    Санкт-Петербург

    2012

     

     

    1. Описание программы

    Аннотация

     

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

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    Оглавление

     

      1. Общие сведения………………………………………………………………………...36
      2. Функциональное назначение…………………………………………………………..36
      3. Описание логической структуры……………………………………………………...36
      4. Спецификации функций……………………………………………………………….36
      5. Используемые технические средства………………………………………………….39
      6. Вызов и загрузка………………………………………………………………………...39
      7. Входные данные и выходные данные………………………………………………....39

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    4.1 Общие сведения

    Программа написана на языке С#, реализована на ПЭВМ IBM PC и состоит из меню программы и набора функций. В совокупности это реализует полноценное игровое приложение «Тетрис». Для функционирования данной программы необходимо наличие ПЭВМ, совместимой с IBM PC, на которой установлена ОС Windows. Технические средства должны обеспечивать вывод результатов на экран.

     

    4.2 Функциональное назначение

    Назначение программы - развлечение  играющих, совершенствование их координации и логического мышления. Программа может применяться в качестве игровой на разных типах персональных компьютеров.

     

    4.3 Описание логической структуры

    Программа написана на языке С# и состоит из реакций программы на нажатия клавиш. Программа осуществляет вывод на экран случайным образом падение различных фигур. Входными данными является управление падающими фигурами.

     

    4.4 Спецификация

     

    Для реализации данного курсовой работы был выбран язык программирования Visual C#. Язык основан на строгой компонентной архитектуре и реализует передовые механизмы обеспечения безопасности кода. Язык программирования C# объединил лучшие черты целого ряда предшественников, а именно ветви языков B - C - C++.

    От языка программирования C++ языком C# унаследованы следующие механизмы: "перегруженные" операторы, небезопасные арифметические операции с плавающей точкой, а также ряд других особенностей синтаксиса.

    Несмотря на весьма существенные различия между компонентной объектной моделью COM (основного стандарта Microsoft для компонентного проектирования и реализации программного обеспечения) и моделью Java Beans, базовым стандартом Sun Microsystems для компонент (зависимой от языка реализации), язык программирования C# имеет довольно много общего с языком Java.

    Перечислим наиболее характерные черты сходства языков программирования C# и Java. Прежде всего, оба языка относятся к категории объектно-ориентированных и предполагают единственность наследования. Другими важными особенностями, которые сближают языки программирования C# и Java, являются механизмы интерфейсов, обработки исключительных ситуаций, а также процессов или "нитей" (threads). "Сборка мусора" и пространства имен реализованы в этих двух языках сходным образом. Оба языка программирования характеризуются сильной (строгой) типизацией и динамической загрузкой кода при выполнении программы.

    Но несмотря на то, что целый  ряд конструктивных синтаксических механизмов и особенностей реализации унаследован языком программирования C# от прародителей (C++ и Java), возможности этого нового языка программирования не ограничиваются суммой возможностей его исторических предшественников.

    К числу принципиально важных решений, которые реализованы корпорацией Microsoft в языке программирования C#, можно отнести следующие:

    • компонентно-ориентированный подход к программированию (который характерен и для идеологии Microsoft.net в целом);
    • свойства как средство инкапсуляции данных (характерно также в целом для ООП);
    • обработка событий (имеются расширения, в том числе в части обработки исключений, в частности, оператор try);
    • унифицированная система типизации (соответствует идеологии Microsoft.net в целом);
    • делегаты (delegate - развитие указателя на функцию в языках C и C++);
    • индексаторы (indexer - операторы индекса для обращения к элементам класса-контейнера);
    • перегруженные операторы (развитие ООП);
    • оператор foreach (обработка всех элементов классов-коллекций, аналог Visual Basic);
    • механизмы boxing и unboxing для преобразования типов;
    • атрибуты (средство оперирования метаданными в COM-модели);
    • прямоугольные массивы (набор элементов с доступом по номеру индекса и одинаковым количеством столбцов и строк).

    Приведенные выше особенности языка  C# повлияли на выбор языка программирования и соответственно среды.net для программы.

     

    4.5 Используемые технические средства

    Для нормального функционирования программы требуется следующие аппаратные требования:

    Необходимый объем ОЗУ 64 Мб и графическим  адаптером, поддерживающим режим 800х600 и выше, глубина цвета 32 бит. Необходимое  место на жестком диске 780 Кб. Клавиатура, мышь.

    Программные требования:

    Операционная система семейства Windows: 2000/XP (32/64) /Vista (32/64) /7 (32/64)

     

     

    4.6 Вызов и загрузка

    Вызов и загрузка программы осуществляется в следующей последовательности.

    В ОС Windows запустить файл “Тетрис.exe” из папки, на экране появится меню, в котором вы можете начать игру либо выйти из приложения.

     

    4.7 Входные и выходные данные

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

    Выходные данные представляют собой  анимированное изображение на экране.

     

    МИНИСТЕРСТВО ОБРАЗОВАНИЯ  И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

    Федеральное государственное  автономное образовательное учреждение высшего профессионального образования

    Информация о работе Игровое приложение «Тетрис»