Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ит мой курсач.docx
Скачиваний:
9
Добавлен:
31.03.2015
Размер:
136.41 Кб
Скачать

История.

Игра была "придумана" в 1931 году Милтоном Брэдли (Milton Bradley). Точнее "настольная игра" выпущена его компанией как коммерческий продукт. Идея игры пришла во время первой мировой войны, в которой было много морских сражений. Хотя есть данные, что игра существовала в "бумажном" варианте (как мы в школьные годы играли) существенно раньше, еще до Первой мировой войны, и истинный автор неизвестен.

АНАЛИЗ ТЕХНИЧЕСКОГО ЗАДАНИЯ

Запуск программы осуществляется следующим образом: необходимо открыть папку, содержащую данную игру, и найти исполняемый файл. Сначала необходимо указать количество и размер кораблей, при расстановки кораблей используются кнопки мыши (правая- повернуть корабль на 900, левая зафиксировать корабль на поле), затем выбираешь кто стреляет первый и начинаешь играть. При попадании в корабль противника ставиться крестик и закрашиваются клетки в которых не может быть других кораблей. Когда заканчивается игра  открывается поле противника и выводится сообщение о победе или поражении.

Тестинг программы

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

XMP – гибкая платформа метаданных (Extensible Metadata Platform – XMP). Этот формат создан для добавления информации в файл. Формат XMP разработан так, что файл может прочитать любая программа, в том числе не умеющая работать с XMP. XMP используется в PDF, фотографии и редактировании изображений.

БЛОК-СХЕМА ПРОГРАММЫ

ИСХОДНЫЙ ТЕКСТ ПРОГРАММЫ

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "shipsu.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma link "CSPIN"

#pragma resource "*.dfm"

#include "AboutForm.cpp"

//---------------------------------------------------------------------------

TForm1 *Form1;

//-------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------

void __fastcall TForm1::side_x(int x,int y,int a,int b,int c,int d,int f)

{

if ( x>=a )

{

comp.put_bit(x+b,y,3);

}

comp.put_bit(x+c, y,3);

IComp->Canvas->Draw((x+d)*25,y*25,BitMapm);

IComp->Canvas->Draw((x+f)*25,y*25,BitMapm);

}

void __fastcall TForm1::side_y(int x,int y,int a,int b,int c,int d,int g)

{

if ( y>=a )

{

comp.put_bit(x,y+b,3);

}

comp.put_bit(x, y+c, 3);

IComp->Canvas->Draw(x*25,(y+d)*25,BitMapm);

IComp->Canvas->Draw(x*25,(y+g)*25,BitMapm);

}

void __fastcall TForm1::side(int x, int y, int control)

{

int vector_free2_w=0;

int vector_free3_w=0;

int vector_free2_o=0;

int vector_free3_o=0;

int vector_free2_n=0;

int vector_free3_n=0;

int vector_free2_s=0;

int vector_free3_s=0;

int vect_w=0; // для выбора направления по массиву

int vect_n=0; // для выбора направления по массиву

int vect_o=0; // для выбора направления по массиву

int vect_s=0; // для выбора направления по массиву

int vect_1w=0; // для выбора направления по массиву

int vect_1n=0; // для выбора направления по массиву

int vect_1o=0; // для выбора направления по массиву

int vect_1s=0; // для выбора направления по массиву

int vect_2w=0; // для выбора направления по массиву

int vect_2n=0; // для выбора направления по массиву

int vect_2o=0; // для выбора направления по массиву

int vect_2s=0; // для выбора направления по массиву

int array_around[12][2]={{ 0,-1},

{ 0,-2},

{ 0,-3},

{ 0, 1}, // 3 3 3 3 3 3 3 3 3 3

{ 0, 2}, //

{ 0, 3}, // 1 2 * 0 1 2 * 3 3 2 * 0 3 2 * 1 3 2 * 0

{-1, 0}, // 0 3 0 3 0 3 0 3 0 3

{-2, 0}, //

{-3, 0},

{ 1, 0},

{ 2, 0},

{ 3, 0}};

vect_12_wm=0; // 1 max 1

vect_13_wm=0;

vect_14_wm=0;

vect_12_om=0;

vect_13_om=0;

vect_14_om=0;

vect_12_nm=0;

vect_13_nm=0;

vect_14_nm=0;

vect_12_sm=0;

vect_13_sm=0;

vect_14_sm=0;

for ( int i=0;i<12;i++ )

{

if ( comp.show_bit(x+array_around[i][1],y+array_around[i][0])==1 )

{

switch ( i ) //

{

case 0:

vect_12_wm++;

break;

case 1:

vect_13_wm++;

break;

case 2:

vect_14_wm++;

break;

case 3:

vect_12_om++;

break;

case 4:

vect_13_om++;

break;

case 5:

vect_14_om++;

break;

case 6:

vect_12_nm++;

break;

case 7:

vect_13_nm++;

break;

case 8:

vect_14_nm++;

break;

case 9:

vect_12_sm++;

break;

case 10:

vect_13_sm++;

break;

case 11:

vect_14_sm++;

}

}

if ( comp.show_bit(x+array_around[i][1],y+array_around[i][0])==2)

{

switch ( i )

{

case 0:

vect_1w++;

case 1:

vect_2w++;

case 2:

vect_w++;

break;

case 3:

vect_1o++;

case 4:

vect_2o++;

case 5:

vect_o++;

break;

case 6:

vect_1n++;

case 7:

vect_2n++;

case 8:

vect_n++;

break;

case 9:

vect_1s++;

case 10:

vect_2s++;

case 11:

vect_s++;

}

}

//--------------------------------------------------------------------

void __fastcall TForm1::TimerThinkCompTimer(TObject *Sender)

{

count_think++;

IComp->Picture->Assign(BitMap);

for (int x=0;x<10;x++)

{

for (int y=0;y<10;y++)

{

paint_array(x,y);

}

}

comp.next_ship(RadioGroup1->ItemIndex,1);

if (count_think==30) // 50 75

{

if (!Easily1->Checked)

{

comp.next_ship(RadioGroup1->ItemIndex,radar_sensitivity);

}

else

{

comp.next_ship(RadioGroup1->ItemIndex,1);

}

count_think=0;

PIThink->Visible=false;

TimerThinkComp->Enabled=false;

PNowYou->Visible=true;

cover=0;

IComp->Picture->Assign(BitMap);

Kind1->Enabled=true;

}

}

//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)

{

BitMap=new Graphics::TBitmap;

BitMap->Width=250;

BitMap->Height=250;

BitMap->Assign(IComp->Picture);

BitMapl=new Graphics::TBitmap;

BitMapl->Width=250;

BitMapl->Height=250;

BitMapl->Assign(IMan->Picture);

BitMaplr=new Graphics::TBitmap;

BitMaplr->Width=250;

BitMaplr->Height=250;

BitMaplr->Assign(IMan->Picture);

BitMaprr=new Graphics::TBitmap;

BitMaprr->Width=250;

BitMaprr->Height=250;

BitMaprr->Assign(IComp->Picture);

BitMapm=new Graphics::TBitmap;

BitMapm->Width=25;

BitMapm->Height=25;

BitMapm->Assign(Milk->Picture);

BitMapb=new Graphics::TBitmap;

BitMapb->Width=25;

BitMapb->Height=25;

BitMaprs=new Graphics::TBitmap;

BitMaprs->Width=8;

BitMaprs->Height=8;

BitMaprs->Assign(IShip->Picture);

BitMaprz=new Graphics::TBitmap;

BitMaprz->Width=8;

BitMaprz->Height=8;

BitMaprz->Assign(IZero->Picture);

BitMaprc=new Graphics::TBitmap;

BitMaprc->Width=8;

BitMaprc->Height=8;

BitMaprc->Assign(IClose->Picture);

BitMaprf=new Graphics::TBitmap;

BitMaprf->Width=120;

BitMaprf->Height=120;

BitMapw=new Graphics::TBitmap;

BitMapw->Width=25;

BitMapw->Height=25;

BitMapw->Assign(IFold->Picture);

BitMapLm=new Graphics::TBitmap;

BitMapLm->Width=25;

BitMapLm->Height=25;

BitMapLc=new Graphics::TBitmap;

BitMapLc->Width=25;

BitMapLc->Height=25;

IRadarMan->Picture->Assign(IRadarBattle->Picture);

IRadarComp->Picture->Assign(IRadarBattle->Picture);

Screen->Cursors[crMyCursor]=LoadCursor(HInstance,"TARGET");

Screen->Cursors[crMyCursorh]=LoadCursor(HInstance,"HOOK");

IMan->Cursor=(TCursor)crMyCursorh;

IComp->Cursor=(TCursor)crMyCursor;

srand(time(0));

}

//--------------------------------------------------------------------

void __fastcall TForm1::FormDestroy(TObject *Sender)

{

BitMap->Free();

BitMapl->Free();

BitMaplr->Free();

BitMaprr->Free();

BitMapm->Free();

BitMapb->Free();

BitMaprs->Free();

BitMaprz->Free();

BitMaprc->Free();

BitMapw->Free();

BitMapLm->Free();

BitMapLc->Free();

Application->HelpCommand(HELP_QUIT,0);

}

//---------------------------------------------------------------------------

void __fastcall TForm1::paint_array(int x, int y)

{

if (comp.show_bit(x,y)==1||comp.show_bit(x,y)==2) //comp

{

if (School1->Checked)

{

IComp->Canvas->Pen->Width=3;

IComp->Canvas->Pen->Color=clNavy;

IComp->Canvas->Brush->Color=clGray;

IComp->Canvas->Rectangle(x*25+1,y*25+1,x*25+25-1,y*25+25-1);

}

else if (Windows1->Checked)

IComp->Canvas->Draw(x*25,y*25,BitMapw);

else

{

IComp->Canvas->Brush->Color = clTeal;

IComp->Canvas->Pen->Color = clTeal;

IComp->Canvas->Rectangle(x*25,y*25,x*25+25,y*25+25 );

}

}

}

void __fastcall TForm1::Exit1Click(TObject *Sender)

{

Close();

}

//--------------------------------------------------------------------

void __fastcall TForm1::IManMouseDown(TObject *Sender,

TMouseButton Button, TShiftState Shift, int X, int Y)

{

if (PNowYou->Visible&&(count_sh-cover)) //||!PMyShoot->Visible)

{

IMan->Picture->Assign(BitMapl);

if (Button==mbRight)

switch(vector)

{

case 0:

vector=1;

shift_X=0;

switch(fign[cover])

{

case 1:

if (X>224)

shift_Y=-3;

else if (Y>199)

shift_Y=-2;

else if (Y>174)

shift_Y=-1;

break;

case 2:

if (Y>224)

shift_Y=-2;

else if (Y>199)

shift_Y=-1;

break;

case 3:

if (Y>224)

shift_Y=-1;

break;

case 4:

shift_Y=0;

break;

}

{

case 1:

mouse_down_right_y(X,Y,174,100,150);

break;

case 2:

mouse_down_right_y(X,Y,199,75,175);

break;

case 3:

mouse_down_right_y(X,Y,224,50,200);

break;

case 4:

if (Windows1->Checked)

{

IMan->Canvas->Draw(X/25*25,Y/25*25,BitMapw);

}

switch(fign[cover])

{

case 1:

mouse_down_right_x(X,Y,174,100,150);

break;

case 2:

mouse_down_right_x(X,Y,199,75,175);

break;

case 3:

mouse_down_right_x(X,Y,224,50,200);

break;

case 4:

if (Windows1->Checked)

{

IMan->Canvas->Draw(X/25*25,Y/25*25,BitMapw);

}

else

{

IMan->Picture->Assign(BitMapl);

choice_coclour();

IMan->Canvas->Rectangle(X/25*25,Y/25*25,X/25*25+25,Y/25*25+25 );

}

break;

}

break;

}

}

else if (Button == mbLeft)

{

if (!man.control(X/25+shift_X, Y/25+shift_Y, vector, fign[cover],1)) // not 2,1 !!!

{

switch(vector)

{

case 0:

switch(fign[cover])

{

case 1:

mouse_down_left_0(X,Y,100,1);

break;

case 2:

mouse_down_left_0(X,Y,75,2);

break;

case 3:

mouse_down_left_0(X,Y,50,3);

break;

case 4:

mouse_down_left_0(X,Y,25,4);

break;

}

break;

case 1:

switch(fign[cover])

{

case 1:

mouse_down_left_1(X,Y,100,1);

break;

case 2:

mouse_down_left_1(X,Y,75,2);

break;

case 3:

mouse_down_left_1(X,Y,50,3);

break;

case 4:

mouse_down_left_1(X,Y,25,4);

break;

}

break;

}

if (cover==count_sh-1)

{

BitMapl->Assign(IMan->Picture); // if not shape!!!

BOkFull->Visible=true;

last_ship[0]=X/25+shift_X;

last_ship[1]=Y/25+shift_Y;

last_ship[2]=vector;

last_ship[3]=5-fign[cover];

BDelLastShip->Visible=true;

cover++;

}

}

//---------------------------------------------------------------------------

void __fastcall TForm1::ICompMouseDown(TObject *Sender,

TMouseButton Button, TShiftState Shift, int X, int Y)

{

if (!TimerMachine->Enabled&&!ButtonChoiceScheme->Visible&&

!ButtonOwnScheme->Visible&&!PIThink->Visible&&!PNowYou->Visible&&

!PBegin->Visible&&!TimerAroundBrok->Enabled&&!BHideMap->Visible&&

!TimerTrassa->Enabled&&!TimerGo->Enabled&&!PWin->Visible&&

!TimerFlash->Enabled&&!TimerStart->Enabled&&!TimerRestart->Enabled)

{

int sum_brok=0;

left_right=1;

LastShoot1->Enabled=false;

switch (comp.show_bit(X/25,Y/25))

{

case 0:

result=0;

right_x=X/25;

right_y=Y/25;

comp.put_bit(right_x,right_y,3);

side(X/25,Y/25,0);

shoot_man++;

covered_man++;

need_man=0;

if (English1->Checked)

{

PManShoots->Caption="Shoots: "+IntToStr(shoot_man);

PManCovered->Caption="Covered: "+IntToStr(covered_man)+" % ";

}

else

{

PManShoots->Caption="Выстрелы: "+IntToStr(shoot_man);

PManCovered->Caption="Накрыто: "+IntToStr(covered_man)+" % ";

}

TimerAroundBrok->Enabled=true;

Kind1->Enabled=false;

break;

case 1:

LastShoot1->Enabled=true;

result=1;

right_x=X/25;

right_y=Y/25;

comp.put_bit(right_x,right_y,2);

side(X/25,Y/25,1);

review(X/25,Y/25);

shoot_man++;

covered_man=0;

for (int i=0;i<10;i++)

{

for (int j=0;j<10;j++)

{

if (comp.show_bit(i,j)==2)

{

covered_man++;

sum_brok++;

}

if (comp.show_bit(i,j)==3)

{

covered_man++;

}

}

}

need_man=1;

if (English1->Checked)

{

PManShoots->Caption="Shoots: "+IntToStr(shoot_man);

PManCovered->Caption="Covered: "+IntToStr(covered_man)+" % ";

}

else

{

PManShoots->Caption="Выстрелы: "+IntToStr(shoot_man);

PManCovered->Caption="Накрыто: "+IntToStr(covered_man)+" % ";

}

switch(count-sum_brok)

{

case 0:

Image56->Picture->Assign(IRed->Picture);

case 1:

Image55->Picture->Assign(IRed->Picture);

case 2:

Image54->Picture->Assign(IRed->Picture);

case 3:

Image53->Picture->Assign(IRed->Picture);

case 4:

Image52->Picture->Assign(IRed->Picture);

case 5:

Image51->Picture->Assign(IRed->Picture);

case 6:

Image50->Picture->Assign(IRed->Picture);

case 7:

Image49->Picture->Assign(IRed->Picture);

case 8:

Image48->Picture->Assign(IRed->Picture);

case 9:

Image47->Picture->Assign(IRed->Picture);

case 10:

Image46->Picture->Assign(IRed->Picture);

case 11:

Image45->Picture->Assign(IRed->Picture);

case 12:

Image44->Picture->Assign(IRed->Picture);

case 13:

Image43->Picture->Assign(IRed->Picture);

case 14:

Image42->Picture->Assign(IRed->Picture);

case 15:

Image41->Picture->Assign(IRed->Picture);

case 16:

Image40->Picture->Assign(IRed->Picture);

case 17:

Image39->Picture->Assign(IRed->Picture);

case 18:

Image38->Picture->Assign(IRed->Picture);

case 19:

Image37->Picture->Assign(IRed->Picture);

case 20:

Image36->Picture->Assign(IRed->Picture);

case 21:

Image35->Picture->Assign(IRed->Picture);

case 22:

Image34->Picture->Assign(IRed->Picture);

case 23:

Image33->Picture->Assign(IRed->Picture);

case 24:

Image32->Picture->Assign(IRed->Picture);

case 25:

Image31->Picture->Assign(IRed->Picture);

case 26:

Image30->Picture->Assign(IRed->Picture);

case 27:

Image29->Picture->Assign(IRed->Picture);

}

TimerAroundBrok->Enabled=true;

Kind1->Enabled=false;

break;

case 2:

case 3:

LastShoot1->Enabled=true;

}

}

}

//---------------------------------------------------------------------------

void __fastcall TForm1::marker_move(int x, int y)

{

IMan->Picture->Assign(BitMapl);

IMan->Canvas->Pen->Width=2;

IMan->Canvas->Pen->Mode=pmMergeNotPen;

IMan->Canvas->Ellipse(x-3,y-3,x+29,y+29);

IMan->Canvas->Pen->Width=1;

IMan->Canvas->Rectangle(x+12,y+12,x+14,y+14);

IMan->Canvas->Rectangle(x+12,y+6,x+14,y+9); //n

IMan->Canvas->Rectangle(x+12,y,x+14,y+4); //u

IMan->Canvas->Rectangle(x+12,y+16,x+14,y+19); //s

IMan->Canvas->Rectangle(x+12,y+21,x+14,y+25); //d

IMan->Canvas->Rectangle(x+6,y+12,x+9,y+14); //w

IMan->Canvas->Rectangle(x,y+12,x+4,y+14); //l

IMan->Canvas->Rectangle(x+16,y+12,x+19,y+14); //o

IMan->Canvas->Rectangle(x+21,y+12,x+25,y+14); //r

}

//--------------------------------------------------------------------

void __fastcall TForm1::TimerMachineTimer(TObject *Sender)

{

static int step_x;

static int step_y;

static int add_x_or_y;

int arr_tired[198]={0};

if (first==0&&tired_x<0)

{

first=1;

for (int i=0;i<10;i++)

{

for (int j=0;j<10;j++)

{

if (man.show_bit(i,j)==0||man.show_bit(i,j)==1)

{

arr_tired[tired*2]=i;

arr_tired[tired*2+1]=j;

tired++;

}

}

}

tired=(rand()%tired)*2;

step_x=arr_tired[tired];

step_y=arr_tired[tired+1];

tired=0;

PMyShoot->Visible=true;

PYourShoot->Visible=false;

marker_move(step_x*25,step_y*25);

}

else

{

if (tired_x<0)

{

count_mach++;

if (!(count_mach%2)&&!ms)

{

int step=rand()%100;

if (step<25)

{

if (step_x>0)

{

step_x--;

add_x_or_y=2;

}

else

{

step_x++;

add_x_or_y=1;

}

}

else if (step<50)

{

if (step_x<9)

{

step_x++;

add_x_or_y=1;

}

else

{

step_x--;

add_x_or_y=2;

}

}

else if (step<75)

{

if (step_y>0)

{

step_y--;

add_x_or_y=4;

}

else

{

step_y++;

add_x_or_y=3;

}

}

else

{

if (step_y<9)

{

step_y++;

add_x_or_y=3;

}

else

{

step_y--;

add_x_or_y=4;

}

}

}

if (count_mach%2)

{

marker_move(step_x*25,step_y*25);

}

else

{

count_mach--;

ms++;

if (ms>3)

{

count_mach++;

ms=0;

}

else

{

switch(add_x_or_y)

{

case 1:

marker_move(step_x*25-(24-6*ms),step_y*25);

break;

case 2:

marker_move(step_x*25+(24-6*ms),step_y*25);

break;

case 3:

marker_move(step_x*25,step_y*25-(24-6*ms));

break;

case 4:

marker_move(step_x*25,step_y*25+(24-6*ms));

break;

}

}

}

}

else

{

tired=0;

count_mach=19;

tired_x=-1;

step_x=need_x;

step_y=need_y;

PYourShoot->Visible=false;

PMyShoot->Visible=true;

}

if (count_mach==19) //20

{

left_right=0;

if (man.show_bit_deep(step_x,step_y)==1&&man.show_bit(step_x,step_y)!=1)

{

write_read_arr_tired(arr_tired);

}

else

{

switch (man.show_bit(step_x,step_y))

{

case 0:

tired=0;

result=0;

man.put_bit(step_x,step_y,3);

IMan->Picture->Assign(BitMapl);

mside(step_x,step_y,0);

first=0;

count_mach=0;

brok_milk(step_x,step_y);

if (radar_sensitivity&&Heavily1->Checked)

{

switch (radar_sensitivity)

{

case 3:

write_deep(step_x,step_y,3);

break;

case 2:

write_deep(step_x,step_y,2);

break;

case 1:

write_deep(step_x,step_y,1);

break;

}

}

PMyShoot->Visible=false;

PYourShoot->Visible=true;

break;

case 1:

need=1;

tired=0;

result=1;

man.put_bit(step_x,step_y,2);

//---------------------------------------------------------------------------

void __fastcall TForm1::BNemoClick(TObject *Sender)

{

begin_move();

PYourShoot->Visible=true;

}

//---------------------------------------------------------------------------

void __fastcall TForm1::BMachineClick(TObject *Sender)

{

begin_move();

PMyShoot->Visible=true;

TimerMachine->Enabled=true;

}

//---------------------------------------------------------------------------

void __fastcall TForm1::TimerAroundBrokTimer(TObject *Sender)

{

if (!repeat)

{

case 0:

switch(repeat)

{

case 0:

{

explotion(1);

}

if (School1->Checked)

BitMapb->Assign(IMS1->Picture);

else if (Windows1->Checked)

BitMapb->Assign(IRecy1->Picture);

else

BitMapb->Assign(Milk01->Picture);

break;

}

repeat++;

if (left_right==0)

{

IMan->Canvas->Draw(need_x*25,need_y*25,BitMapb); // */

last_x_show=need_x;

last_y_show=need_y;

}

else

IComp->Canvas->Draw(right_x*25,right_y*25,BitMapb); // */

BitMapl->Assign(IMan->Picture); // if not shape!!!

if (repeat==10)

{

repeat=0;

NewGame1->Enabled=true;

TimerAroundBrok->Enabled=false;

Kind1->Enabled=true;

if (left_right==0)

}

switch(result)

{

case 0:

if (need==1)

{

need_x=last_x;

need_y=last_y;

}

if (side_x_y==1)

{

side_x_y=0;

need=0;

int game_end=0; //0;

for (int i=0;i<10;i++)

{

for (int j=0;j<10;j++)

{

if (man.show_bit(i,j)==1)

game_end=1;

}

}

if (!game_end)

end_game(1);

else

{

if (!RadarOFF1->Checked&&set_radar)

{

need=1;

serch_near_target();

}

else

{

TimerMachine->Enabled=true;

Kind1->Enabled=false;

}

}

}

else

{

serch_near_target();

}

break;

}

}

else

{

int game_end=0;

if (result==0)

{

TimerMachine->Enabled=true;

Kind1->Enabled=false;

}

else

{

for (int i=0;i<10;i++)

{

for (int j=0;j<10;j++)

{

if (comp.show_bit(i,j)==1)

game_end=1;

}

}

if (!game_end)

end_game(0);

}

if (need_man==0&&need==1)

serch_near_target();

}

}

if (tired_x==0) //&&need==0)

{

TimerMachine->Enabled=false;

TimerGo->Enabled=true;

Kind1->Enabled=false;

}

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Example1Click(TObject *Sender)

{

if (BHideExample->Visible)

{

Kind1->Enabled=true;

ButtonChoiceScheme->Enabled=true;

BHideExample->Visible=false;

IMan->Canvas->Draw(0,0,BitMapl);

cover=0;

count=0;

count_sh=0;

vector=1;

for ( int i=0;i<16;i++ )

{

fign[i]=0;

}

for (int x=0;x<10;x++)

{

for (int y=0;y<10;y++)

{

man.put_bit(x,y,0);

}

}

}

else

{

Kind1->Enabled=false;

switch (RadioGroup1->ItemIndex)

{

case 0:

count=20;

count_sh=10;

break;

case 1:

count=25;

count_sh=9;

break;

case 2:

count=20;

count_sh=12;

break;

case 3:

count=20;

count_sh=10;

RadioGroup1->ItemIndex=0;

break;

}

ButtonChoiceScheme->Enabled=false;

BHideExample->Visible=true;

man.next_ship(RadioGroup1->ItemIndex,1);

show_example();

}

}

//---------------------------------------------------------------------------

void __fastcall TForm1::BHideExampleClick(TObject *Sender)

{

Kind1->Enabled=true;

ButtonChoiceScheme->Enabled=true;

BHideExample->Visible=false;

IMan->Canvas->Draw(0,0,BitMapl);

cover=0;

count=0;

count_sh=0;

vector=1;

for ( int i=0;i<16;i++ )

{

fign[i]=0;

}

for (int x=0;x<10;x++)

{

for (int y=0;y<10;y++)

{

man.put_bit(x,y,0);

}

}

}

//---------------------------------------------------------------------------

void __fastcall TForm1::ShowMap1Click(TObject *Sender)

{

if (BHideMap->Visible)

{

Kind1->Enabled=true;

IComp->Picture->Assign(BitMap);

BHideMap->Visible=false;

PCompCovered->Visible=true;

PCompShoots->Visible=true;

BCompResults->Visible=true;

}

else

{

con_man=1;

Kind1->Enabled=false;

BHideMap->Visible=true;

PCompCovered->Visible=false;

PCompShoots->Visible=false;

BCompResults->Visible=false;

BitMap->Assign(IComp->Picture);

if (School1->Checked)

IComp->Picture->Assign(ISchool->Picture);

else if (Windows1->Checked)

IComp->Picture->Assign(IWindows->Picture);

else

IComp->Picture->Assign(BitMaprr);

for (int x=0;x<10;x++)

{

for (int y=0;y<10;y++)

{

paint_array(x,y);

}

}

}

}

//---------------------------------------------------------------------------

void __fastcall TForm1::BHideMapClick(TObject *Sender)

{

Kind1->Enabled=true;

IComp->Picture->Assign(BitMap);

BHideMap->Visible=false;

PCompCovered->Visible=true;

PCompShoots->Visible=true;

BCompResults->Visible=true;

}

//---------------------------------------------------------------------------

void __fastcall TForm1::brok_milk(int x, int y)

{

need_x=x;

need_y=y;

shoot_comp++;

covered_comp=0;

for (int i=0;i<10;i++)

{

for (int j=0;j<10;j++)

{

if (man.show_bit(i,j)==2)

{

covered_comp++;

}

if (man.show_bit(i,j)==3)

{

covered_comp++;

}

}

}

if (English1->Checked)

{

PCompShoots->Caption="Shoots: "+IntToStr(shoot_comp);

PCompCovered->Caption="Covered: "+IntToStr(covered_comp)+" % ";

}

else

{

PCompShoots->Caption="Выстрелы: "+IntToStr(shoot_comp);

PCompCovered->Caption="Накрыто: "+IntToStr(covered_comp)+" % ";

}

TimerMachine->Enabled=false;

TimerAroundBrok->Enabled=true;

Kind1->Enabled=false;

}

//--------------------------------------------------------------------------

void __fastcall TForm1::end_game(int man_com)

{

if(man_com)

{

for (int i=0;i<10;i++)

{

for (int j=0;j<10;j++)

{

if (comp.show_bit(i,j)==1)

{

if (School1->Checked)

{

IComp->Canvas->Pen->Width=3;

IComp->Canvas->Pen->Color=clBlue; //Navy;

IComp->Canvas->Brush->Color=clGray;

IComp->Canvas->Rectangle(i*25+1,j*25+1,i*25+25-1,j*25+25-1);

}

else if (Windows1->Checked)

IComp->Canvas->Draw(i*25,j*25,BitMapw);

else

{

IComp->Canvas->Brush->Color = clTeal;

IComp->Canvas->Pen->Color = clTeal;

IComp->Canvas->Rectangle(i*25,j*25,i*25+25,j*25+25);

}

}

}

}

PWin->Visible=true;

Win->Caption="Я Выиграл!!!";

PMyShoot->Visible= false;

Language1->Enabled=false;

Kind1->Enabled=false;

OwnMap1->Enabled=false;

ShowMap1->Enabled=false;

count_man_com(1);

}

else

{

if (Show1->Enabled)

{

for (int i=0;i<10;i++)

{

for (int j=0;j<10;j++)

{

if (man.show_bit(i,j)==1)

{

if (School1->Checked)

{

IMan->Canvas->Pen->Width=3;

IMan->Canvas->Pen->Color=clBlue; //Navy;

IMan->Canvas->Brush->Color=clGray;

IMan->Canvas->Rectangle(i*25+1,j*25+1,i*25+25-1,j*25+25-1);

}

else if (Windows1->Checked)

IMan->Canvas->Draw(i*25,j*25,BitMapw);

else

{

IMan->Canvas->Brush->Color = clTeal;

IMan->Canvas->Pen->Color = clTeal;

IMan->Canvas->Rectangle(i*25,j*25,i*25+25,j*25+25);

}

}

}

}

}

PWin->Visible=true;

if (con_man)

{

else

PWin->Caption="Вы Выиграли!!!";

count_man_com(0);

}

PYourShoot->Visible=false;

Language1->Enabled=false;

Kind1->Enabled=false;

OwnMap1->Enabled=false;

ShowMap1->Enabled=false;

}

PWont->Visible=true;

BYes->Visible=true;

BNo->Visible=true;

}

//---------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "AboutForm.h"

//---------------------------------------------------------------------

#pragma resource "*.dfm"

TAboutBox *AboutBox;

//---------------------------------------------------------------------

__fastcall TAboutBox::TAboutBox(TComponent* AOwner)

: TForm(AOwner)

{

}

//---------------------------------------------------------------------

void __fastcall TAboutBox::OKButtonClick(TObject *Sender)

{

Timer1->Enabled=false;

AboutBox->Hide();

}

//---------------------------------------------------------------------------

void __fastcall TAboutBox::Timer1Timer(TObject *Sender)

{

static int animation;

switch (animation)

{

case 0:

Image1->Show();

Image2->Hide();

break;

case 1:

Image2->Show();

Image1->Hide();

break;

case 2:

Image3->Show();

Image2->Hide();

break;

case 3:

Image4->Show();

Image3->Hide();

break;

case 4:

Image5->Show();

Image4->Hide();

break;

case 5:

Image6->Show();

Image5->Hide();

break;

animation=-1;

break;

}

animation++;

}

//---------------------------------------------------------------------------

Заключение

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

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

  1. Создание приложений на GTK+ с использованием среды Glade

  2. Krause, A. Foundations of GTK+ Development. Apress, 2007.

  3. Мэтью Н., Стоунс Р. Основы программирования в Linux: 4-е издание. С-Пб: БХВ-Петербург, 2009. – 896 с.

  4. Руководство GTK+ 2.0

  5. Примеры использования Cairo

  6. Краткое руководство по Cairo

  7. Кроссплатформенный анимированный осциллограф на GTK+

  8. М. Эллис, Б. Строуструп. Справочное руководство по языку C++ с комментариями: Пер. с англ. - Москва: Мир, 1992. 445с.

  9. Стенли Б. Липпман. C++ для начинающих: Пер. с англ. 2тт. - Москва: Унитех; Рязань: Гэлион, 1992, 304-345сс.

  10. Бруно Бабэ. Просто и ясно о Visual C++: Пер. с англ. - Москва: БИНОМ, 1994. 400с.