| // Build don't link: |
| // GROUPS passed enums |
| // excess errors test - XFAIL *-*-* |
| // enum file |
| // From: Peter Samuelson <psamuels@osiris.ac.hmc.edu> |
| // Date: Tue, 2 Nov 1993 23:44:34 -0800 (PST) |
| // Subject: compiler error 192 |
| // Message-ID: <199311030744.XAA23409@osiris.ac.hmc.edu> |
| |
| #include <iostream.h> |
| #include <stdlib.h> |
| #include <string.h> |
| |
| /* My program to generate D&D characters |
| * 10/25/93 |
| */ |
| |
| //prototypes |
| int rndshift(); |
| int dice(int times, int sides); |
| void initialize(struct Crctr &character); |
| void cleararray(char thearray[24]); |
| void input(struct Crctr &character); |
| void rollscores(struct Crctr &character); |
| void output(struct Crctr &character); |
| |
| int main() |
| { |
| enum goopes |
| { |
| cleric, druid, fighter, knight, paladin, avenger, magicuser, thief, |
| dwarf, halfelf, elf, halfling, mystic, ranger, scout, monster, |
| immortal, special |
| }; |
| |
| enum alignments |
| { |
| lawful, neutral, chaotic |
| }; |
| |
| struct savingthrows |
| { |
| int psn_dth, wands, petr_paral, breath, rod_staff_spell; |
| }; |
| |
| struct abilities |
| { |
| int str, ite, wis, dex, con, cha; |
| }; |
| struct valuables |
| { |
| char type[16]; |
| int value; |
| }; |
| struct money |
| { |
| int pp, gp, ep, sp, cp; |
| valuables gems[24], jewelry[24]; |
| }; |
| |
| struct Crctr |
| { |
| Crctr() : goop(fighter) {} |
| |
| char dm[24], campaign[24], name[24], player[24]; |
| goopes goop; |
| alignments alignment; |
| int level, maxhit, hitpoints, ac; |
| abitities scores;// ERROR - .* |
| savingthrows saves; |
| money wealth; |
| int experience; |
| float bonus; |
| }; |
| |
| Crctr character; |
| |
| cout << "The D&D Character generator!!" << endl; |
| |
| rndshift(); |
| |
| initialize(character);// ERROR - .* |
| input(character); |
| rollscores(character); |
| output(character); |
| |
| cout << "Thank you for using this program." << endl; |
| cout << "Copyright 1993, Chase Enterprises, Inc." << endl; |
| cout << "D&D and Dungeons and Dragons are registered trademarks" << endl; |
| cout << "of TSR, Inc." << endl; |
| } //end of main |
| |
| |
| void initialize(Crctr &character) |
| { |
| cleararray(character.dm); |
| cleararray(character.campaign); |
| cleararray(character.name); |
| cleararray(character.player); |
| character.level = 0; |
| character.maxhit = 0; |
| character.hitpoints = 0; |
| character.ac = 9; |
| character.experience = 0; |
| character.bonus = 0.0; |
| } //end of initialize |
| |
| void cleararray(char thearray[]) |
| { |
| for (int i = 0 ; i < 24 ; i++) |
| thearray[i] = 0; |
| } //end of cleararray |
| |
| void input(Crctr &character) |
| { |
| cout << "Please input name of the Dungeon Master." << endl; |
| cin >> character.dm; |
| cout << endl << "Pleas input the name of the campaign." << endl; |
| cin >> character.campaign; |
| cout << endl << "Please input the name of the character." << endl; |
| cin >> character.name; |
| cout << endl << "Please input player name." << endl; |
| cin >> character.player; |
| cout << endl << "Enter desired goop." << endl; |
| cin >> character.goop; |
| cout << endl << "Enter desired alignment." << endl; |
| } //end of input |
| |
| void rollscores(Crctr &character) |
| { |
| character.scores.str = dice(3,6); |
| character.scores.ite = dice(3,6); |
| character.scores.wis = dice(3,6); |
| character.scores.dex = dice(3,6); |
| character.scores.con = dice(3,6); |
| character.scores.cha = dice(3,6); |
| character.level = 1; |
| |
| switch (character.goop) |
| { |
| case fighter: |
| case dwarf: |
| case half-elf: |
| character.maxhit = dice(1,8); |
| character.hitpoints = character.maxhit; |
| break; |
| case cleric: |
| case elf: |
| case halfling: |
| case mystic: |
| case scout: |
| character.maxhit = dice(1,6); |
| character.hitpoints = character.maxhit; |
| break; |
| case magic-user: |
| case thief: |
| character.maxhit = dice(1,4); |
| character.hitpoints = character.maxhit; |
| break; |
| default: |
| character.maxhit = 1; |
| character.hitpoints = character.maxhit; |
| break; |
| } |
| } //end of rollscores |
| |
| |
| void output(Crctr &character) |
| { |
| cout << "Your character is:" << endl; |
| cout << "Your DM:\t" << character.dm << "\t\t\t" << "Campaign: " |
| << character.campaign << endl; |
| cout << "Player's name:\t" << character.player << endl; |
| cout << "Character Name:\t" << character.name << endl; |
| cout << "goop:\t" << character.goop << "\t\t\t" << "Alignment:\t" |
| << character.alignment << endl; |
| cout << "level:\t" << character.level << endl; |
| cout << "Max. HP:\t" << character.maxhit << "\t\t\t" << "Current HP:\t" |
| << character.hitpoints << endl; |
| cout << "Abilities" << "\t\t\t" << "Saves" << endl; |
| cout << endl; |
| cout << "Str:\t" << character.scores.str << "\t\t" << "Poison/Death Ray:\t" |
| << character.saves.psn_dth << endl; |
| cout << "Int:\t" << character.scores.ite << "\t\t" << "Wands: \t" |
| << character.saves.wands << endl; |
| cout << "Wis:\t" << character.scores.wis << "\t\t" << "Petrification" |
| << "/Paralysis" << character.saves.petr_paral << endl; |
| |
| /* abitities scores; |
| savingthrows saves; |
| money wealth; |
| int experience; |
| float bonus; |
| */ |
| } |
| |
| |
| int rndshift() |
| { |
| //Chase Tsang 10/25/93 |
| //cheap way to shift the random number generator sequence |
| //because I can't change the randomseed |
| //requires <stdlib.h> and <iostream.h> |
| |
| int shiftnumber; |
| int date; |
| int luckynumber; |
| |
| cout << "Please input the date in 8 digits, no spaces, no other" << endl; |
| cout << "characters. (ex 10041974 for October 4, 1974)" << endl; |
| cin >> date; |
| cout << "Please input your lucky number for today (7 or less" << endl; |
| cout << "digits, and positive integer, please)" << endl; |
| cin >> luckynumber; |
| |
| shiftnumber = date / luckynumber; |
| |
| for (int i = 0; i < shiftnumber; i++) |
| rand(); |
| return 0; |
| } |
| |
| |
| |
| int dice(int times, int sides) |
| { |
| //dice rolling function, Chase Tsang 10/25/93 |
| //requires #include <stdlib.h> |
| |
| int total = 0; |
| |
| for (int i = 0; i < times; i++) |
| total = total + (rand() % sides) + 1; |
| |
| return total; |
| } |