From 345d4461e1d4d4292ba3abf924d0c49864354faf Mon Sep 17 00:00:00 2001 From: thp Date: Fri, 11 May 2007 11:53:11 +0000 Subject: [PATCH] initial import of tennix SDL port --- data/animation.bmp | Bin 0 -> 60102 bytes data/ball.bmp | Bin 0 -> 1186 bytes data/court.bmp | Bin 0 -> 65078 bytes data/credits.bmp | Bin 0 -> 65078 bytes data/hiscores.bmp | Bin 0 -> 65078 bytes data/menu.bmp | Bin 0 -> 21078 bytes data/player-racket.bmp | Bin 0 -> 878 bytes data/score.bmp | Bin 0 -> 2198 bytes data/sponsor.bmp | Bin 0 -> 3938 bytes data/standings.bmp | Bin 0 -> 2310 bytes data/title.bmp | Bin 0 -> 64990 bytes game.c | 142 +++++++++++++++++++++++++++++++++++++++++++++++++ game.h | 25 +++++++++ graphics.c | 78 +++++++++++++++++++++++++++ graphics.h | 12 +++++ images/racket.gif | Bin 0 -> 292 bytes images/tcourt1.gif | Bin 0 -> 1909 bytes images/tennis2.jpeg | Bin 0 -> 31866 bytes input.c | 20 +++++++ input.h | 7 +++ makefile | 18 +++++++ tennix.c | 81 ++++++++++++++++++++++++++++ tennix.h | 23 ++++++++ 23 files changed, 406 insertions(+) create mode 100644 data/animation.bmp create mode 100644 data/ball.bmp create mode 100644 data/court.bmp create mode 100644 data/credits.bmp create mode 100644 data/hiscores.bmp create mode 100644 data/menu.bmp create mode 100644 data/player-racket.bmp create mode 100644 data/score.bmp create mode 100644 data/sponsor.bmp create mode 100644 data/standings.bmp create mode 100644 data/title.bmp create mode 100644 game.c create mode 100644 game.h create mode 100644 graphics.c create mode 100644 graphics.h create mode 100644 images/racket.gif create mode 100644 images/tcourt1.gif create mode 100644 images/tennis2.jpeg create mode 100644 input.c create mode 100644 input.h create mode 100644 makefile create mode 100644 tennix.c create mode 100644 tennix.h diff --git a/data/animation.bmp b/data/animation.bmp new file mode 100644 index 0000000000000000000000000000000000000000..00d7039532043c7558d1ce5e3121b6d437d5a157 GIT binary patch literal 60102 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 VabJclj>g z<-41^e3v_ol9#;XC9i#UUdbKfkRS3xe#j5`AwQ0@`(sga-&Cqyl{!w^BIghO;1B-b z5B_F*C^UjU_=7+AgTIG_Klp<`_=7+AgTIH1Klp<`_=7+AgTIH8Klp<`_=7+AgTIHF zKlp<`_=7+AgMUsz@CSeJ2Y>JffAIUfT3Vg_J@@>{pZq;F{K=pE$)EhmpZq;-{K=oN z36wgWI+i}(Q_7$G$)EhmpZv++)9oYakJ7{GM)D_r^7m5UPyXaj{^U>oA+@+W`tCx7xMfAV`>Ej`=CUoGF&+>di<@fUyb7k}{=fAROS<1hZ=FaF{$ z{^IW?$zS}%U;M>i{KenPmB09lzxWHfz)I(PDf1V9@fUyb7k}|%D!Go7kCi_xFFjpv zpRX}XZ_#AKF7Ak@+#SHzI*$3S9$wI*L}@-yy?1MIe*jbE`vY2 z?w2nwiwiHSlJ%p@yqrxZJ}ISi<@eIP|Ly0l+Xw5wVz5853Txm>rYqXB_#~JI^I#s# zgE<#<2j&On2mW$keqerJei%MnFY{!chk6^jWS-2EIiGe%=11m7=11m7E<7?nGUu!- z%nS3vyf81v>Bh5|^U)2=2j&Cwf%(9EU_K0&o8RqO)9JuU){#|M!$ob+9RI*S@DKb0 z|G>X$vnlu_@DKb0|G+=+uSxI^`~&~MKkyIy1OJ)}|G+=+5BvlFz(4S>De({d1OLE3 z@DKb0|C$;9z(4R0`~&~MKk%RKg1|rU5BvlFz(4R0{JDD8zFH^#^}feH@lX8gU4wt( zpZF*KiGSjs_}9A)|HMC$O@xvgo!qeG%IjTPy7@A#6R($9zuzK;-B~@{)vC$pZN3TtbM(= z3;v~=A6e6BxIDD*FZdVy3;qTFf`7rkKJ4%>_!s;O{ssSnf5E>#B=Il!7yJwU1^4I3{#@B~3{ssSnf5E@tU+^#Zqsd~<4Jlk%;Tsmd=>1<0-A_}e zDRB2tKe~s9%h`0AE}H%@#u#IaF~%5Uj4{R-V~jDz7-Nhv#u#IaF~%5Uj4{R-V~jDM z6SwEq4)Yr4-T@WP{n*-KUcvn|uDRd&KVa;~cdb32f|lzV>>k$V)Q^2@&nIBla$N)W z)1cpJw>JGawzjC8w(EC)vtO6{e*CJnN95*y!+xzBr$WEA@1ni?X}F(;`)RnJhWlx_ zpN9KsxSxjmX}F(;`)RnJhWlx3*>7dJn=60+YS*vMcy8@b*=^Tvb*}vV`_;MfezTsx zr!S(iAa{QS4^IO+^{8-X&_VL%R zUmkJ4N8Ilz?x*2?8t$jzej4tl;eHzKr{R7Y?x*2?8t$jzej4tl;eHzKr{R7Y?x*2? z8t$jzej4tl;eHzKr{R7Y?x*2?8t$jzej4tl;eHzKr{R7Y?x*2?8dJX+a{m8QoSw{pwtEzuR}~Gxp>6tv#QB+m`F+%DEp~Tg)rCpT@WDr*S^F Ub{J!fF~%5Uj4{R-WB!eQ09Qe}2LJ#7 literal 0 HcwPel00001 diff --git a/data/credits.bmp b/data/credits.bmp new file mode 100644 index 0000000000000000000000000000000000000000..0d2fe7273cd151c44710dce0e75a7dec9d229ede GIT binary patch literal 65078 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 APyhe` literal 0 HcwPel00001 diff --git a/data/menu.bmp b/data/menu.bmp new file mode 100644 index 0000000000000000000000000000000000000000..97e7017633f949acad4a8ccce160c097fccae25f GIT binary patch literal 21078 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 literal 0 HcwPel00001 diff --git a/data/score.bmp b/data/score.bmp new file mode 100644 index 0000000000000000000000000000000000000000..3c3fd06b2d70a5caaf70321551372503535be191 GIT binary patch literal 2198 zcwVK_v5}lW5QX7Zl?+)I111s3ekK2MAe0w{Y>X?#(S|I=AcGLjm$CY37#MWBS9K+J zXJO~f^vnl*d;b0<>iGIOV&wcxd!l`cEtu&4`Lwm`;rfQXoz@Q*nHl*zVj`c&C;m+26Zu3wE&ICUCihf(2$P%K0+Bv103*Ui(&`Nl%NkT2v5`9i*sFUz+57-;KfqM0_+lD2HLfgHc^ z3%~FSzwj5ELE=LAg z;TQh8&G?01_=R8ig>|^tBgPKC;r5r_!EEP zhe;!6BgtY(!DQ0wpIf}F_i4SsajS3KZrf@7tX=C*jN`cdavsO?9IUAT#S#QFz z-R$kyJI1z)qbH&bcv$Zkbvm{w-OPRbvGT)uT|3rqD|NH3L;B=Sy%zU->_=V-bu%wp zk0!f}>h}1Ndi(!(>z$Wv^!<9rTCv~r7+dMC-npypsrEyb%7 literal 0 HcwPel00001 diff --git a/data/sponsor.bmp b/data/sponsor.bmp new file mode 100644 index 0000000000000000000000000000000000000000..65b846644a8ba6700be7fbea8d8297e9b7e3f1f3 GIT binary patch literal 3938 zcwUv4|5n>J6vx%A?wkQBYrMKhHuL7KbPZn7*l1dUl9sd;ZRxVoN|W{vXHSwx;q2@| z@*w+zN7(=SgMF{;0HddHa*3mR^~171`Cdsp-T&hz3-;$V#_pk1C>Ky(V{xdTE-}_w zsIT8yeUS}uO+s0)X{ed7VL>sKaEc+DhWH3EdKZWAr}e;Mg0>+W4kXM*d(+a zF=`l6Sxn)Qk8#B@{6nSiFY`{+(&3f`PUKkIcC#P zhd#l_{ZYcfhf3Ukih9Ho_`~2&+4OJJpPaCN{yjl)!ipjKR?}=(#mLEX?eyk2+);wt#473+N`1MntoaKt?QynJ5#P% z*Dsyc7JYAFj0kkJk+D$5kt;;-tU@R6jV5jmfvy2+!C33@vu8gizYZVVJolL3r`Tyi zoXd;GTEO#myVHBUo@~F~&I7MY<0ca$-p;bDO$zfSx8HI*h|E}}-niuzxAn?1_oa)7 z92sO9hSgX^c#v4cbb->R@oFVRRmDP9B6!t|EUN|Ry9Y!Myh@Kh=kNt^&wUrzjCIm0 z-**bCuLUR!;bE1r)<__#n6_4n$^oRZ-o;D>z>29xfDqZU-+p=4ORBQ`?(=Ig0oC-o zR?J8wh!$E&3ULDo?g-Eheh}c3_aoR2UE9R#^0*dYi_m}{1h(NLXC4~Iz4b3r|BV}P zryrqm-$zaMf?`zjQ^pu=bX=j(QfQ-uF{>z1t0Yz80a2Xsy8$E$z`Dki-geDPZ7d+F zZr>5j(j1gZk*l0VLoL86h{||pjbhfVh85Ao(uGRZDAZeKYJ6VD?9TTO9^6m9{^I)e zPp%2#XOxMJ+%%ezPc#Lp7;;2Pa!hq5z}@#nXK%MztVKJs^e@+x%^ zB!Vmb}gTVHZ-rK#--jh5Jye^IJH3>{mvMj(E`z3Fl zIT?1#y0oQz zjsm$$@+0LbUqX|mJ1C9xSQ%fU)-^jw$WIn4{3@71);o%&X@n9`UC3}tzhAQg*1H5x z(j*W31V&;fGt$KHpjhMt5?BGG#3GGc(MHgqWdii1^JKTTzE?DYyEHycV4@Osk#xtm zM*Hc`cwuDRyZhe$u<{g(p3^p(r7!0zG%6NQ23Bt;4Gs<3N(j%c8Y2eIsW^u4usrQo z4t>0niz2T1y`(n`S?nFwIIMtu2&@k%2P8hUJtx;cSEmU~yGB^u+yK+X1Q2C!j0k$&0lQ&^u_P!U|zN)+Lhi3y#CpbzjM!yy&2K3rZ(x|> z1oOt(jCc474~Lqub@=1=UuB~-Z!(y65a>@VVr9d%i0hm!o_@#liJO{6fb$s%P=!?u z3&HH*NBgv&9R$PoIX5hhuqeHF(7M`|Hs-W63~QzMA0+P-yeK;Gl05Hl-oZa6S*M+( qc|!k{@Fd|yy9kySG)l~CG-&QKG;5A9bJ<4$U16>CDqt6lvHt)GgT6%o literal 0 HcwPel00001 diff --git a/data/standings.bmp b/data/standings.bmp new file mode 100644 index 0000000000000000000000000000000000000000..89c3f794fa3fc32cacb7691d466c369b5270a5c9 GIT binary patch literal 2310 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 literal 0 HcwPel00001 diff --git a/game.c b/game.c new file mode 100644 index 0000000..11a2cb2 --- /dev/null +++ b/game.c @@ -0,0 +1,142 @@ +#include +#include + +#include + +#include "tennix.h" +#include "game.h" +#include "graphics.h" +#include "input.h" + +typedef struct { + float x; + float y; + float move_x; + float move_y; +} Ball; + +typedef struct { + float x; + float y; + unsigned char state; + unsigned int score; +} Player; + +void game() { + int i, w; + int werbung[4]; + + Ball ball = { GAME_X_MID, GAME_Y_MID, 2.0, 0.2 }; + Player player1 = { GAME_X_MIN-4, GAME_Y_MID, 0, 0 }; + Player player2 = { GAME_X_MAX, GAME_Y_MID, 0, 0 }; + + Uint8 *keys; + SDL_Event e; + + for( w=0; w<4; w++) { + werbung[w] = rand()%SPONSOR_COUNT; + } + + clearscr(); + updatescr(); + wait_keypress(); + + while( 1) { + clearscr(); + show_bmp( "data/court.bmp", 0, 0, 255); + + for( w=0; w<4; w++) { + show_sprite( SPONSOR_BMP, werbung[w], SPONSOR_COUNT, 60+50*w+5*(w>1), 7, 255); + } + + show_sprite( RACKET_BMP, (!player1.state), 4, player1.x, player1.y, 255); + show_sprite( RACKET_BMP, (!player2.state)+2, 4, player2.x, player2.y, 255); + + show_bmp( "data/ball.bmp", ball.x, ball.y, 255); + + show_bmp( "data/standings.bmp", 115, 160, 255); + show_digit( player1.score/10%10, 140, 180, 100); + show_digit( player1.score%10, 148, 180, 100); + show_digit( 10, 156, 180, 100); + show_digit( player2.score/10%10, 164, 180, 100); + show_digit( player2.score%10, 172, 180, 100); + + updatescr(); + + if( i%2) { + if( IS_OUT_X(ball.x) || IS_OUT_Y(ball.y)) { + if( (IS_OUT_Y(ball.y) && ball.move_y > 0) || (!(player1.state && IS_NEAR_Y(player1.y, ball.y)) && ball.x < GAME_X_MIN)) { + player2.score++; + ball.x = GAME_X_MID; + ball.y = GAME_Y_MID; + ball.move_x = fabsf( ball.move_x); + ball.move_y = -0.1; + wait_keypress(); + } + + if( (IS_OUT_Y(ball.y) && ball.move_y < 0) || (!(player2.state && IS_NEAR_Y(player2.y, ball.y)) && ball.x > GAME_X_MAX)) { + player1.score++; + ball.x = GAME_X_MID; + ball.y = GAME_Y_MID; + ball.move_x = -fabsf( ball.move_x); + ball.move_y = 0.1; + wait_keypress(); + } + + if( IS_OUT_X(ball.x)) { + if( ball.move_x < 0) { + ball.x = GAME_X_MIN; + ball.move_x = (2.0+(2.0*(rand()%10))/10.0); + ball.move_y = GET_MOVE(player1.y,ball.y); + } else { + ball.x = GAME_X_MAX; + ball.move_x = -(2.0+(2.0*(rand()%10))/10.0); + ball.move_y = GET_MOVE(player2.y,ball.y); + } + } + } + + ball.x += ball.move_x; + ball.y += ball.move_y; + + if( player1.state) player1.state--; + if( player2.state) player2.state--; + } + + limit_value( &player1.y, GAME_Y_MIN, GAME_Y_MAX); + limit_value( &player2.y, GAME_Y_MIN, GAME_Y_MAX); + + SDL_PollEvent( &e); + keys = SDL_GetKeyState( NULL); + + if( keys['2']) player1.y-=3; + if( keys['w']) player1.y-=2; + if( keys['s']) player1.y+=2; + if( keys['x']) player1.y+=3; + if( keys['d']) player1.state = 10; + + if( keys['9']) player2.y-=3; + if( keys['o']) player2.y-=2; + if( keys['l']) player2.y+=2; + if( keys['.']) player2.y+=3; + if( keys['k']) player2.state = 10; + + if( keys['f']) SDL_WM_ToggleFullScreen( screen); + + if( keys[SDLK_ESCAPE] || keys['q']) break; + + + SDL_Delay( 10); + i++; + } + +} + +void limit_value( float* value, float min, float max) { + if( *value < min) { + *value = min; + } else if( *value > max) { + *value = max; + } +} + diff --git a/game.h b/game.h new file mode 100644 index 0000000..f39be4d --- /dev/null +++ b/game.h @@ -0,0 +1,25 @@ +#ifndef __GAME_H +#define __GAME_H + +#include + +#define GAME_X_MIN 41.0 +#define GAME_X_MAX 270.0 +#define GAME_X_MID ((GAME_X_MIN+GAME_X_MAX)/2) + +#define GAME_Y_MIN 20.0 +#define GAME_Y_MAX 150.0 +#define GAME_Y_MID ((GAME_Y_MIN+GAME_Y_MAX)/2) + +#define IS_OUT_Y(y) (yGAME_Y_MAX) +#define IS_OUT_X(x) (xGAME_X_MAX) + +#define PLAYER_AREA 10.0 +#define IS_NEAR_Y(py,by) (fabsf(py+(PLAYER_AREA/2)-by) + +#include + +#include "tennix.h" +#include "graphics.h" +#include "input.h" + +void show_sprite( const char* name, int pos, int items, int x_offset, int y_offset, int opacity) { + SDL_Surface *bitmap; + SDL_Rect src, dst; + + bitmap = SDL_LoadBMP( name); + if( bitmap == NULL) { + fprintf( stderr, "Error: %s\n", SDL_GetError()); + return; + } + + SDL_SetAlpha( bitmap, SDL_SRCALPHA | SDL_RLEACCEL, opacity); + SDL_SetColorKey( bitmap, SDL_SRCCOLORKEY, SDL_MapRGB( bitmap->format, 0, 0, 0)); + + dst.w = src.w = bitmap->w/items; + dst.h = src.h = bitmap->h; + src.x = src.w*pos; + src.y = 0; + dst.x = x_offset; + dst.y = y_offset; + + SDL_BlitSurface( bitmap, &src, screen, &dst); + SDL_FreeSurface( bitmap); +} + +void show_bmp( const char *name, int x_offset, int y_offset, int opacity) { + show_sprite( name, 0, 1, x_offset, y_offset, opacity); +} + +void show_digit( int zahl, int x_offset, int y_offset, int opacity) { + show_sprite( "data/score.bmp", zahl, 11, x_offset, y_offset, opacity); +} + +void introimage( char *name) { + int i; + + for( i=0; i<256; i+=10) { + clearscr(); + show_bmp( name, 0, 0, i); + updatescr(); + SDL_Delay( 30); + } + + //SDL_Delay( 500); + wait_keypress(); + + for( i=255; i>=0; i-=10) { + clearscr(); + show_bmp( name, 0, 0, i); + updatescr(); + SDL_Delay( 30); + } + + clearscr(); +} + +void clearscr() { + SDL_Rect rect; + + rect.x = 0; + rect.y = 0; + rect.w = WIDTH; + rect.h = HEIGHT; + + SDL_FillRect( screen, &rect, SDL_MapRGB( screen->format, 0, 0, 0)); +} + +void updatescr() { + SDL_UpdateRect( screen, 0, 0, 0, 0); +} + diff --git a/graphics.h b/graphics.h new file mode 100644 index 0000000..5f432de --- /dev/null +++ b/graphics.h @@ -0,0 +1,12 @@ +#ifndef __GRAPHICS_H +#define __GRAPHICS_H + +void show_sprite( const char*, int, int, int, int, int); +void show_bmp( const char*, int, int, int); +void show_digit( int, int, int, int); +void introimage( char*); +void clearscr(); +void updatescr(); + +#endif + diff --git a/images/racket.gif b/images/racket.gif new file mode 100644 index 0000000000000000000000000000000000000000..b1e12b25f6dba091eb5f49aa1a1b02bc8546a714 GIT binary patch literal 292 zcwTe&bhEHbRA5kGXl7twXlP&nk^dVS8V(#d(BQ!Ezro@Ee~|G1|Np^qC_wQi3p0q; z0TCcGm{~3gobX(|*W&hp>I(~waHeP$D2h$F=T)cqbkQY-o^+jkrU|#V$K<%pV5oIe z%((VjF<1M>r;s<1wHF00pL9)Iera)q`dOFVFA{!kGTl|~6{`0(B-{V7b|Yuqug03- z;(Uf`8%@1tGgpi3G<}-@i^AXl{mJTmQt4_sCRU8BYPz$c*cQo3v4qZMUAI(tH9Pz2 zwB>9YgjhH>Z{}EIw2pP>E{;9y#||iMKhnDI{1#!E<%cy{E*xLO$jP}*y*TU5yZ>M)j$~<`XsWJk>%MR-&vb3yc&_h!@BhG{ za25y%hRCEcR6H)9(CDLRlv=M!suRoY?zG;pms;jK6rdqDC zva__crfQ$Iy1Tr(u)V;+!lbw%_&aA~K$IsN&qQBPJ&Cw^*+TX+2;N!g9 zCf?-fwc_gSuI44^?(?eb^!KIkB=Y$Eq4xgp=^Mc>;5~o_=M5B5Frhny4%ICT(J*2< zh!)391W_^nBRGs6wQc;+F=RH7CaaC~P%nyBZV{N_AHLNSJW}&6YmG&pIw!_9+ zC<`|g+PbIYR_Mg{(WbtD2Ym`mxX<6hi17?g%vjFh#*o`Aj!aoolggME8B24IZneAA zJR{RfL3CWs20=eFEp+W>G@VfgR4r4sJJJ(a2h**L_BPw?a7*B=6gWQL%7~Y9EzNj3 z<>B52gf5kNH|ON2AC>M;doAG+ylcfi54leA;J`x=Ka2e?^P|y!Q~$udSo!MUpN373 zz61OJ@8EY4cl`j^ihm6ls1|>-5h##=)*#4$f~!y{i+-&!c$;vDNmJ>I_Pn6ZdmGvO*Z#xXsJHcYKgO^80&Sp*4FDuw+i`da;Fkit1O|u66|yT z$KJPVhr=4VDw3H_*KB~#o)|5Y(@ME)cGn(QEK}hw*ll^=TDh&3F}iv#oYi($ZiVAg zHLohkmNII4_u^PDSN-xBu#f4cH!zsl61gs!3GIvQ!D=Rq<-%^h+m6G|TI{F9Vp5E! z$9fh_C&+@fi>t<%3g9Kgh;qy($&AA6sK^_mY^uw4$}FkQz+jB6&9Dw&vamph7;k|r zbNVk?NrT$7s5EDjY^MNB{j{=2KghGHLo>Uztyzy)w5~!sDR#qA-#oUjWy`wui*M7I zcF7&ixRz*#ZFuDW&`wTf zW{**Zxwe{D%=u-RT}`#sr58ea>Ypnd`p2br9$D)XzYb*VtCvoD$F>VvxyqWFzVuwe z^L^Fh#2POy&VVX!?(Zu*PcQR|N{{c=`XVpw?l1Qqv-dMwE+_aqw=H?&Tmo;c_5M;% zDf%IRI2?M-hwXzP=p;xeAXZF=0YqZ_q&PqIy^x9nEMd+6T!=Iq65w>j z!{RDZ*h47JP>d}@qg|W`J2R5Yi}@l28LtP&;q4`iT-2HxYp6umF_Be9yxSf_0meFd zF?)ghn;Y$A$U$Pwid}SMAti}DIkNF~iv(CB^Z3UjYEf#H9K{@ym`SE>vWSq>V=0Mu z%JfB#k}`ZFEFFo+RCZF3pHv$si8#Jo(hZfbT;&~GIl)AJaF)K@8!atqOcM&TG+6H%qeB)%NI9vG62*wkT z^R#9!t9ih4Mlzl2StmY&SPi|tfpng24x7rE+%0`w`asE^#L~D0T zbWv278|7U`;g!%FhO~RBi;V12TA0bO6frA(DPUYG)4;^Erk$WEPWf`vonqpmctOP| zO)|-#_Uw{jDXLMyR??;R5U5TSB~rbj)Tpjws#&S3RlkB&t7vtru^4Jdz6#bVmi2#q zk8PwUZbr}DXd`$;Ma^O z*07DW$YTQ=*@#RQua$MkW$T*RS3-5Got@@qts2@5jy9^Lz2a$|n%YR})Tf!~DQqY4 z+SyVGOWo>Dp$XQ_ vu67kL-R*jJx!wJ)c*RhJ@tXI%=uNMB*UR4ay7#^Cjjw#?OW*o-AOQe7aM#fC literal 0 HcwPel00001 diff --git a/images/tennis2.jpeg b/images/tennis2.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..9f279288b035524b0a454d60aa06d1ec28238ad1 GIT binary patch literal 31866 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 literal 0 HcwPel00001 diff --git a/input.c b/input.c new file mode 100644 index 0000000..4f5b887 --- /dev/null +++ b/input.c @@ -0,0 +1,20 @@ +#include + +#include "input.h" + +void wait_keypress() { + SDL_Event e; + unsigned char done = 0; + + SDL_Delay( 100); + + /* clean up all events */ + while( SDL_PollEvent( &e)); + + while( !done) { + if( SDL_PollEvent( &e)) { + done = (e.type == SDL_KEYUP || e.type == SDL_MOUSEBUTTONUP); + } + } +} + diff --git a/input.h b/input.h new file mode 100644 index 0000000..007c987 --- /dev/null +++ b/input.h @@ -0,0 +1,7 @@ +#ifndef __INPUT_H +#define __INPUT_H + +void wait_keypress(); + +#endif + diff --git a/makefile b/makefile new file mode 100644 index 0000000..9f991ef --- /dev/null +++ b/makefile @@ -0,0 +1,18 @@ +CC = gcc + +LIBS = $$(pkg-config --libs sdl) +CFLAGS = -Wall $$(pkg-config --cflags sdl) + +SRC = tennix.c game.c graphics.c input.c +OBJ = tennix.o game.o graphics.o input.o + +tennix: $(OBJ) + $(CC) $(CFLAGS) -o tennix $(OBJ) $(LIBS) + +tennix.o: tennix.c tennix.h game.h graphics.h input.h +graphics.o: graphics.c graphics.h tennix.h input.h +game.o: game.c game.h graphics.h tennix.h + +clean: + rm -f *.o tennix + diff --git a/tennix.c b/tennix.c new file mode 100644 index 0000000..7ad3c30 --- /dev/null +++ b/tennix.c @@ -0,0 +1,81 @@ +#include +#include +#include + +#include "tennix.h" +#include "game.h" +#include "graphics.h" + + +SDL_Surface *screen; + + +int main( int argc, char** argv) { + int i = 0; + int mx, my; + Uint8 *keys; + Uint8 mb; + SDL_Event e; + + srandom( (unsigned)time( NULL)); + + if( SDL_Init( SDL_INIT_VIDEO) == -1) { + fprintf( stderr, "Can't init SDL: %s\n", SDL_GetError()); + exit( 1); + } + + atexit( SDL_Quit); + + if( (screen = SDL_SetVideoMode( WIDTH, HEIGHT, 16, SDL_HWSURFACE)) == NULL) { + fprintf( stderr, "Can't set video mode: %s\n", SDL_GetError()); + exit( 1); + } + + SDL_WM_SetCaption( "Tennix! SDL", "Tennix"); + SDL_ShowCursor( SDL_DISABLE); + SDL_EnableKeyRepeat (SDL_DEFAULT_REPEAT_DELAY, 1); + + introimage( "data/title.bmp"); + + while( 1) { + SDL_PollEvent( &e); + keys = SDL_GetKeyState( NULL); + mb = SDL_GetMouseState( &mx, &my); + + if( keys[SDLK_ESCAPE] || keys['q']) { + break; + } + + if( keys['f']) { + SDL_WM_ToggleFullScreen( screen); + } + + clearscr(); + show_bmp( "data/menu.bmp", 180, 0, 255); + show_sprite( "data/animation.bmp", (i++/12%4), 4, 20, 30, 255); + show_sprite( RACKET_BMP, (mb&SDL_BUTTON( SDL_BUTTON_LEFT)) > 0, 4, mx, my, 255); + updatescr(); + + if( mb & SDL_BUTTON( SDL_BUTTON_LEFT)) { + if( M_POS_START_GAME(mx,my)) { + game(); + SDL_Delay( 50); + while( SDL_PollEvent( &e)); + } + if( M_POS_HIGH_SCORES(mx,my)) { + introimage( "data/hiscores.bmp"); + } + if( M_POS_CREDITS(mx,my)) { + introimage( "data/credits.bmp"); + } + if( M_POS_QUIT(mx,my)) { + break; + } + } + SDL_Delay( 10); + } + + SDL_Quit(); + return 0; +} + diff --git a/tennix.h b/tennix.h new file mode 100644 index 0000000..fb6ed87 --- /dev/null +++ b/tennix.h @@ -0,0 +1,23 @@ +#ifndef __TENNIX_H +#define __TENNIX_H + +#include + +#define WIDTH 320 +#define HEIGHT 200 + +#define SPONSOR_BMP "data/sponsor.bmp" +#define SPONSOR_COUNT 6 + +#define RACKET_BMP "data/player-racket.bmp" + +#define M_POS_XPOS(x) (x>170 && x<280) + +#define M_POS_START_GAME(x,y) (M_POS_XPOS(x) && y>60 && y<70) +#define M_POS_HIGH_SCORES(x,y) (M_POS_XPOS(x) && y>80 && y<90) +#define M_POS_CREDITS(x,y) (M_POS_XPOS(x) && y>100 && y<115) +#define M_POS_QUIT(x,y) (M_POS_XPOS(x) && y>140 && y<150) + +extern SDL_Surface *screen; + +#endif -- 2.11.4.GIT