Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.
 
 
 
 
 
 

306 rindas
6.6 KiB

  1. #include <stdlib.h>
  2. #include "common.h"
  3. static void draw_small_explosion( int x, int y, int frame );
  4. static void draw_big_explosion( int x, int y, int frame );
  5. void init_explosions( game *g, explosions *ex )
  6. {
  7. int i;
  8. for( i = 0; i < EXPLOSIONS; i++ )
  9. {
  10. ex->n[i] = 0;
  11. ex->x[i] = -1;
  12. ex->y[i] = -1;
  13. ex->vx[i] = -1;
  14. ex->vy[i] = -1;
  15. ex->type[i] = 0;
  16. }
  17. }
  18. void add_explosion( game *g, explosions *ex, int x, int y, int vx, int vy, int type )
  19. {
  20. int i;
  21. for( i = 0; i < EXPLOSIONS; i++ )
  22. {
  23. if( ex->n[i] <= 0 )
  24. {
  25. ex->x[i] = x;
  26. ex->y[i] = y;
  27. ex->vx[i] = vx;
  28. ex->vy[i] = vy;
  29. switch( type )
  30. {
  31. case 1: ex->n[i] = 13; break;
  32. case 2: ex->n[i] = 30; break;
  33. case 0: default: ex->n[i] = 7; break;
  34. }
  35. ex->type[i] = type;
  36. break;
  37. }
  38. }
  39. }
  40. void draw_explosions( game *g, explosions *ex )
  41. {
  42. int i;
  43. for( i = 0; i < EXPLOSIONS; i++ )
  44. {
  45. if( ex->n[i] <= 0 )
  46. {
  47. continue;
  48. }
  49. #if 0
  50. GFX_COLOR( GREEN );
  51. GFX_GOTO( ex->x[i] + 3, ex->y[i] );
  52. switch( GET_RAND(0,3) )
  53. {
  54. case 0:
  55. GFX_WRITE( 'p' );
  56. GFX_WRITE( 'i' );
  57. GFX_WRITE( 'f' );
  58. break;
  59. case 1:
  60. GFX_WRITE( 'p' );
  61. GFX_WRITE( 'a' );
  62. GFX_WRITE( 'f' );
  63. break;
  64. case 2:
  65. GFX_WRITE( 'p' );
  66. GFX_WRITE( 'o' );
  67. GFX_WRITE( 'u' );
  68. GFX_WRITE( 'f' );
  69. break;
  70. }
  71. GFX_WRITE( '!' );
  72. #endif
  73. switch( ex->type[i] )
  74. {
  75. case 1:
  76. draw_big_explosion( ex->x[i], ex->y[i], ex->n[i] );
  77. break;
  78. case 0:
  79. default:
  80. draw_small_explosion( ex->x[i], ex->y[i], ex->n[i] );
  81. break;
  82. }
  83. }
  84. }
  85. void update_explosions( game *g, explosions *ex )
  86. {
  87. int i;
  88. for( i = 0; i < EXPLOSIONS; i++ )
  89. {
  90. if( ex->n[i] > 0 )
  91. {
  92. ex->x[i] += ex->vx[i];
  93. ex->y[i] += ex->vy[i];
  94. ex->n[i]--;
  95. }
  96. }
  97. }
  98. static void draw_small_explosion( int x, int y, int frame )
  99. {
  100. switch( frame )
  101. {
  102. default:
  103. case 6:
  104. GFX_COLOR( YELLOW );
  105. GFX_GOTO( x, y );
  106. GFX_WRITE( '+' );
  107. break;
  108. case 5:
  109. GFX_COLOR( YELLOW );
  110. GFX_GOTO( x, y );
  111. GFX_WRITE( 'o' );
  112. break;
  113. case 4:
  114. GFX_COLOR( YELLOW );
  115. GFX_GOTO( x, y-1 );
  116. GFX_WRITE( '_' );
  117. GFX_GOTO( x-1, y );
  118. GFX_WRITE( ')' );
  119. GFX_WRITE( '_' );
  120. GFX_WRITE( '(' );
  121. break;
  122. case 3:
  123. GFX_COLOR( YELLOW );
  124. GFX_GOTO( x-1, y-1 );
  125. GFX_WRITE( '.' );
  126. GFX_WRITE( '_' );
  127. GFX_WRITE( ',' );
  128. GFX_GOTO( x-1, y );
  129. GFX_WRITE( ')' );
  130. GFX_WRITE( '_' );
  131. GFX_WRITE( '(' );
  132. GFX_GOTO( x-1, y+1 );
  133. GFX_WRITE( '\'' );
  134. GFX_WRITE( ' ' );
  135. GFX_WRITE( '`' );
  136. break;
  137. case 2:
  138. GFX_COLOR( YELLOW );
  139. GFX_GOTO( x-1, y-1 );
  140. GFX_WRITE( '.' );
  141. GFX_WRITE( 'v' );
  142. GFX_WRITE( ',' );
  143. GFX_GOTO( x-1, y );
  144. GFX_WRITE( '>' );
  145. GFX_WRITE( ' ' );
  146. GFX_WRITE( '<' );
  147. GFX_GOTO( x-1, y+1 );
  148. GFX_WRITE( '\'' );
  149. GFX_WRITE( '^' );
  150. GFX_WRITE( '`' );
  151. break;
  152. case 1:
  153. GFX_COLOR( WHITE );
  154. GFX_GOTO( x-1, y-1 );
  155. GFX_WRITE( '.' );
  156. GFX_WRITE( ' ' );
  157. GFX_WRITE( ',' );
  158. GFX_GOTO( x-1, y );
  159. GFX_WRITE( ' ' );
  160. GFX_WRITE( ' ' );
  161. GFX_WRITE( ' ' );
  162. GFX_GOTO( x-1, y+1 );
  163. GFX_WRITE( '\'' );
  164. GFX_WRITE( ' ' );
  165. GFX_WRITE( '`' );
  166. break;
  167. }
  168. }
  169. static void draw_big_explosion( int x, int y, int frame )
  170. {
  171. GFX_COLOR( YELLOW );
  172. switch( frame )
  173. {
  174. default:
  175. case 12:
  176. GFX_GOTO( x, y );
  177. GFX_WRITE( '+' );
  178. break;
  179. case 11:
  180. GFX_GOTO( x, y );
  181. GFX_WRITE( 'o' );
  182. break;
  183. case 10:
  184. GFX_GOTO( x, y-1 );
  185. GFX_WRITE( '_' );
  186. GFX_GOTO( x-1, y );
  187. GFX_WRITE( ')' );
  188. GFX_WRITE( '_' );
  189. GFX_WRITE( '(' );
  190. break;
  191. case 9:
  192. GFX_GOTO( x-1, y-1 );
  193. GFX_WRITE( '.' );
  194. GFX_WRITE( '_' );
  195. GFX_WRITE( ',' );
  196. GFX_GOTO( x-1, y );
  197. GFX_WRITE( ')' );
  198. GFX_WRITE( '_' );
  199. GFX_WRITE( '(' );
  200. GFX_GOTO( x-1, y+1 );
  201. GFX_WRITE( '\'' );
  202. GFX_WRITE( ' ' );
  203. GFX_WRITE( '`' );
  204. break;
  205. case 8:
  206. GFX_GOTO( x-1, y-1 );
  207. GFX_WRITE( '.' );
  208. GFX_WRITE( 'v' );
  209. GFX_WRITE( ',' );
  210. GFX_GOTO( x-1, y );
  211. GFX_WRITE( '>' );
  212. GFX_WRITE( ' ' );
  213. GFX_WRITE( '<' );
  214. GFX_GOTO( x-1, y+1 );
  215. GFX_WRITE( '\'' );
  216. GFX_WRITE( '^' );
  217. GFX_WRITE( '`' );
  218. break;
  219. case 6:
  220. GFX_COLOR( RED );
  221. case 7:
  222. case 5:
  223. GFX_GOTO( x-2, y-1 );
  224. GFX_WRITE( '_' );
  225. GFX_WRITE( '\\' );
  226. GFX_WRITE( '~' );
  227. GFX_WRITE( '/' );
  228. GFX_WRITE( '_' );
  229. GFX_GOTO( x-2, y );
  230. GFX_WRITE( '>' );
  231. GFX_WRITE( ' ' );
  232. GFX_WRITE( ' ' );
  233. GFX_WRITE( ' ' );
  234. GFX_WRITE( '<' );
  235. GFX_GOTO( x-2, y+1 );
  236. GFX_WRITE( '~' );
  237. GFX_WRITE( '/' );
  238. GFX_WRITE( '_' );
  239. GFX_WRITE( '\\' );
  240. GFX_WRITE( '~' );
  241. break;
  242. case 3:
  243. GFX_COLOR( RED );
  244. case 4:
  245. case 2:
  246. GFX_GOTO( x-2, y-1 );
  247. GFX_WRITE( '_' );
  248. GFX_WRITE( '\\' );
  249. GFX_WRITE( ' ' );
  250. GFX_WRITE( '/' );
  251. GFX_WRITE( '_' );
  252. GFX_GOTO( x-2, y );
  253. GFX_WRITE( '_' );
  254. GFX_WRITE( ' ' );
  255. GFX_WRITE( ' ' );
  256. GFX_WRITE( ' ' );
  257. GFX_WRITE( '_' );
  258. GFX_GOTO( x-2, y+1 );
  259. GFX_WRITE( ' ' );
  260. GFX_WRITE( '/' );
  261. GFX_WRITE( ' ' );
  262. GFX_WRITE( '\\' );
  263. GFX_WRITE( ' ' );
  264. break;
  265. case 1:
  266. GFX_COLOR( WHITE );
  267. GFX_GOTO( x-2, y-1 );
  268. GFX_WRITE( '.' );
  269. GFX_WRITE( ' ' );
  270. GFX_WRITE( '\'' );
  271. GFX_WRITE( ' ' );
  272. GFX_WRITE( ',' );
  273. GFX_GOTO( x-2, y );
  274. GFX_WRITE( ' ' );
  275. GFX_WRITE( ' ' );
  276. GFX_WRITE( ' ' );
  277. GFX_WRITE( ' ' );
  278. GFX_WRITE( ' ' );
  279. GFX_GOTO( x-2, y+1 );
  280. GFX_WRITE( '\'' );
  281. GFX_WRITE( ' ' );
  282. GFX_WRITE( '.' );
  283. GFX_WRITE( ' ' );
  284. GFX_WRITE( '`' );
  285. break;
  286. }
  287. }