A program using a procedure to roll dice for a game.
Posted: Tue Feb 04, 2025 8:38 pm
A program using a procedure to roll dice for a game.
Some examples:
results=rollDice["3D6"]
results=rollDice["2D6+6"]
results=rollDice["4D6-2"]
results=rollDice["1D10*10"]
results=rollDice["6D6/2"]
Some examples:
results=rollDice["3D6"]
results=rollDice["2D6+6"]
results=rollDice["4D6-2"]
results=rollDice["1D10*10"]
results=rollDice["6D6/2"]
Code: Select all
REM **********************************************
REM A SHORT PROGRAM USING A PROCEDURE TO GENERATE
REM DICE ROLLS IN A READABLE FORMAT
REM PROGRAMMED BY JJARRELL
REM **********************************************
REM
REM DEFINE PLAYER ATTRIBUTES
DIM str(8),ref(8),int(8),cha(8),hp(8)
CLS
REM INIALIZE THE RANDOM SEED BASED ON THE TIMER
RANDOMIZE TIMER
PROCEDURE rollDice[diceStr$]
REM FIND WHERE THE 'D' IS LOCATED IN THE STRING TO CALCULATE # OF DICE
findD=INSTR(diceStr$,"D")
diceNum=VAL(LEFT(diceStr$,findD-1))
IF diceNum<1 THEN
diceNum=1
ENDIF
REM CHECK IF THERE IS A MODIFIER TO THE ROLL
findPlus=INSTR(diceStr$,"+")
findMinus=INSTR(diceStr$,"-")
findMult=INSTR(diceStr$,"*")
findDivide=INSTR(diceStr$,"/")
modPosition=findPlus+findMinus+findMult+findDivide
IF modPosition>0 THEN
modValue=VAL(RIGHT(diceStr$,LEN(diceStr$)-modPosition))
diceSize=VAL(MID(diceStr$,findD+1,LEN(diceStr$)-findD-(LEN(diceStr$)-modPosition)-1))
ELSE
diceSize=VAL(RIGHT(diceStr$,LEN(diceStr$)-findD))
ENDIF
total=0
REM ROLL DICE
FOR i=1 TO diceNum
roll=RND(diceSize)+1
total=total+roll
NEXT
REM APPLY APPROPRIATE MODIFIER
IF findPlus>0 THEN
total=total+modValue
ENDIF
IF findMinus>0 THEN
total=total-modValue
ENDIF
IF findMult>0 THEN
total=total*modValue
ENDIF
IF findDivide>0 THEN
total=total/modValue
ENDIF
REM RETURN RESULT
RETURN total
END PROC
attributes:
CLS
REM ROLL DICE FOR EACH ATTRIBUTE AND GOLD CALLING THE rollDice PROCEDURE
str(1)=rollDice["3D6"]
ref(1)=rollDice["3D6"]
int(1)=rollDice["3D6"]
cha(1)=rollDice["3D6"]
hp(1)=rollDice["3D4"]
gp(1)=rollDice["6D6+20"]
REM DISPLAY RESULTS
PRINT "ATTRIBUTES"
PRINT "----------"
PRINT "Strength (STR): ";str(1)
PRINT "Reflexes (REF): ";ref(1)
PRINT "Intelligence (INT): ";int(1)
PRINT "Charisma (CHA): ";cha(1)
PRINT "Health (HP): ";hp(1)
PRINT
PRINT "Gold: (GP): ";gp(1)
PRINT
REM CHECK TO SEE IF ANOTHER ROLL IS DESIRED
PRINT "Would you like to reroll? (Y/N)"
a$=""
WHILE a$<>"Y" AND a$<>"N"
a$=INKEY$
a$=UPPER(a$)
WEND
IF a$="Y" THEN
GOTO attributes
ENDIF
IF a$="N" THEN
PRINT
PRINT "GOOD LUCK ADVENTURER!!!"
GOTO end
ENDIF
end:
WAIT KEY RELEASE