Code: Alles auswählen
players = [0, 3, 5, 7, 12]
Code: Alles auswählen
players = [0, 3, 5, 7, 12]
Code: Alles auswählen
10 RANDOMIZE TIMER:INPUT"Anzahl der Spieler";PC:INPUT"Anzahl Spielfelder";FC
20 DIM PP(PC):FOR I=1 TO PC:PP(I)=1:NEXT:PI=1
30 ' Main loop.
40 P$="Spieler"+STR$(PI)+" ":PRINT:PRINT P$;"ist am Zug.":GOSUB 70
50 IF FW THEN PRINT P$;"hat gewonnen!":END
60 PI=(PI MOD PC)+1:GOTO 30
70 ' Play one round with player PI.
80 PP=PP(PI):V=INT(RND*6)+1:NP=PP+V
90 PW$=P$+"hat eine"+STR$(V)+" gewürfelt":PRINT PW$;"."
100 GOSUB 150:IF F THEN PRINT"Zielfeldnummer ist eine Schnapszahl: +5":NP=NP+5
110 IF NP>FC THEN 130
120 PRINT P$;"zieht von";PP;"nach";STR$(NP);".":GOSUB 200:PP(PI)=NP
130 FW=NP=FC:IF FW OR (V<>6) THEN RETURN
140 PRINT PW$;" und ist weiterhin am Zug.":GOTO 70
150 ' Check if target field number is repdigit.
160 IF NP<11 THEN F=0:RETURN
170 T$=STR$(NP):A$=MID$(T$,2,1):X=0:FOR I=2 TO LEN(T$)
180 IF MID$(T$,I,1)=A$ THEN X=X+1
190 NEXT:F=X=LEN(T$)-1:RETURN
200 ' Move players on field NP back by 2 fields.
210 BP=NP-2:IF BP<1 THEN BP=1
220 FOR I=1 TO PC:IF PP(I)<>NP THEN 240
230 PRINT"Spieler";I;"wird auf Position";BP;"zurückgesetzt.":PP(I)=BP
240 NEXT:RETURN
Code: Alles auswählen
RANDOMIZE TIMER
DIM PlayerCount AS INTEGER, FieldCount AS INTEGER, PlayerIndex AS INTEGER
DIM i AS INTEGER, isRepdigit AS INTEGER, n AS INTEGER, digit AS INTEGER
DIM hasWon AS INTEGER, score AS INTEGER, newPosition AS INTEGER
DIM backPosition AS INTEGER
INPUT "Anzahl der Spieler"; PlayerCount
INPUT "Anzahl Spielfelder"; FieldCount
DIM PlayerPosition(PlayerCount) AS INTEGER
FOR i = 1 TO PlayerCount
PlayerPosition(i) = 1
NEXT
PlayerIndex = 1
DO
p$ = "Spieler" + STR$(PlayerIndex) + " "
PRINT : PRINT p$; "ist am Zug."
GOSUB PlayTurn
IF hasWon THEN EXIT DO
PlayerIndex = (PlayerIndex MOD PlayerCount) + 1
LOOP
PRINT p$; "hat gewonnen!"
END
' Play one turn with player at PlayerIndex.
PlayTurn:
DO
PlayerPosition = PlayerPosition(PlayerIndex)
score = INT(RND * 6) + 1
newPosition = PlayerPosition + score
PW$ = p$ + "hat eine" + STR$(score) + " gewürfelt"
PRINT PW$; "."
IF newPosition <> FieldCount THEN
n = newPosition
GOSUB CheckRepdigit
IF isRepdigit THEN
PRINT "Zielfeldnummer ist eine Schnapszahl: +5"
newPosition = newPosition + 5
END IF
END IF
IF newPosition <= FieldCount THEN
PRINT p$; "zieht von"; PlayerPosition; "nach"; STR$(newPosition); "."
GOSUB MoveBack
PlayerPosition(PlayerIndex) = newPosition
END IF
hasWon = newPosition = FieldCount
IF hasWon OR (score <> 6) THEN EXIT DO
PRINT PW$; " und ist weiterhin am Zug."
LOOP
RETURN
' Check if n is repdigit.
CheckRepdigit:
digit = n MOD 10
isRepdigit = n > 9
DO WHILE n <> 0
IF (n MOD 10) <> digit THEN
isRepdigit = 0
EXIT DO
END IF
n = n \ 10
LOOP
RETURN
' Move players on field newPosition back by 2 fields.
MoveBack:
backPosition = newPosition - 2
IF backPosition < 1 THEN backPosition = 1
FOR i = 1 TO PlayerCount
IF PlayerPosition(i) = newPosition THEN
PRINT "Spieler"; i; "wird auf Position"; backPosition; "zurückgesetzt."
PlayerPosition(i) = backPosition
END IF
NEXT
RETURN