Министерство образования и науки РФ
Новосибирский государственный технический университет
по дисциплине программирование
Группа: АА-86
Студент: Сапрыкин О.Н.
Проверил:
Ханин А.Г.
Новосибирск
2010
Курсовой проект
Проекты обязаны быть реализованы с использованием классов или готовых пакетов, построенных на основе объектно-ориентированного программирования. В зависимости от техники, к которой имеется доступ, в качестве таких пакетов могут быть использованы TVISION для Borland C++, Object Windows Library 1.0 или Object Windows Library 2.0 для Borland C++ или Visual C++ 6.0. Программа может выполнять любые функции, но студенты должны показать в ней умение пользоваться достаточно сложными библиотеками классов. В качестве таких программ могут быть предложены различные игры,
Объем программ должен быть таким, чтобы можно было показать овладение технологией объектно-ориентированного программирования, умение использовать библиотеки классов. Объем работы не ограничен сверху и определяется способностями и возможностями студентов по использованию вычислительной техники.
Примерные задания на курсовое проектирование.
1.1. Разработать графическую игру.
1.2. Разработать пользовательский интерфейс к файловой системе, включая манипулирование, просмотр и редактирование текстовых файлов.
1.3. Разработать программу визуализации табличных данных.
1.4. Разработать HTML-редактор с подсветкой тегов.
1.5. Разработать редактор электронных таблиц.
1.6. Разработать программу графического оформления текстовых объявлений.
Предпочтение отдается реальной тематике, определяемой интересами студента и согласуемой с преподавателем.
Правила игры:
На игровой доске (поле размером 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 <vcl.h>
#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+"\t";
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+"\n";
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 <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ExtCtrls.hpp>
//---------------------------------------------------------------------------
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]; // Массив для хранения цветов фишек на доске
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.