You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

177 lines
3.7 KiB

  1. #include <stdlib.h>
  2. #include "common.h"
  3. static void draw_alien( game *g, int x, int y, int type );
  4. void init_aliens( game *g, aliens *al )
  5. {
  6. int i;
  7. for( i = 0; i < ALIENS; i++ )
  8. {
  9. al->x[i] = -1;
  10. al->y[i] = -1;
  11. al->img[i] = 0;
  12. al->life[i] = 0;
  13. }
  14. }
  15. void draw_aliens( game *g, aliens *al )
  16. {
  17. int i;
  18. for( i = 0; i < ALIENS; i++ )
  19. {
  20. if( al->y[i] >= 0 )
  21. {
  22. draw_alien( g, al->x[i], al->y[i], al->img[i] % 2 );
  23. }
  24. }
  25. }
  26. void update_aliens( game *g, aliens *al )
  27. {
  28. int i;
  29. for( i = 0; i < ALIENS; i++ )
  30. {
  31. if( al->y[i] < 0 )
  32. {
  33. //al->x[i] = g->w;
  34. }
  35. else
  36. {
  37. al->x[i] = ((al->x[i] + 5) % (g->w + 3)) - 3;
  38. al->y[i] = al->y[i] + (rand() % 8) / 7 - (rand() % 8) / 7;
  39. al->img[i] = al->img[i] + rand() % 4;
  40. /* Check collisions */
  41. if( al->y[i] < 0 ) al->y[i] = 0;
  42. if( al->y[i] > g->w - 1 ) al->y[i] = g->w - 1;
  43. }
  44. }
  45. }
  46. void add_alien( game *g, aliens *al, int x, int y )
  47. {
  48. int i;
  49. for( i = 0; i < ALIENS; i++ )
  50. {
  51. if( al->y[i] < 0 )
  52. {
  53. al->x[i] = x;
  54. al->y[i] = y;
  55. al->img[i] = 0;
  56. al->life[i] = 2;
  57. break;
  58. }
  59. }
  60. }
  61. static void draw_alien( game *g, int x, int y, int type )
  62. {
  63. switch( type )
  64. {
  65. case 0:
  66. GFX_COLOR( MAGENTA );
  67. GFX_GOTO( x, y );
  68. GFX_WRITE( ',' );
  69. GFX_WRITE( '-' );
  70. GFX_WRITE( '-' );
  71. GFX_WRITE( '-' );
  72. GFX_WRITE( '.' );
  73. GFX_GOTO( x, y+1 );
  74. GFX_WRITE( '\\' );
  75. GFX_COLOR( WHITE );
  76. GFX_WRITE( 'o' );
  77. GFX_WRITE( ' ' );
  78. GFX_WRITE( 'O' );
  79. GFX_COLOR( MAGENTA );
  80. GFX_WRITE( '/' );
  81. GFX_GOTO( x, y+2 );
  82. GFX_WRITE( '^' );
  83. GFX_WRITE( '^' );
  84. GFX_WRITE( '^' );
  85. GFX_WRITE( '^' );
  86. GFX_WRITE( '^' );
  87. break;
  88. case 1:
  89. GFX_COLOR( MAGENTA );
  90. GFX_GOTO( x, y );
  91. GFX_WRITE( ',' );
  92. GFX_WRITE( '-' );
  93. GFX_WRITE( '-' );
  94. GFX_WRITE( '-' );
  95. GFX_WRITE( '.' );
  96. GFX_GOTO( x, y+1 );
  97. GFX_WRITE( '\\' );
  98. GFX_COLOR( WHITE );
  99. GFX_WRITE( 'O' );
  100. GFX_WRITE( ' ' );
  101. GFX_WRITE( 'o' );
  102. GFX_COLOR( MAGENTA );
  103. GFX_WRITE( '/' );
  104. GFX_GOTO( x, y+2 );
  105. GFX_WRITE( '^' );
  106. GFX_WRITE( '^' );
  107. GFX_WRITE( '^' );
  108. GFX_WRITE( '^' );
  109. GFX_WRITE( '^' );
  110. break;
  111. }
  112. }
  113. #if 0
  114. void draw_rock( int x, int y, int type )
  115. {
  116. switch( type )
  117. {
  118. case 0:
  119. GFX_COLOR( RED );
  120. GFX_GOTO( x, y );
  121. GFX_WRITE( '/' );
  122. GFX_WRITE( '\\' );
  123. GFX_WRITE( '_' );
  124. GFX_WRITE( '/' );
  125. GFX_WRITE( '\\' );
  126. GFX_GOTO( x, y+1 );
  127. GFX_WRITE( '>' );
  128. GFX_WRITE( ' ' );
  129. GFX_WRITE( ' ' );
  130. GFX_WRITE( ' ' );
  131. GFX_WRITE( '/' );
  132. GFX_GOTO( x, y+2 );
  133. GFX_WRITE( '\\' );
  134. GFX_WRITE( '/' );
  135. GFX_WRITE( '\\' );
  136. GFX_WRITE( '_' );
  137. GFX_WRITE( '>' );
  138. break;
  139. case 1:
  140. GFX_COLOR( RED );
  141. GFX_GOTO( x, y );
  142. GFX_WRITE( '_' );
  143. GFX_WRITE( '/' );
  144. GFX_WRITE( '\\' );
  145. GFX_WRITE( '/' );
  146. GFX_WRITE( '>' );
  147. GFX_GOTO( x, y+1 );
  148. GFX_WRITE( '\\' );
  149. GFX_WRITE( ' ' );
  150. GFX_WRITE( ' ' );
  151. GFX_WRITE( ' ' );
  152. GFX_WRITE( '\\' );
  153. GFX_GOTO( x, y+2 );
  154. GFX_WRITE( '<' );
  155. GFX_WRITE( '_' );
  156. GFX_WRITE( '/' );
  157. GFX_WRITE( '\\' );
  158. GFX_WRITE( '/' );
  159. break;
  160. }
  161. }
  162. #endif