Page 1 of 1

A program using a procedure to roll dice for a game.

Posted: Tue Feb 04, 2025 8:38 pm
by jjarrell
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"]

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