">
Информатика ![]() | |||||||||||||||||||||||||||||||||||||||||
Похожие работы:
| |||||||||||||||||||||||||||||||||||||||||
Курсовая работа по дисциплине программирование 2010 Курсовой проект Проекты обязаны быть реализованы с использованием классов или готовых пакетов, построенных на основе объектно-ориентированного программирования. В зависимости от техники, к которой имеется доступ, в качестве таких пакетов могут быть использованы TVISION для Borland C++, Object Windows Library 1.0 или Object Windows Library 2.0 для Borland C++ или Visual C++ 6.0. Программа может выполнять любые функции, но студенты должны показать в ней умение пользоваться достаточно сложными библиотеками классов. В качестве таких программ могут быть предложены различные игры, Объем программ должен быть таким, чтобы можно было показать овладение технологией объектно-ориентированного программирования, умение использовать библиотеки классов. Объем работы не ограничен сверху и определяется способностями и возможностями студентов по использованию вычислительной техники. Примерные задания на курсовое проектирование. Разработать графическую игру. Разработать пользовательский интерфейс к файловой системе, включая манипулирование, просмотр и редактирование текстовых файлов. Разработать программу визуализации табличных данных. Разработать HTML-редактор с подсветкой тегов. Разработать редактор электронных таблиц. Разработать программу графического оформления текстовых объявлений. Предпочтение отдается реальной тематике, определяемой интересами студента и согласуемой с преподавателем. Правила игры: На игровой доске (поле размером 10:10) игроки начинают ходить, при каждом ходе все соседние фишки становятся такого же цвета, что и ходивший игрок. Выигрывает тот игрок, который имеет большее количество закрашенных фишек. Реализация: В своей игре я использую объекты. Фишки реализуются в объекте, клетки игровой доски тоже реализуются объектом, сама доска является потомком клетки и имеет свойства доски. Для того чтобы создать игровую доску, я сначала создаю клетку в классе “TCells - Клетка”, которая имеет свой размер. В классе “TDoska-доска”, который является производным от класса “TCells - Клетка” я рисую игровую доску с помощью функции draw, в которую ничего не передается. Эта игровая доска размером 10:10, зеленого цвета. Также мне нужно создать объекты, которыми я буду ходить – фишки. Их я создаю в базовом классе “TFishka”. Полями этого класса являются: массив размером 10:10 для хранения положений фишек, массив размером 10:10 для хранения цветов фишек на доске, целые параметры: x, y, size, count_1, count_2 – координаты фишки, размер, счет первого и второго игрока соответственно. Методы класса: конструктор для создания поля зеленого цвета с неустановленными фишками; функция void draw для рисования одной фишки с установленными координатами; функция init, в которую передаются координаты фишки походившего игрока, ее цвет и номер игрока. Эта функция закрашивает соседние фишки, если они еще не установлены. Функция Game_over, для проверки на окончание игры. Игра оканчивается, когда все фишки установлены. Потом сравнивается счет игроков и выводится сообщение о победителе. Листинг программы: Unit1.cpp #include #pragma hdrstop #include "Unit1.h" #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; TFishka f; TDoska doska; __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //----------- обработчик прорисовки формы -----------------------------------------void __fastcall TForm1::FormPaint(TObject *Sender) { doska.draw(); } //---------------------------------------------------------------- //Ход первого игрока void __fastcall TForm1::Button1Click(TObject *Sender) { //Запись ходов Label9->Caption=Label9->Caption+"Игрок1: X="+Edit1->Text+ "Y="+Edit2->Text+""; f.init(StrToInt(Edit1->Text),StrToInt(Edit2->Text),clBlue,1); f.draw(); //Прорисовываем фишку f.count_1++; Edit5->Text=IntToStr(f.count_1);//Выводим очки //Выключаем интерфейс Button1->Enabled=false; Edit1->Enabled=false; Edit1->Text=""; Edit2->Enabled=false; Edit2->Text=""; //Включаем интерфейс второго игрока if (Button2->Enabled==false) { Button2->Enabled=true; Edit3->Enabled=true; Edit4->Enabled=true; } else { Button2->Enabled=false; } f.Game_over();// Проверяем условие конца игры } //-------------------------------------------------------------------//Ход второго игрока void __fastcall TForm1::Button2Click(TObject *Sender) { //Запись ходов Label9->Caption=Label9->Caption+"Игрок2: X="+Edit3->Text+" Y="+Edit4->Text+"
"; f.init(StrToInt(Edit3->Text),StrToInt(Edit4->Text),clRed,2); f.draw(); //Прорисовываем фишку f.count_2++; Edit6->Text=IntToStr(f.count_2); //Выводим очки //Выключаем интерфейс Button2->Enabled=false; Edit3->Enabled=false; Edit3->Text=""; Edit4->Enabled=false; Edit4->Text=""; //Включаем интерфейс первого игрока if (Button1->Enabled==false) { Button1->Enabled=true; Edit1->Enabled=true; Edit2->Enabled=true; } else {Button1->Enabled=false;} f.Game_over();// Проверяем условие конца игры } //--------------------------------------------------------------------------- void __fastcall TForm1::Timer1Timer(TObject *Sender) //Каждые 10 мс { f.draw_greed();//прорисовываем поле } //--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender)//При создании формы { //Выводим счет игроков Edit5->Text=IntToStr(f.count_1); Edit6->Text=IntToStr(f.count_2); } //Выключаем интерфейс второго игрока, чтобы начал ходить первый Edit3->Enabled=false; Edit4->Enabled=false; } Unit.h #ifndef Unit1H #define Unit1H //--------------------------------------------------------------------------- #include #include #include #include #include //--------------------------------------------------------------------------- class TForm1 : public TForm { __published:// IDE-managed Components TGroupBox *GroupBox1; TGroupBox *GroupBox2; TGroupBox *GroupBox3; TEdit *Edit1; TEdit *Edit2; TEdit *Edit3; TEdit *Edit4; TLabel *Label1; TLabel *Label2; TLabel *Label3; TLabel *Label4; TLabel *Label5; TLabel *Label6; TButton *Button1; TButton *Button2; TLabel *Label7; TLabel *Label8; TEdit *Edit5; TEdit *Edit6; TShape *Shape1; TShape *Shape2; TTimer *Timer1; TGroupBox *GroupBox4; TLabel *Label9; void __fastcall FormPaint(TObject *Sender); void __fastcall Button1Click(TObject *Sender); void __fastcall Button2Click(TObject *Sender); void __fastcall Timer1Timer(TObject *Sender); void __fastcall FormCreate(TObject *Sender); private:// User declarations public:// User declarations __fastcall TForm1(TComponent* Owner); }; //--------------------------------------------------------------------------- extern PACKAGE TForm1 *Form1; //--------------------------------------------------------------------------- #endif class TCells// Класс клетка { public: int size;// Размер клеток void init(_size){size=_size;} //Устанавливает размер клеток }; class TDoska:public TCells// Класс доска. Производный от класса клетка. { public: TDoska()//Устанавливаем размер клетки 40 { init(40); } void draw()//Рисует доску. { for (int i=0;i<10;i++) for (int j=0;j<10;j++) { Form1->Canvas->Brush->Color=clLime;// Выбираем цвет Form1->Canvas->Ellipse(i*size,j*size,(i+1)*size,(j+1)*size);//Рисуем круг } } }; //--------------------------------------------------------------------------- class TFishka// Класс Фишка. { public: int mas[10][10];//Массив для хранения положений фишек. TColor color[10][10];// Массив для хранения цветов фишек на доске. int x,y,size;//Координаты фишки и размер. int count_1,count_2;//Счет игроков. //------------- TFishka(); //------------- void draw_greed()//Рисует доску с фишками { int i,j; for ( i=0;i<10;i++) for ( j=0;j<10;j++) { Form1->Canvas->Brush->Color=color[i][j]; Form1->Canvas->Ellipse(i*size,j*size,(i+1)*size,(j+1)*size); } } //------------- void draw() //Рисует одну фишку с установленными координатами { Form1->Canvas->Brush->Color=color[x][y]; Form1->Canvas-> Ellipse(x*size,y*size,(x+1)*size,(y+1)*size); } //------------- void init(int x, int y, TColor _c, int __gamer); //------------- void Game_over() //Проверка на окончание игры { int i,j,t1,t2,_gamer; t1=100;_gamer=0;t2=0; //Проход по массиву for (i=0;i<10;i++) for (j=0;j<10;j++) if (mas[i][j]==1){t2++;//Если фишка установлена, t2=t2+1 } //Если все фишки установлены if (t2==t1) { //Сравниваем счет игроков if (count_1>count_2){_gamer=1;} else {_gamer=2;} Form1->Button1->Enabled=false; //выключаем интерфейс Form1->Button2->Enabled=false; //Выводим сообщение ShowMessage("Game Over!!! Выиграл игрок ["+IntToStr(_gamer)+"]"); } } //------------- }; //------------------------------------------------------------------------------ void TFishka::init(int x, int y, TColor _c, int __gamer) { int temp; // Счетчик temp=0; //Если фишка не установлена, то устанавливаем ее if (mas[x][y]==0) {color[x][y]=_c; mas[x][y]=1; temp++;} if (mas[x+1][y]==0) {color[x+1][y]=_c; mas[x+1][y]=1; temp++;} if (mas[x-1][y]==0) {color[x-1][y]=_c; mas[x-1][y]=1; temp++;} if (mas[x][y+1]==0) {color[x][y+1]=_c; mas[x][y+1]=1; temp++;} if (mas[x][y-1]==0) {color[x][y-1]=_c; mas[x][y-1]=1; temp++;} if (mas[x+1][y-1]==0) {color[x+1][y-1]=_c; mas[x+1][y-1]=1; temp++;} if (mas[x+1][y+1]==0) {color[x+1][y+1]=_c; mas[x+1][y+1]=1; temp++;} if (mas[x-1][y-1]==0) {color[x-1][y-1]=_c; mas[x-1][y-1]=1; temp++;} if (mas[x-1][y+1]==0) {color[x-1][y+1]=_c; mas[x-1][y+1]=1; temp++;} switch(__gamer) { case 1 : count_1+=temp;break; //Начисляем очки первому игроку. case 2 : count_2+=temp;break; //Начисляем очки второму игроку. } } //------------------------------------------------------------------------------ TFishka::TFishka() // Конструктор, который создает { for (int i=0;i<10;i++) for (int j=0;j<10;j++) {color[i][j]=clLime; //поле зеленого цвета mas[i][j]=0;} //с неустановленными фишками count_1=0; count_2=0; size=40; } Project1.cpp #include #pragma hdrstop USEFORM("Unit1.cpp", Form1); //--------------------------------------------------------------------------- WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { try { Application->Initialize(); Application->CreateForm(__classid(TForm1), &Form1); Application->Run(); } catch (Exception &exception) { Application->ShowException(&exception); } return 0; } Результаты работы программы: Рис. 1. Главное окно после запуска программы. Рис. 2. промежуточный результат работы программы. Рис. 3. конечный результат работы программы Вывод: Проделанная мною работа показывает, что я овладел технологией объектно-ориентированного программирования, научился использовать библиотеки классов, создавать собственные, и написал программу в которой эти классы взаимодействуют. Таким образом, освоил основные навыки работы с языками объектно-ориентированного программирования на примере Borland C++. |
© 2010–2021 Эссе.рф: Библиотека учебных материалов |