quarta-feira, 18 de abril de 2012

6º Joguinho Hall of Monsters by Agnor

Bem pessoal como disse, estou estudado C++ pelo site do Agnor e por isso estou pegando uns exemplos dele. Este é feito pelo Agnor, fiz somente algumas mudanças para porta-lo para Linux pois o Agnor utilizou a biblioteca para utilizar a função GetTickCount(); a qual utilizou para na função random.
Tambem alterei o pointer char *nome; na struct Monstro{}.

Chega de conversa,  la vai o source...

/**************************************
Programação C++
Autor: Adelson Inácio
       Copiado do exemplo 9.4 do site do Agnor, 
       fiz somente uma simples modificação para rodar no linux
Link: http://agnor.gamedev-pt.net/gamedev/cpp/cpp009.html
Data: 18 de Abril de 2012
Versão: 
Desc.: Jogo Hall of Monster Linux version

                   Para compilar: $ g++ exemplo14.cpp -o exemplo14
                   para executar : $ ./exemplo14 


***************************************/

#include
#include
using namespace std;

struct Personagem
{
    int hp; //Seus pontos de vida
    int mp; // Seus pontos de magia
    int max_hp; //usado para recuperar hp do personagem
    int max_mp; //usado para recuperar mp do personagem
    int forca; // Força de ataque
};

struct Monstro
{
    int hp;
    int forca;
    char nome[50];
};

//Variaveis para a criação dos jogadores
Personagem player = {50, 7, 50, 7, 5}; // {hp, mp, max_hp, max_mp, força}
Monstro ORC     = {  40,  10, "Orc"}; // {hp, força, nome}
Monstro LIZARD  = {  60,  10, "Lizard"};
Monstro SHADOW  = { 100,  23, "Shadow"};
Monstro BAHAMUT = { 140,  31, "Bahamut"};
Monstro ULTIMA  = {1000, 100, "Ultima"};


// Escopo das Funções
int menuJogo();
int chamarBatalha(Monstro monstro);
int menuBatalha(Monstro monstro);
int monstroIA(Monstro monstro);
int ganhou();
int perdeu();
int getRandom (int de, int ate);

int main()
{
    menuJogo();

    cin.get();
    return 0;    
}

int menuJogo()
{
    int escolha;

    cout << "\nEscolha um adversario:" << endl;
    cout << "\n1 - Orc" << endl;
    cout << "\n2 - Lizard" << endl;
    cout << "\n3 - Shadow" << endl;
    cout << "\n4 - Bahamut" << endl;
    cout << "\n5 - ULTIMA" << endl;

    cin >> escolha;

    switch(escolha)
    {
        case 1:
            chamarBatalha(ORC);
            break;
        case 2:
            chamarBatalha(LIZARD);
            break;
        case 3:
            chamarBatalha(SHADOW);
            break;
        case 4:
            chamarBatalha(BAHAMUT);
            break;
        case 5:
            chamarBatalha(ULTIMA);
            break;
        default:
            cout << "Comando não recohecido... tente outra vez\n\n" << endl;
            menuJogo();
            break;
    }
}

int chamarBatalha(Monstro monstro)
{
    cout << "\n\nApareceu um " << monstro.nome << endl;
    menuBatalha(monstro);
    return 0;
}

int menuBatalha(Monstro monstro)
{
    int escolha;

    cout << "\n\nSeu HP: " << player.hp << "/" << player.max_hp << endl;
    cout << "Seu MP: " << player.mp << "/" << player.max_mp << endl;
    
    cout << "Escolha um ataque:" << endl;
    cout << "\n1 - Ataque normal" << endl;
    cout << "\n2 - Fogo" << endl;

    cin >> escolha;

    switch(escolha)
    {
        case 1:
            monstro.hp -= player.forca * 7;
            cout << "\nVocê atacou!" << endl;
            break;
        case 2:
            monstro.hp -= player.forca * 10;
            player.mp -= 7;
            cout << "\nVocê usou fogo!" << endl;
            break;
        default:
            cout << "\nComando não reconhecido..." << endl;
            menuBatalha(monstro);
            break;
    }
    if (monstro.hp <= 0) // como if e else tem somente uma instrução, não é necessario o uso das chaves
        ganhou();
    else
        monstroIA(monstro);
    
    return 0; // este return pertence à função
}

int monstroIA(Monstro monstro)
{
    int random;
    
    random = getRandom(1, 4);

    switch(random)
    { 
        case 1:
        case 2:
        case 3:
            cout << "\n\n" << monstro.nome << "Atacou!" << endl;
            player.hp -= monstro.forca;
            break;
        case 4:
            cout << "\n\n" << monstro.nome << " usou seu ataque especial" << endl;
            player.hp -= monstro.forca * 2;
            break;
    }

    if (player.hp <= 0)
        perdeu();
    else
        menuBatalha(monstro);

    return 0;
}

//random de de 1 a 4
int getRandom(int de, int ate)
{
    srand(time(NULL));
    int random = (rand() % ate) + de;
cout << random;
    return random;
}

int perdeu()
{
    cout << "\nPerdeu... Mais sorte na próxima! :C" << endl;
    menuJogo();
    return 0;
}

int ganhou()
{
    cout << "\n\nGanhou!!! e subiu de nivel" << endl;
    player.forca += 2; //as modificações para "subir de nivel"
    player.max_hp += 10;
    player.max_mp += 7;
    player.hp = player.max_hp; //recuperar a energia
    player.mp = player.max_mp;

    cin.get();

    menuJogo();

    return 0;
}



Baixe o source e o executavel aqui

Nenhum comentário:

Postar um comentário