Компьютерная игра 'KeyBoard Racer'

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Украинский
    ,
    Формат файла:
    MS Word
    98,34 Кб
  • Опубликовано:
    2015-01-14
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Компьютерная игра 'KeyBoard Racer'

Содержание

Обозначения и сокращения

Введение

1. Постановка задачи

2. Технологии, методы, структуры, принципы положенные в основу алгоритма

3. Разработка структуры программы

3.1 Структура программы

3.2 Схема алгоритма № 1

3.3 Схема алгоритма № 2

3.5 Состав проекта

4. Разработка программы

4.1 Разработка метода private void MainForm_Load ()

4.2 Разработка метода private void RichTextBox_KeyPress ()

5. Руководство пользователя

Заключение

Список использованных источников

Приложение A

Обозначения и сокращения


Проект1 - В Visual Studio 2013 проектом называется совокупность файлов, создаваемых в процессе разработки программы.

MMORPG2 - жанр онлайновых компьютерных ролевых игр, в которых большое количество игроков взаимодействуют друг с другом, в виртуальном мире <#"784925.files/image001.gif">

Рисунок 2.1 - Схема работы программы

Studio 2013 позволяет программисту разрабатывать программы, которые могут выводить графику: схемы, чертежи, иллюстрации.

Программа выводит графику на поверхность объекта (формы или, как в нашем случае, компонента PictureBox). Поверхности объекта соответствует свойство Graphics. Для того чтобы вывести на поверхность объекта графический элемент (прямую линию, окружность, прямоугольник и т.д.), необходимо применить к свойству Graphics этого объекта соответствующий метод.

Перечень основных методов, которые потребуются при разработке программного игрового приложения "Keyboard Racer":Graphics. DrawImage (Image image, int x, int y)

Метод DrawImage

Синтаксис:

Объект. DrawImage (Image image, int x, int y);

Где:

Объект - имя объекта (компонента), на поверхности которого выполняется вычерчивание, x, y - координаты x и y положения рисунка, image - картинка, которая будет прорисована.

Метод DrawImage рисует изображение, содержащееся в объекте, указанном параметром Image, сохраняя исходный размер изображеня в его источнике и перенося изображение в область объекта Graphics, верхний левый угол которой определяется параметрами x и y. Источник изображения может быть битовой матрицей, пиктограммой или метафайлом.TextBoxBase. Select (int start, int length)

Метод Select

Синтаксис:

Объект. Select (int start, int length)

Где:

компьютерная игра клиент сервер

Объект - имя объекта (компонента), на поверхности которого выполняется выделение, start - начальная позиция, length - количество символов которые требуется выделить.

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

При разработке программы основным компонентом является Timer, который вызывает событие через определенные интервалы времени. Этот компонент предназначен для среды Windows Forms, в которой и разрабатывалось данное приложение.

Длина интервалов определяется свойством Interval, значение которого исчисляется в миллисекундах. Когда компонент включен, событие Tick вызывается через каждый интервал. В этом месте следует добавить выполняемый код. Ключевыми методами компонента Timer являются Start и Stop, которые включают и выключают таймер. При выключении таймера его параметры сбрасываются; приостановить компонент Timer нельзя.

На основе данного компонента и была реализована возможность поставить игру на паузу.

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

Класс Socket обеспечивает широкий набор методов и свойств для сетевых взаимодействий. Класс Socket позволяет выполнять как синхронную, так и асинхронную передачу данных с использованием любого из коммуникационных протоколов, имеющихся в перечислении ProtocolType <#"784925.files/image002.gif">

Рисунок 3.1 - Генерация игровой формы.

Описание алгоритма приведено в пункте "разработка программы".

3.3 Схема алгоритма № 2


Схема ввода символа с клавиатуры

Рисунок 3.2 - Схема ввода символа с клавиатуры

Описание алгоритма приведено в пункте "разработка программы".

3.5 Состав проекта


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

В заголовочном файле (хедере) первого модуля (Program), находится создание и запуск нового объекта класса menuForm, который представляет собой перечень возможных действий.

Модуль MainForm, в котором идет описание главной формы программы, начальных значений переменных, создаваемых при ее запуске. В теле этого класса находятся исходные тексты обработчиков событий, порождаемых теми или иными действиями пользователя в главной форме программы, ссылки на библиотеки используемые для написание программы, необходимые пространства имен. Также описаны все методы, на основе которых строится работа программы.

Модуль About, является компонентом WindowsForm и содержит в себе информация о программном приложение "Keyboard Racer".

Модуль Finish, является компонентом WindowsForm и содержит в себе информация о статусе игры при ее завершении.

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

Модуль Server, является классом и содержит в себе методы и данные необходимые для создания объекта сервера и его автономной работы.

Модуль Client, является классом и содержи в себе методы и данные необходимые для создания объекта клиента и его автономной работы.

Модуль ThreadChat, является статическим классом и содержит в себе данные необходимые для общения между потоками.

4. Разработка программы


4.1 Разработка метода private void MainForm_Load ()


Разработка метода генерирования игровой формы (Схема алгоритма №1).

Листинг процедуры находится в Приложении. В листинге метод будет иметь имя private void MainForm_Load (object sender, EventArgs e).

В первой блоке происходит проверка на сервер, если проверка верна, то включается таймер сети, после чего с файла в переменную text считывается текст (с файла), который будет использоваться в процессе игры, далее этот текст передается в статический класс для последующей передачи его клиенту по сети:

(whoI == "server")

{. Enabled = true;= new StreamReader (pathFile, ASCIIEncoding. ASCII);= tr. ReadToEnd ();. gameText = text;. Close ();

}

Во втором блоке происходит проверка на клиент, если проверка верна, то включается таймер сети, после чего в переменную текст подгружается текст со статического класса, который был туда загружен еще до загрузки формы, благодаря инструкции Sleep () главного потока:

(whoI == "client")

{. Enabled = true;= ThreadChat. gameText;

}

Затем метод устанавливает в форму для текста (RichTextBox), набор символов загруженных ранее в переменную text:

. Text = text;

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

. X = 20;. Y = 67;. Location = youLocation;

. X = 20;. Y = 116;. Location = opponentLocation;

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

. HideSelection = true;. youStartGame = false;

4.2 Разработка метода private void RichTextBox_KeyPress ()


Разработка метода ввода символа с клавиатуры (Схема алгоритма №2)

Листинг метода находится в Приложении. В листинге процедура будет иметь имя private void RichTextBox_KeyPress (object sender, KeyPressEventArgs e).

Данная метод отвечает за ввод символа с клавиатуры в форму текста, и его обработку.

Следовательно, метод будет принимать параметром нажатую клавишу, в теле проверять его на соответствие с символом ввод которого ожидался, после чего, в зависимости от результата, выполнять определенные инструкции. Метод с помощью оператора условия If - Else разделяется на два блока.

(RichTextBox. Text [i] == e. KeyChar)

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

{. Text = "Набирайте текст";(errorEnter == false)

{. SelectionColor = Color. Blue;

}++;= false;(Car1, youLocation, i, true);. Select (i, 1);(CheckFinish ())

{();

}

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

{. Text = "Исправьте ошибку";. Select (i, 1);. SelectionColor = Color. Red;++;= true;. Text = errorCount. ToString ();

}

Рассмотрим этот метод подробнее: метод принял параметром символ "А", а ожидаемый символ ввода - "о". Поток перейдет к выполнению второго блока кода, который установит текущий статус игры на "Исправьте ошибку", выделит ожидаемый символ, в форме текста, красным цветом. Далее счетчик ошибок увеличится на единицу, переменная неверного ввода устанавливается как "true", а на экран выведется информация о текущем количестве неверных вводов. При этом символ ожидаемого ввода останется в текущем положении.

5. Руководство пользователя


Для запуска программы дважды щелкните мышью по пиктограмме файла Keyboard Racer.

Рисунок 1 - Меню программы

При запуске игры вы попадете в меню приложения, здесь можно осуществлять выбор нужного вам действия: Играть как сервер, Играть как клиент, показать окно "О программе", а также закрыть приложение. Здесь присутствует настройка сетевого соединения для клиента, которая позволяет задать IP и PORT для подключения к серверу.

При нажатии на кнопку "О программе" появляется окно с информацией о программе.

При нажатии на кнопку "Играть как сервер" появляется окно, которое позволяет задать параметр игры: вводимый текст.

После нажатия клавиши "ОК", откроется главное окно программы, также это окно откроется сразу, если в меню выбрать пункт "Играть как клиент", это связано с тем, что текст клиента подгружается по сети от сервера, что делает их идентичными.

Во время открытия этого окна, происходит начальная установка всех параметров. Текст загружается в форму, гоночные машинки устанавливаются в положение старта. До старта игры статусам присвоены значения ожидания, а счетчик ошибок, времени и скорости равен 0.

Теперь нажимая на клавишу "СТАРТ!" можно начать игру, это автоматически приведет к старту игры у вашего противника, для того чтобы соперничество происходило в реальном времени.

В процессе игры, в статусе гонки, можно наблюдать на сколько символов вы отстаете или опережаете своего противника. А также видеть его прогресс, который отображается с помощью гоночной машинки. Статус текста меняет свое значение, с "Набирайте текст" на "Исправьте ошибку", если был допущен не верный ввод, что также увеличит количество ошибок на единицу. После верного ввода, можно дальше продолжать набирать текст. Также ведется учет потраченного на набор текста времени (в секундах), и скорость набора символов в минуту. Если символ был набран с первого раза верно, то он примет синий цвет, если же первый ввод был ошибочный, то красный.

Игра считается законченной, когда вы, либо ваш противник введет последний символ текста. За этим сразу же последует вывод окна "Finish", которое сообщит вам результаты игры. Закрыв его, можно вернуться на главное окно и посмотреть статистику, либо начать игру заново, кликнув по кнопке "СТАРТ!".

Клик по кнопке "Меню" приведет к возврату в меню программы.

Остальные свойства программы достаточно очевидны и традиционны для графического пользовательского интерфейса.

Заключение


В результате выполнения курсового проекта была разработана игра "Keyboard Racer", с поддержкой многопоточности, обладающая интуитивно понятным интерфейсом и возможностью играть со своим соперником по сети.

Идея данной игры является оригинальной. Главные особенности данной игры:

А. Маленький размер;

Б. Не требовательность к ресурсам компьютера;

В. Простой и понятный интерфейс;

Г. Нет необходимости в установке дополнительного ПО;

Д. Обладает "обучающими" свойствами, которые улучшат вашу скорость печати.

Программа может быть улучшена путём добавления различных функций, например:

А. Добавление возможности играть более чем с одним соперником.

Б. Реализация достижений и наград за них.

В. Возможность сохранения статистики.

При разработке проекта были значительным образом закреплены знания, полученные на лекциях по программированию, а так же знания о работе с различными компонентами в Visual Studio 2013.

Список использованных источников


1. Троелсен Э. - Язык программирования C# 2010 и платформа.net 4 - 2010

. А. Хейлсберг, М. Торгерсен, С. Вилтамут, П. Голд. Язык программирования C#.

. Чарльз Петцольд. Microsoft Windows Presentation Foundation. Базовый курс.

. Мак-Дональд, Мэтью. Windows Presentation Foundation в.net 4.0 с примерами на С# 2010 для профессионалов

. Справка MSDN.

Приложение A


Исходный код программы:

using System;System. Collections. Generic;System.componentModel;System. Data;System. Drawing;System. Linq;System. Text;System. Threading. Tasks;System. Windows. Forms;System. Threading;Клавагонки

{partial class MenuForm: Form

{public MenuForm myMenu;MenuForm ()

{();= this;

}void button1_Click (object sender, EventArgs e)

{(MainForm. whoI == "client"). clientThread. Abort ();(MainForm. whoI == "server")

{. Stop ();

}. Exit ();

}void button2_Click (object sender, EventArgs e)

{. Visible = false;myFile = new FileForm ();. ShowDialog ();

}void ClientButton_Click (object sender, EventArgs e)

{. address = IPBOX. Text. ToString ();. port = Convert. ToInt32 (PortBox. Text);. Visible = false;client = new Client ();. Sleep (1000);(Client. mainForm. Visible == false). mainForm. Visible = true;. mainForm. ShowDialog ();

}void AboutButton_Click (object sender, EventArgs e)

{. Visible = true;

(new About ()). ShowDialog ();

}

}

}partial class MainForm: Form

{

// Global varpublic string pathFile = "F: \\Универ 3 курс\\Курсовой_проект\\Клавагонки\\Клавагонки\\bin\\Debug\\text. txt";text; // текст из файлаtr; // потом чтения текста из файлаprivate int i = 0; // количество верых вводовerrorCount = 0; // количество ошибочных вводовerrorEnter = false;

// int speed = 0; // скорость машиныspeedOfPrint = 0; // скорость печатиtime = 0; // время в секундахpath;leftOffset;public string whoI = "empty";youLocation; // положение нашей машиныopponentLocation; // машина оппонентаstring finish;bool singleFinish;void TextGo ()

// textThread. Abort ();

}MainForm ()

{();

}void MenuButton_Click (object sender, EventArgs e)

{. Visible = false;. myMenu. Visible = true;

}void MainForm_Load (object sender, EventArgs e)

{(whoI == "server")

{. Enabled = true;= new StreamReader (pathFile, ASCIIEncoding. ASCII);= tr. ReadToEnd ();. gameText = text;. Close ();

}(whoI == "client")

{. Enabled = true;= ThreadChat. gameText;

}. Text = text;. X = 20;. Y = 67;. Location = youLocation;. X = 20;. Y = 116;. Location = opponentLocation;. HideSelection = false;. youStartGame = false;

}void GetSpeed (int i) // скорость машины

{= i / (text. Length *1.0);= (int) (20 + (850-55) * path);

}double GetSpeedOfPrint () // скорость печати (символов в минуту)

{= ( (i / (double) time) * 60);= Math. Round (speedOfPrint);speedOfPrint;

}public int GetI ()

{i;

}void ChangeLocation (PictureBox car, Point location, int i, bool youCar) // перемещение машины

{(i);= car. Location;. X = leftOffset;. Location = location;(youCar). youCar = location. X;

}bool CheckFinish () // проверка на конец игры

{(i == text. Length)

{true;

}false;

}void Start () // начало игры

{

// ThreadChat. youStartGame = false;

// ThreadChat. oppStartGame = false;= false;= 0;= 0;= 0;= 0;. Focus ();

// GetSpeed ();. Text = ThreadChat. gameText;. SelectAll ();. SelectionColor = Color. Black;. SelectAll ();. SelectionColor = Color. Black;. Select (i, 1);. Interval = 1000;. Interval = 10;. X = 20;. Y = 67;. Location = youLocation;. X = 20;. Y = 116;. Location = opponentLocation;. Text = time. ToString ();. Enabled = true;. Text = errorCount. ToString ();(i, ThreadChat. oppI);. Text = "READY!!!";

}void Finish () // последствия конца игры

{. Focus ();. Enabled = false;. Text = "Гонка завершена!";(GetI () == RichTextBox. TextLength)= "win";= "lose";finishForm = new Finish (finish);. ShowDialog ();

}void RichTextBox_KeyPress (object sender, KeyPressEventArgs e) // обработка ввода текста

{(RichTextBox. Text [i] == e. KeyChar)

{. Text = "Набирайте текст";(errorEnter == false)

{. SelectionColor = Color. Blue;

}++;= false;(Car1, youLocation, i, true);. Select (i, 1);(CheckFinish ())

{();

}

}

{. Select (i, 1);. SelectionColor = Color. Red;++;= true;. Text = errorCount. ToString ();. Text = "Исправьте ошибку";

}

}void StartButton_Click (object sender, EventArgs e)

{();. youStartGame = true;

}void MainForm_FormClosed (object sender, FormClosedEventArgs e)

{(whoI == "client"). clientThread. Abort ();(whoI == "server")

{. Stop ();

}. Exit ();

}void RichTextBox_Click (object sender, EventArgs e)

{. Focus ();

}void GameTimer_Tick (object sender, EventArgs e) // обработчик таймера

{++;. Text = time. ToString ();. Text = GetSpeedOfPrint (). ToString ();

}void LanTimer_Tick (object sender, EventArgs e)

{(ThreadChat. oppStartGame)

{. oppStartGame = false;();

}(ThreadChat. oppI == RichTextBox. TextLength && singleFinish == false)

{= true;();

}(Car2, opponentLocation, ThreadChat. oppI, false);(i, ThreadChat. oppI);

// PositionLabel. Text =

}void PositionLabelText (int youI, int oppI)

{(youI > oppI)

{. Text = "Вы лидируете на " + (youI - oppI) + " символ (ов)!";. ForeColor = Color. Blue;

}(youI < oppI)

{. Text = "Вы отстаете на " + (oppI - youI) + " символ (ов)!";. ForeColor = Color. Green;

}(youI == oppI && youI! = 0)

{. Text = "ВКЛЮЧАЙ НИТРО";. ForeColor = Color. Red;

}(youI == oppI && youI == 0)

{. Text = "Ждем старта";. ForeColor = Color. Black;

}

}

}partial class FileForm: Form

{FileForm ()

}void FileButton_Click (object sender, EventArgs e)

{. ShowDialog ();. Text = openFileDialog1. FileName;

}void DoneButton_Click (object sender, EventArgs e)

{. pathFile = PathBox. Text;. Visible = false;server = new Server ();(Server. mainForm. Visible == false). mainForm. Visible = true;. mainForm. ShowDialog ();

}

}partial class Finish: Form

{string status;int count = 0;Finish (string status)

{();. status = status;

}void Finish_Load (object sender, EventArgs e)

{(status == "win"). Text = "ВЫ\nПОБЕДИТЕЛЬ!";. Text = "ВЫ\nПРОИГРАВШИЙ!";. Enabled = true;

}void Finish_FormClosed (object sender, FormClosedEventArgs e)

{. Enabled = false;

}void FinishTimer_Tick (object sender, EventArgs e)

{(count == 0)

{. BackColor = Color. White;. FinishLabel. ForeColor = Color. Black;

}(count == 4)

{. BackColor = Color. Green;. FinishLabel. ForeColor = Color. Yellow;

}(count == 8)

{. BackColor = Color. Red;. FinishLabel. ForeColor = Color. Blue;

}(count == 12)

{. BackColor = Color. Yellow;. FinishLabel. ForeColor = Color. Red;

}++;(count > 16)= 0;

}

}class Server

{public MainForm mainForm = new MainForm ();public System. Threading. Thread serverThread;private bool isStiop;Server ()

{

// Control. CheckForIllegalCrossThreadCalls = false;. whoI = "server";= new Thread (RunServer);. IsBackground = true;. Start ();

}void RunServer ()

{

// Устанавливаем для сокета локальную конечную точку

// Restart:ipHost = Dns. GetHostEntry ("localhost");ipAddr = ipHost. AddressList [0];ipEndPoint = new IPEndPoint (ipAddr, 11000);

// Создаем сокет Tcp/IpsListener = new Socket (ipAddr. AddressFamily, SocketType. Stream, ProtocolType. Tcp);

// Назначаем сокет локальной конечной точке и слушаем входящие сокеты

{. Bind (ipEndPoint);. Listen (10);

// Начинаем слушать соединения(isStiop==false)

{

// mainForm. testWORKING = 1;. showMessage = "Ожидаем соединение через порт {0}" + ipEndPoint;

// Программа приостанавливается, ожидая входящее соединениеhandler = sListener. Accept ();data = null;

// Мы дождались клиента, пытающегося с нами соединиться[] bytes = new byte [1024];bytesRec = handler. Receive (bytes);= Encoding. UTF8. GetString (bytes, 0, bytesRec);(data == "text"). syncText = true;

{(data == "start"). oppStartGame = true;. oppI = Convert. ToInt32 (data);

}

// Показываем данные на консоли

// ThreadChat. showMessage = "Полученный текст: " + data + "\n\n";

// Отправляем ответ клиенту\reply;(data == "text")

{= ThreadChat. gameText;

}

{(ThreadChat. youStartGame)

{= "start";. youStartGame = false;

}= MainForm. GetI (). ToString ();

}[] msg = Encoding. UTF8. GetBytes (reply);. Send (msg);(data. IndexOf ("<TheEnd>") > - 1)

{. showMessage = "Сервер завершил соединение с клиентом. ";

}. Sleep (10);. Shutdown (SocketShutdown. Both);. Close ();

}

}(Exception ex)

{. showMessage = ex. ToString ();

}

}static void Stop ()

{= true;

}

}class Client

{public MainForm mainForm = new MainForm ();public System. Threading. Thread clientThread;static string address;int port;Client ()

{= ThreadChat. address;. port = ThreadChat. port;= new Thread (RunClient);. Start ();. TypeLabel. Text = "I'm a client, \n BABY!";. whoI = "client";

}void RunClient ()

{

{(port);

}(Exception ex)

{. showMessage = ex. ToString ();

}

{

// mainForm. testWORKING = "end";

}void SendMessageFromSocket (int port)

{

// Буфер для входящих данных[] bytes = new byte [1024];data;

// Соединяемся с удаленным устройством

// Устанавливаем удаленную точку для сокетаipHost = Dns. GetHostEntry (address);ipAddr = ipHost. AddressList [0];ipEndPoint = new IPEndPoint (ipAddr, port);sender = new Socket (ipAddr. AddressFamily, SocketType. Stream, ProtocolType. Tcp);

// Соединяем сокет с удаленной точкой. Connect (ipEndPoint);message;(ThreadChat. syncText == false)

{= "text";

}

{(ThreadChat. youStartGame)

{= "start";. youStartGame = false;

}= MainForm. GetI (). ToString ();

}

// ThreadChat. showMessage = "Сокет соединяется с {0} " + sender. RemoteEndPoint. ToString ();[] msg = Encoding. UTF8. GetBytes (message);

// Отправляем данные через сокетbytesSent = sender. Send (msg);

// MainForm. sendMessage = false;

// Получаем ответ от сервераbytesRec = sender. Receive (bytes);= Encoding. UTF8. GetString (bytes, 0, bytesRec);(ThreadChat. syncText == false)

{. gameText = data;. syncText = true;

}

{(data == "start"). oppStartGame = true;. oppI = Convert. ToInt32 (data);

}. Sleep (10);

// Используем рекурсию для неоднократного вызова SendMessageFromSocket ()(message. IndexOf ("<TheEnd>") == - 1)(port);

// Освобождаем сокет. Shutdown (SocketShutdown. Both);. Close ();

}

}class ThreadChat

{public static bool sendMessage = false;public static string showMessage = "Сообщение сети";public static string outMessage = "lol";public static string gameText = "ada";public static bool syncText = false;public bool youStartGame = false;volatile public bool oppStartGame = false;public static int youCar = 20;public static int opponentCar = 20;public static int oppI = 0;public static int port = 11000;public static string address = "127.0.0.1";

}class Program

{

// / <summary>

// / Главная точка входа для приложения.

// / </summary>

[STAThread]void Main ()

{. EnableVisualStyles ();. SetCompatibleTextRenderingDefault (false);.run (new MenuForm ());

}

}


Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!