home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
rtsi.com
/
2014.01.www.rtsi.com.tar
/
www.rtsi.com
/
OS9
/
OSK
/
EFFO
/
forum7.lzh
/
C
/
HINTERHALT
/
hinterhalt.c
< prev
next >
Wrap
Text File
|
2009-11-06
|
10KB
|
274 lines
/*****************************************************************************/
/* M O D U L : HINTERHALT.C */
/*****************************************************************************/
/* */
/* Programmname: Hinterhalt erstellt am: 17.09.88 */
/* Programmierer: Frank BrΣuer */
/* Bruckner Str. 8 */
/* 7080 Aalen */
/* */
/* Programmbeschreibung: */
/* Ein Spiel, bei dem Sie sich einen Weg an vom Computer aufgestellten */
/* Hindernissen vorbei suchen mⁿssen. Je mehr Schritte Sie schaffen, desto */
/* besser. */
/* */
/* Eingabefile(s): */
/* stdin */
/* */
/* Ausgabefile(s): */
/* stdout */
/* */
/*****************************************************************************/
#include <stdio.h>
#include <scrstuff.h>
#define PLAYER '*'
#define OBSTACLE ' '
#define XSTART 39
#define YSTART 8
#define FMAXX 79
#define FMAXY 23
#define LEFT '4'
#define RIGHT '6'
#define UP '8'
#define DOWN '2'
#define TRUE 1
#define FALSE 0
unsigned short field [80][24], move, plposx, plposy, obstposx, obstposy;
main ()
{
char c;
stdin -> _flag |= _UNBUF; /* ungepufferte Eingabe */
set_up ("TERM"); /* initial. Terminal */
randomize (); /* initial. Zufallsreihe */
clscr (); /* Bildschirm l÷schen */
gotoXY (34, 0); /* Cursor positionieren */
sout_on (); /* Inverse an */
printf ("HINTERHALT\n");
sout_off (); /* Inverse aus */
do {
gotoXY (0, 3);
printf ("Brauchen Sie eine Anleitung (J/N)?\n");
c = getc (stdin); /* Antwort von Tastatur */
} while (c != 'J' && c != 'j' && c != 'N' && c != 'n');
if (c == 'J' || c == 'j') anleitung ();
do {
move = 0;
initfield ();
showfield ();
do {
moveplayer ();
if (field [plposx][plposy]) setobstacle ();
} while (field [plposx][plposy]);
bewertung ();
do {
gotoXY (10, 20);
printf ("Noch ein Spiel (J/N)?\n");
c = getc (stdin);
} while (c != 'J' && c != 'j' && c != 'N' && c != 'n');
} while (c == 'J' || c == 'j');
clscr ();
}
anleitung () /* gibt Anleitung auf */
{ /* Bildschirm aus */
char c;
gotoXY (0, 3);
printf ("Sie befinden sich auf einem eingezΣunten Spielfeld. ");
printf ("Ihre Position wird mit\n");
printf ("einem '*' markiert. Sie k÷nnen sich in alle vier ");
printf ("Himmelsrichtungen bewegen.\n");
printf ("Benutzen Sie dazu im Ziffernblock die Tasten '8' fⁿr ");
printf ("aufwΣrts, '2' fⁿr abwΣrts,\n");
printf ("'4' fⁿr links und '6' fⁿr rechts.\n");
down (); /* Cursor 1 Zeile tiefer */
printf ("Der Computer wird versuchen Sie am VorwΣrtskommen ");
printf ("zu hindern, indem er Ihren\n");
printf ("Weg verbaut. Die Hindernisse werden mit '\n");
gotoXY (41, 9),
sout_on ();
printf (" \n");
sout_off ();
gotoXY (42, 9);
printf ("' dargestellt und dⁿrfen nicht\n");
printf ("berⁿhrt werden.\n");
down ();
printf ("Wenn Sie sich nicht mehr bewegen k÷nnen, ist das ");
printf ("Spiel zu Ende.\n");
printf ("Ich wⁿnsche Ihnen viel Vergnⁿgen.\n");
gotoXY (5, 22);
sout_on ();
printf ("Bitte Taste drⁿcken!\n");
sout_off ();
gotoXY (26, 22);
c = getc (stdin);
}
initfield () /* Spielfeld initialisie-*/
{ /* ren */
unsigned short i, j;
for (i = 0; i < FMAXX; i++) /* alle Felder auf TRUE */
for (j = 0; j < FMAXY; j++) field [i][j] = TRUE;
for (i = 0; i < FMAXX; i++) { /* Rand oben u. unten auf*/
field [i][0] = FALSE; /* FALSE setzen */
field [i][FMAXY - 1] = FALSE;
}
for (i = 0; i < FMAXY; i++) { /* Rand links u. rechts */
field [0][i] = FALSE; /* auf FALSE setzen */
field [FMAXX - 1][i] = FALSE;
}
plposx = XSTART - 1; /* Spieler in Startposi- */
plposy = YSTART - 1; /* tion */
obstposx = 1; /* Hindernis in Start- */
obstposy = 1; /* position */
}
showfield () /* Spielfeld anzeigen */
{
unsigned short i, j;
char c;
clscr ();
for (i = 0; i < FMAXX; i++) /* Rand setzen */
for (j = 0; j < FMAXY; j++)
if (!field [i][j]) {
gotoXY (i, j);
sout_on ();
printf ("%c\n", OBSTACLE);
sout_off ();
}
gotoXY (XSTART - 1, YSTART - 1); /* Spieler setzen */
printf ("%c\n", PLAYER);
}
moveplayer () /* Spieler bewegen */
{
char c;
gotoXY (0, 0); /* Verhindert Anzeige */
printf (" \n"); /* des Tastendrucks */
gotoXY (0, 0);
c = getc (stdin);
gotoXY (plposx, plposy); /* alte Spielerposition */
printf (" \n"); /* loeschen */
switch (c) { /* neue Position ermitt. */
case LEFT: {
plposx--;
break;
}
case RIGHT: {
plposx++;
break;
}
case UP: {
plposy--;
break;
}
case DOWN: {
plposy++;
break;
}
}
gotoXY (plposx, plposy); /* neue Position setzen */
printf ("%c\n", PLAYER);
move++; /* ZugzΣhler increment. */
}
setobstacle () /* Hindernisse setzen */
{
unsigned long r, rndx ();
do {
r = rndx (1, 4, 1); /* neue Zufallszahl */
switch (r) { /* Hindernisposition erm.*/
case 1: {
obstposx = plposx - 1;
obstposy = plposy;
break;
}
case 2: {
obstposx = plposx + 1;
obstposy = plposy;
break;
}
case 3: {
obstposx = plposx;
obstposy = plposy - 1;
break;
}
case 4: {
obstposx = plposx;
obstposy = plposy + 1;
break;
}
}
} while (!field [obstposx][obstposy]); /* nur auf TRUE-Felder */
gotoXY (obstposx, obstposy);
sout_on ();
printf ("%c\n", OBSTACLE); /* Hindernis setzen */
sout_off ();
field [obstposx][obstposy] = FALSE; /* Feld-Belegt-Kennz. */
}
bewertung () /* Spielergebnis bewerten*/
{
unsigned short i, j;
clscr ();
gotoXY (18, 5);
low_on (); /* dunklere Schrift an */
printf ("Sie haben\n");
low_off (); /* hellere Schrift an */
gotoXY (27, 5);
printf ("%7d\n", move);
gotoXY (35, 5);
low_on ();
printf ("Zⁿge geschafft. Das ist eine\n");
gotoXY ( 30, 8);
low_off ();
unsc_on (); /* Unterschreichung an */
i = move / 100; /* Hunderter */
j = move % 100; /* Zehner u. Einer */
switch (i) {
case 0: {
if (j < 50) printf ("miese\n");
else printf ("mΣ▀ige\n");
break;
}
case 1: {
if (j < 50) printf ("ausreichende\n");
else printf ("befriedigende\n");
break;
}
case 2: {
if (j < 50) printf ("gute\n");
else printf ("sehr gute\n");
break;
}
case 3: {
if (j < 50) printf ("hervorragende\n");
else printf ("meisterhafte\n");
break;
}
case 4: {
if (j < 50) printf ("spitzenklasse\n");
else printf ("fast ⁿbermenschliche\n");
break;
}
default: {
printf ("ⁿbermenschliche\n");
break;
}
}
unsc_off (); /* Unterstreichung aus */
gotoXY (30, 10);
low_on ();
printf ("Leistung!\n");
low_off ();
}