Home Hardware Networking Programmazione Software Domanda Sistemi
Conoscenza Informatica >> Programmazione >> C /C + + Programming >> .

Come fare un gioco RPG in C + +

Durante la riproduzione di un gioco di ruolo , o RPG , si prende il ruolo di un personaggio immaginario e sperimentare le sue avventure . Questi giochi possono essere molto complesse e coinvolgere grafica pesante . Gli sviluppatori di solito lavorano diversi mesi sulla codifica e test del gioco . Tuttavia, è possibile creare un semplice gioco RPG in C + + . Inoltre , è solo bisogno di capire le basi della programmazione C + + . È possibile creare un semplice gioco RPG utilizzando un array bidimensionale come la carta e un paio di classi per controllare il tuo personaggio , i personaggi nemici e il game-play . Istruzioni
1

Apri il tuo preferito editor di C + + e iniziare un nuovo progetto . Includere la " iostream " e librerie " ctime " utilizzando questo codice:

# include # include
2

Creare una nuova classe che rappresenta il vostro eroe e mostri della tua " prigione " , utilizzando questo codice:
classe

CCreature {public : CCreature ( ) : muiAttack ( 0 ) , muiDefense ( 0 ) , muiHitPoints ( 3) {for ( unsigned uiIndex int = 0; uiIndex < 3; + + uiIndex ) { muiAttack = muiAttack + ( rand ( ) % 34) ; muiDefense = muiDefense + ( rand ( ) % 34) ; muiHitPoints = muiHitPoints + ( rand ( ) % 10) ; } } vuoto Attack ( CCreature & qrDefender ) { //Genera un numero compreso tra 1 e 100unsigned int uiAttack1 = ( rand ( ) % 100) + 1 ; unsigned int uiDefense1 = ( rand ( ) % 100) + 1 ; unsigned int uiAttack2 = ( rand ( ) % 100) + 1 ; unsigned int uiDefense2 = ( rand ( ) % 100 ) + 1 ;//Ha fatto l'attaccante ( eroe ) colpo se ( uiAttack1 < muiAttack && uiDefense1 > qrDefender ? . muiDefense ) { - . qrDefender muiHitPoints ; std :: cout << " ! mostro Hit " << std :: endl; } else { std :: cout << "Monster persa ! " , << std :: endl; } //Verifica se il mostro ha colpito il tuo characterif ( uiAttack2 < qrDefender.muiAttack && uiDefense1 > muiDefense ) { - muiHitPoints ; std :: cout << " , Eroe Hit " << std :: endl; } else { std :: cout <<" ! Eroe Missed " << std :: endl; ! } std :: cout << , "I tuoi Punti vita : " << muiHitPoints << std :: endl; std :: cout << " Punti Ferita mostro : " << qrDefender.muiHitPoints << std : : endl; } bool IsDead ( ) {return ( muiHitPoints == 0); } private : unsigned int muiAttack ; unsigned int muiDefense ; unsigned int muiHitPoints ; };

Questa classe inizializza i tre attributi : attacco, difesa e - punti ferita. Viene quindi utilizzato un algoritmo di attacco per determinare se l'attacco ha avuto successo , il danno del colpo rimanenti punti di attacco e .
3

Creare una nuova classe che rappresenta la vostra " prigione " come un array bidimensionale , utilizzando questo codice:
classe

CDungeon {public : CDungeon ( ) { //crea un mazechar caaMaze vuoto [ 10 ] [ 11 ] = { " ******* *** " , " ****** " , " ***** " , " ** " , " ****** " , " *** **** " , " **** " , " **** " , " ****** " , " ********** " }; for ( unsigned int uiRow = 0; uiRow < 10; + + uiRow ) {for ( unsigned int uiCol = 0; uiCol < 10; + + uiCol ) { mcaaMaze [ uiRow ] [ uiCol ] = caaMaze [ uiRow ] [ uiCol ] ; } } } char GetMazeSquare ( unsigned int uiRow , unsigned int uiCol ) {return mcaaMaze [ uiRow ] [ uiCol ] ; } private : mcaaMaze char [ 10 ] [10]; };

Puoi cambiare il modo in cui il "Dungeon " si presenta come cambiando la posizione dei caratteri " *"
4

creare la classe che controlla il game-play , utilizzando questo codice: .
classe

CRolePlayingGame {public : CRolePlayingGame ( ) { //Initlialize il numero casuale generatortime_t QTime ; tempo ( e QTime ) ; srand ( ( unsigned int) QTime ) ;

//Inizializza il dungeon di essere emptyfor ( unsigned int uiRow = 0; uiRow < 10; + + uiRow ) {for ( unsigned int uiCol = 0; uiCol < 10; + + uiCol ) { mqpaaCreatures [ uiRow ] [ uiCol ] = 0; } }

//Creazione di un herobool bFoundSpot = false; ( ! bFoundSpot ) mentre { unsigned int uiRow = 1 + ( rand ( ) % 8) ; unsigned int uiCol = 1 + ( rand ( ) % 8 ), se ( QueryLocation ( uiRow , uiCol ) == '') { bFoundSpot = true ; mqpaaCreatures [ uiRow ] [ uiCol ] = &mqHero; } } //Crea 10 monstersbFoundSpot = false; unsigned int uiMonster = 0; ! mentre ( bFoundSpot ) {unsigned int uiRow = 1 + ( rand ( ) % 8) ; unsigned int uiCol = 1 + ( rand ( ) % 8 ), se ( QueryLocation ( uiRow , uiCol ) == '') { mqpaaCreatures [ uiRow ] [ uiCol ] = & ; mqaMonsters [ uiMonster ] ; + + uiMonster ; se ( uiMonster == 10) { bFoundSpot = true ; } } } } QueryLocation char ( unsigned int uiRow , unsigned int uiCol ) {for ( unsigned int uIndex = 0; uIndex < 10 ; + + uIndex ) {if ( mqpaaCreatures [ uiRow ] [ uiCol ] == & ( mqaMonsters [ uIndex ] ) ) {return (char ) ( '0 ' + uIndex );} } if ( mqpaaCreatures [ uiRow ] [ uiCol ] == & mqHero ) { return ' H '; } else {return mqDungeon.GetMazeSquare ( uiRow , uiCol );} } bool MoveHero ( const char kcDirection ) { unsigned int uiHeroRow ; unsigned int uiHeroCol ; LocateCreature ( uiHeroRow , uiHeroCol , & , mqHero ) ; unsigned int uiNextRow = uiHeroRow ; unsigned int uiNextCol = uiHeroCol ; switch ( kcDirection ) {case 'w' : case ' W' : { - uiNextRow ; break; } case ' s ' : case ' s' : { + + uiNextCol ; break; } caso 'z' : case ' Z' : { + + uiNextRow ; break; } case ' a': case ' a' : { - uiNextCol ; break; } default: {return false; } } char cNextLoc = QueryLocation ( uiNextRow , uiNextCol ), se ( cNextLoc == '') { mqpaaCreatures [ uiNextRow ] [ uiNextCol ] = &mqHero; mqpaaCreatures [ uiHeroRow ] [ uiHeroCol ] = 0; return true ; } else if ( cNextLoc > = '0 ' && cNextLoc < = '9' ) { mqHero.Attack ( mqaMonsters [ ( int ) ( cNextLoc - '0 ') ] ) ; return true ; } else {return false; } } vuoto PrintBoard ( ) { using namespace std; for ( unsigned int uiRow = 0; uiRow < 10; + + uiRow ) {for ( unsigned int uiCol = 0; uiCol < 10; + + uiCol ) { cout << QueryLocation ( uiRow , uiCol );} cout << endl; } } bool HeroIsDead ( ) { mqHero.IsDead ritorno (); } RemoveDeadMonsters void ( ) { for ( unsigned int uiIndex = 0; uiIndex < 10; + + uiIndex ) {if ( mqaMonsters [ uiIndex ] IsDead ( . ) ) { unsigned int uiRow ; unsigned int uiCol ; se ( LocateCreature ( uiRow , uiCol , & ( mqaMonsters [ uiIndex ] ) ) ) { mqpaaCreatures [ uiRow ] [ uiCol ] = 0 , std :: cout << " mostro ucciso ! " << std :: endl; } } } } bool AllMonstersDead ( ) { bool bAllDead = true; for ( unsigned int uiIndex = 0 ; uiIndex < 10; + + uiIndex ) {if ) { bAllDead = false; } ( mqaMonsters [ uiIndex ] IsDead ( ! . ) } return bAllDead ; }

privato : LocateCreature bool ( unsigned int & uirRow , unsigned int & uirCol , CCreature * qpCreature ) {for ( unsigned int uiRow = 0; uiRow < 10; + + uiRow ) {for ( unsigned int uiCol = 0; uiCol < 10; + + uiCol ) {if ( mqpaaCreatures [ uiRow ] [ uiCol ] == qpCreature ) { uirRow = uiRow ; uirCol = uiCol ; return true ; } } } return false ; } CDungeon mqDungeon ; CCreature mqHero ; CCreature mqaMonsters [ 10 ] ; CCreature * mqpaaCreatures [ 10 ] [10]; } ;

Questa classe controlla il movimento del tuo eroe . Si utilizza "W ", " A", " S " e "Z" per muovere il personaggio . Esso genera anche 10 mostri e il tuo eroe dentro il vostro " prigione " e controlla le interazioni tra di essi , come ad esempio le morti e le posizioni .
5

creare il programma principale che chiama le varie classi e funzioni e interagisce con l'utente . È possibile controllare vari aspetti del tuo gioco di questo programma . Usa questo codice per crearla :

int main ( ) { using namespace std ;//Cancellare il dungeonCRolePlayingGame qGame ; bGameOver bool = false; do { qGame.PrintBoard ( ) ;//Prendi il prossimo movechar cMove ; cout << "Usa W , a, S , o Z per spostarsi : " << endl; std :: cin >> cMove ;//Verifica se la mossa è validif ( qGame.MoveHero ( cMove ) ) { //Se l'eroe è deadif ( qGame.HeroIsDead ( ) ) { cout << " Voi infatti siete morti ! " << endl; bGameOver = true ; } else { //Rimuovere i morti mostri dalle gameqGame.RemoveDeadMonsters ( ) ;//Se tutti i mostri sono deadif ( qGame.AllMonstersDead ( ) ) { cout << "Dungeon eliminato! " << endl; bGameOver = true ; } } } } while ( bGameOver ! ) ; return 0; }
6

Compilare il nuovo progetto ed eseguirlo per verificare se funziona come previsto. Modificare varie impostazioni per migliorare il game-play fino a quando si è soddisfatti del risultato.

 

Programmazione © www.354353.com