Mastermind

 

Nötige Module und Programme

 

Modul

 Adr.  Anz.
CPU-Modul mit BasicBeetle 1.00 oder höher - 1
TKTerm oder VGATerm - 1

 

 

Beschreibung

 

Bei Mastermind ist es Ziel des Spieles zu erraten, welche 4 Farben der Computer per Zufall ausgewählt hat. Hierzu kann man, nachdem man den Startbildschirm mit beliebiger Taste beendet hat, mit den Tasten [A] bis [D] die Farben auswählen von denen man glaubt, dass dieses die vom Computer gewählten Farben sind. Die Farben können hierbei mehrfach vorkommen.

 

Hat man die gewünschte Farbkombination eingestellt, so wird dies mit [Enter] bestätigt. Nun wird die Kombination überprüft. Stimmt sowohl die Farbe als auch die Position überein, wird ein schwarzer Punkt angezeigt. Existiert nur die Farbe in der Kombination des Computers, wird dies mit einem weißen Punkt angezeigt. Gleichzeitig steht das Ergebnis in der rechten Ausgabebox.

 

Schafft man es nicht, die Farbkombination des Computers innerhalb von 12 Versuchen zu erraten, so ist das Spiel beendet und die Kombination wird im Eingabebereich angezeigt. Nach einem beendeten Spiel wird die Frage gestellt, ob man eine weitere Runde spielen möchte. Mit [J] kann man noch eine Runde wagen während [N] das Spiel beendet.

 

 

Screenshots

 

Um die Bilder in voller Größe zu sehen, einfach das gewünschte Bild anklicken. Es wird in einem neuen Fenster geöffnet.

 

 

 

 

Programmlisting

 

  10 REM ************************
20 REM ***    Mastermind    ***
30 REM ***     (C) 2010     ***
40 REM ***  Thomas Krueger  ***
50 REM ************************
60 REM
70 DIM ESC$*2,X,Y,COL,K$*1,FLD(47),RT(47),ORG(3),SEL(3),CTAB(7),RTC(2)
80 DIM PS,RP,RC,C1,C2,C3,MSG$*80
90 ESC$=CHR$(27)+"[":COL=&H07: GOSUB 1490:CLS:PRINT CHR$(19);
100 REM ****************************
110 REM ** Begruessungsbildschirm **
120 REM ****************************
130 REM
140 MSG$="M A S T E R M I N D":GOSUB 230
150 X=33:Y=12: GOSUB 1450:COL=&H0C: GOSUB 1500:PRINT "Entworfen von"
160 X=28:Y=15: GOSUB 1450:COL=&H09: GOSUB 1500:PRINT "(C) 2010 Thomas Krueger"
170 X=26:Y=23: GOSUB 1450:COL=&H0E: GOSUB 1500
180 PRINT "Beliebige Taste zum Starten !"
190 GOSUB 230:DELAY 5:IF INKEY$="" THEN GOTO LINE
200 RESTORE 280:FOR C1=0 TO 7:READ CTAB(C1):NEXT
210 FOR C1=0 TO 2:READ RTC(C1):NEXT
220 GOTO 310
230 REM *** Mastermind blinken ***
240 X=30:Y=5: GOSUB 1450:FOR C1=1 TO LEN(MSG$) STEP 2
250 COL=RND%16:IFF COL THEN GOTO LINE
260 GOSUB 1500:PRINT MID$(C1,1,MSG$);" ";
270 NEXT:RETURN
280 REM *** Farbtabelle ***
290 DATA &H10,&H19,&H1A,&H1B,&H1C,&H1D,&H1E,&H1F
300 DATA &H11,&H1F,&H10
310 REM ************************************
320 REM ** Spielfeld und Daten einrichten **
330 REM ************************************
340 REM
350 COL=&H4F: GOSUB 1500:CLS:PRINT CHR$(19);
360 COL=&H46: GOSUB 1500:X=0:Y=0:GOSUB 1450
370 PRINT STRING$(80,220);:COL=&HE4: GOSUB 1500:INC Y: GOSUB 1450
380 PRINT ESC$;"K";SPACE$(2);"M A S T E R M I N D";SPACE$(34);
390 PRINT "(C) 2010 Thomas Krueger";:INC Y:GOSUB 1450:COL=&H46: GOSUB 1500
400 PRINT STRING$(80,223);
410 COL=&H19: GOSUB 1500:X=33:Y=5: GOSUB 1450
420 PRINT CHR$(218);STRING$(7,196);CHR$(194);STRING$(4,196);CHR$(191);
430 INC Y:GOSUB 1450
440 PRINT CHR$(179);"A B C D";CHR$(179);SPACE$(4);CHR$(179);
450 FOR C1=1 TO 12:INC Y: GOSUB 1450
460 PRINT CHR$(179);SPACE$(7);CHR$(179);SPACE$(4);CHR$(179);
470 NEXT:INC Y:GOSUB 1450
480 PRINT CHR$(195);STRING$(7,196);CHR$(197);STRING$(4,196);CHR$(180)
490 INC Y:GOSUB 1450
500 PRINT CHR$(179);SPACE$(7);CHR$(179);SPACE$(4);CHR$(179);
510 INC Y:GOSUB 1450
520 PRINT CHR$(192);STRING$(7,196);CHR$(193);STRING$(4,196);CHR$(217);
530 COL=&H4B: GOSUB 1500:X=32:Y=22: GOSUB 1450
540 PRINT "[A]-[D] Farbwahl";:INC Y:X=33: GOSUB 1450:PRINT "[Enter] Setzen";
550 GOSUB 1310
560 X=13:Y=12: GOSUB 1450:PRINT "Versuch";
570 X=52:Y=12: GOSUB 1450:PRINT "Richtige Positionen";
580 X=52:Y=14: GOSUB 1450:PRINT "Richtige Farben";
590 POKES VARPTR(FLD(0)),STRING$(96,255):POKES VARPTR(RT(0)),STRING$(96,0)
600 POKES VARPTR(ORG(0)),STRING$(8,0):POKES VARPTR(SEL(0)),STRING$(8,0)
610 PS=0:RC=0:RP=0:FOR C1=0 TO 3:ORG(C1)=RND AND 7:NEXT
620 GOSUB 1080: GOSUB 1240
630 REM *******************
640 REM ** Spielschleife **
650 REM *******************
660 REM
670 GOSUB 1400:IF K$=CHR$(13) THEN GOTO 710
680 IF (ASC(K$)<65) OR (ASC(K$)>68) THEN GOTO 670
690 C1=ASC(K$)-65:INC SEL(C1):IF SEL(C1)=8 THEN SEL(C1)=0
700 GOSUB 1240: GOTO 670
710 REM ****************
720 REM ** Auswertung **
730 REM ****************
740 REM
750 FOR C1=0 TO 3:FLD(PS*4+C1)=SEL(C1):NEXT
760 FOR C1=0 TO 3:FOR C2=0 TO 3
770 IF ORG(C1)=SEL(C2) THEN RT(PS*4+C2)=1
780 NEXT:NEXT:FOR C1=0 TO 3
790 IF RT(PS*4+C1)=1 THEN IF ORG(C1)=SEL(C1) THEN INC RT(PS*4+C1)
800 NEXT:RP=0:RC=0:FOR C1=0 TO 3:SELECT RT(PS*4+C1)
810 CASE 1:INC RC
820 CASE 2:INC RP
830 NEXT:INC PS:GOSUB 1080
840 IF RP=4 THEN GOTO 940
850 IF PS=12 THEN GOTO 870
860 GOTO 630
870 REM ********************
880 REM ** Spiel verloren **
890 REM ********************
900 REM
910 GOSUB 1310:X=8:Y=13: GOSUB 1450:PRINT "Leider verloren !";
920 FOR C1=0 TO 3:SEL(C1)=ORG(C1):NEXT: GOSUB 1240
930 GOTO 1000
940 REM ********************
950 REM ** Spiel gewonnen **
960 REM ********************
970 REM
980 GOSUB 1310:X=4:Y=12: GOSUB 1450:PRINT "Herzlichen Glueckwunsch.";
990 X=6:Y=14: GOSUB 1450:PRINT "Sie haben gewonnen !";: GOTO 1000
1000 REM *****************
1010 REM ** Neues Spiel **
1020 REM *****************
1030 REM
1040 COL=&HE4: GOSUB 1500:X=54:Y=13: GOSUB 1450:PRINT "Noch einmal ? (J/N)";
1050 GOSUB 1400:IF K$="J" THEN GOTO 310
1060 IF K$<>"N" THEN GOTO 1050
1070 COL=&H07: GOSUB 1500:CLS:PRINT CHR$(20);:END
1080 REM ***************************
1090 REM ** Anzeige aktualisieren **
1100 REM ***************************
1110 REM
1120 FOR Y=7 TO 18:FOR C1=0 TO 3:C2=Y-7*4+C1:X=C1*2+34: GOSUB 1450
1130 IF FLD(C2)=65535 THEN NEXT:GOTO 1160
1140 COL=CTAB(FLD(C2)):GOSUB 1500:PRINT CHR$(254);
1150 NEXT
1160 FOR C1=0 TO 3:C2=Y-7*4+C1:X=42+C1: GOSUB 1450
1170 COL=RTC(RT(C2)):GOSUB 1500:PRINT CHR$(250);
1180 NEXT:NEXT
1190 COL=&H4E: GOSUB 1500:X=15:Y=14: GOSUB 1450
1200 PRINT " ";RIGHT$(2," "+STR$(PS+1));" ";:X=72
1210 Y=12: GOSUB 1450:PRINT " ";RP;" ";
1220 Y=14: GOSUB 1450:PRINT " ";RC;" ";
1230 RETURN
1240 REM ******************************
1250 REM ** Aktuelle Farbwahl zeigen **
1260 REM ******************************
1270 REM
1280 Y=20:FOR C1=0 TO 3:X=C1*2+34: GOSUB 1450
1290 COL=CTAB(SEL(C1)):GOSUB 1500:PRINT CHR$(254);:NEXT
1300 RETURN
1310 REM ******************************
1320 REM ** Ausgabebereiche loeschen **
1330 REM ******************************
1340 REM
1350 FOR C1=0 TO 1:Y=10:X=C1*47+1: GOSUB 1450
1360 COL=&H46: GOSUB 1500:PRINT STRING$(31,220);:Y=16: GOSUB 1450
1370 PRINT STRING$(31,223);:COL=&HE4: GOSUB 1500:FOR Y=11 TO 15
1380 X=C1*47+1: GOSUB 1450:PRINT SPACE$(31);:NEXT
1390 NEXT:RETURN
1400 REM *********************
1410 REM ** Tastaturabfrage **
1420 REM *********************
1430 REM
1440 DO:K$=UPPER$(INKEY$):WHILE K$="":RETURN
1450 REM **************************
1460 REM ** Cursor positionieren **
1470 REM **************************
1480 REM
1490 PRINT ESC$;STR$(Y);";";STR$(X);"H";:RETURN
1500 REM ******************
1510 REM ** Farbe setzen **
1520 REM ******************
1530 REM
1540 IF (COL AND 128) THEN PRINT ESC$;"4m"; ELSE PRINT ESC$;"6m";
1550 PRINT ESC$;"4";STR$((COL SHR 4) AND 7);"m";
1560 IF (COL AND 8) THEN PRINT ESC$;"1m"; ELSE PRINT ESC$;"2m";
1570 PRINT ESC$;"3";STR$(COL AND 7);"m";
1580 RETURN

 

 

Zurück zur Startseite          Zurück zur Auswahl