Subversion Repositories Kolibri OS

Rev

Rev 5296 | Rev 5331 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 5296 Rev 5297
Line 6... Line 6...
6
#include "image.h"
6
#include "image.h"
Line 7... Line 7...
7
 
7
 
8
#define MODE_MENU		0
8
#define MODE_MENU		0
9
#define MODE_LEVELS		1
9
#define MODE_LEVELS		1
-
 
10
#define MODE_GAME		2
Line 10... Line 11...
10
#define MODE_GAME		2
11
#define MODE_PAUSE		4
11
 
12
 
12
#define GAME_NONE		0
13
#define GAME_NONE		0
Line 82... Line 83...
82
RGB img_brick1[576];
83
RGB img_brick1[576];
83
RGB img_menu[147456];
84
RGB img_menu[147456];
84
RGBA img_explosion[8064];
85
RGBA img_explosion[8064];
85
RGBA img_gun[576];
86
RGBA img_gun[576];
86
RGB img_gamebg[9216];
87
RGB img_gamebg[9216];
-
 
88
RGBA img_black[576];
Line 87... Line 89...
87
 
89
 
88
RGBA img_number_box[2550];
90
RGBA img_number_box[2550];
89
RGBA img_numbers[3500];
91
RGBA img_numbers[3500];
90
RGBA img_button1[3249];
92
RGBA img_button1[3249];
Line 91... Line 93...
91
RGBA img_button_arrow[375];
93
RGBA img_button_arrow[375];
Line -... Line 94...
-
 
94
 
-
 
95
RGB img_levels[147456];
-
 
96
 
-
 
97
RGB img_buttons[3][13053];
92
 
98
 
Line 93... Line 99...
93
RGB img_levels[147456];
99
 
94
 
100
 
-
 
101
Player player;
Line 95... Line 102...
95
Player player;
102
 
Line 96... Line 103...
96
 
103
CKosRender* renderPlayer;
97
CKosRender* renderPlayer;
104
CKosImage* objPlayer;
Line 105... Line 112...
105
CKosImage* objMiniMirror;
112
CKosImage* objMiniMirror;
106
CKosImage* objBox;
113
CKosImage* objBox;
107
CKosImage* objGun;
114
CKosImage* objGun;
108
CKosImage* objExplosion; 
115
CKosImage* objExplosion; 
Line -... Line 116...
-
 
116
 
-
 
117
CKosImage* objblack;
109
 
118
 
110
CKosRender* renderLevels;
119
CKosRender* renderLevels;
111
CKosImage* objnumber_box;
120
CKosImage* objnumber_box;
Line 112... Line 121...
112
CKosImage* objnumbers;
121
CKosImage* objnumbers;
Line 155... Line 164...
155
	if (din && level[position.Y][position.X].d != FIELD_NONE)
164
	if (din && level[position.Y][position.X].d != FIELD_NONE)
156
		return level[position.Y][position.X].d;
165
		return level[position.Y][position.X].d;
157
	return level[position.Y][position.X].s;
166
	return level[position.Y][position.X].s;
158
}
167
}
Line -... Line 168...
-
 
168
 
-
 
169
void SetMode(int mode)
-
 
170
{
-
 
171
	gameMode = mode;
-
 
172
	draw_window();
-
 
173
}
159
 
174
 
160
RGB* GetImg(Point position, bool din)
175
RGB* GetImg(Point position, bool din)
161
{
176
{
162
	switch (GetField(position, din))
177
	switch (GetField(position, din))
163
	{
178
	{
Line 573... Line 588...
573
					renderBox->Draw((position)* 24);
588
					renderBox->Draw((position)* 24);
574
					pause(2);
589
					pause(2);
575
				}
590
				}
576
				level[player.position.Y][player.position.X].s = FIELD_CRATER;
591
				level[player.position.Y][player.position.X].s = FIELD_CRATER;
577
				gameStatus = GAME_DEFEAT;
592
				gameStatus = GAME_DEFEAT;
578
				draw_window();
593
				SetMode(MODE_PAUSE);
579
				return;
594
				return;
580
			}
595
			}
581
			else
596
			else
582
			{
597
			{
583
				if (level[position.Y][position.X].l == 1)
598
				if (level[position.Y][position.X].l == 1)
Line 777... Line 792...
777
				return;
792
				return;
778
			}
793
			}
779
			break;
794
			break;
780
		case FIELD_FINISH:
795
		case FIELD_FINISH:
781
			gameStatus = GAME_VICTORY;
796
			gameStatus = GAME_VICTORY;
-
 
797
			SetMode(MODE_PAUSE);
782
			draw_window();
798
			draw_window();
783
			break;
799
			break;
784
		case FIELD_NONE:
800
		case FIELD_NONE:
785
		case FIELD_BRICK:
801
		case FIELD_BRICK:
786
		case FIELD_WALL:
802
		case FIELD_WALL:
Line 831... Line 847...
831
		objPlayer->Draw(Point(0, 0), player.angle);
847
		objPlayer->Draw(Point(0, 0), player.angle);
832
		renderPlayer->Draw(player.position * 24);
848
		renderPlayer->Draw(player.position * 24);
833
	}
849
	}
834
}
850
}
Line 835... Line -...
835
 
-
 
836
void SetMode(int mode)
-
 
837
{
-
 
838
	gameMode = mode;
-
 
839
	draw_window();
-
 
840
}
-
 
841
 
851
 
842
void key_press(int key)
852
void key_press(int key)
843
{
853
{
Line 844... Line 854...
844
	//rtlDebugOutString(ftoa(key));
854
	//rtlDebugOutString(ftoa(key));
Line 890... Line 900...
890
				if (gameStatus == GAME_DEFEAT)
900
				if (gameStatus == GAME_DEFEAT)
891
					openLevel(levelIndex);
901
					openLevel(levelIndex);
Line 892... Line 902...
892
 
902
 
893
			break;
903
			break;
894
		case 27:
904
		case 27:
895
			SetMode(MODE_LEVELS);
905
			SetMode(MODE_PAUSE);
896
		}
906
		}
897
		break;
907
		break;
898
	}
908
	}
Line 946... Line 956...
946
				}
956
				}
947
				level_pos.X++;
957
				level_pos.X++;
948
			}
958
			}
949
		}
959
		}
950
		break;
960
		break;
-
 
961
	case MODE_PAUSE:
-
 
962
		if (CollRecrVsPoint(position, Rect(77, 318, 229, 57)))
-
 
963
			SetMode(MODE_LEVELS);
-
 
964
		else
-
 
965
			if (CollRecrVsPoint(position, Rect(77, 255, 229, 57)))
-
 
966
			{
-
 
967
				openLevel(levelIndex);
-
 
968
				SetMode(MODE_GAME);
-
 
969
			}
-
 
970
			else
-
 
971
				if (gameStatus != GAME_DEFEAT && CollRecrVsPoint(position, Rect(77, 192, 229, 57)))
-
 
972
				{
-
 
973
					if (gameStatus == GAME_VICTORY)
-
 
974
						openLevel(levelIndex + 1);
-
 
975
					SetMode(MODE_GAME);
-
 
976
				}
951
	case MODE_GAME:
977
	case MODE_GAME:
Line 952... Line 978...
952
 
978
 
953
		break;
979
		break;
954
	}
980
	}
Line 1013... Line 1039...
1013
			objbutton1->Draw(Point(70, 318), 0);
1039
			objbutton1->Draw(Point(70, 318), 0);
1014
			objbutton_arrow->Draw(Point(89, 339), 180);
1040
			objbutton_arrow->Draw(Point(89, 339), 180);
1015
		}
1041
		}
Line 1016... Line 1042...
1016
 
1042
 
1017
		renderLevels->Draw(Point(0, 0));
-
 
1018
 
1043
		renderLevels->Draw(Point(0, 0));
1019
		//kos_PutImage((RGB*)img_ground, 24, 24, 100, 100);
-
 
1020
		
1044
		//kos_PutImage((RGB*)img_ground, 24, 24, 100, 100);		
1021
		break;
1045
		break;
1022
	case MODE_GAME:
1046
	case MODE_PAUSE:
1023
		for (int y = 0; y < 4; y++)
1047
			for (int y = 0; y < 4; y++)
1024
			for (int x = 0; x < 4; x++)
1048
				for (int x = 0; x < 4; x++)
1025
				kos_PutImage((RGB*)img_gamebg, 96, 96, 96 * x, 96 * y);
-
 
Line 1026... Line 1049...
1026
		
1049
					renderLevels->RenderImg((RGB*)img_gamebg, Point(96 * x, 96 * y), 96, 96);
1027
 
1050
 
1028
		for (int y = 0; y < 16; y++)
-
 
1029
			for (int x = 0; x < 16; x++)
1051
			for (int y = 0; y < 16; y++)
1030
			{
1052
				for (int x = 0; x < 16; x++)
1031
				if (level[y][x].s != FIELD_NONE)
-
 
Line 1032... Line 1053...
1032
					kos_PutImage(GetImg(Point(x, y), true), 24, 24, 24 * x, 24 * y);			
1053
					if (level[y][x].s != FIELD_NONE)
1033
			}
1054
						renderLevels->RenderImg(GetImg(Point(x, y), true), Point(24 * x, 24 * y), 24, 24);
1034
 
1055
 
1035
		switch (gameStatus)
-
 
1036
		{
1056
			switch (gameStatus)
1037
		case GAME_NONE:
-
 
1038
			renderPlayer->RenderImg(GetImg(player.position, false), Point(0, 0), 24, 24);
1057
			{
1039
			objPlayer->Draw(Point(0, 0), player.angle);
1058
			case GAME_NONE:
1040
			renderPlayer->Draw(player.position * 24);
1059
				objPlayer1->Draw(player.position * 24, player.angle);
1041
			break;
1060
				break;
1042
		case GAME_VICTORY:
1061
			case GAME_VICTORY:
1043
			kos_WriteTextToWindow(30, 10, 0x80, 0xFFFFFF, "VICTORY", 0);
1062
				kos_WriteTextToWindow(30, 10, 0x80, 0xFFFFFF, "VICTORY", 0);
1044
			break;
1063
				break;
1045
		case GAME_DEFEAT:
1064
			case GAME_DEFEAT:
-
 
1065
				kos_WriteTextToWindow(30, 10, 0x80, 0xFFFFFF, "DEFEAT", 0);
-
 
1066
				break;
-
 
1067
			}
-
 
1068
 
-
 
1069
			for (int y = 0; y < 16; y++)
-
 
1070
				for (int x = 0; x < 16; x++)
-
 
1071
					objblack->Draw(Point(24 * x, 24 * y), 0);
-
 
1072
 
-
 
1073
			if (gameStatus != GAME_DEFEAT)
-
 
1074
				renderLevels->RenderImg((RGB*)img_buttons[1], Point(77, 192), 229, 57);
-
 
1075
			renderLevels->RenderImg((RGB*)img_buttons[2], Point(77, 255), 229, 57);
-
 
1076
			renderLevels->RenderImg((RGB*)img_buttons[0], Point(77, 318), 229, 57);			 
-
 
1077
 
-
 
1078
			renderLevels->Draw(Point(0, 0));
-
 
1079
		break;
-
 
1080
	case MODE_GAME:
-
 
1081
		for (int y = 0; y < 4; y++)
-
 
1082
			for (int x = 0; x < 4; x++)
-
 
1083
				kos_PutImage((RGB*)img_gamebg, 96, 96, 96 * x, 96 * y);
-
 
1084
		
-
 
1085
		for (int y = 0; y < 16; y++)
-
 
1086
			for (int x = 0; x < 16; x++)
-
 
1087
				if (level[y][x].s != FIELD_NONE)
-
 
1088
					kos_PutImage(GetImg(Point(x, y), true), 24, 24, 24 * x, 24 * y);	
-
 
1089
 
-
 
1090
		if(gameStatus != GAME_DEFEAT)
-
 
1091
		{
-
 
1092
			renderPlayer->RenderImg(GetImg(player.position, false), Point(0, 0), 24, 24);
1046
			kos_WriteTextToWindow(30, 10, 0x80, 0xFFFFFF, "DEFEAT", 0);
1093
			objPlayer->Draw(Point(0, 0), player.angle);
1047
			break;
1094
			renderPlayer->Draw(player.position * 24);
1048
		}
1095
		}
1049
	break;
1096
	break;
Line 1186... Line 1233...
1186
	file->LoadTex((Byte*)img_wall_v, 3, 24, 24);
1233
	file->LoadTex((Byte*)img_wall_v, 3, 24, 24);
1187
	file->LoadTex((Byte*)img_wall_x, 3, 24, 24);
1234
	file->LoadTex((Byte*)img_wall_x, 3, 24, 24);
Line 1188... Line 1235...
1188
	
1235
	
Line -... Line 1236...
-
 
1236
	file->LoadTex((Byte*)img_crater, 3, 24, 24);
-
 
1237
 
-
 
1238
	file->LoadTex((Byte*)img_black, 4, 24, 24);
-
 
1239
 
-
 
1240
	for (int i = 0; i < 3; ++i)
1189
	file->LoadTex((Byte*)img_crater, 3, 24, 24);
1241
		file->LoadTex((Byte*)img_buttons[i], 3, 229, 57);	
Line 1190... Line 1242...
1190
	
1242
 
1191
	delete file;
1243
	delete file;
Line 1210... Line 1262...
1210
 
1262
 
1211
	objExplosion = new CKosImage(renderBox, (RGBA*)img_explosion, 24, 24);
1263
	objExplosion = new CKosImage(renderBox, (RGBA*)img_explosion, 24, 24);
Line 1212... Line 1264...
1212
	objExplosion->SetFrameSize(24, 24);
1264
	objExplosion->SetFrameSize(24, 24);
-
 
1265
 
-
 
1266
	renderLevels = new CKosRender(384, 384);
1213
 
1267
 
1214
	renderLevels = new CKosRender(384, 384);
1268
	objPlayer1 = new CKosImage(renderLevels, (RGBA*)img_tank, 24, 24);
1215
	objnumber_box = new CKosImage(renderLevels, (RGBA*)img_number_box, 51, 50);
1269
	objnumber_box = new CKosImage(renderLevels, (RGBA*)img_number_box, 51, 50);
Line 1216... Line 1270...
1216
	objnumbers = new CKosImage(renderLevels, (RGBA*)img_numbers, 14, 25);
1270
	objnumbers = new CKosImage(renderLevels, (RGBA*)img_numbers, 14, 25);
1217
	objnumbers->SetFrameSize(14, 25);
1271
	objnumbers->SetFrameSize(14, 25);
Line -... Line 1272...
-
 
1272
 
-
 
1273
	objbutton1 = new CKosImage(renderLevels, (RGBA*)img_button1, 57, 57);
1218
 
1274
	objbutton_arrow = new CKosImage(renderLevels, (RGBA*)img_button_arrow, 25, 15);
Line 1219... Line 1275...
1219
	objbutton1 = new CKosImage(renderLevels, (RGBA*)img_button1, 57, 57);
1275
	
Line 1220... Line 1276...
1220
	objbutton_arrow = new CKosImage(renderLevels, (RGBA*)img_button_arrow, 25, 15);
1276
	objblack = new CKosImage(renderLevels, (RGBA*)img_black, 24, 24);