source: ttyvaders/trunk/aliens.c @ 12

Last change on this file since 12 was 12, checked in by Sam Hocevar, 20 years ago
  • First commit. Scrolling works, some weaponry, controls, tunnel blowing, the nuke is still ugly, almost no collision detection. Nice demo :)
File size: 3.7 KB
Line 
1
2#include <stdlib.h>
3
4#include "common.h"
5
6static void draw_alien( game *g, int x, int y, int type );
7
8void init_aliens( game *g, aliens *al )
9{
10    int i;
11
12    for( i = 0; i < ALIENS; i++ )
13    {
14        al->x[i] = -1;
15        al->y[i] = -1;
16        al->img[i] = 0;
17        al->life[i] = 0;
18    }
19}
20
21void draw_aliens( game *g, aliens *al )
22{
23    int i;
24
25    for( i = 0; i < ALIENS; i++ )
26    {
27        if( al->y[i] >= 0 )
28        {
29            draw_alien( g, al->x[i], al->y[i], al->img[i] % 2 );
30        }
31    }
32}
33
34void update_aliens( game *g, aliens *al )
35{
36    int i;
37
38    for( i = 0; i < ALIENS; i++ )
39    {
40        if( al->y[i] < 0 )
41        {
42            //al->x[i] = g->w;
43        }
44        else
45        {
46            al->x[i] = ((al->x[i] + 5) % (g->w + 3)) - 3;
47            al->y[i] = al->y[i] + (rand() % 8) / 7 - (rand() % 8) / 7;
48            al->img[i] = al->img[i] + rand() % 4;
49
50            /* Check collisions */
51            if( al->y[i] < 0 ) al->y[i] = 0;
52            if( al->y[i] > g->w - 1 ) al->y[i] = g->w - 1;
53        }
54    }
55}
56
57void add_alien( game *g, aliens *al, int x, int y )
58{
59    int i;
60
61    for( i = 0; i < ALIENS; i++ )
62    {
63        if( al->y[i] < 0 )
64        {
65            al->x[i] = x;
66            al->y[i] = y;
67            al->img[i] = 0;
68            al->life[i] = 2;
69            break;
70        }
71    }
72}
73
74static void draw_alien( game *g, int x, int y, int type )
75{
76    switch( type )
77    {
78    case 0:
79        GFX_COLOR( MAGENTA );
80        GFX_GOTO( x, y );
81        GFX_WRITE( ',' );
82        GFX_WRITE( '-' );
83        GFX_WRITE( '-' );
84        GFX_WRITE( '-' );
85        GFX_WRITE( '.' );
86        GFX_GOTO( x, y+1 );
87        GFX_WRITE( '\\' );
88        GFX_COLOR( WHITE );
89        GFX_WRITE( 'o' );
90        GFX_WRITE( ' ' );
91        GFX_WRITE( 'O' );
92        GFX_COLOR( MAGENTA );
93        GFX_WRITE( '/' );
94        GFX_GOTO( x, y+2 );
95        GFX_WRITE( '^' );
96        GFX_WRITE( '^' );
97        GFX_WRITE( '^' );
98        GFX_WRITE( '^' );
99        GFX_WRITE( '^' );
100        break;
101    case 1:
102        GFX_COLOR( MAGENTA );
103        GFX_GOTO( x, y );
104        GFX_WRITE( ',' );
105        GFX_WRITE( '-' );
106        GFX_WRITE( '-' );
107        GFX_WRITE( '-' );
108        GFX_WRITE( '.' );
109        GFX_GOTO( x, y+1 );
110        GFX_WRITE( '\\' );
111        GFX_COLOR( WHITE );
112        GFX_WRITE( 'O' );
113        GFX_WRITE( ' ' );
114        GFX_WRITE( 'o' );
115        GFX_COLOR( MAGENTA );
116        GFX_WRITE( '/' );
117        GFX_GOTO( x, y+2 );
118        GFX_WRITE( '^' );
119        GFX_WRITE( '^' );
120        GFX_WRITE( '^' );
121        GFX_WRITE( '^' );
122        GFX_WRITE( '^' );
123        break;
124    }
125}
126
127#if 0
128void draw_rock( int x, int y, int type )
129{
130    switch( type )
131    {
132    case 0:
133        GFX_COLOR( RED );
134        GFX_GOTO( x, y );
135        GFX_WRITE( '/' );
136        GFX_WRITE( '\\' );
137        GFX_WRITE( '_' );
138        GFX_WRITE( '/' );
139        GFX_WRITE( '\\' );
140        GFX_GOTO( x, y+1 );
141        GFX_WRITE( '>' );
142        GFX_WRITE( ' ' );
143        GFX_WRITE( ' ' );
144        GFX_WRITE( ' ' );
145        GFX_WRITE( '/' );
146        GFX_GOTO( x, y+2 );
147        GFX_WRITE( '\\' );
148        GFX_WRITE( '/' );
149        GFX_WRITE( '\\' );
150        GFX_WRITE( '_' );
151        GFX_WRITE( '>' );
152        break;
153    case 1:
154        GFX_COLOR( RED );
155        GFX_GOTO( x, y );
156        GFX_WRITE( '_' );
157        GFX_WRITE( '/' );
158        GFX_WRITE( '\\' );
159        GFX_WRITE( '/' );
160        GFX_WRITE( '>' );
161        GFX_GOTO( x, y+1 );
162        GFX_WRITE( '\\' );
163        GFX_WRITE( ' ' );
164        GFX_WRITE( ' ' );
165        GFX_WRITE( ' ' );
166        GFX_WRITE( '\\' );
167        GFX_GOTO( x, y+2 );
168        GFX_WRITE( '<' );
169        GFX_WRITE( '_' );
170        GFX_WRITE( '/' );
171        GFX_WRITE( '\\' );
172        GFX_WRITE( '/' );
173        break;
174    }
175}
176#endif
Note: See TracBrowser for help on using the repository browser.