Monday, April 05, 2021

S-BASIC - Bunco game

 So we start with a simple Bunco game written in BASIC.

10 PRINT "BUNCO"
20 S=0:W=INT(RND(1)*200)+300
30 FOR R=1 TO 6
40 PRINT "ROLLING..."
50 FOR Q=1 TO W: X=RND(1): NEXT Q
60 D1=INT(RND(1)*6)+1:D2=INT(RND(1)*6)+1:D3=INT(RND(1)*6)+1
70 PRINT "ROUND:";R;"Rolls:";D1;D2;D3
80 IF (D1=D2) AND (D2=D3) THEN 150
90 IF D1=R THEN S=S+1
100 IF D2=R THEN S=S+1
110 IF D3=R THEN S=S+1
120 PRINT "SCORE ";S
125 INPUT "PRESS ENTER";A$
130 NEXT R
140 PRINT "FINAL SCORE=";S: END
150 IF D1=R THEN PRINT "BUNCO!": S=S+21: GOTO 120
160 PRINT "MINI BUNCO": S=S+5: GOTO 120

The original for this was probably written for my Pocket Computer 2.

The S-BASIC version looks like this:

var s,w,r,q,x,d1,d2,d3=integer
var a=char

PRINT "BUNCO"
S=0
W=INT(RND(1)*200)+300
FOR R=1 TO 6
    PRINT "ROLLING..."
    FOR Q=1 TO W
        X=RND(1)
    NEXT Q
    
    D1=INT(RND(1)*6)+1
    D2=INT(RND(1)*6)+1
    D3=INT(RND(1)*6)+1
    PRINT "ROUND:";R;" Rolls:";D1;D2;D3
    IF (D1=D2) AND (D2=D3) THEN BEGIN
        IF D1=R THEN begin
            PRINT "BUNCO!"
            S=S+21
            end
        else begin
            PRINT "MINI BUNCO"
            S=S+5
            end
        end
    else begin
        IF D1=R THEN S=S+1
        IF D2=R THEN S=S+1
        IF D3=R THEN S=S+1
    end
    
    PRINT "SCORE ";S
    INPUT "PRESS ENTER";A
NEXT R

PRINT "FINAL SCORE=";S

Now, it certainly is much easier to read and much of the original code is there, but there was a significant amount of change to make this work under S-BASIC.

One gotcha was the 

60 D1=INT(RND(1)*6)+1:D2=INT(RND(1)*6)+1:D3=INT(RND(1)*6)+1

The S-BASIC compiler did not flag that as an error, but the assignments to D2 and D3 were simply ignored.

But lines 150 and 160

150 IF D1=R THEN PRINT "BUNCO!": S=S+21: GOTO 120
160 PRINT "MINI BUNCO": S=S+5: GOTO 120

Did get a compiler error because they came after the PRINT.

Lines 150 and 160 also have a second gotcha: The way to those lines is a GOTO within the FOR loop.  Again, the S-BASIC compiler flagged no problem, but the FOR loop simply exited after the first iteration.

 

No comments: