Vitajte na [www.pocitac.win] Pripojiť k domovskej stránke Obľúbené stránky

Domáce Hardware Siete Programovanie Softvér Otázka Systémy

Ako si vyrobiť RPG hru v C + +

Pri prehrávaní hru na hrdinov , alebo RPG , budete mať na úlohu imaginárneho charakteru a zažiť jeho dobrodružstvo . Tieto hry môžu byť dosť zložité a zahŕňajú ťažké grafiku . Developeri zvyčajne pracujú niekoľko mesiacov na kódovanie a testovanie hry . Môžete však vytvoriť jednoduchý RPG hru v C + + . Navyše , stačí pochopiť základy C + + programovanie . Môžete vytvoriť jednoduchý RPG hru pomocou dvojrozmerného poľa ako mapy a niekoľko tried pre ovládanie vášho charakteru , nepriateľské postavy a hru - play . Pokyny dovolená 1

Otvorte svoj ​​obľúbený C + + editor a začať nový projekt . Zahrnúť " iostream " a " ctíme " knižnice pomocou tohto kódu : Spojené

# include # include
2

Vytvorte novú triedu , ktorá predstavuje svojich hrdinov a monštrá vo svojom " dungeonu " , pomocou tohto kódu :

class CCreature { public : CCreature ( ) : muiAttack ( 0 ) , muiDefense ( 0 ) , muiHitPoints ( 3 ) { for ( unsigned int uiIndex = 0 ; uiIndex < 3 , + + uiIndex ) { muiAttack = muiAttack + ( rand ( ) % 34 ) ; muiDefense = muiDefense + ( rand ( ) % 34 ) ; muiHitPoints = muiHitPoints + ( rand ( ) % 10 ) ; } } void Attack ( CCreature & qrDefender ) { //Generovanie čísla medzi 1 a 100unsigned int uiAttack1 = ( rand ( ) % 100 ) + 1 ; unsigned int uiDefense1 = ( rand ( ) % 100 ) + 1 ; unsigned int uiAttack2 = ( rand ( ) % 100 ) + 1 ; unsigned int uiDefense2 = ( rand ( ) % 100 ) + 1 ;//Už útočník ( hrdina ) hit if ( uiAttack1 qrDefender ? . ! " netvor Missed " - muiDefense ) { . qrDefender muiHitPoints ; std :: cout << " ! netvor Hit " << std :: endl } else { std :: cout << ; << std :: endl ; } //Skontrolujte , či monštrum zasiahlo váš characterif ( uiAttack2 muiDefense ) { - muiHitPoints ; std :: cout << " ; Hero Hit " << std :: endl ; } else { std :: cout << " ! Hero Zmeškaný " << std :: endl ; } std :: cout << , " Vaša Utŕžené : " << muiHitPoints << std :: endl ; std :: cout << " Monštrum Utŕžené : " << qrDefender.muiHitPoints << std : : endl ; } bool IsDead ( ) { return ( muiHitPoints == 0 ) ; } private : unsigned int muiAttack ; unsigned int muiDefense ; unsigned int muiHitPoints ; } ;

Táto trieda inicializuje tri atribúty : útok , obrana a hit - body . To potom používa útok algoritmus na určenie , či útok bol úspešný , poškodenie útoku a zostávajúce hit - body .
3

Vytvorte novú triedu , ktorá predstavuje " dungeon " ako bi - rozmerné pole pomocou tohto kódu :

class CDungeon { public : CDungeon ( ) { //Vytvorenie prázdnej mazechar caaMaze [ 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 : char mcaaMaze [ 10 ] [ 10 ] ; } ;

zmeniť spôsob , ako " dungeon " vyzerá zmenou polohy " * " znaky
4

Vytvorte triedu , ktorá ovláda hru - play pomocou tohto kódu : . klipart

class CRolePlayingGame { public : CRolePlayingGame ( ) { //Initlialize náhodné číslo generatortime_t Qtime , čas ( a Qtime ) ; srand ( ( unsigned int ) Qtime ) ;

//Inicializácia väzenia , aby sa emptyfor ( unsigned int uiRow = 0 ; uiRow < 10 ; + + uiRow ) { for ( unsigned int uiCol = 0 ; uiCol < 10 ; + + uiCol ) { mqpaaCreatures [ uiRow ] [ uiCol ] = 0 ; } }

//Vytvorenie herobool bFoundSpot = false ; while ( bFoundSpot! ) { unsigned int uiRow = 1 + ( rand ( ) % 8 ) ; unsigned int uiCol = 1 + ( rand ( ) % 8 ) , ak ( QueryLocation ( uiRow , uiCol ) == " " ) { bFoundSpot = true ; mqpaaCreatures [ uiRow ] [ uiCol ] = &mqHero; } } //Vytvorenie 10 monstersbFoundSpot = false ; unsigned int uiMonster = 0 ; while ( bFoundSpot ) { unsigned ! int uiRow = 1 + ( rand ( ) % 8 ) ; unsigned int uiCol = 1 + ( rand ( ) % 8 ) , ak ( QueryLocation ( uiRow , uiCol ) == " " ) { mqpaaCreatures [ uiRow ] [ uiCol ] = & ; mqaMonsters [ uiMonster ] ; + + uiMonster ; if ( uiMonster == 10 ) { bFoundSpot = true ; } } } } char QueryLocation ( unsigned int uiRow , unsigned int uiCol ) { for ( unsigned int uIndex = 0 ; uIndex < 10 , + + uIndex ) { if ( mqpaaCreatures [ uiRow ] [ uiCol ] == a ( 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 , a , mqHero ) ; unsigned int uiNextRow = uiHeroRow ; unsigned int uiNextCol = uiHeroCol , prepínač ( kcDirection ) { case ' w ' : case ' W ' : { - uiNextRow ; break ; } case ' s ' : case ' s ' : { + + uiNextCol ; break ; } case ' z ' : case ' z ' : { + + uiNextRow ; break ; } case ' a ' : case ' a ' : { - uiNextCol ; break ; } default : { return false ; } } char cNextLoc = QueryLocation ( uiNextRow , uiNextCol ) ; if ( 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 ; } } prázdno 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 ( ) { return mqHero.IsDead ( ) ; } void RemoveDeadMonsters ( ) { for ( unsigned int uiIndex = 0 ; uiIndex < 10 ; + + uiIndex ) { if ( mqaMonsters [ uiIndex ] IsDead ( . ) ) { unsigned int uiRow ; unsigned int uiCol , ak ( LocateCreature ( uiRow , uiCol , a ( mqaMonsters [ uiIndex ] ) ) ) { mqpaaCreatures [ uiRow ] [ uiCol ] = 0 ; std :: cout << " netvor zabil ! " << std :: endl ; } } } } bool AllMonstersDead ( ) { bool bAllDead = true ; pre ( unsigned int uiIndex = 0 ; uiIndex < 10 ; + + uiIndex ) { if ) { bAllDead = false ; } ( mqaMonsters [ uiIndex ] IsDead ( ! ) . } return bAllDead ; }

private : bool LocateCreature ( unsigned int a 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 ] ; } ;

Táto trieda ovláda pohyb vášho hrdinu . Môžete použiť " W " , " A " , " S " a " Z " pre pohyb vašej postavy . Je takisto založí 10 monštier a svojho hrdinu vnútri " dungeonu " , a riadi vzájomné vzťahy medzi nimi , ako sú úmrtia a pozícií .
5

Vytvorte hlavný program , ktorý volá rôzne triedy a funkcie a interakciám s užívateľom . Môžete ovládať rôzne aspekty svojej hry z tohto programu . Použite tento kód vytvoriť :

int main ( ) { using namespace std ;//Clear dungeonCRolePlayingGame qGame ; bool bGameOver = false ; robiť { qGame.PrintBoard ( ) ;//získať ďalšie movechar cMove ; cout << " Použiť W , A , S alebo Z sa pohybovať : " << endl ; std :: cin >> cMove ;//Skontrolujte , či pohyb je validif ( qGame.MoveHero ( cMove ) ) { //je-li hrdina je deadif ( qGame.HeroIsDead ( ) ) { cout << " Zomrel si! " << endl ; bGameOver = true ; } else { //Odstrániť mŕtve monštrá z gameqGame.RemoveDeadMonsters ( ) ;//Ak sú všetky príšery sú deadif ( qGame.AllMonstersDead ( ) ) { cout << " Dungeon objasnil ! " << endl ; bGameOver = true ; } } } } while ( bGameOver! ) ; return 0 ; }
6

Kompilácia svoj ​​nový projekt a spustite ho vyskúšať , či to funguje , ako očakávate . Zmeniť rôzne nastavenia pre zlepšenie hry - play , kým nebudete spokojní s výsledkom .

Najnovšie články

Copyright © počítačové znalosti Všetky práva vyhradené