Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 5296 → Rev 5297

/programs/games/LaserTank/trunk/LaserTank.cpp
8,6 → 8,7
#define MODE_MENU 0
#define MODE_LEVELS 1
#define MODE_GAME 2
#define MODE_PAUSE 4
 
#define GAME_NONE 0
#define GAME_VICTORY 1
84,6 → 85,7
RGBA img_explosion[8064];
RGBA img_gun[576];
RGB img_gamebg[9216];
RGBA img_black[576];
 
RGBA img_number_box[2550];
RGBA img_numbers[3500];
92,10 → 94,15
 
RGB img_levels[147456];
 
RGB img_buttons[3][13053];
 
 
 
Player player;
 
CKosRender* renderPlayer;
CKosImage* objPlayer;
CKosImage* objPlayer1;
 
CKosRender* renderBox;
 
107,6 → 114,8
CKosImage* objGun;
CKosImage* objExplosion;
 
CKosImage* objblack;
 
CKosRender* renderLevels;
CKosImage* objnumber_box;
CKosImage* objnumbers;
157,6 → 166,12
return level[position.Y][position.X].s;
}
 
void SetMode(int mode)
{
gameMode = mode;
draw_window();
}
 
RGB* GetImg(Point position, bool din)
{
switch (GetField(position, din))
575,7 → 590,7
}
level[player.position.Y][player.position.X].s = FIELD_CRATER;
gameStatus = GAME_DEFEAT;
draw_window();
SetMode(MODE_PAUSE);
return;
}
else
779,6 → 794,7
break;
case FIELD_FINISH:
gameStatus = GAME_VICTORY;
SetMode(MODE_PAUSE);
draw_window();
break;
case FIELD_NONE:
833,12 → 849,6
}
}
 
void SetMode(int mode)
{
gameMode = mode;
draw_window();
}
 
void key_press(int key)
{
//rtlDebugOutString(ftoa(key));
892,7 → 902,7
 
break;
case 27:
SetMode(MODE_LEVELS);
SetMode(MODE_PAUSE);
}
break;
}
948,6 → 958,22
}
}
break;
case MODE_PAUSE:
if (CollRecrVsPoint(position, Rect(77, 318, 229, 57)))
SetMode(MODE_LEVELS);
else
if (CollRecrVsPoint(position, Rect(77, 255, 229, 57)))
{
openLevel(levelIndex);
SetMode(MODE_GAME);
}
else
if (gameStatus != GAME_DEFEAT && CollRecrVsPoint(position, Rect(77, 192, 229, 57)))
{
if (gameStatus == GAME_VICTORY)
openLevel(levelIndex + 1);
SetMode(MODE_GAME);
}
case MODE_GAME:
 
break;
1015,29 → 1041,22
}
 
renderLevels->Draw(Point(0, 0));
 
//kos_PutImage((RGB*)img_ground, 24, 24, 100, 100);
break;
case MODE_GAME:
case MODE_PAUSE:
for (int y = 0; y < 4; y++)
for (int x = 0; x < 4; x++)
kos_PutImage((RGB*)img_gamebg, 96, 96, 96 * x, 96 * y);
renderLevels->RenderImg((RGB*)img_gamebg, Point(96 * x, 96 * y), 96, 96);
 
for (int y = 0; y < 16; y++)
for (int x = 0; x < 16; x++)
{
if (level[y][x].s != FIELD_NONE)
kos_PutImage(GetImg(Point(x, y), true), 24, 24, 24 * x, 24 * y);
}
renderLevels->RenderImg(GetImg(Point(x, y), true), Point(24 * x, 24 * y), 24, 24);
 
switch (gameStatus)
{
case GAME_NONE:
renderPlayer->RenderImg(GetImg(player.position, false), Point(0, 0), 24, 24);
objPlayer->Draw(Point(0, 0), player.angle);
renderPlayer->Draw(player.position * 24);
objPlayer1->Draw(player.position * 24, player.angle);
break;
case GAME_VICTORY:
kos_WriteTextToWindow(30, 10, 0x80, 0xFFFFFF, "VICTORY", 0);
1046,8 → 1065,36
kos_WriteTextToWindow(30, 10, 0x80, 0xFFFFFF, "DEFEAT", 0);
break;
}
 
for (int y = 0; y < 16; y++)
for (int x = 0; x < 16; x++)
objblack->Draw(Point(24 * x, 24 * y), 0);
 
if (gameStatus != GAME_DEFEAT)
renderLevels->RenderImg((RGB*)img_buttons[1], Point(77, 192), 229, 57);
renderLevels->RenderImg((RGB*)img_buttons[2], Point(77, 255), 229, 57);
renderLevels->RenderImg((RGB*)img_buttons[0], Point(77, 318), 229, 57);
 
renderLevels->Draw(Point(0, 0));
break;
case MODE_GAME:
for (int y = 0; y < 4; y++)
for (int x = 0; x < 4; x++)
kos_PutImage((RGB*)img_gamebg, 96, 96, 96 * x, 96 * y);
for (int y = 0; y < 16; y++)
for (int x = 0; x < 16; x++)
if (level[y][x].s != FIELD_NONE)
kos_PutImage(GetImg(Point(x, y), true), 24, 24, 24 * x, 24 * y);
 
if(gameStatus != GAME_DEFEAT)
{
renderPlayer->RenderImg(GetImg(player.position, false), Point(0, 0), 24, 24);
objPlayer->Draw(Point(0, 0), player.angle);
renderPlayer->Draw(player.position * 24);
}
break;
}
kos_WindowRedrawStatus(2);
}
 
1188,6 → 1235,11
file->LoadTex((Byte*)img_crater, 3, 24, 24);
file->LoadTex((Byte*)img_black, 4, 24, 24);
 
for (int i = 0; i < 3; ++i)
file->LoadTex((Byte*)img_buttons[i], 3, 229, 57);
 
delete file;
 
renderPlayer = new CKosRender(24, 24);
1212,6 → 1264,8
objExplosion->SetFrameSize(24, 24);
 
renderLevels = new CKosRender(384, 384);
 
objPlayer1 = new CKosImage(renderLevels, (RGBA*)img_tank, 24, 24);
objnumber_box = new CKosImage(renderLevels, (RGBA*)img_number_box, 51, 50);
objnumbers = new CKosImage(renderLevels, (RGBA*)img_numbers, 14, 25);
objnumbers->SetFrameSize(14, 25);
1219,6 → 1273,8
objbutton1 = new CKosImage(renderLevels, (RGBA*)img_button1, 57, 57);
objbutton_arrow = new CKosImage(renderLevels, (RGBA*)img_button_arrow, 25, 15);
 
objblack = new CKosImage(renderLevels, (RGBA*)img_black, 24, 24);
 
LevelsLoad();
 
openLevel(0);
/programs/games/LaserTank/trunk/render.cpp
25,7 → 25,7
for (int y = position.Y; y < position.Y + height; y++)
for (int x = position.X; x < position.X + width; x++)
if (x >= 0 && y >= 0 && x < this->width && y < this->height)
this->buffer[y * width + x] = img[(y - position.Y) * width + (x - position.X)];
this->buffer[y * this->width + x] = img[(y - position.Y) * width + (x - position.X)];
}
 
int CKosRender::getPixel(int x, int y)