1 | #include <allegro.h> |
2 | #include <stdlib.h> |
3 | #include <stdio.h> |
4 | #include <time.h> |
5 | #include "tankFrames.h" |
6 | |
7 | /* TYPEDEFS */ |
8 | typedef BITMAP bmp; |
9 | typedef DATAFILE dat; |
10 | |
11 | /* ENUMERATIONS */ |
12 | enum tankDirection {DIR_NORTH, DIR_SOUTH, DIR_EAST, DIR_WEST}; |
13 | |
14 | /* GLOBAL VARIABLES */ |
15 | volatile long speed = 0; |
16 | volatile long animPace = 0; |
17 | dat *tankSprites; |
18 | bmp *imgBackBuffer; |
19 | |
20 | /* STRUCTS */ |
21 | struct tank{ |
22 | tankDirection dir; |
23 | int x; |
24 | int y; |
25 | bmp *stillFrame; |
26 | bmp *northAnimFrame0; |
27 | bmp *northAnimFrame1; |
28 | bmp *northAnimFrame2; |
29 | bmp *northAnimFrame3; |
30 | bmp *northAnimFrame4; |
31 | bmp *northAnimFrame5; |
32 | bmp *northAnimFrame6; |
33 | bmp *northAnimFrame7; |
34 | }; |
35 | |
36 | /* INCSPEED FUNCTION DEFINTION */ |
37 | void incSpeed(){ |
38 | speed++; |
39 | } |
40 | END_OF_FUNCTION(incSpeed); |
41 | |
42 | /* INIT FUNCTION DEFINITION */ |
43 | void init(){ |
44 | /* |
45 | * TODO: |
46 | * Initialize Allegro |
47 | * Set the graphics mode and color depth |
48 | * Install the keyboard and timer devices |
49 | * Lock all memory used by timer routines |
50 | * Load the necessary datafiles into memory |
51 | */ |
52 | allegro_init(); |
53 | LOCK_VARIABLE(speed); |
54 | LOCK_FUNCTION(incSpeed); |
55 | set_gfx_mode(GFX_AUTODETECT_WINDOWED, 640, 480, 0, 0); |
56 | set_color_depth(16); |
57 | install_keyboard(); |
58 | install_timer(); |
59 | install_int_ex(incSpeed, BPS_TO_TIMER(60)); |
60 | tankSprites = load_datafile("tankFrames.dat"); |
61 | imgBackBuffer = create_bitmap(SCREEN_W, SCREEN_H); |
62 | srand(time('\0')); |
63 | } |
64 | END_OF_FUNCTION(init); |
65 | |
66 | /* DEINIT FUNCTION DEFINITION */ |
67 | void deinit(){ |
68 | /* |
69 | * TODO: |
70 | * Clear the key buffer |
71 | * Destroy all bitmaps |
72 | * Destroy all MIDIs |
73 | * Set all variables to null or zero |
74 | */ |
75 | clear_keybuf(); |
76 | destroy_bitmap(imgBackBuffer); |
77 | unload_datafile(tankSprites); |
78 | } |
79 | END_OF_FUNCTION(deinit); |
80 | |
81 | /* TANKANIMNORTH FUNCTION DEFINITION *//* |
82 | void tankAnimNorth(struct tank *temp){ |
83 | while(animPace <= 24){ |
84 | if(animPace < 3) |
85 | draw_sprite(imgBackBuffer, temp->northAnimFrame0, temp->x, temp->y); |
86 | else if(animPace >= 3 && animPace < 6) |
87 | draw_sprite(imgBackBuffer, temp->northAnimFrame1, temp->x, temp->y); |
88 | else if(animPace >= 6 && animPace < 9) |
89 | draw_sprite(imgBackBuffer, temp->northAnimFrame2, temp->x, temp->y); |
90 | else if(animPace >= 9 && animPace < 12) |
91 | draw_sprite(imgBackBuffer, temp->northAnimFrame3, temp->x, temp->y); |
92 | else if(animPace >= 12 && animPace < 15) |
93 | draw_sprite(imgBackBuffer, temp->northAnimFrame4, temp->x, temp->y); |
94 | else if(animPace >= 15 && animPace < 18) |
95 | draw_sprite(imgBackBuffer, temp->northAnimFrame5, temp->x, temp->y); |
96 | else if(animPace >= 18 && animPace < 21) |
97 | draw_sprite(imgBackBuffer, temp->northAnimFrame6, temp->x, temp->y); |
98 | else if(animPace >= 21 && animPace < 24) |
99 | draw_sprite(imgBackBuffer, temp->northAnimFrame7, temp->x, temp->y); |
100 | } |
101 | }*/ |
102 | |
103 | /* INITTANK FUNCTION DEFINITION */ |
104 | void initTank(struct tank *temp, int x, int y){ |
105 | temp->x = x; |
106 | temp->y = y; |
107 | temp->stillFrame = tankSprites[tankNorthFrame0].dat; |
108 | temp->northAnimFrame0 = tankSprites[tankNorthFrame0].dat; |
109 | temp->northAnimFrame1 = tankSprites[tankNorthFrame1].dat; |
110 | temp->northAnimFrame2 = tankSprites[tankNorthFrame2].dat; |
111 | temp->northAnimFrame3 = tankSprites[tankNorthFrame3].dat; |
112 | temp->northAnimFrame4 = tankSprites[tankNorthFrame4].dat; |
113 | temp->northAnimFrame5 = tankSprites[tankNorthFrame5].dat; |
114 | temp->northAnimFrame6 = tankSprites[tankNorthFrame6].dat; |
115 | temp->northAnimFrame7 = tankSprites[tankNorthFrame7].dat; |
116 | } |
117 | END_OF_FUNCTION(initTank); |
118 | |
119 | /* MAIN FUNCTION */ |
120 | int main(){ |
121 | init(); |
122 | |
123 | struct tank p1; |
124 | |
125 | initTank(&p1, 50, 50); |
126 | |
127 | while(!key[KEY_ESC]){ |
128 | while(speed > 0){ |
129 | /* |
130 | * TODO: |
131 | * This is the processing loop for all of the game changing data |
132 | */ |
133 | speed--; |
134 | } |
135 | |
136 | /* |
137 | * TODO: |
138 | * This is where all of the drawing in the game takes place |
139 | */ |
140 | blit(imgBackBuffer, screen, 0, 0, 0, 0, imgBackBuffer->w, imgBackBuffer->h); |
141 | clear_bitmap(imgBackBuffer); |
142 | } |
143 | |
144 | deinit(); |
145 | return 0; |
146 | } |
147 | END_OF_MAIN() |