5 * Copyright (C) 2003, 2007 Thomas Perl <thp@perli.net>
7 * This program is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation; either version 2
10 * of the License, or (at your option) any later version.
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
35 int main( int argc
, char** argv
) {
42 int sdl_flags
= SDL_SWSURFACE
| SDL_DOUBLEBUF
;
43 char datadir
[MAXPATHLEN
];
46 Point elektrons
[ELEKTRONS
];
49 fprintf( stderr
, "Tennix %s\n%s\n%s\n\n", VERSION
, COPYRIGHT
, URL
);
51 srand( (unsigned)time( NULL
));
53 for( el
=0; el
<ELEKTRONS
; el
++) {
54 elektrons
[el
].x
= elektrons
[el
].y
= 0;
55 elektrons
[el
].w
= 50+(rand()%120);
56 elektrons
[el
].h
= 10+(rand()%10);
57 elektrons
[el
].current_x
= WIDTH
/2;
58 elektrons
[el
].current_y
= HEIGHT
/2;
59 elektrons
[el
].new_x
= rand()%WIDTH
;
60 elektrons
[el
].new_y
= rand()%HEIGHT
;
61 elektrons
[el
].phase
= 4*2*PI
*((rand()%1000)/1000.0);
62 elektrons
[el
].r
= 100+rand()%155;
63 elektrons
[el
].g
= 100+rand()%155;
65 elektrons
[el
].size
= 0;
66 elektrons
[el
].new_size
= 5+rand()%10;
69 if( SDL_Init( SDL_INIT_VIDEO
) == -1) {
70 fprintf( stderr
, "Can't init SDL: %s\n", SDL_GetError());
76 vi
= (SDL_VideoInfo
*)SDL_GetVideoInfo();
78 if( (screen
= SDL_SetVideoMode( WIDTH
, HEIGHT
, vi
->vfmt
->BitsPerPixel
, sdl_flags
)) == NULL
) {
79 fprintf( stderr
, "Can't set video mode: %s\n", SDL_GetError());
83 SDL_WM_SetCaption( "Tennix! SDL", "Tennix");
84 SDL_ShowCursor( SDL_DISABLE
);
85 SDL_EnableKeyRepeat (SDL_DEFAULT_REPEAT_DELAY
, 1);
87 strcpy( datadir
, argv
[0]);
88 strcpy( (char*)(datadir
+strlen( dirname( datadir
))), DATADIR
);
91 init_graphics( datadir
);
95 keys
= SDL_GetKeyState( NULL
);
96 mb
= SDL_GetMouseState( &mx
, &my
);
98 if( keys
[SDLK_ESCAPE
] || keys
['q']) {
103 SDL_WM_ToggleFullScreen( screen
);
107 for( el
=0; el
<ELEKTRONS
; el
++) {
109 elektrons
[el
].new_x
= HIGHLIGHT_X
;
110 elektrons
[el
].new_y
= highlight_y
;
111 if( elektrons
[el
].new_size
>= 5) {
112 elektrons
[el
].new_size
= 1+rand()%4;
117 for( el
=0; el
<ELEKTRONS
; el
++) {
118 elektrons
[el
].current_x
+= (int)(1.0*(elektrons
[el
].new_x
-elektrons
[el
].current_x
)/ELEKTRON_LAZYNESS
);
119 elektrons
[el
].current_y
+= (int)(1.0*(elektrons
[el
].new_y
-elektrons
[el
].current_y
)/ELEKTRON_LAZYNESS
);
120 if( abs(elektrons
[el
].current_x
- elektrons
[el
].new_x
) < ELEKTRON_LAZYNESS
) {
121 elektrons
[el
].current_x
= elektrons
[el
].new_x
;
123 if( abs(elektrons
[el
].current_y
- elektrons
[el
].new_y
) < ELEKTRON_LAZYNESS
) {
124 elektrons
[el
].current_y
= elektrons
[el
].new_y
;
126 if( i
%4==0 && elektrons
[el
].size
< elektrons
[el
].new_size
) {
127 elektrons
[el
].size
++;
129 if( i
%4==0 && elektrons
[el
].size
> elektrons
[el
].new_size
) {
130 elektrons
[el
].size
--;
132 elektrons
[el
].phase
+= 0.02+(rand()%20/100.0);
133 elektrons
[el
].x
= elektrons
[el
].current_x
+ ELEKTRONS_WIDTH
+ elektrons
[el
].w
*cosf(elektrons
[el
].phase
/4);
134 elektrons
[el
].y
= elektrons
[el
].current_y
+ elektrons
[el
].h
*sinf(elektrons
[el
].phase
);
137 if( M_POS_START_GAME(mx
,my
)) {
138 highlight_y
= HIGHLIGHT_START_GAME
;
139 } else if( M_POS_START_MULTI(mx
,my
)) {
140 highlight_y
= HIGHLIGHT_START_MULTI
;
141 /*} else if( M_POS_CREDITS(mx,my)) {
142 highlight_y = HIGHLIGHT_CREDITS;
143 */} else if( M_POS_QUIT(mx
,my
)) {
144 highlight_y
= HIGHLIGHT_QUIT
;
145 } else if( highlight_y
== 0) {
147 for( el
=0; el
<ELEKTRONS
; el
++) {
148 elektrons
[el
].new_size
= 5+rand()%10;
152 for( el
=0; el
<ELEKTRONS
; el
++) {
153 elektrons
[el
].new_x
= rand()%(WIDTH
-ELEKTRONS_WIDTH
-elektrons
[el
].w
/2);
154 elektrons
[el
].new_y
= rand()%HEIGHT
;
155 elektrons
[el
].new_size
= 5+rand()%10;
161 //show_image( GR_MENU_HIGHLIGHT, HIGHLIGHT_X, highlight_y, 255);
163 for( el
=0; el
<ELEKTRONS
; el
++) {
164 if( elektrons
[el
].size
> 0) {
165 rectangle( elektrons
[el
].x
, elektrons
[el
].y
, elektrons
[el
].size
, elektrons
[el
].size
, elektrons
[el
].r
, elektrons
[el
].g
, elektrons
[el
].b
);
166 if( elektrons
[el
].size
> 5) {
167 rectangle( elektrons
[el
].x
+2, elektrons
[el
].y
+2, elektrons
[el
].size
-4, elektrons
[el
].size
-4, 0, 0, 0);
172 show_image( GR_MENU
, 180*2, 0, 255);
176 show_sprite( GR_ANIMATION
, (i
++/12%4), 4, 40, 100, 255);
177 show_sprite( GR_RACKET
, (mb
&SDL_BUTTON( SDL_BUTTON_LEFT
)) > 0, 4, mx
, my
, 255);
180 if( mb
& SDL_BUTTON( SDL_BUTTON_LEFT
)) {
181 if( M_POS_START_GAME(mx
,my
)) {
186 while( SDL_PollEvent( &e
));
187 fade_out( CH_AUDIENCE
);
189 if( M_POS_START_MULTI(mx
,my
)) {
194 while( SDL_PollEvent( &e
));
195 fade_out( CH_AUDIENCE
);
197 if( M_POS_CREDITS(mx
,my
)) {
198 //introimage( "data/credits.bmp");
200 if( M_POS_QUIT(mx
,my
)) {