|
|
|
|
|
|
|
|
| .. Beispiel: High-Low Spiel | ||
|
|
||
|
|
Aufgabe: Geben Sie das nachfolgende Programm in Ihren Rechner ein und überlegen Sie dabei, wie die einzelnen Teile zusammenhägen. Spielen Sie es dann einmal und klären Sie hernach die Wirkung der Bibliotheksfunktionen random() und randomize(). Überlegen Sie, wie die Zufallszahl in dem Bereich 1000 bis 9999 entsteht. |
|
|
|
|
|
|
|
|
|
// highlow.cpp
// ----------- Version 20.05.2002
// Model: small
// Fliesskommaemulation aus (bei SC12)
// Schwarzer, BBS WiLu
// Ratespiel:
// Der Benutzer muss eine Zahl zwischen 1000 und 9999
// raten.
// Demonstration des C- Zufallszahlengenerators
// Deklarationen von Bibliotheksfunktionen
#include <stdlib.h> // für random(), randomize(), atoi()
#include <stdio.h> // für putc(), printf()
#include <conio.h> // für getch()
// Deklarationen eigener Funktionen
void setStdio (char); // nur für SC12
// Definition von Kurzbezeichnungen
#define CR 0x0D // Carriage Return (Enter Taste)
#define ESC 0x1B // Escape (Esc-Taste)
#define SPACE 0x20 // Leerzeichen (Space Bar)
// ZufallsZahl()
// erzeugt über den Zufallsgenerator eine Zahl zwischen
// 1000 und 9999
int ZufallsZahl (void)
{
const int max = 9999; // anstelle von #define
const int min = 1000;
int x=0;
// Schleife wird durchlaufen, bis eine Zahl > 1000
// vorliegt
while (x < min) x= random (max+1);
return(x);
}
// getstrg()
// Zeileneditor, der von der Standardeingabe ASCII-Zeichen
// holt, bis <cr> oder <esc> hereinkommen oder das Eingabe-
// feld aufgefüllt ist. Ein Filter nimmt nur Zeichen
// zwischen <spc> und 0x7Fh entgegen. Die Zeichen werden
// in einem Buffer abgelegt, den das aufrufende Programm
// bereitstellt.
// Rückgabe 0, Funktion wurde mit <cr> beendet, im Buffer
// ein nullterminierter String,
// Rückgabe 1, Funktion wurde mit <esc> beendet, im Buffer
// ein leerer String
int getstrg (char *string, int stringlang)
{
int c;
int n=0;
while (1) {
c = getch();
switch (c) {
case CR: string[n]=0; return(1);
case ESC: string[0]=0; return(0);
default: if(c >= '0' && c <= '9' && n < stringlang){
putc (c, stdout);
string[n] = (char) c;
n= n+1;
}
} //..switch
} //.. while
} //.. Funktion
// main()
// Funktion des HIGH-LOW Spiels. Initialisiert den Zufalls-
// generator und tätigt die Ausgaben
void main (void)
{
const int len = 4;
int i,x,z;
char c, strg[len+1];
setStdio(2);
randomize(); // initialisiert den ZufallszahlenGenerator
start:
printf ("\n BBS Winsen/L, 21423 Winsen/Luhe");
printf ("\n DAS HIGH-LOW - SPIEL");
printf ("\n");
printf ("\n Ich habe eine Zahl zwischen 1000 und 9999");
printf ("\n erzeugt. Raten Sie mal welche Zahl das ist.");
z=ZufallsZahl();
i = 0;
lop:
printf ("\n Ihre Ratezahl: ");
if (getstrg(strg, len)) {
x = atoi(strg);
if (z==x) goto ende;
if (x<z ) {printf ("\n %d war zu klein ",x); }
if (x>z ) {printf ("\n %d war zu groß ",x); }
i++;
goto lop;
ende:
printf ("\n richtig .. %d Versuche",i);
printf ("\n\n Noch ein Spiel? [J/N]");
c = getch();
if (c == 'J' || c=='j') goto start;
}
setStdio(3);
}
// setStdio()
// Besonderheit des SC12, die Funktion kann bei normalen
// PCs weggelassen werden. Diese Funktion richtet den Ein-
// gabestrom auf das Benutzerprogramm kanal=2 oder auf das
// Betriebssystem kanal=3
// Wird später im Kapitel über den SC12 erklärt.
#include <dos.h>
static union REGS inregs;
static union REGS outregs;
void setStdio (char kanal)
{
inregs.h.ah = 0x11;
inregs.h.al = kanal;
int86(0xA0, &inregs, &outregs);
}
|
||
|
|
|
|
.de