home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1993 #3 / NN_1993_3.iso / spool / alt / sources / 3083 < prev    next >
Encoding:
Text File  |  1993-01-24  |  19.4 KB  |  647 lines

  1. Newsgroups: alt.sources
  2. Path: sparky!uunet!mcsun!news.funet.fi!ousrvr.oulu.fi!phoenix!yaz
  3. From: yaz@phoenix.oulu.fi
  4. Subject: hexa - hexagonal sokoban for curses
  5. Message-ID: <1993Jan25.011042.13800@ousrvr.oulu.fi>
  6. Lines: 635
  7. Sender: news@ousrvr.oulu.fi
  8. Organization: Phoenix Lab., University of Oulu, Finland
  9. X-Newsagent: :: uutimet -- news-agent by yaz@phoenix.oulu.fi ::
  10. Date: Mon, 25 Jan 1993 01:10:42 GMT
  11.  
  12. #! /bin/sh
  13. # This is a shell archive.  Remove anything before this line, then unpack
  14. # it by saving it into a file and typing "sh file".  To overwrite existing
  15. # files, type "sh file -c".  You can also feed this as standard input via
  16. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  17. # will see the following message at the end:
  18. #        "End of shell archive."
  19. # Contents:  hexa.txt Makefile hexa.c screen.0 screen.1 screen.2
  20. #   screen.3 screen.4 hexa.6
  21. # Wrapped by yaz@phoenix on Mon Jan 25 03:07:29 1993
  22. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  23. if test -f hexa.txt -a "${1}" != "-c" ; then 
  24.   echo shar: Will not over-write existing file \"hexa.txt\"
  25. else
  26. echo shar: Extracting \"hexa.txt\" \(3677 characters\)
  27. sed "s/^X//" >hexa.txt <<'END_OF_hexa.txt'
  28. X
  29. X
  30. X
  31. X   January 25, 1993                                                   HEXA(6)
  32. X
  33. X
  34. X
  35. X   NAME
  36. X     HEXA - The hexagonal sokoban for curses
  37. X
  38. X   SYNOPSIS
  39. X     hexa [<screen_number>]
  40. X
  41. X   DESCRIPTION
  42. X     A game where you try to push the moneybags to the safe.
  43. X
  44. X   OPTIONS
  45. X
  46. X     If you give screen_number then you will first edit that screen and save
  47. X     the editings by quit (q). Read further below for the movement keys.
  48. X     Place any of the ascii character symbols (bag, wall, safe, you) to any-
  49. X     where you want, but try to maintain at least one logical solution.
  50. X     Please e-mail your best screens to the author, because he really can't
  51. X     invent good levels.
  52. X
  53. X   FILES
  54. X     screen.0   level zero
  55. X     screen.1   level one
  56. X     screen.2   level two
  57. X      .
  58. X      .
  59. X      .
  60. X     screen.n   level n
  61. X
  62. X   CHARACTERS
  63. X     Ascii characters symbolize:
  64. X
  65. X      #  wall
  66. X      .  safe
  67. X      $  bag of gold (dollars)    *  bag in safe
  68. X      @  you                       +  you in safe
  69. X       >--<    the hexagonal grid
  70. X      <    >--
  71. X
  72. X   RULES
  73. X     The rules are simple.  Move around the hexagonal grid blocked by walls
  74. X     (#) and push the bags ($) to the safe area (.) using as few moves as
  75. X     possible.  The movement keys are defined in the source code by the ori-
  76. X     ginal creator (yaz@phoenix.oulu.fi) but you can change them if you have
  77. X     the source code file.  Keys:
  78. X
  79. X           up    k    up
  80. X       upleft  u | i  upright
  81. X                >@<
  82. X     downleft  n | m  downright
  83. X         down    j    down
  84. X
  85. X
  86. X
  87. X
  88. X
  89. X
  90. X                                                                            1
  91. X
  92. X
  93. X
  94. X
  95. X
  96. X
  97. X   HEXA(6)                                                   January 25, 1993
  98. X
  99. X
  100. X   SAMPLE
  101. X
  102. X     This is a sample snapshot of the game all variables zero (level, score,
  103. X     moves, pushes):
  104. X     --< #  >--< #  >--< #  >--< #  >--< #  >--< #  >--< #  >--< #
  105. X     #  >--< #  >--< #  >--< #  >--< #  >--< #  >--< #  >--< #  >-- MOV 0
  106. X     --<    >--<    >--<    >--<    >--<    >--<    >--<    >--< #  PUS 0
  107. X        >--<    >--<    >--<    >--<    >--<    >--<    >--<    >-- SCO 0
  108. X     --<    >--<    >--<    >--<    >--<    >--<    >--<    >--< #  LVL 0
  109. X     $  >--< #  >--<    >--< $  >--< #  >--<    >--<    >--<    >--
  110. X     --<    >--<    >--<    >--<    >--< #  >--<    >--<    >--< #
  111. X        >--< #  >--<    >--< #  >--< $  >--< #  >--<    >--<    >--
  112. X     --< #  >--< $  >--< #  >--< #  >--< @  >--<    >--<    >--< #
  113. X     #  >--<    >--< #  >--<    >--< $  >--< #  >--<    >--<    >--
  114. X     --<    >--< #  >--< $  >--< #  >--< $  >--<    >--<    >--< #
  115. X        >--<    >--<    >--<    >--<    >--<    >--<    >--<    >--
  116. X     --<    >--<    >--<    >--< #  >--<    >--<    >--<    >--< #
  117. X        >--<    >--<    >--< $  >--<    >--< #  >--<    >--<    >--
  118. X     --<    >--<    >--<    >--< #  >--<    >--<    >--<    >--< #
  119. X        >--<    >--<    >--<    >--<    >--< #  >--<    >--<    >--
  120. X     --<    >--<    >--< #  >--<    >--< #  >--< #  >--<    >--< #
  121. X        >--<    >--< #  >--< #  >--< #  >--< #  >--< #  >--<    >--
  122. X     --<    >--<    >--<    >--< #  >--<    >--< .  >--< .  >--< #
  123. X        >--<    >--<    >--<    >--<    >--< #  >--< .  >--< .  >--
  124. X     --<    >--<    >--<    >--<    >--<    >--< .  >--< .  >--< #
  125. X        >--<    >--<    >--<    >--<    >--< #  >--< .  >--< .  >--
  126. X     --< #  >--< #  >--< #  >--< #  >--< #  >--< #  >--< #  >--< #
  127. X     #  >--< #  >--< #  >--< #  >--< #  >--< #  >--< #  >--< #  >--
  128. X
  129. X   AUTHOR
  130. X     yaz@phoenix.oulu.fi (Tuomas K Kaikkonen) wishes to get feedback:
  131. X     Design your own levels, improve the program (top-10 list), do graphical
  132. X     (Xwindows) version, write better manual pages.
  133. X
  134. X
  135. X
  136. X
  137. X
  138. X
  139. X
  140. X
  141. X
  142. X
  143. X
  144. X
  145. X
  146. X
  147. X
  148. X
  149. X
  150. X
  151. X
  152. X
  153. X
  154. X
  155. X
  156. X   2
  157. X
  158. END_OF_hexa.txt
  159. if test 3677 -ne `wc -c <hexa.txt`; then
  160.     echo shar: \"hexa.txt\" unpacked with wrong size!
  161. fi
  162. # end of overwriting check
  163. fi
  164. if test -f Makefile -a "${1}" != "-c" ; then 
  165.   echo shar: Will not over-write existing file \"Makefile\"
  166. else
  167. echo shar: Extracting \"Makefile\" \(90 characters\)
  168. sed "s/^X//" >Makefile <<'END_OF_Makefile'
  169. XOBJS=hexa.c
  170. X
  171. XCC=cc -O
  172. X
  173. Xall: hexa
  174. X
  175. Xhexa: $(OBJS)
  176. X    $(CC) $(OBJS) -o hexa -lcurses -ltermcap
  177. END_OF_Makefile
  178. if test 90 -ne `wc -c <Makefile`; then
  179.     echo shar: \"Makefile\" unpacked with wrong size!
  180. fi
  181. # end of overwriting check
  182. fi
  183. if test -f hexa.c -a "${1}" != "-c" ; then 
  184.   echo shar: Will not over-write existing file \"hexa.c\"
  185. else
  186. echo shar: Extracting \"hexa.c\" \(6752 characters\)
  187. sed "s/^X//" >hexa.c <<'END_OF_hexa.c'
  188. X#include <curses.h>
  189. X#include <stdio.h>
  190. X#include <ctype.h>
  191. X
  192. X#define FLOOR   ' '
  193. X#define ME      '@'
  194. X#define WALL    '#'
  195. X#define PACKET  '$'
  196. X#define SAVE    '.'
  197. X#define ME_SAVE '+'
  198. X#define PA_SAVE '*'
  199. X#define UP    'k'
  200. X#define DN    'j'
  201. X#define UPL    'u'
  202. X#define UPR    'i'
  203. X#define DNL    'n'
  204. X#define DNR    'm'
  205. X#define QUIT    'q'
  206. X#define XMAX 18
  207. X#define YMAX 12
  208. X#define XHEX 8
  209. X#define YHEX 2
  210. X
  211. Xint mvpos[6]={-XMAX,XMAX,-1,1,XMAX-1,XMAX+1};
  212. X
  213. Xint pos[YMAX*XMAX][2];
  214. X
  215. Xint game[YMAX*XMAX],player=0,moves=0,pushes=0,score=0,maxscore=0,level=0;
  216. Xchar hex[YHEX][XHEX+1]={
  217. X    " >--<   ",
  218. X    "<    >--"};
  219. X
  220. Xvoid gotoxy(x, y)
  221. Xint x,y;
  222. X{
  223. X    move(y-1,x-1);
  224. X}
  225. X
  226. Xvoid do_screen()
  227. X{
  228. X    int x,y;
  229. X
  230. X    maxscore=0;
  231. X
  232. X    for(y=0;y<YMAX*YHEX;y++) for(x=0;x<XMAX/2;x++) {
  233. X        mvaddstr(y,x*XHEX,hex[y%YHEX]);
  234. X    }
  235. X    for(x=0;x<XMAX*YMAX;x++) {
  236. X        mvaddch(pos[x][0],pos[x][1],game[x]);
  237. X        if (game[x]==ME) game[player=x]=FLOOR;
  238. X        if (game[x]==SAVE) maxscore++;
  239. X    }
  240. X    refresh();
  241. X}
  242. X
  243. Xvoid reset_all()
  244. X{
  245. X    int i;
  246. X
  247. X    for(i=0;i<XMAX*YMAX;game[i++]=FLOOR);
  248. X    for(i=0;i<XMAX*YMAX;i++) {
  249. X        pos[i][0]=YHEX*(i/XMAX)+YHEX/2*((i+1)%2);
  250. X        pos[i][1]=XHEX/2*(i%XMAX)+XHEX/3;
  251. X    }
  252. X}
  253. X
  254. Xvoid load_screen(lvl)
  255. Xint lvl;
  256. X{
  257. X    FILE *fileptr;
  258. X    int i;
  259. X    char filename[16];
  260. X    sprintf(filename,"screen.%d",lvl);
  261. X    if ((fileptr=fopen(filename, "r"))==NULL) {
  262. X        printf("Cannot read %s", filename);
  263. X        exit(-10);
  264. X    } else {
  265. X        for (i=0;i<XMAX*YMAX;game[i++]=fgetc(fileptr));
  266. X        fclose(fileptr);
  267. X    }
  268. X    refresh();
  269. X}
  270. X
  271. Xvoid save_screen(lvl)
  272. Xint lvl;
  273. X{
  274. X    FILE *fileptr;
  275. X    int i;
  276. X    char filename[16];
  277. X    sprintf(filename,"screen.%d",lvl);
  278. X    if ((fileptr=fopen(filename, "w"))==NULL) {
  279. X        printf("Cannot write %s", filename);
  280. X        exit(-10);
  281. X    } else {
  282. X        for (i=0;i<XMAX*YMAX;fputc(game[i++],fileptr))
  283. X            ;
  284. X        fclose(fileptr);
  285. X    }
  286. X    refresh();
  287. X}
  288. X
  289. Xvoid mv_cur(d)
  290. Xint d;
  291. X{
  292. X    mvaddch(pos[player][0],pos[player][1],game[player]);
  293. X    if (player%2==1 && abs(d) != XMAX ) d-=XMAX;
  294. X    if (player+d<0) d=XMAX*YMAX+d;
  295. X    player=(player+d)%(XMAX*YMAX);
  296. X    mvaddch(pos[player][0],pos[player][1],ME);
  297. X    refresh();
  298. X}
  299. X
  300. Xvoid put_cur(c)
  301. Xchar c;
  302. X{
  303. X    game[player]=c;
  304. X}
  305. X
  306. Xvoid edit_screen()
  307. X{
  308. X    char key;
  309. X
  310. X    do_screen();
  311. X    put_cur(ME);
  312. X    for(key=0;key!=QUIT;key=getch()) {
  313. X        switch(key) {
  314. X            case UP:mv_cur(mvpos[0]); break;
  315. X            case DN:mv_cur(mvpos[1]); break;
  316. X            case UPL:mv_cur(mvpos[2]); break;
  317. X            case UPR:mv_cur(mvpos[3]); break;
  318. X            case DNL:mv_cur(mvpos[4]); break;
  319. X            case DNR:mv_cur(mvpos[5]); break;
  320. X            case FLOOR:put_cur(FLOOR); break;
  321. X            case ME:put_cur(ME); break;
  322. X            case WALL:put_cur(WALL); break;
  323. X            case PACKET:put_cur(PACKET); break;
  324. X            case SAVE:put_cur(SAVE); break;
  325. X        }
  326. X    }
  327. X}
  328. X
  329. Xint look_at(lp, d)
  330. Xint lp,d;
  331. X{
  332. X    if (lp%2==1 && abs(d) != XMAX ) d-=XMAX;
  333. X    if (lp+d<0) d=XMAX*YMAX+d;
  334. X    return (game[(lp+d)%(XMAX*YMAX)]);
  335. X}
  336. X
  337. Xvoid mv_player(dir)
  338. Xint dir;
  339. X{
  340. X    int x,y,pplayer,ddir;
  341. X
  342. X    if (look_at(player, mvpos[dir])==FLOOR ||
  343. X        look_at(player, mvpos[dir])==SAVE) {
  344. X        y=pos[player][0];
  345. X        x=pos[player][1];
  346. X        mvaddch(y,x,game[player]);
  347. X        if (player%2==1 && abs(mvpos[dir]) != XMAX) player-=XMAX;
  348. X        if (player+mvpos[dir]<0) player=player+XMAX*YMAX;
  349. X        player=(player+mvpos[dir])%(XMAX*YMAX);
  350. X        y=pos[player][0];
  351. X        x=pos[player][1];
  352. X        mvaddch(y,x,game[player]==SAVE?ME_SAVE:ME);
  353. X        moves++;
  354. X    } else if (look_at(player, mvpos[dir])==PACKET ||
  355. X            look_at(player, mvpos[dir])==PA_SAVE) {
  356. X                pplayer=player;
  357. X                if (pplayer%2==1 && abs(mvpos[dir]) != XMAX) pplayer-=XMAX;
  358. X                if (pplayer+mvpos[dir]<0) pplayer=pplayer+XMAX*YMAX;
  359. X                pplayer=(pplayer+mvpos[dir])%(XMAX*YMAX);
  360. X                if (look_at(pplayer, mvpos[dir])==FLOOR ||
  361. X                    look_at(pplayer, mvpos[dir])==SAVE) {
  362. X                    y=pos[player][0];
  363. X                    x=pos[player][1];
  364. X                    mvaddch(y,x,game[player]);
  365. X                    if (player%2==1 && abs(mvpos[dir]) != XMAX) player-=XMAX;
  366. X                    if (player+mvpos[dir]<0) player=player+XMAX*YMAX;
  367. X                    player=(player+mvpos[dir])%(XMAX*YMAX);
  368. X                    y=pos[player][0];
  369. X                    x=pos[player][1];
  370. X                    mvaddch(y,x,game[player]==PA_SAVE?ME_SAVE:ME);
  371. X                    if (game[player]==PA_SAVE) {
  372. X                        game[player]=SAVE;
  373. X                    } else game[player]=FLOOR;
  374. X                    if (pplayer%2==1 && abs(mvpos[dir]) != XMAX) pplayer-=XMAX;
  375. X                    if (pplayer+mvpos[dir]<0) pplayer=pplayer+XMAX*YMAX;
  376. X                    pplayer=(pplayer+mvpos[dir])%(XMAX*YMAX);
  377. X                    y=pos[pplayer][0];
  378. X                    x=pos[pplayer][1];
  379. X                    mvaddch(y,x,game[pplayer]==SAVE?PA_SAVE:PACKET);
  380. X                    if (game[pplayer]==SAVE) {
  381. X                        game[pplayer]=PA_SAVE;
  382. X                    } else game[pplayer]=PACKET;
  383. X                    pushes++;
  384. X                    moves++;
  385. X                    if (game[player]==SAVE && game[pplayer]==PACKET)
  386. X                        score--;
  387. X                    if (game[pplayer]==PA_SAVE && game[player]==FLOOR) score++;
  388. X                }
  389. X    }
  390. X    refresh();
  391. X}
  392. X
  393. Xmain(argc, argv)
  394. Xint argc;
  395. Xchar **argv;
  396. X{
  397. X    int i,j,k,a,b;
  398. X    FILE *save_file;
  399. X    char c,key,line[80];
  400. X
  401. X    reset_all();
  402. X
  403. X    initscr();
  404. X    noecho();
  405. X    raw();
  406. X
  407. X    if (argc>1) {
  408. X        level=atoi(argv[1]);
  409. X        printf("Editing level %d", level);
  410. X        sprintf(line, "screen.%d", level);
  411. X        if ((save_file=fopen(line, "r"))==NULL) {
  412. X            fclose(save_file);
  413. X        } else {
  414. X            fclose(save_file);
  415. X            load_screen(level);
  416. X        }
  417. X        edit_screen();
  418. X        save_screen(level);
  419. X    }
  420. X
  421. X    load_screen(level);
  422. X    do_screen();
  423. X
  424. X    for(key=0;key!=QUIT;key=getch()) {
  425. X        switch(key) {
  426. X            case UP:mv_player(0); break;
  427. X            case DN:mv_player(1); break;
  428. X            case UPL:mv_player(2); break;
  429. X            case UPR:mv_player(3); break;
  430. X            case DNL:mv_player(4); break;
  431. X            case DNR:mv_player(5); break;
  432. X        }
  433. X        sprintf(line,"MOV %d",moves);
  434. X        mvaddstr(1,73,line);
  435. X        sprintf(line,"PUS %d",pushes);
  436. X        mvaddstr(2,73,line);
  437. X        sprintf(line,"SCO %d ",score);
  438. X        mvaddstr(3,73,line);
  439. X        sprintf(line,"LVL %d",level);
  440. X        mvaddstr(4,73,line);
  441. X        if (score==maxscore) {
  442. X            load_screen(++level);
  443. X            do_screen();
  444. X            score=0;
  445. X        }
  446. X        refresh();
  447. X    }
  448. X    noraw();
  449. X    echo();
  450. X    endwin();
  451. X    return(0);
  452. X}
  453. END_OF_hexa.c
  454. if test 6752 -ne `wc -c <hexa.c`; then
  455.     echo shar: \"hexa.c\" unpacked with wrong size!
  456. fi
  457. # end of overwriting check
  458. fi
  459. if test -f screen.0 -a "${1}" != "-c" ; then 
  460.   echo shar: Will not over-write existing file \"screen.0\"
  461. else
  462. echo shar: Extracting \"screen.0\" \(217 characters\)
  463. sed "s/^X//" >screen.0 <<'END_OF_screen.0'
  464. X###################                ## $ #   $ #      ##   #   # $##    ## ## $## #$@#    ###   # $ # $     ##       $#  #    ##        #  #    ##     ### #####  ##        #  #....##           #....###################
  465. END_OF_screen.0
  466. if test 217 -ne `wc -c <screen.0`; then
  467.     echo shar: \"screen.0\" unpacked with wrong size!
  468. fi
  469. # end of overwriting check
  470. fi
  471. if test -f screen.1 -a "${1}" != "-c" ; then 
  472.   echo shar: Will not over-write existing file \"screen.1\"
  473. else
  474. echo shar: Extracting \"screen.1\" \(217 characters\)
  475. sed "s/^X//" >screen.1 <<'END_OF_screen.1'
  476. X########################      ###########   $$   #########   $  $   #######            #####.     @      .####.            .#####            #######          #########        ###########      ########################
  477. END_OF_screen.1
  478. if test 217 -ne `wc -c <screen.1`; then
  479.     echo shar: \"screen.1\" unpacked with wrong size!
  480. fi
  481. # end of overwriting check
  482. fi
  483. if test -f screen.2 -a "${1}" != "-c" ; then 
  484.   echo shar: Will not over-write existing file \"screen.2\"
  485. else
  486. echo shar: Extracting \"screen.2\" \(217 characters\)
  487. sed "s/^X//" >screen.2 <<'END_OF_screen.2'
  488. X    #               #####           ##..#  ##         ###.$ ###         #   @   #         # #$ $# #         ##  #  ##          ## # ##             ###                                                                  
  489. END_OF_screen.2
  490. if test 217 -ne `wc -c <screen.2`; then
  491.     echo shar: \"screen.2\" unpacked with wrong size!
  492. fi
  493. # end of overwriting check
  494. fi
  495. if test -f screen.3 -a "${1}" != "-c" ; then 
  496.   echo shar: Will not over-write existing file \"screen.3\"
  497. else
  498. echo shar: Extracting \"screen.3\" \(217 characters\)
  499. sed "s/^X//" >screen.3 <<'END_OF_screen.3'
  500. X                                            #               ## ##             # @ #             #   #             # $ #             #$ $#             # . #             #. .#              ###                          
  501. END_OF_screen.3
  502. if test 217 -ne `wc -c <screen.3`; then
  503.     echo shar: \"screen.3\" unpacked with wrong size!
  504. fi
  505. # end of overwriting check
  506. fi
  507. if test -f screen.4 -a "${1}" != "-c" ; then 
  508.   echo shar: Will not over-write existing file \"screen.4\"
  509. else
  510. echo shar: Extracting \"screen.4\" \(217 characters\)
  511. sed "s/^X//" >screen.4 <<'END_OF_screen.4'
  512. X                                                                                @                                   $                 .                                                                                 
  513. END_OF_screen.4
  514. if test 217 -ne `wc -c <screen.4`; then
  515.     echo shar: \"screen.4\" unpacked with wrong size!
  516. fi
  517. # end of overwriting check
  518. fi
  519. if test -f hexa.6 -a "${1}" != "-c" ; then 
  520.   echo shar: Will not over-write existing file \"hexa.6\"
  521. else
  522. echo shar: Extracting \"hexa.6\" \(3278 characters\)
  523. sed "s/^X//" >hexa.6 <<'END_OF_hexa.6'
  524. X.TH "HEXA" 6 "January 25, 1993"
  525. X.SH NAME
  526. XHEXA \- The hexagonal sokoban for curses
  527. X.SH SYNOPSIS
  528. Xhexa [<screen_number>]
  529. X.SH DESCRIPTION
  530. XA game where you try to push the moneybags to the safe. 
  531. X.SH OPTIONS
  532. X.PP
  533. XIf you give screen_number then you will first edit that screen and save the editings by quit (q). Read further below for the movement keys.
  534. XPlace any of the ascii character symbols (bag, wall, safe, you) to anywhere you want, but try to maintain at least one logical solution.
  535. XPlease e-mail your best screens to the author, because he really can't invent good levels.
  536. X.SH FILES
  537. Xscreen.0   level zero
  538. X.br
  539. Xscreen.1   level one
  540. X.br
  541. Xscreen.2   level two
  542. X.br
  543. X .
  544. X .
  545. X .
  546. X.br
  547. Xscreen.n   level n
  548. X.SH CHARACTERS
  549. XAscii characters symbolize:
  550. X.PP
  551. X #  wall
  552. X.br
  553. X .  safe
  554. X.br
  555. X $  bag of gold (dollars)    *  bag in safe
  556. X.br
  557. X @  you                       +  you in safe
  558. X.br
  559. X  >--<    the hexagonal grid
  560. X.br
  561. X <    >--
  562. X.SH RULES
  563. XThe rules are simple.  Move around the hexagonal grid blocked by walls (#) and push the bags ($) to the safe area (.) using as few moves as possible.
  564. XThe movement keys are defined in the source code by the original creator (yaz@phoenix.oulu.fi) but you can change them if you have the source code file.
  565. XKeys:
  566. X.PP
  567. X      up    k    up
  568. X.br
  569. X  upleft  u | i  upright
  570. X.br
  571. X           >@<
  572. X.br
  573. Xdownleft  n | m  downright
  574. X.br
  575. X    down    j    down
  576. X.SH SAMPLE
  577. X.PP
  578. XThis is a sample snapshot of the game all variables zero (level, score, moves, pushes):
  579. X.br
  580. X--< #  >--< #  >--< #  >--< #  >--< #  >--< #  >--< #  >--< #
  581. X.br
  582. X#  >--< #  >--< #  >--< #  >--< #  >--< #  >--< #  >--< #  >-- MOV 0
  583. X.br
  584. X--<    >--<    >--<    >--<    >--<    >--<    >--<    >--< #  PUS 0
  585. X.br
  586. X   >--<    >--<    >--<    >--<    >--<    >--<    >--<    >-- SCO 0
  587. X.br
  588. X--<    >--<    >--<    >--<    >--<    >--<    >--<    >--< #  LVL 0
  589. X.br
  590. X$  >--< #  >--<    >--< $  >--< #  >--<    >--<    >--<    >--
  591. X.br
  592. X--<    >--<    >--<    >--<    >--< #  >--<    >--<    >--< #
  593. X.br
  594. X   >--< #  >--<    >--< #  >--< $  >--< #  >--<    >--<    >--
  595. X.br
  596. X--< #  >--< $  >--< #  >--< #  >--< @  >--<    >--<    >--< #
  597. X.br
  598. X#  >--<    >--< #  >--<    >--< $  >--< #  >--<    >--<    >--
  599. X.br
  600. X--<    >--< #  >--< $  >--< #  >--< $  >--<    >--<    >--< #
  601. X.br
  602. X   >--<    >--<    >--<    >--<    >--<    >--<    >--<    >--
  603. X.br
  604. X--<    >--<    >--<    >--< #  >--<    >--<    >--<    >--< #
  605. X.br
  606. X   >--<    >--<    >--< $  >--<    >--< #  >--<    >--<    >--
  607. X.br
  608. X--<    >--<    >--<    >--< #  >--<    >--<    >--<    >--< #
  609. X.br
  610. X   >--<    >--<    >--<    >--<    >--< #  >--<    >--<    >--
  611. X.br
  612. X--<    >--<    >--< #  >--<    >--< #  >--< #  >--<    >--< #
  613. X.br
  614. X   >--<    >--< #  >--< #  >--< #  >--< #  >--< #  >--<    >--
  615. X.br
  616. X--<    >--<    >--<    >--< #  >--<    >--< .  >--< .  >--< #
  617. X.br
  618. X   >--<    >--<    >--<    >--<    >--< #  >--< .  >--< .  >--
  619. X.br
  620. X--<    >--<    >--<    >--<    >--<    >--< .  >--< .  >--< #
  621. X.br
  622. X   >--<    >--<    >--<    >--<    >--< #  >--< .  >--< .  >--
  623. X.br
  624. X--< #  >--< #  >--< #  >--< #  >--< #  >--< #  >--< #  >--< #
  625. X.br
  626. X#  >--< #  >--< #  >--< #  >--< #  >--< #  >--< #  >--< #  >--
  627. X.SH AUTHOR
  628. Xyaz@phoenix.oulu.fi (Tuomas K Kaikkonen) wishes to get feedback:
  629. X.br
  630. XDesign your own levels, improve the program (top-10 list), do graphical (Xwindows) version, write better manual pages.
  631. END_OF_hexa.6
  632. if test 3278 -ne `wc -c <hexa.6`; then
  633.     echo shar: \"hexa.6\" unpacked with wrong size!
  634. fi
  635. # end of overwriting check
  636. fi
  637. echo shar: End of shell archive.
  638. exit 0
  639.  
  640. --
  641. Tuomas K.Kaikkonen   yaz@phoenix.oulu.fi  ,._/\ " % man woman     "
  642. Taidonkaari 1 E 36   Tel:+358-81-5546081  `.  | " woman not found "
  643. SF-90570 OULU        (_/ _  __             /FI| " % wife ?        "
  644. FINLAND               I I-I /_            |___/ " wife: No match. "
  645.  
  646.  
  647.