Главная страница
Навигация по странице:


  • Исследование предметной области 4 1 Постановка задачи. Краткое описание назначения задачи 4


    Скачать 0.84 Mb.
    НазваниеИсследование предметной области 4 1 Постановка задачи. Краткое описание назначения задачи 4
    Дата11.09.2022
    Размер0.84 Mb.
    Формат файлаdocx
    Имя файлаZapiska (2).docx
    ТипИсследование
    #671371
    страница4 из 4
    1   2   3   4

    СПИСОК ЛИТЕРАТУРНЫХ ИСТОЧНИКОВ


      1. Стивен Прата. Язык программирования C++. Лекции и упражнения. (1990 -2004) / А. Г. Мау. – М.: 2004. – 530 с.

      2. Кузьменко В.Г. Программирование на C++ 2002. – М.: ООО "Бином-Пресс", 2003 г. – 880

      3. Евсеева О.Н. Объектно-ориентированный подход в программировании. Программирование и реализация приложений в среде Microsoft Visual Studio. Учебное пособие. Ульяновск. 2000

      4. Харт-Девис Гай. Руководство разработчика К.: Издательская группа BHV, 2000. - 944 с., ил. ISBN 966-552-052-0, 5-7315-0081-9

      5. Программирование в пакетах MS Visual Studio: учебное пособие C.В. Назаров, П.П. Мельников, Л.П. Смольников и др.; под редакцией С. В. Назарова – М.: Финансы и статистика, 2007. – 656 с.: ил.

      6. Роберт Лафоре. Объектно-ориентированное программирование в C++. Москва: НАРБ, 2010. – 254 с.

      7. Алгоритмы на C++. Анализ структуры данных. Сортировка.: учеб.-метод. комплекс для магистратуры /Р. Седжвик [и др.]; под ред. Р. Седжвика. – Минск: Изд-во БГУ, 2004. – 108 с.

      8. Корнеева, И.Л. Принципы и практика с использованием C++: учеб. пособие: в 2 ч. / И.Л. Корнеева. – М.: РИОР, 2004. – Ч. 2. – 182 с.

      9. Эффективный и современный C++ / М-во образования Республики Беларусь, редкол.: М. Скотт [и др.]. – М.: Большая бел. энцикл.: РИПОЛ классик, 2002. – 1663 с.

      10. Параллельное программирование на С++ в действии. Практика разработки многопоточных программ / Э. Уильямс [и др.]; под общ. ред. Г.А. Василевича. – Минск: Амалфея, 2000. – 1071 с.

      11. Павловская, Т. А. С/С++. Программирование на языке высокого уровня: учеб. для вузов / Т. А. Павловская. ‒ Санкт-Петербург : Питер, 2013. ‒ 432 с.

      12. Павловская, Т. А. С/С++. Структурное и объектно-ориентированное программирование : практикум / Т. А. Павловская. ‒ Санкт-Петербург : Питер, 2011, 352 с.

      13. Системное и прикладное программирование С и С ++ [Электронный ресурс]: [раздел сайта]. // Клуб программистов Devoloping.ru : веб-сайт. – Режим доступа: http://forum.developing.ru/archive/index.php/f-25.html. – Дата доступа: 24.03.2022.

      14. Шмидский, Я. К. Программирование на языке С++ : самоучитель / Я. К. Шмидский. – Москва : Диалектика, 2004. – 368 с.

    ПРИЛОЖЕНИЕ 1

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

    #include

    #include

    #include

    #include

    namespace MyGameSnake {

    using namespace System;

    using namespace System::ComponentModel;

    using namespace System::Collections;

    using namespace System::Windows::Forms;

    using namespace System::Data;

    using namespace System::Drawing;

    using namespace System::IO;

    [System::Runtime::InteropServices::DllImport("winmm.dll")] extern bool PlaySound(String^ lpszName, int hModule, int dwFlags);

    // Компоненты для чтения vaw файлов

    struct Vector2

    {int X, Y;};

    Vector2 direction;//направление змейки

    Vector2 positionFruit;//позиция фрукта

    Vector2 gameArea;//игровая зона

    public ref class MyForm : public System::Windows::Forms::Form

    {

    public:

    MyGameSnake::MyForm::MyForm(void)

    {InitializeComponent();//Задаем размеры игровой зоны

    gameArea.X = 400;

    gameArea.Y = 400;

    firstStart = true;//первый запуск

    NewGame();//новая игра

    }

    protected:

    MyForm()

    {if (components){delete components;}}

    private: System::Windows::Forms::MenuStrip^ menuStrip1;

    protected:

    private: System::Windows::Forms::ToolStripMenuItem^ менюToolStripMenuItem;

    private: System::Windows::Forms::ToolStripMenuItem^ новаяИграToolStripMenuItem;

    private: System::Windows::Forms::ToolStripMenuItem^ паузаСтартToolStripMenuItem;

    private: System::Windows::Forms::ToolStripMenuItem^ настройкиToolStripMenuItem;

    private: System::Windows::Forms::ToolStripMenuItem^ информацияОИгреToolStripMenuItem;

    private: System::Windows::Forms::ToolStripMenuItem^ выходToolStripMenuItem;

    private: System::Windows::Forms::GroupBox^ groupBox1;

    private: System::Windows::Forms::Label^ Skore;

    private: System::Windows::Forms::GroupBox^ Nastroyki;

    private: System::Windows::Forms::Button^ button1;

    private: System::Windows::Forms::NumericUpDown^ SpeedSnake;

    private: System::Windows::Forms::Label^ label2;

    private: System::Windows::Forms::PictureBox^ GranitsUp;

    private: System::Windows::Forms::PictureBox^ GranitsDown;

    private: System::Windows::Forms::PictureBox^ GranitsLeft;

    private: System::Windows::Forms::PictureBox^ GranitsRight;

    private: System::Windows::Forms::Timer^ timer;

    private: System::Windows::Forms::Label^ Gameover;

    private: System::Windows::Forms::ToolStripMenuItem^ выбратьДругуюИгруToolStripMenuItem;

    private: System::Windows::Forms::TextBox^ textBox1;

    private: System::Windows::Forms::PictureBox^ pictureBox1;

    private: System::ComponentModel::IContainer^ components;

    private:

    #pragma region Windows Form Designer generated code

    void InitializeComponent(void)

    {

    this->components = (gcnew System::ComponentModel::Container());

    System::ComponentModel::ComponentResourceManager^ resources = (gcnew System::ComponentModel::ComponentResourceManager(MyForm::typeid));

    this->menuStrip1 = (gcnew System::Windows::Forms::MenuStrip());

    this->менюToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());

    this->новаяИграToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());

    this->паузаСтартToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());

    this->настройкиToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());

    this->информацияОИгреToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());

    this->выходToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());

    this->выбратьДругуюИгруToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());

    this->groupBox1 = (gcnew System::Windows::Forms::GroupBox());

    this->Skore = (gcnew System::Windows::Forms::Label());

    this->pictureBox1 = (gcnew System::Windows::Forms::PictureBox());

    this->textBox1 = (gcnew System::Windows::Forms::TextBox());

    this->Nastroyki = (gcnew System::Windows::Forms::GroupBox());

    this->button1 = (gcnew System::Windows::Forms::Button());

    this->SpeedSnake = (gcnew System::Windows::Forms::NumericUpDown());

    this->label2 = (gcnew System::Windows::Forms::Label());

    this->GranitsUp = (gcnew System::Windows::Forms::PictureBox());

    this->GranitsDown = (gcnew System::Windows::Forms::PictureBox());

    this->GranitsLeft = (gcnew System::Windows::Forms::PictureBox());

    this->GranitsRight = (gcnew System::Windows::Forms::PictureBox());

    this->timer = (gcnew System::Windows::Forms::Timer(this->components));

    this->Gameover = (gcnew System::Windows::Forms::Label());

    this->menuStrip1->SuspendLayout();

    this->groupBox1->SuspendLayout();

    (cli::safe_cast(this->pictureBox1))->BeginInit();

    this->Nastroyki->SuspendLayout();

    (cli::safe_cast(this->SpeedSnake))->BeginInit();

    (cli::safe_cast(this->GranitsUp))->BeginInit();

    (cli::safe_cast(this->GranitsDown))->BeginInit();

    (cli::safe_cast(this->GranitsLeft))->BeginInit();

    (cli::safe_cast(this->GranitsRight))->BeginInit();

    this->SuspendLayout();

    this->menuStrip1->ImageScalingSize = System::Drawing::Size(20, 20);

    this->menuStrip1->Items->AddRange(gcnew cli::array< System::Windows::Forms::ToolStripItem^ >(4) {

    this->менюToolStripMenuItem,

    this->информацияОИгреToolStripMenuItem, this->выходToolStripMenuItem, this->выбратьДругуюИгруToolStripMenuItem

    });

    this->menuStrip1->Location = System::Drawing::Point(0, 0);

    this->menuStrip1->Name = L"menuStrip1";

    this->menuStrip1->Size = System::Drawing::Size(559, 28);

    this->menuStrip1->TabIndex = 0;

    this->menuStrip1->Text = L"menuStrip1";

    // менюToolStripMenuItem

    this->менюToolStripMenuItem->DropDownItems->AddRange(gcnew cli::array< System::Windows::Forms::ToolStripItem^ >(3) {

    this->новаяИграToolStripMenuItem,

    this->паузаСтартToolStripMenuItem, this->настройкиToolStripMenuItem

    });

    this->менюToolStripMenuItem->Name = L"менюToolStripMenuItem";

    this->менюToolStripMenuItem->Size = System::Drawing::Size(65, 24);

    this->менюToolStripMenuItem->Text = L"Меню";

    this->новаяИграToolStripMenuItem->Name = L"новаяИграToolStripMenuItem";

    this->новаяИграToolStripMenuItem->Size = System::Drawing::Size(177, 26);

    this->новаяИграToolStripMenuItem->Text = L"Новая игра";

    this->новаяИграToolStripMenuItem->Click += gcnew System::EventHandler(this, &MyForm::новаяИграToolStripMenuItem_Click);

    this->паузаСтартToolStripMenuItem->Name = L"паузаСтартToolStripMenuItem";

    this->паузаСтартToolStripMenuItem->Size = System::Drawing::Size(177, 26);

    this->паузаСтартToolStripMenuItem->Text = L"Пауза\\Старт";

    this->паузаСтартToolStripMenuItem->Click += gcnew System::EventHandler(this, &MyForm::паузаСтартToolStripMenuItem_Click);

    this->настройкиToolStripMenuItem->Name = L"настройкиToolStripMenuItem";

    this->настройкиToolStripMenuItem->Size = System::Drawing::Size(177, 26);

    this->настройкиToolStripMenuItem->Text = L"Настройки";

    this->настройкиToolStripMenuItem->Click += gcnew System::EventHandler(this, &MyForm::настройкиToolStripMenuItem_Click);

    this->информацияОИгреToolStripMenuItem->Name = L"информацияОИгреToolStripMenuItem";

    this->информацияОИгреToolStripMenuItem->Size = System::Drawing::Size(165, 24);

    this->информацияОИгреToolStripMenuItem->Text = L"Информация о игре";

    this->информацияОИгреToolStripMenuItem->Click += gcnew System::EventHandler(this, &MyForm::информацияОИгреToolStripMenuItem_Click);

    this->выходToolStripMenuItem->Name = L"выходToolStripMenuItem";

    this->выходToolStripMenuItem->Size = System::Drawing::Size(67, 24);

    this->выходToolStripMenuItem->Text = L"Выход";

    this->выходToolStripMenuItem->Click += gcnew System::EventHandler(this, &MyForm::выходToolStripMenuItem_Click);

    this->выбратьДругуюИгруToolStripMenuItem->Name = L"выбратьДругуюИгруToolStripMenuItem";

    this->выбратьДругуюИгруToolStripMenuItem->Size = System::Drawing::Size(187, 24);

    this->выбратьДругуюИгруToolStripMenuItem->Text = L"Просмотр рекорд игры";

    this->выбратьДругуюИгруToolStripMenuItem->Click += gcnew System::EventHandler(this, &MyForm::выбратьДругуюИгруToolStripMenuItem_Click);

    this->groupBox1->BackColor = System::Drawing::SystemColors::ControlLightLight;

    this->groupBox1->BackgroundImage = (cli::safe_cast(resources->GetObject(L"groupBox1.BackgroundImage")));

    this->groupBox1->Controls->Add(this->Skore);

    this->groupBox1->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 12, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point,

    static_cast(204)));

    this->groupBox1->ForeColor = System::Drawing::SystemColors::ActiveCaptionText;

    this->groupBox1->Location = System::Drawing::Point(23, 45);

    this->groupBox1->Name = L"groupBox1";

    this->groupBox1->Size = System::Drawing::Size(273, 98);

    this->groupBox1->TabIndex = 1;

    this->groupBox1->TabStop = false;

    this->groupBox1->Text = L"Текущие данные:";

    this->Skore->AutoSize = true;

    this->Skore->Font = (gcnew System::Drawing::Font(L"Microsoft YaHei", 12, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point,

    static_cast(204)));

    this->Skore->Location = System::Drawing::Point(24, 46);

    this->Skore->Name = L"Skore";

    this->Skore->Size = System::Drawing::Size(87, 27);

    this->Skore->TabIndex = 0;

    this->Skore->Text = L"Очки: 0";

    this->pictureBox1->Image = (cli::safe_cast(resources->GetObject(L"pictureBox1.Image")));

    this->pictureBox1->Location = System::Drawing::Point(317, 58);

    this->pictureBox1->Name = L"pictureBox1";

    this->pictureBox1->Size = System::Drawing::Size(72, 60);

    this->pictureBox1->TabIndex = 9;

    this->pictureBox1->TabStop = false;

    this->textBox1->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 16.2F, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point,

    static_cast(204)));

    this->textBox1->Location = System::Drawing::Point(395, 68);

    this->textBox1->Multiline = true;

    this->textBox1->Name = L"textBox1";

    this->textBox1->ReadOnly = true;

    this->textBox1->Size = System::Drawing::Size(51, 42);

    this->textBox1->TabIndex = 8;

    this->Nastroyki->Controls->Add(this->button1);

    this->Nastroyki->Controls->Add(this->SpeedSnake);

    this->Nastroyki->Controls->Add(this->label2);

    this->Nastroyki->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 12, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point,

    static_cast(204)));

    this->Nastroyki->Location = System::Drawing::Point(52, 403);

    this->Nastroyki->Name = L"Nastroyki";

    this->Nastroyki->Size = System::Drawing::Size(458, 176);

    this->Nastroyki->TabIndex = 2;

    this->Nastroyki->TabStop = false;

    this->Nastroyki->Text = L"Настройки";

    this->button1->Location = System::Drawing::Point(167, 122);

    this->button1->Name = L"button1";

    this->button1->Size = System::Drawing::Size(146, 36);

    this->button1->TabIndex = 2;

    this->button1->Text = L"Применить";

    this->button1->UseVisualStyleBackColor = true;

    this->button1->Click += gcnew System::EventHandler(this, &MyForm::button1_Click);

    this->SpeedSnake->Location = System::Drawing::Point(276, 63);

    this->SpeedSnake->Maximum = System::Decimal(gcnew cli::array< System::Int32 >(4) { 1000, 0, 0, 0 });

    this->SpeedSnake->Minimum = System::Decimal(gcnew cli::array< System::Int32 >(4) { 1, 0, 0, 0 });

    this->SpeedSnake->Name = L"SpeedSnake";

    this->SpeedSnake->Size = System::Drawing::Size(120, 30);

    this->SpeedSnake->TabIndex = 1;

    this->SpeedSnake->Value = System::Decimal(gcnew cli::array< System::Int32 >(4) { 1, 0, 0, 0 });

    this->label2->AutoSize = true;

    this->label2->Location = System::Drawing::Point(6, 63);

    this->label2->Name = L"label2";

    this->label2->Size = System::Drawing::Size(264, 25);

    this->label2->TabIndex = 0;

    this->label2->Text = L"Текущая скорость змейки:";

    this->GranitsUp->BackColor = System::Drawing::SystemColors::ActiveCaptionText;

    this->GranitsUp->Location = System::Drawing::Point(3, 149);

    this->GranitsUp->Name = L"GranitsUp";

    this->GranitsUp->Size = System::Drawing::Size(550, 10);

    this->GranitsUp->TabIndex = 3;

    this->GranitsUp->TabStop = false;

    this->GranitsDown->BackColor = System::Drawing::SystemColors::ActiveCaptionText;

    this->GranitsDown->Location = System::Drawing::Point(3, 689);

    this->GranitsDown->Name = L"GranitsDown";

    this->GranitsDown->Size = System::Drawing::Size(550, 10);

    this->GranitsDown->TabIndex = 4;

    this->GranitsDown->TabStop = false;

    this->GranitsLeft->BackColor = System::Drawing::SystemColors::ActiveCaptionText;

    this->GranitsLeft->Location = System::Drawing::Point(3, 149);

    this->GranitsLeft->Name = L"GranitsLeft";

    this->GranitsLeft->Size = System::Drawing::Size(10, 550);

    this->GranitsLeft->TabIndex = 5;

    this->GranitsLeft->TabStop = false;

    this->GranitsRight->BackColor = System::Drawing::SystemColors::ActiveCaptionText;

    this->GranitsRight->Location = System::Drawing::Point(543, 149);

    this->GranitsRight->Name = L"GranitsRight";

    this->GranitsRight->Size = System::Drawing::Size(10, 550);

    this->GranitsRight->TabIndex = 6;

    this->GranitsRight->TabStop = false;

    this->timer->Tick += gcnew System::EventHandler(this, &MyForm::MyForm_Update);

    this->Gameover->AutoSize = true;

    this->Gameover->Font = (gcnew System::Drawing::Font(L"MV Boli", 19.8F, static_cast((System::Drawing::FontStyle::Bold | System::Drawing::FontStyle::Italic)),

    System::Drawing::GraphicsUnit::Point, static_cast(0)));

    this->Gameover->Location = System::Drawing::Point(93, 270);

    this->Gameover->Name = L"Gameover";

    this->Gameover->Size = System::Drawing::Size(394, 88);

    this->Gameover->TabIndex = 7;

    this->Gameover->Text = L"Game over! \r\nПерезапустите игру";

    this->Gameover->TextAlign = System::Drawing::ContentAlignment::TopCenter;

    this->Gameover->Visible = false;

    this->AutoScaleDimensions = System::Drawing::SizeF(8, 16);

    this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;

    this->BackgroundImage = (cli::safe_cast(resources->GetObject(L"$this.BackgroundImage")));

    this->ClientSize = System::Drawing::Size(559, 703);

    this->Controls->Add(this->pictureBox1);

    this->Controls->Add(this->Gameover);

    this->Controls->Add(this->textBox1);

    this->Controls->Add(this->GranitsRight);

    this->Controls->Add(this->GranitsLeft);

    this->Controls->Add(this->GranitsDown);

    this->Controls->Add(this->GranitsUp);

    this->Controls->Add(this->Nastroyki);

    this->Controls->Add(this->groupBox1);

    this->Controls->Add(this->menuStrip1);

    this->ForeColor = System::Drawing::SystemColors::ControlText;

    this->Icon = (cli::safe_cast(resources->GetObject(L"$this.Icon")));

    this->MainMenuStrip = this->menuStrip1;

    this->MaximizeBox = false;

    this->Name = L"MyForm";

    this->StartPosition = System::Windows::Forms::FormStartPosition::CenterScreen;

    this->Text = L"Game \"Snake\"";

    this->KeyDown += gcnew System::Windows::Forms::KeyEventHandler(this, &MyForm::MyForm_KeyDown);

    this->menuStrip1->ResumeLayout(false);

    this->menuStrip1->PerformLayout();

    this->groupBox1->ResumeLayout(false);

    this->groupBox1->PerformLayout();

    (cli::safe_cast(this->pictureBox1))->EndInit();

    this->Nastroyki->ResumeLayout(false);

    this->Nastroyki->PerformLayout();

    (cli::safe_cast(this->SpeedSnake))->EndInit();

    (cli::safe_cast(this->GranitsUp))->EndInit();

    (cli::safe_cast(this->GranitsDown))->EndInit();

    (cli::safe_cast(this->GranitsLeft))->EndInit();

    (cli::safe_cast(this->GranitsRight))->EndInit();

    this->ResumeLayout(false);

    this->PerformLayout();

    }

    #pragma endregion

    // Данные игры

    private: PictureBox^ fruit; // Фрукт который будет есть змейка

    private: array
    ^ Snake;// Сама змейка

    private: bool play; //Играть

    private: bool die; // Смерть

    private: bool firstStart; // Первый запуск

    private: int step = 10; // Шаг

    private: float Interval = 100;// Интервал обновления

    private: int skore = 0; // Счёт

    // Действия игры

    private: void Frukt()//Генерируем случайную позицию фрукту

    {Random^ rand = gcnew Random();//подключаем рандом для случайной точки полявления фрукта

    positionFruit.X = rand->Next(20, gameArea.X);//10 - смещение относительно боков формы

    positionFruit.Y = rand->Next(160, gameArea.Y);//90 - смещение верхней граници относительно верха формы

    //Проверка, чтобы фрукт не создался на змейке

    for (int i = 0; i < skore; i++)// ждя каждого элемента змейки проверяем генерацию фрукта

    {if (positionFruit.X == Snake[i]->Location.X && positionFruit.Y == Snake[i]->Location.Y)// если фрукт есть на теле то...Frukt();// гинерируем новый фрукт}

    //Преобразуем значение, чтобы было кратно шагу

    int tempX = positionFruit.X % step; positionFruit.X -= tempX;

    int tempY = positionFruit.Y % step; positionFruit.Y -= tempY;

    //Присваеваем пизицию фрукту

    fruit->Location = Point(positionFruit.X, positionFruit.Y);

    //Добавляем объект на форму

    this->Controls->Add(fruit);

    }

    private: void Eating()//прописываем события когда змейка ест

    {

    //Проверим позицию головы змеи и позицию фрукта

    if (Snake[0]->Location.X == positionFruit.X && Snake[0]->Location.Y == positionFruit.Y)

    {

    Skore->Text = "Счет: " + ++skore;// каждый съеденный фрукт увеличивает тело змейки

    //Добавляем новый элемент змейке

    Snake[skore] = gcnew PictureBox();// помещаем новый элемент на область игры

    // каждый новый элемент будет становится в конце змейке поэтому Snake[skore - 1]

    Snake[skore]->Location = Point(Snake[skore - 1]->Location.X + step * direction.X, Snake[skore - 1]->Location.Y - step * direction.Y);

    Snake[skore]->BackColor = Color::Blue;//цвет тела будет синий

    Snake[skore]->Width = step;//высота равна шагу

    Snake[skore]->Height = step;//ширина также кратно шагу

    this->Controls->Add(Snake[skore]);//собираем пазл из того что написали

    Frukt();// после съеденного фрукта гинерируем новый

    }

    }

    private: void Movement()//события происходящие в игровом поле

    {

    //Двигаем каждый компонет змейки

    for (int i = skore; i >= 1; i--)

    {

    Snake[i]->Location = Snake[i - 1]->Location;//каждый элемент змейки будет идти за последний относительно головы

    }

    Snake[0]->Location = Point(Snake[0]->Location.X + direction.X * step, Snake[0]->Location.Y + direction.Y * step);//каждый элемент по движению змейки будет становится на место предыдущего

    }

    private: void SelfEating()//событие если змейка сьела сама себя

    {

    //Проверяем позицию каждой части змейки

    for (int i = 1; i < skore; i++)

    {

    if (Snake[0]->Location == Snake[i]->Location)

    {

    GameOver();

    }

    }
    }

    private: void GameOver()//теперь прописываем события сомого конца игры

    {

    play = true;

    die = true;

    Gameover->Visible = true;

    }

    private: void NewGame()//событие начала новой игры

    {

    //Если новой игры был тот очищаем элементы

    if (!firstStart)

    {

    this->Controls->Remove(fruit);//кдаляем фрукт
    for (int i = 0; i <= skore; i++)//для каждого элемента змейкии...

    {

    this->Controls->Remove(Snake[i]);//удаляем змейку

    }
    skore = 0;//обнуляем счёт

    }

    else

    firstStart = false;//если новои игры не было то ничего не делаем
    //Инициализируем змейку

    Snake = gcnew array
    (400);//поле игры 400

    Snake[0] = gcnew PictureBox();// элементы змейки на PictureBox

    Snake[0]->Location = Point(200, 200);

    Snake[0]->BackColor = Color::Green;//голова будет зеленой, чтобы отличалась от всех

    Snake[0]->Width = step;//высота змейки кратно

    Snake[0]->Height = step;//ширина кратно шагу
    skore = 0;//счёт 0

    this->Controls->Add(Snake[0]);
    //Инициализируем фрукт

    fruit = gcnew PictureBox();//фрукт создается в игровом поле

    fruit->BackColor = Color::Red;//цвет фрукта красный

    fruit->Width = step;//высота кратно шагу

    fruit->Height = step;//ширина кратно шагу

    Frukt();//гинерируем фрукт

    //Задаем интревал обнавления и запускаем таймер для обнавления

    timer->Interval = Interval;//обновление таймера в зависимости от настроек

    timer->Start();//запуск таймера
    //Задаем направление на запуске

    direction.X = 1;

    direction.Y = 0;
    //Можно грать

    play = true;

    die = false;
    Skore->Text = "Счет: 0";
    //Скрываем не нужные компоненты на форме

    Gameover->Visible = false;

    Nastroyki->Visible = false;

    textBox1->Visible = false;

    pictureBox1->Visible = false;

    System::Media::SoundPlayer^ player1 = gcnew System::Media::SoundPlayer("D:\\Ringtongs\\song2.wav");//Подключение переменных для воспроизведение фоновой музыки

    player1->Load();//запуск музыки

    player1->Play();
    }

    private: void ChackBorders()//проверка столкновения с границами игрового поля

    {

    if (Snake[0]->Location.X >= GranitsRight->Location.X || Snake[0]->Location.X <= GranitsLeft->Location.X)

    {

    GameOver();

    }
    if (Snake[0]->Location.Y <= GranitsUp->Location.Y || Snake[0]->Location.Y >= GranitsDown->Location.Y)

    {

    GameOver();

    }

    }
    private: System::Void выходToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e)// кнопка выход закрываем форму

    {

    Application::Exit();

    }

    private: System::Void информацияОИгреToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e)//кнопка информация для ознакомления правил игры

    {

    MessageBox::Show("Правила игры:\n1. Для управления использовать стрелки клавиатуры\n2. Ешь как можно больше фруктов для набора счета и увеличения змейки\n3. Нельзя есть себя и врезаться в стенки\n", "Правила игры!");
    return System::Void();

    }

    private: System::Void новаяИграToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e)//кнопка новая игра для начала новой игры

    {

    NewGame();
    return System::Void();

    }

    private: System::Void паузаСтартToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e)//кнопка пауза старт

    {

    if (play)// если игра идёт

    {

    play = false;//приостанавливаем игру

    }

    else//иначе

    {

    play = true;//запускаем игру

    timer->Start();//запускаем таймер

    }
    return System::Void();

    }

    private: System::Void настройкиToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e)//кнопка настройки

    {

    if (Nastroyki->Visible == false) //если настройки не видны то...

    {

    play = false;//Приостанавливаем игру
    button1->Enabled = true;//кнопка применить не видеть

    SpeedSnake->Enabled = true;//скорость змейки применить в соотвествии с выбраной скоростью

    Nastroyki->Visible = true;//настройки не видеть

    }

    else //иначе

    {

    play = true;//запускаем игру

    timer->Start();//запускаем таймер для движения змейки
    //лишнее скрываем

    button1->Enabled = false;

    SpeedSnake->Enabled = false;

    Nastroyki->Visible = false;

    }

    }

    private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e)//события кнопки "применить" в настройках

    {

    Interval = Convert::ToSingle(SpeedSnake->Value);//интервал обновления булет соотвествовать числу выбранному в настройках

    timer->Interval = Interval;//соотвествено обновление таймера зависит от интервала
    //скрываем не нужные вещи с формы

    button1->Enabled = false;

    SpeedSnake->Enabled = false;

    Nastroyki->Visible = false;
    //Запускаем игру

    play = true;

    timer->Start();
    return System::Void();

    }

    private: System::Void MyForm_KeyDown(System::Object^ sender, System::Windows::Forms::KeyEventArgs^ e)//прописываем событие самой формы по нажатию клавишь управления

    {

    //Считываем нажатую клавишу

    if (e->KeyCode.ToString() == "Right")//правая кнопка

    {direction.X = 1; direction.Y = 0;}

    else if (e->KeyCode.ToString() == "Left")//левая кнопка

    {direction.X = -1; direction.Y = 0;}

    else if (e->KeyCode.ToString() == "Up") //кнопка вверх

    {direction.Y = -1;direction.X = 0;}

    else if (e->KeyCode.ToString() == "Down")//кнопка вниз

    {

    direction.Y = 1;

    direction.X = 0;

    }

    return System::Void();

    }

    private: void MyForm_Update(Object^ obgect, EventArgs^ e)//обновление формы

    {

    if (!die && play) ///если змейка не умерла и играет то..

    {

    //Задает движение змейки

    Movement();

    Eating();//проверка, что съели фрукт

    SelfEating();//проверка, что съел себя

    ChackBorders();//проверка на столкновение с стеной

    }

    else if (die && play)//иначе, если мертва и играет

    {timer->Stop();//останавливаем таймер

    MessageBox::Show("Игра окончена!", "Внимание!");//выводим сообщение о конце игры}

    else if (!play && !die)//иначе, ели не играет но и не умерла то...

    {timer->Stop();//останавливаем таймер MessageBox::Show("Игра приостановлена!", "Внимание!");//приостанавливаем игру и выводим соотвествующие сообщение

    }}

    private: System::Void выбратьДругуюИгруToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e)

    //собитие просмтра рекорда игры

    {if (textBox1->Visible == false)

    {//Приостанавливаем игру

    play = false;
    SpeedSnake->Enabled = true;

    textBox1->Visible = true;

    pictureBox1->Visible = true;}

    else

    {//Запускаем игру

    play = true;

    timer->Start();

    SpeedSnake->Enabled = false;

    textBox1->Visible = false;

    pictureBox1->Visible = false;}

    if (die)//если змейка умерла то...

    {System::IO::StreamWriter^ fp = System::IO::File::AppendText("file.txt");//создаём пееменну где хранится файл для записи результатов игры

    fp->WriteLine(skore);//каждая запись записывается в конец файла, данные берём из счёта

    fp->Close();//закрываем файл для что бы не боло ошибки}

    System::IO::StreamReader^ sr = gcnew System::IO::StreamReader("file.txt");// создаём новую переменную через которую будем открывать файл

    int String;//переменная для сравнения данных в файле

    int max;//переменная сравнения

    while (!sr->EndOfStream)//пока идем до конца файла...

    {

    for (int i = 0; i <= 1000; i++)//для сравнения

    {

    if (System::Int32::TryParse(sr->ReadLine(), String))//если чтение и преобразование удалось

    if (String > max) //если строка меньше max по большей стороне

    {

    max = String;//то данное число является максимальным

    }

    }
    textBox1->Text = Convert::ToString(max) + Environment::NewLine;//создаём новую строку в TextBox и записываем максимальное число

    max = 0;//изночально 0

    }

    return System::Void();

    }

    };}

    П1.1 Программный код программы

    ПРИЛОЖЕНИЕ 2.

    Блок схема работы программы



    Рисунок П2.1 – Блок-схема программы

    ПРИЛОЖЕНИЕ 3



    Рисунок П3.1. Представлена основная форма, которая появляется при запуске программы. Запуск программы — это автоматический запуск игры так что при игре это нужно учитывать.



    Рисунок П3.2. Демонстрация действия игры при проигрыше. При конце игры программы выдаёт соответствующие сообщение о конце игры и останавливает игру. При желании начать игру сначала игрок должен перейти в меню формы и нажать на кнопку «Новая игра».



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

    Рисунок П3.4. Демонстрация правил игры при нажатии кнопки «Информация о игре»



    Рисунок П3.5. При нажатии кнопки «Просмотр рекорда игры» появляется кубок с полем, где написан наибольшей результат игры.

    1   2   3   4


    написать администратору сайта