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

Заключение

Для курсового проекта мною был разработан упрощенный вариант игры «Морской бой» Основной задачей при программировании игр является создание искусственного интеллекта, чтобы пользователь смог играть против компьютера. Игры бывают разные, и искусственный интеллект у каждой игры индивидуальный. Для игры «Морской бой» главной задачей искусственного интеллекта является «стрельба по ячейкам», и отбрасывание заранее неправильных выстрелов (ячейка рядом с кораблем обязательно должна быть пустая).

Созданная мной игра является одной из самых примитивных, но в процессе ее разработки, я смог больше узнать о базовых концепциях программирования приложений под операционную систему Windows.

Программирование игр – довольно сложный процесс, и самая большая сложность заключается в том, чтобы запрограммировать компьютер на различные ответные реакции на действия со стороны пользователя. Тем не менее это довольно увлекательный процесс. Для начала надо на бумаге попытаться написать некий алгоритм действий, который будет выполняться в игре, а затем уже пробовать этот алгоритм изобразить в виде кода.

Библиографический список

  1. Интернет-ресурсы

- http://www.myrobot.ru/stepbystep/pr_introduction.php

- http://www.intuit.ru/department/pl/cpp/1/1.html

- http://it.kgsu.ru/C_OWL/c_owl001.html

Приложение А

Листинг проекта «Морской бой»

#include <owl\applicat.h>

#include <owl\framewin.h>

#include <owl\dc.h>

//=====================================================

class SeaBattle: public TFrameWindow

{

public:

SeaBattle(const char*);

private:

BOOL start_game; // TRUE - игра начата

int you[5][5], comp[5][5];

protected:

void Paint(TDC&, BOOL, TRect&);

void SetupWindow() {TFrameWindow::SetupWindow();}

void EvLButtonDown(UINT, TPoint&);

void EvRButtonDown(UINT, TPoint&);

void SetField(int [][5]);

int Status(int[][5]);

void War(int, int);

int Tactics();

int Battle(int, int);

DECLARE_RESPONSE_TABLE(SeaBattle);

};

DEFINE_RESPONSE_TABLE1(SeaBattle, TFrameWindow)

EV_WM_LBUTTONDOWN,

EV_WM_RBUTTONDOWN,

END_RESPONSE_TABLE;

//=====================================================

SeaBattle::SeaBattle(const char* title): //конструктор

TFrameWindow(0,title,0), TWindow(0,title)

{

Attr.X = 60;

Attr.Y = 60;

Attr.W = 370;

Attr.H = 215;

SetField(comp);

SetField(you);

start_game=true;

}

//=====================================================

void

SeaBattle::EvLButtonDown(UINT,TPoint& point)

{

if(start_game)

if ((point.x>=190)&&(point.x<=340)&&(point.y>=20)&&(point.y<=170))

{int i, j;

for(j=0; j<5; j++) if((point.x>190+30*j)&&(point.x<190+30*(j+1))) break;

for(i=0; i<5; i++) if((point.y>20+30*i)&&(point.y<20+30*(i+1))) break;

if (i<5 && j<5) War(i,j);

}

}

//=====================================================

void

SeaBattle::EvRButtonDown(UINT,TPoint&)

{

SetField(comp);

SetField(you);

start_game=true;

Invalidate();

UpdateWindow();

}

//=====================================================

void

SeaBattle::War(int i, int j)

{

int you_war = Battle(i,j);

if (Status(comp)==0)

{start_game=false;

Invalidate();

MessageBox("Вы победили","You have won",MB_OK|MB_ICONINFORMATION);

}

if (you_war==0 && start_game)

{int war;

do {war = Tactics();

if (Status(you)==0)

{start_game=false;

Invalidate();

MessageBox("Вы проиграли","You lost, Baby",MB_OK|MB_ICONINFORMATION);

}

}

while (Status(comp)>0&&Status(you)>0&&war==1);

}

}

//=====================================================

void

SeaBattle::SetField(int matr[5][5])

{

int i, j, label;

for (int sch1=0; sch1<5; sch1++)

for (int sch2=0; sch2<5; sch2++) matr[sch1][sch2]=0;

for(int colich=0; colich<4; colich++)

{do{label=0;

i=random(5);

j=random(5);

for (int sch1=i-1; sch1<=i+1; sch1++)

for (int sch2=j-1; sch2<=j+1; sch2++)

if (sch1>=0&&sch1<5&&sch2>=0&&sch2<5&&matr[sch1][sch2]==1) label++;

}

while (label>0);

matr[i][j]=1;

}

}

//=====================================================

int

SeaBattle::Battle(int i, int j)

{

if (comp[i][j]==0) // мимо

{comp[i][j]=3;

InvalidateRect(TRect(190+30*j,20+30*i,190+30*(j+1),20+30*(i+1)));

UpdateWindow();

return 0;}

else

if (comp[i][j]==1) // убит

{comp[i][j]=2;

InvalidateRect(TRect(190+30*j,20+30*i,190+30*(j+1),20+30*(i+1)));

UpdateWindow();

return 1;}

return 2;

}

//=====================================================

int

SeaBattle::Tactics()

{

int label=0, ri, rj, i, j;

do {i=random(5); j=random(5);

label=0;

for (ri=i-1; ri<=i+1; ri++)

for (rj=j-1; rj<=j+1; rj++)

if(ri>=0 && ri<5 && rj>=0 && rj<5 && you[ri][rj]==2) label++;}

while (you[i][j]>1 || label>0);

if (you[i][j]==0) // мимо

{you[i][j]=3;

InvalidateRect(TRect(20+30*j,20+30*i,20+30*(j+1),20+30*(i+1)));

UpdateWindow();

return 0;

}

else

if (you[i][j]==1) // убит

{you[i][j]=2;

InvalidateRect(TRect(20+30*j,20+30*i,20+30*(j+1),20+30*(i+1)));

UpdateWindow();

return 1;

}

return 2;

}

//=====================================================

int

SeaBattle::Status(int m[5][5])

{

int colich = 0;

for(int a=0; a<5; a++) for(int b=0; b<5; b++) if (m[a][b]==1) colich++;

return colich;

}

//=====================================================

void

SeaBattle::Paint(TDC& dc, BOOL, TRect&)

{

TPen pen(TColor::Black,1); //цвет сетки

TBrush brush1(TColor::Gray); //цвет целого корабля

TBrush brush2(TColor::LtRed); //цвет убитого корабля

TBrush brush3(TColor::LtBlue); //цвет точки (мимо)

dc.SelectObject(pen);

for (int ver=0; ver<=5; ver++)

{dc.MoveTo(20,20+ver*30); dc.LineTo(170,20+ver*30);

dc.MoveTo(190,20+ver*30); dc.LineTo(340,20+ver*30);

}

for (int hor=0; hor<=5; hor++)

{dc.MoveTo(20+hor*30,20); dc.LineTo(20+hor*30,170);

dc.MoveTo(190+hor*30,20); dc.LineTo(190+hor*30,170);

}

dc.RestorePen();

TPoint a,b;

int sch1,sch2;

for (sch1=0; sch1<5; sch1++)

for (sch2=0; sch2<5; sch2++)

{a.x=20+30*sch2;

a.y=20+30*sch1;

b=a; b.Offset(30,30);

if (you[sch1][sch2]==1)

{dc.SelectObject(brush1);

dc.Rectangle(a,b);

dc.RestoreBrush();

}

if (you[sch1][sch2]==2)

{dc.SelectObject(brush2);

dc.Rectangle(a,b);

dc.RestoreBrush();

}

if (you[sch1][sch2]==3)

{dc.SelectObject(brush3);

dc.Ellipse(a.x+11,a.y+11,b.x-10,b.y-10);

dc.RestoreBrush();

}

}

for (sch1=0; sch1<5; sch1++)

for (sch2=0; sch2<5; sch2++)

{a.x=190+30*sch2;

a.y=20+30*sch1;

b=a; b.Offset(30,30);

if (comp[sch1][sch2]==1 && !Status(you))

{dc.SelectObject(brush1);

dc.Rectangle(a,b);

dc.RestoreBrush();

}

if (comp[sch1][sch2]==2)

{dc.SelectObject(brush2);

dc.Rectangle(a,b);

dc.RestoreBrush();

}

if (comp[sch1][sch2]==3)

{dc.SelectObject(brush3);

dc.Ellipse(a.x+11,a.y+11,b.x-10,b.y-10);

dc.RestoreBrush();

}

}

}

//=====================================================

//=====================================================

class SeaBattleApplication: public TApplication

{

public:

SeaBattleApplication():TApplication(){}

void InitMainWindow() {MainWindow = new SeaBattle("Морской бой");}

};

//=====================================================

int OwlMain(int, char *[])

{

SeaBattleApplication app;

return app.Run();

}

18

Тут вы можете оставить комментарий к выбранному абзацу или сообщить об ошибке.

Оставленные комментарии видны всем.