Make 1992/kivinen/kivinen.c alt code
Originally the main version was changed to have a call to usleep(3) as the game moves so fast. It was discussed a while back however to in cases like this to make it so that the build/use/try sections refer to the alt code and then instead of an alternate code section have an original code section. Because of this the modified code was changed to be an alt version and then restore the original with the fixed code. As for the fixed code (and also alt code) I have made it look more like the original by changing the 'ext' macro to be 'exit' (with the comma operator). I tried and believe I succeeded (mostly if not totally) in making the lines start and end on the same columns and in at least some lines the same character starts and ends the lines as the original.
This commit is contained in:
1 parent
504483bf41
commit
ac1334c84d
6 files changed
+94
-23
No files matched your search
@@ -1,3 +1,4 @@
|
||||
kivinen
|
||||
kivinen.alt
|
||||
kivinen.orig
|
||||
prog.orig
|
||||
@@ -58,7 +58,7 @@ ARCH=
|
||||
|
||||
# Defines that are needed to compile
|
||||
#
|
||||
CDEFINE= -DZ=15000
|
||||
CDEFINE= -DZ=20000
|
||||
|
||||
# Include files that are needed to compile
|
||||
#
|
||||
@@ -113,8 +113,8 @@ OBJ= ${PROG}.o
|
||||
DATA=
|
||||
TARGET= ${PROG}
|
||||
#
|
||||
ALT_OBJ=
|
||||
ALT_TARGET=
|
||||
ALT_OBJ= ${PROG}.alt.o
|
||||
ALT_TARGET= ${PROG}.alt
|
||||
|
||||
|
||||
#################
|
||||
|
||||
+38
-8
@@ -3,14 +3,14 @@
|
||||
If your machine support the X Window System, Version 11:
|
||||
|
||||
```sh
|
||||
make all
|
||||
make alt
|
||||
```
|
||||
|
||||
NOTE: this entry requires `X11/Xlib.h` header file and the X11 library to
|
||||
compile. macOS users running Mountain Lion and later will need to download and
|
||||
install [XQuartz](https://www.xquartz.org) in order to compile and run this
|
||||
entry.
|
||||
We recommend the alt version first as the original goes too fast on modern
|
||||
systems. See [original code](#original-code) for the original should you wish to
|
||||
see what we mean.
|
||||
|
||||
You can reconfigure the value to `usleep(3)`; see [try](#try) section below.
|
||||
|
||||
### Bugs and (Mis)features:
|
||||
|
||||
@@ -26,15 +26,45 @@ For more detailed information see [1992 kivinen in bugs.md](/bugs.md#1992-kivine
|
||||
### Try:
|
||||
|
||||
```sh
|
||||
./kivinen
|
||||
./kivinen.alt
|
||||
|
||||
./kivinen a
|
||||
./kivinen.alt a
|
||||
|
||||
./kivinen a b
|
||||
./kivinen.alt a b
|
||||
```
|
||||
|
||||
See also the author's remarks for other variations.
|
||||
|
||||
Also try changing the speed this game moves. For instance if you wish to change
|
||||
the `usleep(3)` value to `30000` from `20000`, try:
|
||||
|
||||
```sh
|
||||
make clobber CDEFINE="-DZ=30000" alt # make it slower
|
||||
|
||||
make clobber CDEFINE="-DZ=10000" alt # make it faster
|
||||
```
|
||||
|
||||
Then use the same syntax as above and described by the author.
|
||||
|
||||
|
||||
## Original code:
|
||||
|
||||
As noted above, the alt version is recommended because the code goes too fast in
|
||||
modern systems. If you wish to see the original you may do so with the original
|
||||
code.
|
||||
|
||||
|
||||
### Original build:
|
||||
|
||||
```sh
|
||||
make all
|
||||
```
|
||||
|
||||
|
||||
### Original use:
|
||||
|
||||
Use `kivinen` as you would `kivinen.alt`.
|
||||
|
||||
|
||||
## Judges' remarks:
|
||||
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
#include <X11/Xlib.h>
|
||||
#define exit(a) (exit(a),0)
|
||||
# define X( x,v,y) XMoveWindow(d,s[x],(v)*z,(y)*z)
|
||||
# define _ ButtonPressMask|ButtonReleaseMask
|
||||
# define I( x,y) XSelectInput(d,s[x],y)
|
||||
# define N( v) (XMapWindow(d,s[v]),v)
|
||||
# define V VisibilityChangeMask
|
||||
# define A XCreateSimpleWindow
|
||||
# define D DefaultScreen(d)
|
||||
# define E r.xbutton.button
|
||||
# define R BlackPixel(d,D)
|
||||
# define S r.xvisibility
|
||||
|
||||
int main(a)int a;{Window s[53];int w,u,i,c,y,l=0
|
||||
,q,e=32,t,k,j=~0,z=(a+1)/2,x=a&1,v=z&1;XEvent r;Display*
|
||||
d=XOpenDisplay("");s[0]=A(d,DefaultRootWindow(d),200,200,(x&
|
||||
v?330:120)*z,215*z,2,R,R);I(N(c=0),_);for(;c<(x?32:52);c++){s[
|
||||
c+1]=A(d,s[0],x ?c*20*z:(c-1)%10 *12*z,x?-20*z:(
|
||||
c-1)/10*12*z,x ?z*(c^31?10: 2):z*10*(c?1:2
|
||||
), x& v?z*10: (c &&!x?10:1+ x) *z,k =q=1, R,
|
||||
WhitePixel(d ,D));I (N(c+1), V);}X( N(1),y=(x&v)
|
||||
*115+50,x*70+ 60 ); X(N(c-- )+ 1,x?-10:(i=y)
|
||||
,u=!x*130-20); while(c &&e< 160){if(x){if(
|
||||
v){l=!(e &32)*9; for(w=30; w--;){ if(s[w+2]){ k=w%
|
||||
10;l=e&32?k>l?k:l:k<l?k:l;X(w+2,10+k *20+q,(w/10)*20+e);}}l*=20;
|
||||
e&31?e++:e&32?(q++,(q+l>300?e++:0)):(q--,q+l<10?e++:0); } u>140?
|
||||
exit(c):u>-20?X(32,i,u-=(v?5:-1 )):(!v?(u =5,srandom(time(0)),i=
|
||||
random()%88+6):0); } else{k>0?i+=(i>105?k= -k:k):(i+=(i<1?k= -k:
|
||||
k)); j>0?u +=(u>140?exit(++c):j):(u+=(u <1?j= -j:j
|
||||
)); X( 52,i,u);}XSync(d,0); while(
|
||||
XCheckMaskEvent(d ,_|V,&r))if(!(r. type==ButtonPress
|
||||
?(E&1||!x||!v?t=E*4-8 :u<0?i=y+4,u=122:1):r
|
||||
.type==ButtonRelease&&E?t=0,1:r.type^VisibilityNotify|S.state^1)
|
||||
)for(x&v?(u= -15),w++:(w=0);++w <52-x*20;)if
|
||||
(s[w] ==S.window)x&&v|| w ^1?
|
||||
XUnmapWindow (d,s[w]) ,s[w]=0,c--:
|
||||
0,l=1; if(!x&&l)j= -j,l=0; if(l&x&&!v
|
||||
)u=~19,c--,l=0;t=(!x||!v) &&(y<5&&t<0||y>95&&t>0)?0:t
|
||||
;s[1]?X(1,y+=x&v?t:t/(x+1),130):exit(++c);usleep(Z);};return c;}
|
||||
@@ -1,5 +1,5 @@
|
||||
#include <X11/Xlib.h>
|
||||
#define ext(a) (exit(a),0)
|
||||
#define exit(a) (exit(a),0)
|
||||
# define X( x,v,y) XMoveWindow(d,s[x],(v)*z,(y)*z)
|
||||
# define _ ButtonPressMask|ButtonReleaseMask
|
||||
# define I( x,y) XSelectInput(d,s[x],y)
|
||||
@@ -24,9 +24,9 @@
|
||||
v){l=!(e &32)*9; for(w=30; w--;){ if(s[w+2]){ k=w%
|
||||
10;l=e&32?k>l?k:l:k<l?k:l;X(w+2,10+k *20+q,(w/10)*20+e);}}l*=20;
|
||||
e&31?e++:e&32?(q++,(q+l>300?e++:0)):(q--,q+l<10?e++:0); } u>140?
|
||||
ext(c):u>-20?X(32,i,u-=(v?5:-1 )) :(!v?(u =5,srandom(time(0)),i=
|
||||
exit(c):u>-20?X(32,i,u-=(v?5:-1 )):(!v?(u =5,srandom(time(0)),i=
|
||||
random()%88+6):0); } else{k>0?i+=(i>105?k= -k:k):(i+=(i<1?k= -k:
|
||||
k)); j>0?u +=(u>140?ext(++c):j):(u+=(u <1?j= -j:j
|
||||
k)); j>0?u +=(u>140?exit(++c):j):(u+=(u <1?j= -j:j
|
||||
)); X( 52,i,u);}XSync(d,0); while(
|
||||
XCheckMaskEvent(d ,_|V,&r))if(!(r. type==ButtonPress
|
||||
?(E&1||!x||!v?t=E*4-8 :u<0?i=y+4,u=122:1):r
|
||||
@@ -36,4 +36,4 @@
|
||||
XUnmapWindow (d,s[w]) ,s[w]=0,c--:
|
||||
0,l=1; if(!x&&l)j= -j,l=0; if(l&x&&!v
|
||||
)u=~19,c--,l=0;t=(!x||!v) &&(y<5&&t<0||y>95&&t>0)?0
|
||||
:t;s[1]?X(1,y+=x&v?t:t/(x+1),130):ext(++c);usleep(Z);};return(c);}
|
||||
:t;s[1]?X(1,y+=x&v?t:t/(x+1),130):exit(++c);};return(c);}
|
||||
Reference in new issue
Block a user