diff rogue4/prob.c @ 12:9535a08ddc39

Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
author edwarj4
date Sat, 24 Oct 2009 16:52:52 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rogue4/prob.c	Sat Oct 24 16:52:52 2009 +0000
@@ -0,0 +1,96 @@
+/*
+ *
+ * Rogue: Exploring the Dungeons of Doom
+ * Copyright (C) 1980, 1981, 1982 Michael Toy, Ken Arnold and Glenn Wichman
+ * All rights reserved.
+ *
+ * See the file LICENSE.TXT for full copyright and licensing information.
+ */
+
+# include	<curses.h>
+# include	"rogue.h"
+
+# undef	max
+
+# define	TRIES	10000
+
+static char *sccsid = "@(#)prob.c	1.3 (Berkeley) 12/17/81";
+
+main(ac, av)
+int	ac;
+char	**av;
+{
+	register unsigned int	prob, prob2, exp;
+	register struct monster	*mp;
+	register unsigned int	max, min, i;
+	register unsigned int	max2, min2;
+
+	printf("%17.17s  ----experience--- ----hit points---\n", "");
+	printf("%17.17s  %7s %4s %4s %7s %4s %4s lvl\n", "monster", "avg", "min", "max", "avg", "min", "max", "max hp");
+	seed = 0;
+	for (mp = monsters; mp < &monsters[26]; mp++) {
+		i = TRIES;
+		prob2 = prob = 0;
+		min2 = min = 30000;
+		max2 = max = 0;
+		while (i--) {
+			if ((exp = roll(mp->m_stats.s_lvl, 8)) < min2)
+				min2 = exp;
+			if (exp > max2)
+				max2 = exp;
+			prob2 += exp;
+			mp->m_stats.s_maxhp = exp;
+			if ((exp = mp->m_stats.s_exp + exp_add(mp)) < min)
+				min = exp;
+			if (exp > max)
+				max = exp;
+			prob += exp;
+		}
+		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);
+		fflush(stdout);
+	}
+}
+
+exp_add(mp)
+register struct monster *mp;
+{
+    register unsigned int mod;
+
+    if (mp->m_stats.s_lvl == 1)
+	mod = mp->m_stats.s_maxhp / 8;
+    else
+	mod = mp->m_stats.s_maxhp / 6;
+    if (mp->m_stats.s_lvl > 9)
+	mod *= 20;
+    else if (mp->m_stats.s_lvl > 6)
+	mod *= 4;
+    return mod;
+}
+
+/*
+ * roll:
+ *	roll a number of dice
+ */
+roll(number, sides)
+register unsigned int number, sides;
+{
+    register unsigned int dtotal = 0;
+
+    dtotal = number;
+    while (number--)
+	dtotal += rnd(sides);
+    return dtotal;
+}
+
+/*
+ * rnd:
+ *	Pick a very random number.
+ */
+
+
+rnd(range)
+register unsigned int range;
+{
+
+    return RN % range;
+}