Register forum user name Search FAQ

Gammon Forum

Notice: Any messages purporting to come from this site telling you that your password has expired, or that you need to verify your details, confirm your email, resolve issues, making threats, or asking for money, are spam. We do not email users with any such messages. If you have lost your password you can obtain a new one by using the password reset link.

Due to spam on this forum, all posts now need moderator approval.

 Entire forum ➜ MUDs ➜ General ➜ Adventure game written in C, somewhat obscure ...

Adventure game written in C, somewhat obscure ...

It is now over 60 days since the last post. This thread is closed.     Refresh page


Posted by Nick Gammon   Australia  (23,173 posts)  Bio   Forum Administrator
Date Fri 16 Apr 2004 12:10 AM (UTC)

Amended on Fri 16 Apr 2004 12:18 AM (UTC) by Nick Gammon

Message
Here is an interesting example of coding an adventure game in C. It can be found on the International Obfuscated C Code Contest page at:

http://www.ioccc.org/index.html

The entire source code of the adventure is here:


#include <time.h>
#include <stdio.h>
#include <stdlib.h>

#define __ "Y\n : ! ,.?>"
#define D(f) ; } int f(int i) { return
#define E(a,b,c,d,e) b##d,c,e,a
#define e(a,b,c,d) a##b##c##d
#define B *p++ - ' ' || !p++
#define _(k) o(*#k - 64)
#define G(g,l,k,o,e,d,n,c,i,b,a,f,j,m,p) \
a#b#c#d#e#f#g#a#i#j#k#l#m#n#o e,i l##c,m##b; d g j n h(k 30:1); o p f}

			G(E(f ( 9) -s
				? -s + 'q'
				? f( 5 ) -s &&'d' -
			       s?U(  3 ) ||_(J)
				:A ( s- f( 5 ))
				:(c= 4 *
			      4):

	g(0)D(

		V)c <= 3 *4 + 3&&c && V(X ( i) ) ;
	}

	int , time ( 0)& , c - 15 || P

	(1

):0,
	& ( !!d	    ( 0 )
	  ||(a=! _(S)) ,b= 0 )||
	a
		?d(a  = 0)
			? _
(I):			w ( j =!W(j=_ (V ))) ,

				l(_
				    (Y+ s ) )
				  )e

	(
	main(){;
	    ;;;s , ra,
	 n, d), && C ( j +R( s-j+t( i- 1) )
		   )D( W)m[ c* 4| z( j ) ]
	    &&_( X )E (d	   ( 0
		       )&&  R( 6)/ 6
			   ? c= 17|_ ( T )
			   :01,||+
			       , v =i & 3 ^ 2
			       ,+j & 3&&W ( j)||y ( 10 )D (k) --
				   j ? k ( O[j]=R(15 ))
: 1 D
			 ( H )o ( 7+! !  i+3 )+

				  i?

    c=i /4 & 63,
    a= 1

:0)

    D ( f )( p =M ,q ( i),*p+86)
    D ( l) * f, B?

			   B ?B ?B? B ?B ?B
		 ?7 :B?B ?36: 59 * 89 *5 * 2 :B?6587
	     *77 :9 + 2:B ?B?B?9: 5 : 37 : B ? 5 +5:4:20:
			       B?B?B?32

		  :e( 4, 3 , 1 *4 * 59  * 1 , 7):B?
			       17: 34 : 19 :B ?
				      8 *2 :B ?
				      2:26: B?
				       B?B ?B ?

	82 *+ 576: B ?33 :22  :5 * 5:3 *4 :3:B ?B ?B? B ?6 +
	+ 17 : B?B?13:6 : 9 *2:B?15 : 7 *2 :

				 B ?
				 B ?
			    27:24: 31 : B?


		  B? +  29 :,
		  m [a^ 2  ] =T( 8 * 7) ;j= 3
		      ;
		    ;
	      Q, ;int
	       P ( int
		  i )

      {time_t(x )				=+ 0+
	time(0) ;                       j=E( u (i  ) : i D(R )e(r ,
      a ,n ,d) ()% i+1,                 ( e( l  , o,
      caltim , e ) (& x))     ->e(          tm_h , o, u  , r)
	;retur ,				i?_( W
):	_( U) D(Y)			  *p&&  *p<3 * 11 ?
	  ( ++ p ),				  n j= + 34  +( j< 6
							||j>19 ),Y (i)
: *p

    D ( F)	i == 9  ?1 :
	F(	(i+ 7)% ( 7 +  3) ) +!O[ i
   ]D(u)	*p &&* p -32? p ++)
    D (h  )	i ?*++*S=i%  ( 38)- 1,
    D ( A )!    n?i&&!g ( (0  ) ) ||K (  j=4| ! !i ) :  N(!i )D(
                Q)++j<

	       (s )  &&Q ( t( i)^i )
    D( U	)i>= 0 ?U( i- 1 )||~f (i+1 ) == ~  s
				      &&H (m[c* 4 |z(i)] )
:0;D


		( X) + b && b<, for (*S = M  ; *
p; ),

		gets ( L, + 98 , stdin ) ?
		   p= L, E (r( 0 ): 0 ,h( i /  38 ) : 0;D( C)!
		   ( m[j]+m [a= i] ) ?m[j[m]= i]=j:0;D (d) !
			  b+(*  O-
			   c)*
			     *  O; D (z )


					      -~- ~ -~i +
	v
		& 3 D(y)( putchar ) ( i)
    D ( q )	i& ,!(O[j = i]
		 || _ ( O))+a :0;
    D (w)O[	j] ==c && o

	(( !i ++ ? ! !_ (M

):

	0) +15)|| ++ j<9 &&w (
i)D	( r )*p?			*p -4?
					* p -6 ?
				     y(*p <9 + 2?__[
					    * p
]:			 * p+ 7 +79):o( j+1) : o (26+j),&q ( -!
		  * p ++ + i )D(x)i? a=x ( ( -- i)), ++ p )
	    D( t ) i,   | C((j=i*
       T(i-4 ))  +R
    (3 ) + 4 )
   D(J) !j                                --E( 0 D  ( K )!-!N, || i &,
                                                _( R ) :i* c== (O
   [ j ] )				&&n==f (j+   6  +    5   * 4)?O
    [j]=			   !i *    c-_   (    L)    :J(i )
    D ( N )			j=9, & d(0 )? j= 6 | ! i , J(i )D 
			( o)(*S = p , ++ S,p = M , r (q (i) ),-- S,  p = *S))
		    ( (l (_ (Q )),n =s,i ^5 ) ) ;, E(j ,
		sign ,  v ,ed ( b ) ;;
	      int   c =1 ,O[9])
            ;int(  s
)=
	 E (n ;char, 1 ,a,6 ,o ())*  Z[
	E(M [37 * 9 *3 ] ,0,L [ 99] ,3] , * *S=Z ) ;
	 E (*p=+1 ,char( m)[6 , co , 4 ],ol)
				  +,
	   V ( v=*O = k( j= 9 )) ;
	return ! c&& - ~ ~ - -! printf
	 ( ( "%d \n") , F (P ( 0) +6)            *50 + !  ! b*
	  ( +b - (int)time ( 0 )) )
;, (         b= 60 + time ( 0)+ 60 * 4)              ;, n =Y
              (u (s =Y (i) ) )

	:  (exit(                                      0)
	,i)D( g )x (  _(N) ^ 9)? !( a =0) : _  ( P )D (T)!  i|,
	(2); s=35; Q(3);

	s=59; Q(6);


	a=1;




    )



You are probably better off downloading it from the IOCC site, as formatting is, apparently, important.

The file is called jason.c, and can be compiled like this:


gcc jason.c -o jason


Then you execute it, and see the results ...


$ ./jason

you are in a maze of twisty little passages
caves lead:  left forward
you see
   a lamp
   a harp
> get lamp
done
> get harp
done
> f
you climb...
you are in a maze of twisty little passages
caves lead:  forward right back
> i
you have
   a lamp
   a harp
> f
you climb...
you are in a maze of twisty little passages
caves lead:  left forward right back
you see
   a chime
> get chime
done
> i
you have
   a lamp
   a harp
   a chime
> l
you climb...
you are in a maze of twisty little passages
caves lead:  left forward right back
you see
   a talisman
   a zither
> get talisman
done
> get zither
done
> i
you have
   a lamp
   a harp
   a chime
   a talisman
   a zither
> l
you climb...
you are in a maze of twisty little passages
caves lead:  left forward right back
> f
you climb...
you are in a maze of twisty little passages
caves lead:  left forward right back
>



However if you look at the source you will see none of the above messages. That is the interesting bit.

This particular entry is the "Jason" entry for the 2001 competition.

It was judged:


Best Of Show:

    Jason Orendorff
    5 Buchanan St.
    Nashua, NH 03060
    USA

    http://www.jorendorff.com/




Copyright © Landon Curt Noll, Simon Cooper, Peter Seebach and Leonid A. Broukhis, 2004.
All Rights Reserved.
Permission for personal, education or non-profit use is granted provided this copyright and notice are included in its entirety and remains unaltered. All other uses must receive prior permission in writing from the contest judges. (http://www.au.ioccc.org/judges.html)



- Nick Gammon

www.gammon.com.au, www.mushclient.com
Top

Posted by Nick Gammon   Australia  (23,173 posts)  Bio   Forum Administrator
Date Reply #1 on Fri 16 Apr 2004 12:14 AM (UTC)
Message
Update - I copied the source from the above message, pasted into vi under Cygwin, and compiled, and it worked OK. So, you can probably compile directly from the source above.

- Nick Gammon

www.gammon.com.au, www.mushclient.com
Top

The dates and times for posts above are shown in Universal Co-ordinated Time (UTC).

To show them in your local time you can join the forum, and then set the 'time correction' field in your profile to the number of hours difference between your location and UTC time.


6,861 views.

It is now over 60 days since the last post. This thread is closed.     Refresh page

Go to topic:           Search the forum


[Go to top] top

Information and images on this site are licensed under the Creative Commons Attribution 3.0 Australia License unless stated otherwise.