home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / basic / library / gwbasic / spiele / master.bas < prev    next >
Encoding:
BASIC Source File  |  1991-05-15  |  6.6 KB  |  126 lines

  1. 10 KEY OFF:WIDTH 80:CLS:DEFINT A-Z:GOSUB 59980:KEY(10) ON:ON KEY(10) GOSUB 2700
  2. 20 GOSUB 500:DIM GT(15,6),PO(6,4)
  3. 30 LOCATE 12,1:INPUT "What is your first name";NA$
  4. 40 LOCATE 13,1:PRINT"How many games do you wish to play, "NA$;:INPUT NG
  5. 50 IF NG<1 THEN LOCATE 13,1:PRINT SPACE$(80):GOTO 40
  6. 60 LOCATE 12,1:PRINT SPACE$(80):LOCATE 13,1:PRINT SPACE$(80)
  7. 70 LOCATE 12,1:PRINT"I will now toss a coin to determine the order of play."
  8. 75 COLOR 15:PRINT"     HEADS";:COLOR 7:PRINT" - you're the codemaker"
  9. 78 COLOR 15:PRINT"     TAILS";:COLOR 7:PRINT" - you're the codebreaker"
  10. 80 TIMEOUT=5:GOSUB 59950
  11. 90 CT=INT(RND*2)+1:IF CT<>1 AND CT<>2 THEN 90
  12. 100 IF CT=1 THEN M1$="heads":M2$="codemaker" ELSE M1$="tails":M2$="codebreaker"
  13. 120 PRINT"The coin came out " M1$ " so you will be the " M2$ "."
  14. 130 TIMEOUT=5:GOSUB 59950
  15. 140 GC=0:PC=0:PP=0
  16. 150 IF CT=1 THEN GOSUB 1000 ELSE GOSUB 2000
  17. 160 TIMEOUT=5:GOSUB 59950:IF CT=1 THEN GOSUB 2000 ELSE GOSUB 1000
  18. 170 IF GC=0 THEN GA$="game" ELSE GA$="games"
  19. 180 TIMEOUT=5:GOSUB 59950:CLS:GOSUB 500:LOCATE 12,10:PRINT"After" GC+1 GA$ " the score is:"
  20. 190 LOCATE 14,38-LEN(NA$):PRINT NA$ ": " PP
  21. 200 LOCATE 15,30:PRINT"computer: " PC
  22. 210 TIMEOUT=5:GOSUB 59950
  23. 220 GC=GC+1
  24. 230 IF GC<NG THEN 150
  25. 240 M1$="It's a tie"
  26. 250 IF PC>PP THEN M1$="  I won"
  27. 260 IF PC<PP THEN M1$=" You won"
  28. 270 LOCATE 17,30:PRINT M1$
  29. 280 LOCATE 19,1:PRINT"Would you like to play another game (";:COLOR 15:PRINT"Y";:COLOR 7:PRINT" or ";:COLOR 15:PRINT"N";:COLOR 7:PRINT")?";
  30. 290 GOSUB 59990:IF INSTR("nyNY",IKEY$)=0 THEN 290
  31. 300 IF IKEY$="y" OR IKEY$="Y" THEN CLS:GOSUB 500:GOTO 40
  32. 310 CLS:LOCATE 12,10:PRINT"Thank you for playing, " NA$
  33. 320 TIMEOUT=5:GOSUB 59950:RUN "menu"
  34. 500 LOCATE 1,28:COLOR 0,7:PRINT " ***** MASTERMIND ***** ":COLOR 7,0:RETURN
  35. 1000 CLS:GOSUB 500:YY=5:XX=12
  36. 1010 FOR Y=2 TO 18:LOCATE Y,9:PRINT"█";:LOCATE Y,39:PRINT"▐▌";:LOCATE Y,73:PRINT"█";:NEXT Y
  37. 1015 LOCATE 2,9:PRINT STRING$(64,"█");:LOCATE 18,9:PRINT STRING$(64,"█");
  38. 1020 LOCATE 20,10:PRINT"It's your turn to make a code.":TIMEOUT=3:GOSUB 59950
  39. 1030 LOCATE 20,1:PRINT SPACE$(80):LOCATE 20,10:PRINT"Enter a 4-digit code (using digits 1-6) for me to guess - ";
  40. 1040 INPUT CO$:LOCATE 20,1:PRINT SPACE$(80)
  41. 1050 NU$=CO$:GOSUB 3000
  42. 1060 IF ER<>0 THEN 1030
  43. 1070 LOCATE 3,9:PRINT STRING$(64,"█");:LOCATE 4,9:PRINT STRING$(64,"█");
  44. 1080 LOCATE 3,30:PRINT" CODE =" T(1) T(2) T(3) T(4) " ";
  45. 1090 FOR R=1 TO 6:FOR C=1 TO 4:PO(R,C)=R:NEXT C,R
  46. 1100 C1=1:C2=1:C3=1:C4=0:GU=0
  47. 1110 GU=GU+1
  48. 1120 IF GU=1 THEN FOR I=1 TO 4:C(I)=INT(RND*6)+1:NEXT I
  49. 1130 IF GU=2 THEN C(1)=C1:C(2)=C2:C(3)=C3:C(4)=C4
  50. 1140 IF GU>2 THEN FOR I=1 TO 4:C(I)=GT(GU-1,I):NEXT I
  51. 1150 IF GU>1 THEN GOSUB 3500
  52. 1160 TR$=""
  53. 1170 FOR I=1 TO 4:TR$=TR$+RIGHT$(STR$(C(I)),1):NEXT I
  54. 1180 BEEP:LOCATE 20,25:PRINT"Please evaluate try #" GU "- " TR$
  55. 1190 LOCATE 21,33:PRINT"Black pegs = ";
  56. 1200 GOSUB 59990:IF INSTR("01234",IKEY$)=0 THEN 1200 ELSE PRINT IKEY$:BB=VAL(IKEY$)
  57. 1210 LOCATE 22,33:PRINT"White pegs = ";
  58. 1220 GOSUB 59990:IF INSTR("01234",IKEY$)=0 THEN 1220 ELSE PRINT IKEY$:WW=VAL(IKEY$)
  59. 1230 FOR I=1 TO 4:GT(GU,I)=C(I):NEXT I:GT(GU,5)=BB:GT(GU,6)=WW
  60. 1240 NU$=CO$:GOSUB 3000
  61. 1250 FOR I=1 TO 4:C(I)=T(I):NEXT I
  62. 1260 NU$=TR$:GOSUB 3000
  63. 1270 GOSUB 4000 'evaluate guess
  64. 1280 FOR I=1 TO 4:T(I)=C(I):NEXT I
  65. 1290 IF BB=B AND WW=W THEN 1320
  66. 1300 LOCATE 23,18:PRINT"Your evaluation should have been B =" B " W =" W
  67. 1310 GT(GU,5)=B:GT(GU,6)=W:TIMEOUT=2:GOSUB 59950
  68. 1320 LOCATE YY,XX:PRINT USING" ## = \  \ - B = # W = #";GU,TR$,GT(GU,5),GT(GU,6);
  69. 1330 IF XX=43 THEN YY=YY+1:XX=12 ELSE XX=43
  70. 1340 FOR I=20 TO 23:LOCATE I,1:PRINT SPACE$(80);:NEXT I
  71. 1350 IF B=4 THEN PLAY "mbc16c16c16ge8g":PP=PP+GU:LOCATE 20,34:PRINT"I got it !!!":RETURN
  72. 1360 IF B+W=4 THEN GOSUB 5000
  73. 1370 IF B+W=0 THEN GOSUB 6000
  74. 1380 IF B=0 AND W<>0 THEN GOSUB 7000
  75. 1390 LOCATE 20,30:PRINT"Quiet!  I'm thinking."
  76. 1400 GOTO 1110
  77. 2000 CLS:GOSUB 500:YY=5:XX=12:ON KEY(10) GOSUB 2800
  78. 2010 FOR Y=2 TO 18:LOCATE Y,9:PRINT"█";:LOCATE Y,39:PRINT"▐▌";:LOCATE Y,73:PRINT"█";:NEXT Y
  79. 2015 LOCATE 2,9:PRINT STRING$(64,"█");:LOCATE 18,9:PRINT STRING$(64,"█");
  80. 2020 LOCATE 20,10:PRINT"Now it's my turn to make a code.":TIMEOUT=5:GOSUB 59950
  81. 2030 LOCATE 20,1:PRINT SPACE$(80):LOCATE 20,10:PRINT"O.K.  I've got it now.  Take your first guess."
  82. 2040 NO=0:FOR I=1 TO 4:C(I)=INT(RND*6)+1:NEXT I:TIMEOUT=3:GOSUB 59950
  83. 2050 LOCATE 20,1:PRINT SPACE$(80):LOCATE 20,10:PRINT"Enter your guess (4 digits) - ";
  84. 2060 INPUT TR$:IF LEN(TR$)<>4 THEN 2050
  85. 2070 NU$=TR$:GOSUB 3000
  86. 2080 IF ER<>0 THEN 2050
  87. 2090 GOSUB 4000 'evaluate guess
  88. 2100 NO=NO+1:LOCATE YY,XX:PRINT USING" ## = \  \ - B = # W = #";NO,TR$,B,W;
  89. 2110 IF XX=43 THEN YY=YY+1:XX=12 ELSE XX=43
  90. 2120 FOR I=20 TO 23:LOCATE I,1:PRINT SPACE$(80);:NEXT I
  91. 2130 IF B=4 THEN PLAY "mbc16c16c16ge8g":PC=PC+NO:LOCATE 20,33:PRINT"You got it !!!":ON KEY(10) GOSUB 2700:RETURN ELSE 2050
  92. 2700 RUN "menu"
  93. 2800 LOCATE 25,10:PRINT"The code was "C(1) C(2) C(3) C(4);:TIMEOUT=5:GOSUB 59950
  94. 2810 GOTO 2700
  95. 3000 ER=0
  96. 3010 FOR I=1 TO 4:T(I)=VAL(MID$(NU$,I,1)):IF T(I)<1 OR T(I)>6 THEN ER=1
  97. 3020 NEXT I:RETURN
  98. 3500 GOSUB 3700 'get next entry from possibility table
  99. 3510 FOR L=1 TO GU-1:FOR J=1 TO 4:T(J)=GT(L,J):NEXT J
  100. 3520 GOSUB 4000 'evaluate old guess using new guess as code
  101. 3530 IF GT(L,5)=B AND GT(L,6)=W THEN NEXT L:RETURN ELSE 3500
  102. 3700 C4=C4+1:IF C4>=7 THEN C4=0:GOTO 3720
  103. 3710 IF PO(C4,4)=0 THEN 3700 ELSE C(4)=PO(C4,4):RETURN
  104. 3720 C3=C3+1:IF C3>=7 THEN C3=1:GOTO 3740
  105. 3730 IF PO(C3,3)<>0 THEN C(3)=PO(C3,3):GOTO 3700 ELSE 3720
  106. 3740 C2=C2+1:IF C2>=7 THEN C2=1:GOTO 3760
  107. 3750 IF PO(C2,2)<>0 THEN C(2)=PO(C2,2):GOTO 3730 ELSE 3740
  108. 3760 C1=C1+1:IF C1>=7 THEN PRINT"Error in probability table.":END
  109. 3770 IF PO(C1,1)<>0 THEN C(1)=PO(C1,1):GOTO 3750 ELSE 3760
  110. 4000 B=0:W=0:FOR I=1 TO 4:W(I)=C(I):NEXT I:FOR I=1 TO 4
  111. 4010 IF W(I)=T(I) THEN W(I)=-1:T(I)=-2:B=B+1
  112. 4020 NEXT I:FOR I=1 TO 4:FOR J=1 TO 4
  113. 4030 IF T(I)=W(J) THEN W(J)=-1:W=W+1:GOTO 4050
  114. 4040 NEXT J
  115. 4050 NEXT I:RETURN
  116. 5000 FOR I=1 TO 4:EL(I)=I:NEXT I:FOR I=1 TO 4:EL(GT(GU,I))=0:NEXT I
  117. 5010 FOR I=1 TO 6:IF EL(I)<>0 THEN PO(I,1)=0:PO(I,2)=0:PO(I,3)=0:PO(I,4)=0
  118. 5020 NEXT I:RETURN
  119. 6000 FOR I=1 TO 4:FOR J=1 TO 4:PO(GT(GU,I),J)=0:NEXT J,I:RETURN
  120. 7000 FOR I=1 TO 4:PO(GT(GU,I),I)=0:NEXT I:RETURN
  121. 59950 TIMEOUT$=TIME$:TIME2=VAL(LEFT$(TIMEOUT$,2))*120+VAL(MID$(TIMEOUT$,4,2))*60+VAL(RIGHT$(TIMEOUT$,2))
  122. 59960 TIMEOUT$=TIME$:TIME3=VAL(LEFT$(TIMEOUT$,2))*120+VAL(MID$(TIMEOUT$,4,2))*60+VAL(RIGHT$(TIMEOUT$,2))
  123. 59970 IF TIMEOUT > TIME3 - TIME2 THEN 59960 ELSE RETURN
  124. 59980 RNDTIME$=TIME$:RNDVAL=VAL(LEFT$(RNDTIME$,2))*120+VAL(MID$(RNDTIME$,4,2))*60+VAL(RIGHT$(RNDTIME$,2)):RANDOMIZE RNDVAL:RETURN
  125. 59990 IKEY$=INKEY$:IF IKEY$="" THEN 59990 ELSE RETURN
  126.