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

sexta-feira, 13 de abril de 2012

5º ScreenShots Ladrão de Cofre

Decidi postar alguns Screenshots e o executavel do jogo.










Esta é a tela de Menu, onde você pode digitar o numero da opção que que quiser.


Escolhendo a Opção 3 você vai para esta tela, onde esta os meus dados.

A Opção 2 te leva para a tela de Dificuldade, onde onde você pode escolher 3 niveis de dificuldade, o FACIL que possui somente 1 algarismo de 0 a 9, o MODERADO q possui 2 algarismos de 10 a 99 e o DIFICIL que possui 3 algarismos de 100 a 999.

Esta é a tela do jogo onde esta o cofre e você tem de adivinhar a senha.

Nesta parte digitei uma senha errada e o programa me informa que a senha esta errada e que possuo mais 9 tentativas.

Bem, ja mostrei os screen agora irei postar os arquivos do jogo. Quem quiser baixar só clicar aqui




4º Ladrão de Cofre 1.0

Nussa, hoje mesmo ja fiz aquela implementação no joguinho Ladrão de Cofre...
Coloquei um menu onde você pode escolher entre ...Jogar, Dificuldade, Credito e Sair
agora a senha do cofre esta randomica e dependente do nivel de dificuldade. Bem, antes de postar o codigo vou explicar que estou programando no OS Fedora Linux usando o g++, este codigo não ira funcionar no windows, pra funcionar tera de fazer algumas modificações. Qualquer duvida só perguntar...

/**************************************
Programação C++
Autor: Adelson Inácio
Data: 13 de Abril de 2012
Versão: Ladrao de Cofre 1.0
Desc.: Tente advinhar a senha para abrir o cofre

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

#include
#include
using namespace std;

//VARIÁVEIS GLOBAIS Estas variáveis podem ser usadas por todas as funções do programa!

int opcao = 0; // Opções para o menu
int senha; //o numero para adivinhar
int chute = 0; //este é seu paupite para abrir o cofre.
int num_tentativa = 0; // armazena o numero de veses que vc tentou abrir o cofre.
int vida = 10;    //numero disponivel de tentativas
int dificuldade = 1; //grau de dificuldade
bool jogando = false; // true para jogando e false para menu

//Escopo das funções utilizadas.
void Menu(); //menu do jogo
void Jogo(); // dentro do jogo
void Dificuldade(); //Função para escolha do grau de dificuldade
void Credito(); //Função que mostra os creditos do autor
void Sair();
void Resultado(); //Mostra se vc ganhou ou perdeu
int Randomize(); // Autera a senha

int main()
{
    Menu();
}

void Menu()
{
    system("clear");
    cout << "\n\n\n\t\t\t1 - Iniciar Jogo" << endl;
    cout << "\t\t\t2 - Dificuldades" << endl;
    cout << "\t\t\t3 - Credito" << endl;
    cout << "\t\t\t4 - Sair do Jogo" << endl;

    cout << "\t\t\tDigite o numero da opção...";
    cin >> opcao;

    switch(opcao)
    {
        case 1:
            jogando = true;
            vida = 10;
            num_tentativa = 0;
            Jogo();
            break;
        case 2:
            Dificuldade();
            break;
        case 3:
            Credito();
            break;       
        case 4:
            system("exit"); //Sai do jogo
            system("clear");
            break;
        default:
            cout << "\nErro...Tecla errada" << endl;
            Menu(); //volta ao menu
            break;
    }
}

void Jogo()
{
    senha = Randomize(); // Declara uma senha randomica
    vida = 10;
   
    while (jogando)
    {
system("clear");

        cout << "\nCOFRE DE SEGURANÇA MAXIMA" << endl;
        cout << "\nSenha: ";
        cin >> chute;

        num_tentativa++; //incrementa o numero de tentativas
        vida--;

        Resultado();
    }
    system("clear");
    sleep(2);
    Menu();
}

int Randomize()
{
    int num;
    if (dificuldade == 1)
    {
        srand(time(NULL));
        num= rand() % 10;
    }else if (dificuldade == 2)
    {
        srand(time(NULL));
        num= rand() % 100;
    }else
    {
        srand(time(NULL));
        num= rand() % 1000;
    }   
    return num;
}

void Resultado() // funcao responsavel pelo resultado do jogo
{
    int i;

    if (chute == senha) //verifica se sua tentativa esta correta
    {
        cout << "\n\t\tSenha Correta!" << endl;
        cout << "\t\tCofre aberto!" << endl;
        cout << "\nParabens você acertou em " << num_tentativa << " tentativas." << endl;
        cout << "Finalizando missão...\n" << endl;
        cin.get();
        cin.get();
        jogando = false; // finaliza loop
    } else
    {
        cout << "\n\t\tSenha Incorreta!" << endl;
        cout << "\t\t Cofre Fechado!" << endl;

        if (vida > 0)
        {
            cout << "\t\tVoce tem mais " << vida << " tentativas " << endl;
            cout << "##################################################" << endl;
            sleep(2);      
        }else
        {
            for(i=0; i < 100; i++)
            {
                cout << "\a";
            }     
            cout << "Você perdeu!!!";
            cin.get();
            cin.get();
            Menu();

        }

    }
}

void Dificuldade() // funcao para a escolha do nivel de dificuldade
{
    system("clear"); //limpa a tela
    cout << "\t\t\tGRAU DE DIFICULDADE\n" << endl;
    cout << "\n\t\t\t1 - Facil: de 0 a 9" << endl;
    cout << "\t\t\t2 - Moderado: de 10 a 99" << endl;
    cout << "\t\t\t3 - Dificil: de 100 a 999" << endl;

    cout << "\n\t\t\tEscolha o grau de Dificuldade...";
    cin >> dificuldade;

    switch(dificuldade) // Condição para que a escolha seja de 1 a 3
    {
        case 1:
        case 2:
        case 3:
            Menu();
            break;
        default:
            Dificuldade();
            break;   
    }

}

void Credito() // função responsavel por mostrar os credito do autor
{
    system("clear");
    cout << "\n\t\t\t\tCRÉDITO" << endl;
    cout << "\n\t\t\tAutor: Adelson Inácio" << endl;
    cout << "\t\t\tEmail: acinacio@gmail.com" << endl;
    cout << "\t\t\tSkype: adelson.inacio" << endl;
    cout << "\t\t\tData de Criação: 13 de Abril de 2012" << endl;

    cout << "\n\t\t\tTecle ENTER para voltar ao menu...";

    cin.get();// aguada o precionament
    cin.get();
    Menu();

}

3º Ladrão de Cofre

Congratulations...

Apesar de achar que iria demorar para ler o tutorial de C++ do Agnor, me surpreendi lendo 5 das 20 liçoes e ja fiz meu primeiro joguinho em C++, algo bem rudimentar mas não deixa de ser um passo dado. Vou postar o Source aqui e quem estiver começando e quiser dar uma estudada sinta-se a vontade.

/**************************************
Programação C++
Autor: Adelson Inácio
Data: 13 de Abril de 2012
Versão: Ladrao de Cofre 0.1
Desc.: Tente advinhar a senha para abrir o cofre

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

#include
using namespace std;

int main()
{
    int senha, num_tentativa, chute; //cria as variaveis
    bool done = false; 

    senha = 25; // esta é a senha para abrir o cofre
    num_tentativa = 0; // armazena o numero de veses que vc tentou abrir o cofre.
    chute = 0; //este é seu paupite para abrir o cofre.

    while (!done)
    {
        cout << "\nCOFRE DE SEGURANÇA MAXIMA" << endl;
        cout << "\nSenha: ";
        cin >> chute;

        num_tentativa++; //incrementa o numero de tentativas

        if (chute == senha) //verifica se sua tentativa esta correta
        {
            cout << "\n\t\tSenha Correta!" << endl;
            cout << "\t\tCofre aberto!" << endl;
            cout << "\nParabens você acertou em " << num_tentativa << " tentativas." << endl;
            cout << "Finalizando missão...\n" << endl;
            cin.get();
            done = true; // finaliza loop
        } else
        {
            cout << "\n\t\tSenha Incorreta!" << endl;
            cout << "\t\t Cofre Fechado!" << endl;
            cout << "\nTente novamente" << endl;
            cout << "##################################################" << endl;       
        }
    }
}

Este é um joguinho bem simples onde o player  deve tentar acertar a senha do cofre, acho que o código esta  bem comentado.

OBS.: Futuramente pretendo colocar um menu, um random para que a senha não seja sempre a mesma e niveis de dificuldade, indo de facil com 2 algarismos, medio com 3 algarismos e dificil com 4 algarismos.



quinta-feira, 12 de abril de 2012

2º Topicos para estudo

Bem, agora irei colocar os topico que irei  estudar...


  • Linguagem de programação C++
  • SDL
  • OpenGL
Decidi começar por estes que são pelo meu ver os mais recomendado e tem bastante material para estudo, para o C++ irei seguir o site do Agnor a qual acho que ja dara para aprender o basico desta linguagem e vou estudar por uma apostila de Programação Orientada a Objeto da UFSC, pelo site do Agnor pretendo demorar no maximo um mes para estuda-lo todo, sei que isso é muito tempo mas estou meio sem tempo, assim que terminar de ler as 20 aulas do site, acho que ja estarei capacitado para fazer os seguintes joguinhos em modo console...

  • Jogo da Velha
  • Snaker
  • Pong
Tem mais um outro mas agora esqueci o nome.

 Depois de faser esses joguinhos pretendo passar a estudar SDL pelo site Lazy foo  (ingles) e pelo site da UFRJ depois de ler estes tutoriais acho que ja estarei pronto para inplementar os seguintes jogos em 2D

  • Jogo da Velha
  • Snaker
  • Pong
  • Jogo de Dama
  • Xadrez
Bem o proximo passo acho que sera o mais dificil pois vou estudar programação 3D com OpenGL, esta parte vou deixar para explicar depois quando tiver mais noção do territorio onde estou pisando. Bem esta ai como pretendo começar a programar jogos. Vamos aos estudos então....

1º - Iniciando a iniciativa

Bem, gosto de programação, ja dei uma estudada na linguagem C a muito tempo atras mas nunca fiz nada de interessante que valece a pena. Andei estudando PHP+MySQL e neste fiz ate alguns site como uma comunidade virtual aos moldes do ORKUT e fiz tb um site de LEILÃO DE 1 CENTAVO mas nunca coloquei  no ar. Agora estou querendo aprender programação de jogos e vou colocar aqui meu progresso, pretendo fazer este blog para me ajudar a ter foco no que estou fazendo e para futuramente ajudar quem estiver começando.