diff --git a/2001/kev/.gitignore b/2001/kev/.gitignore index 961ec1d0c..1fa9f0a7b 100644 --- a/2001/kev/.gitignore +++ b/2001/kev/.gitignore @@ -1 +1,2 @@ kev +kev.alt diff --git a/2001/kev/Makefile b/2001/kev/Makefile index 9ef43bc04..c1d5aac15 100644 --- a/2001/kev/Makefile +++ b/2001/kev/Makefile @@ -59,7 +59,7 @@ ARCH= # Defines that are needed to compile # -CDEFINE= -DPORT=5455 -DSPEED=50 -Dl_="socket(il.sin_family=AF_INET,SOCK_STREAM,0)" +CDEFINE= -DPORT=5455 -DSPEED=100 -Dl_="socket(il.sin_family=AF_INET,SOCK_STREAM,0)" # Include files that are needed to compile # @@ -115,8 +115,8 @@ OBJ= ${PROG}.o DATA= TARGET= ${PROG} # -ALT_OBJ= -ALT_TARGET= +ALT_OBJ= ${PROG}.alt.o +ALT_TARGET= ${PROG}.alt ################# @@ -138,6 +138,9 @@ ${PROG}: ${PROG}.c alt: data ${ALT_TARGET} @${TRUE} +${PROG}.alt: ${PROG}.alt.c + ${CC} ${CFLAGS} $< -o $@ ${LIBS} + # data files # data: ${DATA} diff --git a/2001/kev/README.md b/2001/kev/README.md index 3e95bab9c..6ebb48f2d 100644 --- a/2001/kev/README.md +++ b/2001/kev/README.md @@ -1,11 +1,8 @@ # Best Curses Game -Kevin Pulo -School of Information Technologies -Madsen Building F09 -University of Sydney, NSW, 2006 -Australia - +Kevin Pulo
+Australia
+
Mastodon: ## To build: @@ -17,15 +14,49 @@ make ## To run: ```sh -./kev hostname +./kev # in one terminal + +./kev hostname # in another terminal ``` +NOTE: each player's paddle is at the bottom and the opponent at the top. + +[Cody Boone Ferguson](/winners.html#Cody_Boone_Ferguson) slowed down the ball +just a tad as it went too fast for the speed at which the paddles move even when +holding down the movement keys. If you need to change the speed you can +reconfigure it like (say for over a network and not the same host): + +```sh +make clobber SPEED=50 all # default value which is very fast +``` + +There is an alternate version which lets you use the arrow keys to control your +paddle. See below Alternate code. + ## Try: ```sh +./kev ./kev localhost ``` +### Alternate code: + +[Cody Boone Ferguson](/winners.html#Cody_Boone_Ferguson) provided an alternate +version which lets you use the arrow keys on your keyboard instead of the more +awkward ',' and '.'. To use: + +```sh +make alt +``` + +Use `kev.alt` as you would `kev`. + +What happens if you use both, one in one terminal and the other in another +terminal? + +Thank you Cody! + ## Judges' remarks: Continuing with this year's "retro game" theme, this is another old game; @@ -45,7 +76,7 @@ box. * TCP sockets * curses -* usleep +* `usleep()` ### DESCRIPTION @@ -117,18 +148,17 @@ terminal size). ### BUILDING -Just run `make`to use the Makefile as above. The `SPEED` variable in the Makefile -controls the speed of the game (defaults to `50`). This speed is -the delay between frames in milliseconds. Thus a value of 0 will -make the game go as fast as your network can handle, and values -less than 50 are useful for larger terminals or more exciting -games. The program needs bandwidth equal to 1/s bytes per second -(where `s` is the speed value). Any latency on the network will -be added to `s` - so you should probably subtract any latency from -the value of `s` you want to have. Given that `loopback` and fast -Ethernet LANs are both much less than 1ms of latency, you should -only need to worry about this if you plan on playing over a slower -link like a cable modem, DSL, or (God-forbid) dial-up. +Just run `make`to use the Makefile as above. The `SPEED` variable in the +Makefile controls the speed of the game (defaults to `50`). This speed is the +delay between frames in milliseconds. Thus a value of 0 will make the game go +as fast as your network can handle, and values less than 50 are useful for +larger terminals or more exciting games. The program needs bandwidth equal to +1/s bytes per second (where `s` is the speed value). Any latency on the network +will be added to `s` - so you should probably subtract any latency from the +value of `s` you want to have. Given that `loopback` and fast Ethernet LANs are +both much less than 1ms of latency, you should only need to worry about this if +you plan on playing over a slower link like a cable modem, DSL, or (God-forbid) +dial-up. The TCP port to use for network communications is specified by the `PORT` variable in the Makefile. If the default of `5455` is diff --git a/2001/kev/kev.alt.c b/2001/kev/kev.alt.c new file mode 100644 index 000000000..fc2ce1300 --- /dev/null +++ b/2001/kev/kev.alt.c @@ -0,0 +1,122 @@ +#include +#include +#include +#include +#include +#include + +#define o0(M,W) mvprintw(W,M?M-1:M,"%s%s ",M?" ":"",_) +#define O0(M,W) M##M=(M+=W##M)-W##M +#define l1(M,W) M.tv_##W##sec +#define L1(m,M,l,L,o,O) for(L=l;L--;)((char*)(m))[o]=((char*)(M))[O] +#define I1 lL,(struct sockaddr*)&il +#define i1 COLS +#define j LINES +#define L_ ((j%2)?j:j-1) + +fd_set I;struct socka\ +ddr_in il;struct host\ +ent*LI; struct timeval +IL,l;char L[9],_[1<<9] + ;void ___(int __ + ){_[__--]=+0;if( + ++__)___(--__);_ + [__]='=';}double + o,oo=+0,Oo=+0.2; + long O,OO=0,oO=1 + ,ii,iI,Ii,Ll,lL, + II=sizeof(il),Il + ,ll,LL=0,i=0,li, + lI;int main(int\ + iL,char *Li[]){\ + initscr();keypad + (stdscr,1);cbreak + ();noecho();nonl + ();___(lI=i1/4); + _[0]='[';_[lI-1] + =']';L1(&il,&_,\ + II,O,+O,+lI);il. + sin_port=htons(( + unsigned long)(\ + PORT&0xffff));lL + =l_;if(iL=!--iL) + {il. sin_addr .\ + s_addr=0;bind(I1 + ,II);listen(lL,5 + );lL=accept(I1,& + II);}else{oO-=2; + LI=gethostbyname + (Li[1]);L1(&(il. + sin_addr),(*LI). + h_addr_list[0],\ + LI->h_length,iI, + iI,iI);(*(&il)). + sin_family=(&(*\ + LI))->h_addrtype + ;connect(I1,II); + }ii=Ii=(o=i1*0.5 + )-lI/2;iI=L_-1;O + =li=L_*0.5;while + (_){mvaddch(+OO, + oo,' ');o0(ii,iI + );o0(Ii,Il-=Il); + mvprintw(li-1,Il + ,"%d\n\n%d",i,LL + );mvhline(li,+0, + '-',i1);mvaddch( + O,o,'*');move(li + ,Il);refresh();\ + timeout(+SPEED); + gettimeofday(&IL + ,+0);Ll=getch(); + timeout(0);while + (getch()!=ERR);\ + if(Ll=='q'&&iL)\ + write(lL,_+1,1); + if(ii>(ll=0)&&Ll + ==KEY_LEFT){write(lL, + _,-(--Il));}else + if(Ll==KEY_RIGHT&&ii+\ + lIi1){o=i1+i1-o + ;Oo*=-1;}if(o>=( + Ii+=ll)&&O<1&&oO + <0&&o= + (ii+=Il)&&O>iI-1 +&&oO>0&&o+iI){O-=O;i++; +}}endwin();return(0);} +