Ouvrez votre favori C ++ éditeur et commencer un nouveau projet. Inclure le "iostream" et "ctime" bibliothèques en utilisant ce code:
inclure
inclure
Créer une nouvelle classe qui représente votre héros et les monstres dans votre "cachot" en utilisant ce code:
CCreature de classe
{
publique:
CCreature (): muiAttack (0), muiDefense (0), muiHitPoints (3)
{
pour (unsigned int uiIndex = 0- uiIndex lt; 3- uiIndex ++) {
muiAttack = muiAttack + (rand ()% 34) -
muiDefense = muiDefense + (rand ()% 34) -
muiHitPoints = muiHitPoints + (rand ()% 10) -
}
}
Attaque void (CCreature&Amp qrDefender) {
// Générer un nombre entre 1 et 100
unsigned int uiAttack1 = (rand ()% 100) + 1-
unsigned int uiDefense1 = (rand ()% 100) + 1-
unsigned int uiAttack2 = (rand ()% 100) + 1-
unsigned int uiDefense2 = (rand ()% 100) + 1-
// Avez l'attaquant (héros) a frappé?
if (uiAttack1 lt; muiAttack &Amp&Amp uiDefense1 gt; qrDefender.muiDefense) {
--qrDefender.muiHitPoints-
std :: cout lt; lt; "-Monster Hit!"- lt; lt; std :: endl-
} Else {
std :: cout lt; lt; "-Monster manqué!"- lt; lt; std :: endl-
}
// Vérifiez si le monstre a frappé votre personnage
if (uiAttack2 lt; qrDefender.muiAttack &Amp&Amp uiDefense1 gt; muiDefense) {
--muiHitPoints-
std :: cout lt; lt; "-Hero Hit!"- lt; lt; std :: endl-
} Else {
std :: cout lt; lt; "-héros manqué!"- lt; lt; std :: endl-
}
std :: cout lt; lt; "-Vos Repères:"- lt; lt; muiHitPoints lt; lt; std :: endl-
std :: cout lt; lt; &Repères quot-monstre:"- lt; lt; qrDefender.muiHitPoints lt; lt; std :: endl-
}
bool IsDead () {
retour (muiHitPoints == 0) -
}
privé:
unsigned int muiAttack-
unsigned int muiDefense-
unsigned int muiHitPoints-
};
Cette classe initialise les trois attributs: attaque, défense et-points touchés. Il utilise ensuite un algorithme d'attaque pour déterminer si l'attaque a réussi, les dégâts de l'attaque et les autres points touchés.
Créer une nouvelle classe qui représente votre "cachot" comme un tableau bi-dimensionnelle en utilisant ce code:
classe CDungeon {
publique:
CDungeon () {
// Création d'un labyrinthe vide
omble caaMaze [10] [11] = {
" - **********"-,
"- * ** ** *"-,
"- * * ** *"-,
" - **"-,
"- * * *** *"-,
"- * ** *** *"-,
"- * * * *"-,
"- * ** *"-,
"- * * *** *"-,
" - **********" -} -
pour (unsigned int uiRow = 0- uiRow lt; 10- uiRow ++) {
pour (unsigned int uiCol = 0- uiCol lt; 10- uiCol ++) {
mcaaMaze [uiRow] [uiCol] = caaMaze [uiRow] [uiCol] -
}
}
}
omble GetMazeSquare (unsigned int uiRow, unsigned int uiCol) {
retourner mcaaMaze [uiRow] [uiCol] -
}
privé:
omble mcaaMaze [10] [10] -
};
Vous pouvez changer la façon dont votre "cachot" et semble en changeant la position de la "*" caractères.
Créez la classe qui contrôle le jeu-play en utilisant ce code:
CRolePlayingGame de classe
{
publique:
CRolePlayingGame () {
// Initlialize le générateur de nombres aléatoires
time_t qTime-
temps (&li-QTIME) -
srand ((unsigned int) QTIME);// Initialisation de la donjon être vide
pour (unsigned int uiRow = 0- uiRow lt; 10- uiRow ++) {
pour (unsigned int uiCol = 0- uiCol lt; 10- uiCol ++) {
mqpaaCreatures [uiRow] [uiCol] = 0-
}
}
// Création d'un héros
bool = faussement bFoundSpot
while (! bFoundSpot) {
unsigned int uiRow = 1 + (rand ()% 8) -
unsigned int uiCol = 1 + (rand ()% 8) -
if (QueryLocation (uiRow, uiCol) == '') {
bFoundSpot = vrai-
mqpaaCreatures [uiRow] [] = uiCol &li-mqHero-
}
}
// Création 10 monstres
bFoundSpot = faussement
unsigned int uiMonster = 0-
while (! bFoundSpot) {
unsigned int uiRow = 1 + (rand ()% 8) -
unsigned int uiCol = 1 + (rand ()% 8) -
if (QueryLocation (uiRow, uiCol) == '') {
mqpaaCreatures [uiRow] [] = uiCol &-mqaMonsters [uiMonster] -
++uiMonster-
if (uiMonster == 10) {
bFoundSpot = vrai-
}
}
}
}
omble QueryLocation (unsigned int uiRow, unsigned int uiCol) {
pour (unsigned int uIndex = 0- uIndex lt; 10- uIndex ++) {
if (mqpaaCreatures [uiRow] [uiCol] == &Amp (mqaMonsters [uIndex])) {
retour (char) ('0' + uIndex) -
}
}
if (mqpaaCreatures [uiRow] [uiCol] == &li-mqHero) {
retourner 'H'-
} Else {
retour mqDungeon.GetMazeSquare (uiRow, uiCol) -
}
}
bool MoveHero (const char kcDirection) {
unsigned int uiHeroRow-
unsigned int uiHeroCol-
LocateCreature (uiHeroRow, uiHeroCol, &li-mqHero) -
unsigned int uiNextRow = uiHeroRow-
unsigned int uiNextCol = uiHeroCol-
interrupteur (kcDirection) {
cas 'w':
cas 'W':
{
--uiNextRow-
percée
}
's' cas:
cas 'S':
{
++uiNextCol-
percée
}
cas «z»:
cas 'Z':
{
++uiNextRow-
percée
}
cas 'a':
cas «A»:
{
--uiNextCol-
percée
}
par défaut:
{
retourner faussement
}
}
omble cNextLoc = QueryLocation (uiNextRow, uiNextCol) -
if (cNextLoc == '') {
mqpaaCreatures [uiNextRow] [] = uiNextCol &li-mqHero-
mqpaaCreatures [uiHeroRow] [uiHeroCol] = 0-
retourner vrai-
} Else if (cNextLoc gt; = '0' &Amp&Amp cNextLoc lt; = '9') {
mqHero.Attack (mqaMonsters [(int) (cNextLoc - '0')]) -
retourner vrai-
} Else {
retourner faussement
}
}
vide plaquette électronique () {
using namespace STD
pour (unsigned int uiRow = 0- uiRow lt; 10- uiRow ++) {
pour (unsigned int uiCol = 0- uiCol lt; 10- uiCol ++) {
cout lt; lt; QueryLocation (uiRow, uiCol) -
}
cout lt; lt; endl-
}
}
bool HeroIsDead () {
retourner mqHero.IsDead () -
}
RemoveDeadMonsters void () {
pour (unsigned int uiIndex = 0- uiIndex lt; 10- uiIndex ++) {
if (mqaMonsters .IsDead [uiIndex] ()) {
unsigned int uiRow-
unsigned int uiCol-
if (LocateCreature (uiRow, uiCol, &Amp (mqaMonsters [uiIndex]))) {
mqpaaCreatures [uiRow] [uiCol] = 0-
std :: cout lt; lt; "-monstre tué!"- lt; lt; std :: endl-
}
}
}
}
bool AllMonstersDead () {
bool bAllDead = vrai-
pour (unsigned int uiIndex = 0- uiIndex lt; 10- uiIndex ++) {
if (! mqaMonsters [uiIndex] .IsDead ()) {
bAllDead = faussement
}
}
retourner bAllDead-
}
privé:
bool LocateCreature (unsigned int&Amp uirRow, unsigned int&Amp uirCol, CCreature * qpCreature) {
pour (unsigned int uiRow = 0- uiRow lt; 10- uiRow ++) {
pour (unsigned int uiCol = 0- uiCol lt; 10- uiCol ++) {
if (mqpaaCreatures [uiRow] [uiCol] == qpCreature) {
uirRow = uiRow-
uirCol = uiCol-
retourner vrai-
}
}
}
retourner faussement
}
CDungeon mqDungeon-
CCreature mqHero-
CCreature mqaMonsters [10] -
CCreature * mqpaaCreatures [10] [10] -
};
Cette classe contrôle les mouvements de votre héros. Tu utilises "W," "A," "S" et "Z" pour déplacer votre personnage. Il engendre également 10 monstres et votre héros dans votre "cachot" et contrôle les interactions entre eux, tels que les décès et les positions.
Créer le programme principal qui appelle les différentes classes et fonctions et interagit avec l'utilisateur. Vous pouvez contrôler divers aspects de votre jeu à partir de ce programme. Utilisez ce code pour créer:
int main () {
using namespace STD
// Effacer le donjon
CRolePlayingGame qGame-
bool = faussement bGameOver
do {
qGame.PrintBoard () -
// Obtenir le prochain mouvement
omble cMove-
cout lt; lt; "-utilisation W, A, S, Z ou de se déplacer:"- lt; lt; endl-
std :: cin gt; gt; cMove-
// Vérifiez si le déménagement est valable
if (qGame.MoveHero (CDéplacez)) {
// Si le héros est mort
if (qGame.HeroIsDead ()) {
cout lt; lt; "-vous êtes morts!"- lt; lt; endl-
bGameOver = vrai-
} Else {
// Retirer les monstres morts du jeu
qGame.RemoveDeadMonsters () -
// Si tous les monstres sont morts
if (qGame.AllMonstersDead ()) {
cout lt; lt; "-Donjon Effacé!"- lt; lt; endl-
bGameOver = vrai-
}
}
}
} While (bGameOver!) -
retourner 0-
}
Compiler votre nouveau projet et l'exécuter pour tester si cela fonctionne comme prévu. Modifier les différents réglages pour améliorer le jeu-play jusqu'à ce que vous êtes satisfait du résultat.