Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсач - фишки.doc
Скачиваний:
4
Добавлен:
26.09.2019
Размер:
129.54 Кб
Скачать

Министерство образования и науки РФ

Новосибирский государственный технический университет

Кафедра Автоматики Курсовая работа

по дисциплине программирование

Группа: АА-86

Студент: Сапрыкин О.Н.

Проверил:

Ханин А.Г.

Новосибирск

2010

Курсовой проект

Проекты обязаны быть реализованы с использованием классов или готовых пакетов, построенных на основе объектно-ориентированного программирования. В зависимости от техники, к которой имеется доступ, в качестве таких пакетов могут быть использованы TVISION для Borland C++, Object Windows Library 1.0 или Object Windows Library 2.0 для Borland C++ или Visual C++ 6.0. Программа может выполнять любые функции, но студенты должны показать в ней умение пользоваться достаточно сложными библиотеками классов. В качестве таких программ могут быть предложены различные игры,

Объем программ должен быть таким, чтобы можно было показать овладение технологией объектно-ориентированного программирования, умение использовать библиотеки классов. Объем работы не ограничен сверху и определяется способностями и возможностями студентов по использованию вычислительной техники.

Примерные задания на курсовое проектирование.

    1. Разработать графическую игру.

    2. Разработать пользовательский интерфейс к файловой системе, включая манипулирование, просмотр и редактирование текстовых файлов.

    3. Разработать программу визуализации табличных данных.

    4. Разработать HTML-редактор с подсветкой тегов.

    5. Разработать редактор электронных таблиц.

    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]; // Массив для хранения цветов фишек на доске.

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 <vcl.h>

#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;

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]