home *** CD-ROM | disk | FTP | other *** search
/ Kinjite Games 1996 November / SENTINEL.img / dosgames / sports / apool098 / src / apool.h < prev    next >
C/C++ Source or Header  |  1995-05-22  |  8KB  |  196 lines

  1. /* This is "apool.h", part of the pool (billiards)-program
  2.                    
  3.                      "ANOTHER POOL".
  4.              
  5.    "apool.h" includes the constants, prototype and global variables.
  6.  
  7.    Copyright (C) 1995 by Gerrit Jahn (email: ub1g@rz.uni-karlsruhe.de)
  8.  
  9.    "ANOTHER POOL" is free software; you can redistribute it 
  10.    and/or modify it under the terms of the GNU General Public License 
  11.    as published by the Free Software Foundation; either version 2 of 
  12.    the License, or (at your option) any later version.
  13.  
  14.    This program is distributed in the hope that it will be useful,
  15.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  16.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17.    GNU General Public License for more details.
  18.  
  19.    You should have received a copy of the GNU General Public License
  20.    along with GNU CC; see the file COPYING.  If not, write to
  21.    the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  22.  
  23. /* ------------------------------ apool.h ------------------------------ */
  24.  
  25. #include <stdlib.h>
  26. #include <stdio.h>
  27.  
  28. #define VERSION "0.975"
  29. #define DATE "14/5/95"
  30.  
  31. #define LEFT 20        /* Bildschirmgrenze links, rechts, oben, unten  */
  32. #define RIGHT 620   
  33. #define UP 70
  34. #define DOWN 370
  35. #define BALLS 16    /* Anzahl der Bälle */
  36. #define DIFFX (double)(RIGHT-LEFT)    /* "Länge u. 2* Breite in Pixeln */
  37. #define RADIUS 8.0 /* Radius der Kugeln in Pixel */
  38. #define Radius 8
  39. #define SPINPOSX 600    /* Position der Kugel für Spineinstellung (x, y) */
  40. #define SPINPOSY 430
  41. #define ROLL (5.0/7.0)    /* Anteil Transl.- zu Ges.energ. bei vollst. Rollen */
  42.  
  43. /*#define BANDEN 9 Anz. der "Banden", Zeile weg -> Proc. "unkompiliert" */
  44. #define BLACK 4        /* Nr. der schwarzen Kugel */
  45. #define WHITE (BALLS-1) /* dto. weiß */
  46. #define COL_WHITE 0    /* 'Farbe' der Kugeln */
  47. #define COL_YELLOW 2
  48. #define COL_RED 1
  49. #define COL_BLACK 3
  50. #define NEW_COL_NEW (1<<3)
  51. #define NEW_COL_DOUBLE (1<<5)
  52. #define FOUL_BLACK_ILLEGALY_POCKETED (1<<12)    /* Bits für die Fouls */
  53. #define FOUL_WHITE_POCKETED (1<<11)
  54. #define FOUL_NO_TOUCH (1<<10)
  55. #define FOUL_WRONG_COLOR_POCKETED (1<<9)
  56. #define FOUL_WRONG_COLOR_TOUCHED (1<<8)
  57. #define FOUL_CORRECT_POT (1<<5)
  58. #define FOUL_NO_FOUL 0
  59. #define FOUL_ANY_FOUL ( FOUL_BLACK_ILLEGALY_POCKETED | FOUL_WHITE_POCKETED\
  60.  |FOUL_NO_TOUCH | FOUL_WRONG_COLOR_POCKETED| FOUL_WRONG_COLOR_TOUCHED )
  61.  
  62.  /* Es folgen die "richtigen" Makros: */
  63.  
  64. #define MSG printf("\n\n ANOTHER POOL (V %s)\n\n", VERSION)
  65. #define RND ((int)(2.0*rand()/RAND_MAX+0.5)-1) /* Zuf.zahl zw. 0 u. 1 */
  66. #define XAB (sqrt(4*RADIUS*RADIUS-(RADIUS+1)*(RADIUS+1))+1.5) /* f.Dreieck */
  67. #define MSG2 msg(\
  68.  "l. button: cue, m. button: set spin, r. button: set power, F1: help")
  69. #define SKALP( a,b ) ((a).x*(b).x+(a).y*(b).y)    /* Skalarprodukt */
  70. #define BETR( a ) sqrt( SKALP( a, a ) )        /* Betrag */
  71. #define COS( a ) cos( a* M_PI / 180.0 )        /* cos mit Winkeln in ° */
  72. #define COSV( a, b ) (((a.x || a.y)) ?\
  73.  (SKALP( a, b)/(BETR( a ) * BETR( b ))) : 0 )    /* cos aus Skalaprod. */
  74. #define DIFF(a, b) ((a)*(a) + (b)*(b)) /* DIFF, DIFF2: Abst.quadrate */
  75. #define DIFF2(a, b) (((a)*(a) + (b)*(b)) * DIFFX*DIFFX) 
  76. #define SET_V(s, ve) sqrt((2*DELTA*(s)+(ve)*(ve))/ROLL)
  77.  
  78. /* Definition der benötigten Strukturen */
  79.  
  80. struct vect { double x, y; };
  81. struct ball { struct vect v, e, p; double ez, m; int stat, col; }; 
  82. /* v: normale Translationsgeschw.; p: Koordinaten (0<=x<=1, 0<=y<=0.5); 
  83.    e,ez: Effet, Spin; m: Masse          
  84.    stat: "Status" der Kugel; col: Farbe (rot, gelb, schwarz) */ 
  85. struct hole { struct vect p, m; };
  86. /* p: Pos. des Mittelpunktes des Kreises, der das jeweilige Loch darstellt,
  87.    m: Pos. des Punktes auf den der Computer zielen muß, damit er ins 
  88.    Loch trifft, wird bei plot_table() oder so berechnet */
  89. struct player { int stat, wait, points, col, hole_black; double speed;};
  90. /* stat: für Fouls, Treffer, etc.; col: welche Farbe darf angespielt werden;
  91.    speed: letzter Powerfaktor */
  92. struct bande { struct vect p0, p1, n; };
  93. /* p0,p1: Die zwei Punkte, die die Position der Bande festlegen,
  94.    n: 'Normalen-Vektor' der Bande */
  95. struct target { struct vect pos; int kno, ord; struct target *next;
  96.  double spd, angle; struct target *test; };
  97. /* f. computer.c: pos: Position des Punktes, auf den der Computer zielt,
  98.    kno, zugehörige Kugel, ord, wieviele Kugeln-1 liegen zwischen Weißer und 
  99.    Loch; angle: unter welchem (Gesamt)-Winkel werden die Kugeln versenkt 
  100.    (wichtig für Auwahl der zu spielenden Kugel). spd: wie fest muß bisher
  101.    gestoßen werden, damit die "vorderste" Kugel ins Loch rollt */
  102. struct foul { int wrongct, wrongcp, whited, notouch; };
  103. struct statistic { struct foul fouls; int wins, losses, pots, nopots; }; 
  104.    
  105. /* eigentlich Konstanten, werden es später wieder !!!: */
  106. extern double ALPHA, BETA, GAMMA, DELTA, ETA, BANDES, BANDEREF, MASS_WHITE; 
  107. extern double CURVES, CURVEP;
  108. extern int TIMER, STEP, CLEV;
  109.  
  110. /* jetzt kommen die globalen Variablen */
  111.  
  112. extern double oldalph, alph, spd, RADIUSL, e_winkel, old_min;
  113. extern int counter, oldx[BALLS], oldy[BALLS], olds[2];
  114. extern int first_hit, bande_hit, act, col_in, last_foul, freeball, 
  115.  extra_shot,ende, c_player, anstoss, demo, last_pocketed_balls;
  116. extern int new_col, old_ball, old_hole;
  117. extern struct ball k[BALLS];
  118. extern struct hole posl[6];
  119. extern struct bande ban[18];
  120. extern struct player ply[2];
  121. extern struct statistic stats[2];
  122. extern FILE *datei;
  123.  
  124. /* functions in apool.c */
  125.  
  126. void test_for_play_on_black( void );
  127. int test_if_game_is_over( void );
  128. void rules( void );
  129. void init_table( void );
  130. void undo( void );
  131. void save_actual_position( void );
  132. void stop_it( void );
  133. void calc_e_winkel( void );
  134.  
  135. /* functions in graphics.c */
  136.  
  137. void init_graphics( int x_auflsg, int y_auflsg, int anz_colors);
  138. void msg( char *ausgabestring );
  139. void plot_table( void );
  140. void speed( double geschwindigkeit ); /* 0<= geschw. <= 1 */
  141. void plot_balls( void );
  142. void test_spin( int maus_x_pos, int maus_y_pos );
  143. void set_spin( double spin_x, double spin_y , double spin_z);
  144. void wink( double winkel_alpha ); /* 0 <= alpha <= 85° */
  145. void plot_one_ball( int which_one );
  146. void err( char *ausgabe_string );
  147. void err2( char *ausgabe_string, int color );
  148. void debug( char *out_string );
  149. void make_mouse_cursor( void );
  150. int menu( void );
  151. void wait_for_click( void );
  152. void close_graphics( void );
  153. void mouse_on( void );
  154. void mouse_off( void );
  155. void plot_act_player( int actual_player );
  156. void set_white_ball( void );
  157. void calc_player_v( void );
  158. void set_player_power( void );
  159. void set_player_spin( void );
  160. void set_test_power( void );
  161. int set_test_power2( void );
  162. void ctrl_break_off( void );
  163. void plot_statistics( double time, int graphics_on_off );
  164. void delete_ball( int ballnr );
  165. void help( void );
  166. void credits( void );
  167.  
  168. /* functions in physics.c */
  169.  
  170. void translate_spin( void );
  171. void refl_kk( int kugelnr, struct vect kbande );
  172. void coll( int kugel_a, int kugel_b );
  173. void reflection( int kugelnr, int bandennr );
  174. int in_line( int kugelnr, int bandennr );
  175. void banden_test( void );
  176. int move_balls( void );
  177. void calc_v_end( int no_of_ball );
  178. int move_balls( void );
  179. void stoss( void );
  180. void wait_user_time( double time );
  181.  
  182. /* functions in computer.c */
  183.  
  184. int in_line_c( int ball_no_1, int ball_no_2, struct vect point_0, 
  185.  struct vect point_1, int color, int graphics_on_off );
  186. struct vect calc_tp( struct vect act_ball, struct vect target );
  187. void set_c_speed( double end_speed, struct vect speed );
  188. void computer_stoss( void );
  189. int banden_stoss( void );
  190. void calc_hot_spot( void );
  191.  
  192. /* function in creatabl.c */
  193.  
  194. void create_table( double width_of_holes_in_pixels );
  195.  
  196.