54 lines
1.6 KiB
Text
54 lines
1.6 KiB
Text
BEGIN # RPG attributes generator #
|
|
|
|
INT attrib count = 6;
|
|
MODE RESULT = STRUCT( BOOL success, INT sum, high count, [ 1 : attrib count ]INT a );
|
|
|
|
PROC generate attrib = INT:
|
|
BEGIN
|
|
INT min := 255, sum := 0;
|
|
FROM 0 TO 3 DO
|
|
INT v = ENTIER( next random * 6 ) + 1;
|
|
IF v < min THEN
|
|
min := v
|
|
FI;
|
|
sum +:= v
|
|
OD;
|
|
sum - min
|
|
END # generate attrib #;
|
|
|
|
PROC generate = ( REF RESULT res )VOID:
|
|
BEGIN
|
|
high count OF res := 0;
|
|
sum OF res := 0;
|
|
FOR i FROM LWB a OF res TO UPB a OF res DO
|
|
INT v = generate attrib;
|
|
IF v >= 15 THEN
|
|
high count OF res +:= 1
|
|
FI;
|
|
sum OF res +:= v;
|
|
( a OF res )[ i ] := v
|
|
OD;
|
|
success OF res := ( high count OF res >= 2 AND sum OF res >= 75 )
|
|
END # generate # ;
|
|
|
|
BEGIN
|
|
RESULT res;
|
|
success OF res := FALSE;
|
|
WHILE NOT success OF res DO
|
|
generate( res );
|
|
print( ( "attribs: " ) );
|
|
FOR i FROM LWB a OF res TO UPB a OF res DO
|
|
print( ( whole( ( a OF res )[ i ], 0 ) ) );
|
|
IF i < UPB a OF res THEN
|
|
print( ( " " ) )
|
|
FI
|
|
OD;
|
|
print( ( " sum=", whole( sum OF res, 0 )
|
|
, " highCount=", whole( high count OF res, 0 )
|
|
, " ", IF success OF res THEN "success" ELSE "failed" FI
|
|
, newline
|
|
)
|
|
)
|
|
OD
|
|
END
|
|
END
|