Annotation of early-roguelike/rogue4/prob.c, Revision 1.1
1.1 ! rubenllo 1: /*
! 2: *
! 3: * Rogue: Exploring the Dungeons of Doom
! 4: * Copyright (C) 1980, 1981, 1982 Michael Toy, Ken Arnold and Glenn Wichman
! 5: * All rights reserved.
! 6: *
! 7: * See the file LICENSE.TXT for full copyright and licensing information.
! 8: */
! 9:
! 10: # include <curses.h>
! 11: # include "rogue.h"
! 12:
! 13: # undef max
! 14:
! 15: # define TRIES 10000
! 16:
! 17: static char *sccsid = "@(#)prob.c 1.3 (Berkeley) 12/17/81";
! 18:
! 19: main(ac, av)
! 20: int ac;
! 21: char **av;
! 22: {
! 23: register unsigned int prob, prob2, exp;
! 24: register struct monster *mp;
! 25: register unsigned int max, min, i;
! 26: register unsigned int max2, min2;
! 27:
! 28: printf("%17.17s ----experience--- ----hit points---\n", "");
! 29: printf("%17.17s %7s %4s %4s %7s %4s %4s lvl\n", "monster", "avg", "min", "max", "avg", "min", "max", "max hp");
! 30: seed = 0;
! 31: for (mp = monsters; mp < &monsters[26]; mp++) {
! 32: i = TRIES;
! 33: prob2 = prob = 0;
! 34: min2 = min = 30000;
! 35: max2 = max = 0;
! 36: while (i--) {
! 37: if ((exp = roll(mp->m_stats.s_lvl, 8)) < min2)
! 38: min2 = exp;
! 39: if (exp > max2)
! 40: max2 = exp;
! 41: prob2 += exp;
! 42: mp->m_stats.s_maxhp = exp;
! 43: if ((exp = mp->m_stats.s_exp + exp_add(mp)) < min)
! 44: min = exp;
! 45: if (exp > max)
! 46: max = exp;
! 47: prob += exp;
! 48: }
! 49: printf("%17.17s: %7.2f %4d %4d %7.2f %4d %4d %3d\n", mp->m_name, ((double) prob) / TRIES, min, max, ((double) prob2) / TRIES, min2, max2, mp->m_stats.s_lvl);
! 50: fflush(stdout);
! 51: }
! 52: }
! 53:
! 54: exp_add(mp)
! 55: register struct monster *mp;
! 56: {
! 57: register unsigned int mod;
! 58:
! 59: if (mp->m_stats.s_lvl == 1)
! 60: mod = mp->m_stats.s_maxhp / 8;
! 61: else
! 62: mod = mp->m_stats.s_maxhp / 6;
! 63: if (mp->m_stats.s_lvl > 9)
! 64: mod *= 20;
! 65: else if (mp->m_stats.s_lvl > 6)
! 66: mod *= 4;
! 67: return mod;
! 68: }
! 69:
! 70: /*
! 71: * roll:
! 72: * roll a number of dice
! 73: */
! 74: roll(number, sides)
! 75: register unsigned int number, sides;
! 76: {
! 77: register unsigned int dtotal = 0;
! 78:
! 79: dtotal = number;
! 80: while (number--)
! 81: dtotal += rnd(sides);
! 82: return dtotal;
! 83: }
! 84:
! 85: /*
! 86: * rnd:
! 87: * Pick a very random number.
! 88: */
! 89:
! 90:
! 91: rnd(range)
! 92: register unsigned int range;
! 93: {
! 94:
! 95: return RN % range;
! 96: }
CVSweb