Разработка игры "Frag the monster"

Дипломная работа - Компьютеры, программирование

Другие дипломы по предмету Компьютеры, программирование



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

ПЕРЕЧЕНЬ ССЫЛОК

1.Бадд Т. Объектно-ориентированное программирование в действии. Питер. 1997.

2.Бондарев В.Н. Основы программирования. - Харьков: "Фолио"; Ростов-на-Дону: "Феникс", 1998. - 368 с.

.Буч Г. Объектно-ориентированное проектирование с примерами применения: Пер с англ.-М.: Конкорд,1992.-519 с.

.Доронина Ю.В. Конспект курса лекций по диiиплине "Объектно-ориентированное программирование".

.Паппас К., Мюррей У. Программирование на С и С++. - Киев: Ирина, BHV, 2000. - 318 с.

.Рейсдорф К., Хендерсон К. Borland C. Освой самостоятельно - М.: "БИНОМ" , 1998 - 704с.

ПРИЛОЖЕНИЕ А

Текст программы FragTheMonster.cpp

#include "stdafx.h"

#include "OOP_KURS.h"

#include "timer.h"*g_DI;// Direct Input*g_KDIDev;// клавиатура= NULL;// приватный контекст устройства GDI hRC = NULL;// постоянный контекст рендеринга

HWND hWnd = NULL; // дескриптор окна

HINSTANCEhInstance;// дескриптор приложения

BYTE buffer[256];// буфер для операций с клавиатурой

boolactive = TRUE; // флаг активности окна, в true по умолчанию

boolfullscreen = TRUE;// флаг режима окна, в полноэкранный по умолчанию

boolfsb;// флаг нажатия клавиши F12

constfloat piover180 = 0.0174532925f;

GLfloatyrot;= 0;= 0;= 0.0f;= 0.0f;// углубление в экранbase;gmf[256];[6];// массив под текстуры[4];*wzs;numwz; mpos;// позиция мыши

int adjust = 5;// корректировка скорости

// прототип функции WndProc

LRESULTCALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

Player player;*enemy[5];enemy_count = 1;weapon;frag_timer = 0, life_timer = 0, game_over = 0, win = 0, start = 0; TimerInit(void)// инициализация таймера

{

memset(&timer, 0, sizeof(timer));// очистка структуры

// проверим доступность высокоточного таймера

// если доступен, то частота таймера будет задана

if (!QueryPerformanceFrequency((LARGE_INTEGER *) &timer.frequency))

{// нет высокоточного таймера

timer.performance_timer = FALSE;// установим флаг высокоточного таймера в ЛОЖЬ

timer.mm_timer_start= timeGetTime();// текущее время из timeGetTime().resolution= 1.0f/1000.0f;// точность равна 0.001f.frequency= 1000;// частота равна 1000.mm_timer_elapsed = timer.mm_timer_start; // прошедшее время равно текущему

} else {

// высокоточный таймер доступен, используем его вместо мультимедийного таймера

// взять текущее время и сохранить его в performance_timer_start

QueryPerformanceCounter((LARGE_INTEGER *) &timer.performance_timer_start);.performance_timer = TRUE; // Установить флаг наличия таймера в TRUE

// вычислить точность таймера, используя частоту.resolution= (float) (((double)1.0f)/((double)timer.frequency));

// присвоить прошедшему времени текущее время.performance_timer_elapsed = timer.performance_timer_start;

}

}TimerGetTime()// взять время в миллисекундах

{

__int64 time;// time содержит 64 бита(timer.performance_timer)// есть высокоточный таймер?

{((LARGE_INTEGER *) &time);//захват текущего значения высокоточного таймера

// вернем текущее время минус начальное время, умноженное на точность и 1000 (для миллисекунд)

return ((float) (time - timer.performance_timer_start) * timer.resolution)*1000.0f;

}

{((float) (timeGetTime() - timer.mm_timer_start) * timer.resolution)*1000.0f;

}

}readstr(FILE *f, char *string)

{(string, 255, f);((string[0] == '/') || (string[0] == '\n'));;

}SetupWorld()

{x, y, z, u, v;numtriangles;*filein;oneline[255];*fnm[4];[0] = "Data/World/sector1.txt";fnm[1] = "Data/World/sector2.txt";fnm[2] = "Data/World/sector3.txt";fnm[3] = "Data/World/sector4.txt";(int i = 0; i < 4; i++)

{= fopen(fnm[i], "rt");(filein, oneline);(oneline, "NUM_TR %d\n", &numtriangles);[i].triangle = new TRIANGLE[numtriangles];[i].numtriangles = numtriangles;(int loop = 0; loop < numtriangles; loop++)

{(filein, oneline);(oneline, "%i\n", &sector[i].triangle[loop].texture);(int vert = 0; vert < 3; vert++)

{(filein, oneline);(oneline, "%f %f %f %f %f %f %f", &x, &y, &z, &u, &v);[i].triangle[loop].vertex[vert].x = x;[i].triangle[loop].vertex[vert].y = y;[i].triangle[loop].vertex[vert].z = z;[i].triangle[loop].vertex[vert].u = u;[i].triangle[loop].vertex[vert].v = v;

}

}(filein);

}= fopen("Data/World/wzones.txt", "rt");(filein, oneline);(oneline, "NUM_P %d\n", &numtriangles);= new WZONE[numtriangles];= numtriangles;(int loop = 0; loop < numtriangles; loop++)

{(filein, oneline);(oneline, "%f %f", &x, &y);[loop].x = x;[loop].y = y;

}(filein);;

}point_in(float x, float y)

{const int q_patt[2][2] = { {0,1}, {3,2} };pred_pt, cur_pt;_pt.x = wzs[numwz-1].x;_pt.y = wzs[numwz-1].y;_pt.x -= x;_pt.y -= y;pred_q = q_patt[pred_pt.y < 0][pred_pt.x < 0];w = 0;(int i = 0; i < numwz; i++)

{_pt.x = wzs[i].x;_pt.y = wzs[i].y;_pt.x -= x;_pt.y -= y;q = q_patt[cur_pt.y < 0][cur_pt.x < 0];(q - pred_q)

{-3:

++w;;3:

-w;;-2:(pred_pt.x * cur_pt.y >= pred_pt.y * cur_pt.x)

++w;;2:(!(pred_pt.x * cur_pt.y >= pred_pt.y * cur_pt.x))

-w;;

}_pt = cur_pt;_q = q;

}w != 0;

}_RGBImageRec * LoadBMP(char *Filename)

{*File=NULL;(!Filename)

{NULL;

}= fopen(Filename, "r");(File)

{(File);auxDIBImageLoadA(Filename);

}NULL;

}LoadGLTextures()

{Status = FALSE;_RGBImageRec *TextureImage[6];(TextureImage, 0, sizeof(void *)*6);((TextureImage[0] = LoadBMP("Data/floor1.bmp")) &&

(TextureImage[1] = LoadBMP("Data/light1.bmp")) &&

(TextureImage[2] = LoadBMP("Data/rustyblue.bmp")) &&

(TextureImage[3] = LoadBMP("Data/weirdbrick.bmp")) &&

(TextureImage[4] = LoadBMP("Data/crate.bmp"))&&

(TextureImage[5] = LoadBMP("Data/weapon.bmp")))

{= TRUE;(6, &texture[0]);(int loop1 = 0; loop1 < 6; loop1++)

{(GL_TEXTURE_2D, texture[loop1]);D(GL_TEXTURE_2D, 0, 3, TextureImage[loop1]->sizeX, TextureImage[loop1]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[loop1]->data);(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

}(int loop1 = 0; loop1 < 6; loop1++)

{(TextureImage[loop1])

{(TextureImage[loop1]->data)

{(TextureImage[loop1]->data);

}(TextureImage[loop1]);

}

}

}[0] = new Enemy();[0]->model = new CMD2Model();[0]->model->LoadModel("Data/Models/Ogr.md2");[0]->model->LoadSkin("Data/Models/Ogr.pcx");[0]->model->SetAnim(STAND);[0]->model->ScaleModel(0.03);[0]->spot();.spot();Status;

}ReSizeGLScene(GLsizei width, GLsizei height)

{(height == 0)

{= 1;

}(0, 0, width, height);(GL_PROJECTION);();(45.0f,(GLfloat)width/(GLfloat)height,0.1f,100.0f);(GL_MODELVIEW);();

}BuildFont(GLvoid)

{font;= glGenLists(256);= CreateFont( -12,0,0,0,FW_BOLD,FALSE,FALSE,FALSE,ANSI_CHARSET,OUT_TT_PRECIS,CLIP_DEFAULT_PRECIS,ANTIALIASED_QUALITY,FF_DONTCARE|DEFAULT_PITCH,(LPCWSTR)L"Arial(hDC, font(hDC,0,256, base, 0.0f, 0.2f, WGL_FONT_POLYGONS, gmf);

}glPrint(float x, float y, float z, const char *fmt, ...)

{length = 0;text[256];_list ap;(fmt == NULL);
va_start(ap, fmt);(text, fmt, ap);_end(ap);(unsigned int loop=0;loop<(strlen(text));loop++)+= gmf[(unsigned char)text[loop]].gmfCe