AULA DE C++ Parte 6 - ORIENTAÇÂO A OBJETOS - CRIANDO LOJA, em modo texto.

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

AULA DE C++ Parte 6 - ORIENTAÇÂO A OBJETOS - CRIANDO LOJA, em modo texto.

Mensagem por Da Galáxia em Qui 17 Fev 2011, 20:39

AULA DE C++ Parte 6 - CRIANDO UMA LOJA QUE VENDE ARMAS, em modo texto.

AULAS ANTERIORES.

Aula 1 - http://gmbr.forumeiros.com/t13494-aula-de-c-parte-1
Aula 2 - http://gmbr.forumeiros.com/t13639-aula-de-c-parte-2
Aula 3 - http://gmbr.forumeiros.com/t13638-aula-de-c-parte-3
Aula 4 - http://gmbr.forumeiros.com/t13641-aula-de-c-parte-4-calculadora-sem-interface-grafica
Aula 5 - http://gmbr.forumeiros.com/t13666-aula-de-c-parte-5-tipo-bool-estrutura-enun-e-operador-ternario


Aqui estou usando a IDE DEV C++.

Neste SEXTO tuto vou explanar um pouco acerca de orientação a objetos (OO) e depois postei um programa de COMPRA DE ARMA EM UMA LOJA em modo texto, os códigos estão comentados.

Existem duas formas mais usadas para programar, a procedural e a orientada a objetos (OO). A procedural, como o nome lembra, é uma programação através de enumeros procedimentos, onde não se tem a noção de "OBJETO", esta forma requer mais tempo do programador, pois tem que fazer muitas rotinas para explicar passo-a-passo para o computador.
Muita gente quando escuta a frase Orientado a Objeto, logo pensa em imagem, não é isso! Um objeto pode ser seu nome caro leitor, desde que ele, como uma variavel, ascenda aos atributos e metodos de uma classe. As classes são as pricipais responsaveis pela OO, pois vc pode criar uma classe Carro, e dentro dela ter as variaveis x e y para a posição, vel para a velocidade e cor para a pintura do carro. EX de uma classe basica em C++.

class Cobj_carro{

public:
int x,y;//tipos inteiros
float vel;//tipo flutuante
string cor;//tipo string (+ou- uma cadeia do tipo char)
Cobj_carro();//construtor, inicializa as variaveis(sempre com o nome da classe)
~Cobj_carro();//desconstrutor
void inicia();//metodo da classe
void checa();//metodo da classe

}obj_carro;//esse é o nosso objeto que vai ascender aos atributos e metodos da classe

Nessa nossa classe, por exemplo, da pra fazer o seguinte(é apena um ex. não é compilavel)
Queremos que o carro comece fora da tela a esquerda e no meio da tela, queremos que ao sair da tela do lado direito, o processo se reinicie, veja:
O objeto ascende aos atributos de sua classe através do ponto(.) e quando ele é intanciado (usando o operador "new" ascende atraves de uma flecha (->), isto vai ser visto em modo gráfico quando chegar as aulas de allegro)
obj_carro.x = -50;//começando fora da tela à esquerda
obj_carro.y = 320;//no centro da tela no eixo y
obj_carro.vel +=10;//velocidade do carro
void inicia();//podemos fazer que esse metodo marque a posição inicial do carro
void checa();//e esse cheque quando o carro saiu da tela do lado direito, e reinicie o ciclo, é claro que aqui não esta programado, é apenas para entender o que se pode fazer com atributos e metodos de uma classe.

NOTA: Quando chegar a hora de usar a allegro, uma das aulas vai ser fazer um scrolling de estrelas e eu vou usar exatamente os atributos e metodos descritos acima, para o leitor entender.

RESUMINDO: Na Orientação a Objetos ao fazermos isso: obj_carro.x, ja é entendido que estamos falando da posiçao x do carro no plano cartegiano, e de cara podemos comparar com a posição x da tela. No C++ tanto pode-se programar em procedural quanto em OO, e é claro pode-se e as vezes deve-se juntar os dois modos, ou seja, parte do programa OO e parte Procedural e tudo misturado, mas tome cuidado para organizar e otimizar seus codigos. O Java e o C# (Sharp) apenas usa a OO (se eu estiver enganado, por favor, alguém me corrija), pelo menos quando eu programo em Java é so OO, o C# ainda não conheço (ainda).
Entre neste link que explica o OO, é exelente:
http://www.hardware.com.br/artigos/programacao-orientada-objetos/


A minha intenção é criar alguns tutoriais com codigos nativos, e depois disto criar um proto-jogo utilizando a biblioteca ALLEGRO.

C++ é a linguagem mais utilizada no mundo dos games, ela pode ser usada com enumeras bibliotecas gráficas como a Allegro e a OpenGL (esta é 3D), apenas para citar duas.

Crie uma pasta com o nome Exemplo6C++

Com o dev C++ aberto vá em ARQUIVO – NOVO – PROJETO na tela que aparece, escolha EMPTY Project selecione projeto C++ (geralmente já é padrão) aperte OK ache e entre na pasta que criamos (Exemplo6C++) e SALVE.
Agora vá a ARQUIVO – NOVO – ARQUIVO FONTE e aperte YES é nesta tela branca que escreveremos nossos códigos.

OBS: Os comandos aqui que NÃO foram explicados e/ou comentados, estão explicados e/ou comentados nas aulas anteriores. Seus links estão no topo deste poste.

Então vamos programar:

Digite isto:

Código:
//uma das incontaveis bibliotecas de C++
#include <iostream>

using namespace std;

//protótipos de funções
//as criei após o programa principal, ja poderiam ter sido construidas aqui.
void Farma();
void Fmodelo();
void Fequipou();

//variaveis globais 
//são todas aquelas que são declaradas fora de um bloco de função
//as 2 variaveis s~estão sendo usadas para controlar os laços (whiles)
int voltar = 1;//se 1 continua no laço, se 2 vai comprar se maior que 2 sai da loja
int Equipou = 0;//quando 1, equipa o player, se mair que 1 sai da loja


//nossa classe para o objeto "obj_player"
class Cobj_player{
//public: se tivesse classes filhas, seus objetos poderiam ascender aos atributos desta classe...     
//..outros: private, protected e friend.     
      public:
            int arma,modelo,dinheiro;//atributo (propriedade) da classe, a elas o objeto ascende
            string nome;//atributo (propriedade) da classe.
//o construtor tem o mesmo nome da classe, algumas variveis precisam ser inicializadas por ele           
            Cobj_player();//construtor
            ~Cobj_player();//desconstrutor 
//metodos aqui usados apenas no final, para mostrar como o player foi equipado
            void SetNome_arma(string nome);//metodo da classe
            string GetNome_arma();//metodo da classe
                           
}obj_player;//esse é o nosso objeto, que pega as propriedades e/ou metodos da classe
//se quiser fazer abaixo da chave poderia ser assim   
//Cobj_player obj_player;


//as enumeraçõs são exelentes para trabalharmos com constantes. O valor de cada item...
//...aqui vai ser sempre o mesmo.
enum ITEM{//itens à venda na loja
Faca = 100, Adaga = 250, Espada = 400, 
Pistola = 500, Espingarda = 700, Bazuca = 2000,   
Bronze = 200, Prata = 400, Ouro = 950 
};



//PROGRAMA PRINCIPAL
int main(){
//colore tela, nesse caso um branco bem forte, o 1°(0) argumento é do fundo, o 2°(f) da letra   
    system("color 0f");//as cores usam digitos hexadecimais (de 0 à 9 e de a à f)


    Farma();//chamada da função
   
    cout<<endl<<endl;

    Fmodelo();//chamada da função
   
    cout<<endl<<endl;//pulando 2 linhas
    getchar();//segura tela
    system("cls");//limpa tela
   
    Fequipou();//chamada da função
 
   
//quando o jogador sai da loja, e encerra o aplicativo   
    if (voltar > 3 || Equipou > 1)
      cout<<"ENTER << Sai da loja >>"<<endl;
   
      getchar();

      return 0;
}//fimprograma principal

//NOSSO CONSTRUCTOR
//o operador resolução de alcance :: chama o construct o destruct e os metodos da classe
Cobj_player::Cobj_player(){

//inicializando a variavel dinheiro (se não inicializar no constructor ela pode ...
//...ficar com valores diferentes em diferentes partes do programa)                       

    dinheiro=800; 

}

//NOSSO DESTRUCTOR
Cobj_player:: ~Cobj_player(){
dinheiro=0;                         
}

//NOSSOS METODOS DA CLASSE
//joga nome
void Cobj_player::SetNome_arma(string nome){
    this->nome = nome;

}
//adquiri nome
string Cobj_player::GetNome_arma(){
    return this->nome;

}


//NOSSAS FUNÇÕES   
//escolhe o estilo da arma   
void Farma(){

//Explicando o laço (while).
//Somente continua no laço se a variavel voltar for igual a 1 (como começa). 
//Se o usuario digitar um numero que não esteja na condição do case (4 por exemplo)
//o laço continua. Digitando o numero zero a variavel incrementa +3 e leva o usuario
//a esta parte do programa " if (voltar>3)cout<<"Enter fecha o programa."<<endl;"   
//Digitando 1,2 ou 3 a variavel incrementa apenas +1 (++) levando o usuario a esta função   
//"void Fequipou(){". O segundo laço (while) tem funcionalidade similar, observe-o. 
   
    while (voltar == 1){//laço
   
    cout<<endl<<"LOJA==========================VC TEM "<<obj_player.dinheiro
    <<" REAIS=============================LOJA"<<endl<<endl<<endl;
    cout<<"COMPRE UM ITEM"<<endl<<endl<<endl;
    cout<<"Escolha a arma ou escudo, pelo numero"<<endl<<endl;
    cout<<"0>>Sair da loja"<<endl<<"1>>Arma Branca, 2>>Arma de Fogo, 3>>Escudo"<<endl<<endl;
    cin>>obj_player.arma;
   
    switch (obj_player.arma){
          case 0:{
                  cout<<system("cls")<<"SAIR da loja - Prima ENTER"<<endl; system("color c0");           
//repare que aqui a variavel incrementa mais 3, e nos outros apenas 1 (++) e no default nada                 
                  voltar+=3;
                  }
          break;
         
          case 1:{
                  cout<<"Vc optou pela Arma Branca"<<endl;           
                  voltar++;
                  }
          break;
          case 2:{
                  cout<<"Vc optou pela Arma de Fogo"<<endl;           
                  voltar++;
                  }
          break;
          case 3:{
                  cout<<"Vc optou pelo Escudo"<<endl;           
                  voltar++;
                  }
         
          break;
          default:{//quando o usuario digita um numero fora de 0,1,2 e 3
                  cout<<"Tecle ENTER e escolha um NUMERO valido."<<endl;     
                  getchar();
                  getchar();
                  system("cls");
                  }
          }
    }   
}

//escolhe o modelo da arma
void Fmodelo(){
   
    while (Equipou == 0 && voltar < 3){//laço

    system("cls");
    cout<<endl<<"LOJA==========================VC TEM "<<obj_player.dinheiro
    <<" REAIS=============================LOJA"<<endl<<endl<<endl;
   
    cout<<"COMPRE UM ITEM"<<endl<<endl<<endl;
//se o tipo de arma escolhida foi >> arma branca   
    if (obj_player.arma == 1){
    cout<<"Escolha o modelo, pelo numero"<<endl<<endl;
    cout<<"0>>Sair da loja"<<endl<<
    "1>>Faca = 100 Reais, 2>>Adaga = 250 Reais, 3>>Espada = 400 Reais"<<endl<<endl;
   
    system("color 0a");
    cin>>obj_player.modelo;

//Os cases abaixo é como os de cima, apenas pus na mesma linha, para o codigo ficar compactado.
    switch (obj_player.modelo){
         
            case 0:{system("cls"); Equipou +=2;system("color c0");} break; 
            case 1:case 2: case 3:{Equipou++; system("color 0b"); } break;                   
            default:{cout<<"Tecle ENTER e escolha um NUMERO valido."<<endl;
                    getchar();getchar();system("cls");}         
         
          }   
      }
//se o tipo de arma escolhida foi >> arma de fogo 
    if (obj_player.arma == 2){
    cout<<"Escolha o modelo, pelo numero"<<endl<<endl;
    cout<<"0>>Sair da loja"<<endl<<
    "1>>Pistola = 500 Reais, 2>>Espingarda = 700 Reais, 3>>Bazuca = 2000 Reais "<<endl<<endl;
    system("color 0a");
    cin>>obj_player.modelo;
   
    switch (obj_player.modelo){
          case 0:{system("cls"); Equipou +=2; system("color c0");} break;
          case 1:case 2:case 3:{Equipou++; system("color 0b"); }break; 
          default:{cout<<"Tecle ENTER e escolha um NUMERO valido."<<endl;
                  getchar();getchar();system("cls");}   
                           
                     
          }   
      }
//se o tipo de arma escolhida foi >> escudo
    if (obj_player.arma == 3){
    cout<<"Escolha o modelo, pelo numero"<<endl<<endl;
    cout<<"0>>Sair da loja"<<endl<<
    "1>>Bronze = 200 Reais, 2>>Prata = 400 Reais, 3>>Ouro = 950 Reais"<<endl<<endl;
    system("color 0a");
    cin>>obj_player.modelo;
   
    switch (obj_player.modelo){
          case 0:{system("cls"); Equipou +=2;system("color c0");}break; 
          case 1:case 2:case 3:{Equipou++;system("color 0b"); }break;               
          default:{cout<<"Tecle ENTER e escolha um NUMERO valido."<<endl;
                  getchar();getchar();system("cls");}       
                           
          }   
      }
  } 
}

//depois que o jogador escolheu o tipo e o modelo da arma
void Fequipou(){
   
if ( Equipou == 1){
     
        if (obj_player.arma == 1 && obj_player.modelo == 1)
          if (obj_player.dinheiro >= Faca)
              {
                obj_player.SetNome_arma("Arma Branca >> Faca ");obj_player.dinheiro-=Faca;
//atualizando dinheiro 
                cout<<"Player equipado com == "<<obj_player.GetNome_arma()<< endl<<
                endl<<"VC TEM "<<obj_player.dinheiro<<" REAIS";
              }
          else
                cout<<endl<<"LAMENTAMOS, VC NAO TEM DINHEIRO O SUFICIENTE PARA ADQUIRIR ESTE ITEM";         
         
        if (obj_player.arma == 1 && obj_player.modelo == 2)
          if (obj_player.dinheiro >= Adaga )
              {
                obj_player.SetNome_arma("Arma Branca >> Adaga ");obj_player.dinheiro-=Adaga;
//atualizando dinheiro 
                cout<<"Player equipado com == "<<obj_player.GetNome_arma()<< endl<<
                endl<<"VC TEM "<<obj_player.dinheiro<<" REAIS";
              }
          else
                cout<<endl<<"LAMENTAMOS, VC NAO TEM DINHEIRO O SUFICIENTE PARA ADQUIRIR ESTE ITEM";         
       
        if (obj_player.arma == 1 && obj_player.modelo == 3)
          if (obj_player.dinheiro >= Espada)
              {
                obj_player.SetNome_arma("Arma Branca >> Espada ");obj_player.dinheiro-=Espada;
//atualizando dinheiro 
                cout<<"Player equipado com == "<<obj_player.GetNome_arma()<< endl<<
                endl<<"VC TEM "<<obj_player.dinheiro<<" REAIS";
              }
          else
                cout<<endl<<"LAMENTAMOS, VC NAO TEM DINHEIRO O SUFICIENTE PARA ADQUIRIR ESTE ITEM";         
       
        if (obj_player.arma == 2 && obj_player.modelo == 1)
          if (obj_player.dinheiro >= Pistola)
              {
                obj_player.SetNome_arma("Arma de Fogo>> Pistola ");obj_player.dinheiro-=Pistola;
//atualizando dinheiro 
                cout<<"Player equipado com == "<<obj_player.GetNome_arma()<< endl<<
                endl<<"VC TEM "<<obj_player.dinheiro<<" REAIS";
              }
          else
                cout<<endl<<"LAMENTAMOS, VC NAO TEM DINHEIRO O SUFICIENTE PARA ADQUIRIR ESTE ITEM";         
         
        if (obj_player.arma == 2 && obj_player.modelo == 2)
          if (obj_player.dinheiro >= Espingarda)
              {
                obj_player.SetNome_arma("Arma de Fogo>> Espingarda ");obj_player.dinheiro-=Espingarda;
//atualizando dinheiro 
                cout<<"Player equipado com == "<<obj_player.GetNome_arma()<< endl<<
                endl<<"VC TEM "<<obj_player.dinheiro<<" REAIS";
              }
          else
                cout<<endl<<"LAMENTAMOS, VC NAO TEM DINHEIRO O SUFICIENTE PARA ADQUIRIR ESTE ITEM";         
       
        if (obj_player.arma == 2 && obj_player.modelo == 3)
          if (obj_player.dinheiro >= Bazuca)
              {
                obj_player.SetNome_arma("Arma de Fogo >> Bazuca ");obj_player.dinheiro-=Bazuca;
//atualizando dinheiro 
                cout<<"Player equipado com == "<<obj_player.GetNome_arma()<< endl<<
                endl<<"VC TEM "<<obj_player.dinheiro<<" REAIS";
              }
          else
                cout<<endl<<"LAMENTAMOS, VC NAO TEM DINHEIRO O SUFICIENTE PARA ADQUIRIR ESTE ITEM";         
         
        if (obj_player.arma == 3 && obj_player.modelo == 1)
          if (obj_player.dinheiro >= Bronze)
              {
                obj_player.SetNome_arma("Escudo>> Bronze ");obj_player.dinheiro-=Bronze;
//atualizando dinheiro 
                cout<<"Player equipado com == "<<obj_player.GetNome_arma()<< endl<<
                endl<<"VC TEM "<<obj_player.dinheiro<<" REAIS";
              }
          else
                cout<<endl<<"LAMENTAMOS, VC NAO TEM DINHEIRO O SUFICIENTE PARA ADQUIRIR ESTE ITEM";         
         
        if (obj_player.arma == 3 && obj_player.modelo == 2)
          if (obj_player.dinheiro >= Prata)
              {
                obj_player.SetNome_arma("Escudo>> Prata ");obj_player.dinheiro-=Prata;
//atualizando dinheiro 
                cout<<"Player equipado com == "<<obj_player.GetNome_arma()<< endl<<
                endl<<"VC TEM "<<obj_player.dinheiro<<" REAIS";
              }
          else
                cout<<endl<<"LAMENTAMOS, VC NAO TEM DINHEIRO O SUFICIENTE PARA ADQUIRIR ESTE ITEM";         
       
       
        if (obj_player.arma == 3 && obj_player.modelo == 3 )
          if (obj_player.dinheiro >= Ouro)
              { 
                obj_player.SetNome_arma("Escudo >> Ouro ");obj_player.dinheiro-=Ouro;
//atualizando dinheiro 
                cout<<"Player equipado com == "<<obj_player.GetNome_arma()<< endl<<
                endl<<"VC TEM "<<obj_player.dinheiro<<" REAIS";
              }
          else
                cout<<endl<<"LAMENTAMOS, VC NAO TEM DINHEIRO O SUFICIENTE PARA ADQUIRIR ESTE ITEM";   
             
}
}
//FIM PROGRAMA


PRECIONE F9 E SALVE DENTRO DA PASTA Exemplo6C++, COM O NOME TESTE5
VÁ EM EXECUTAR – COMPILAR & EXECUTAR
FIM DO TUTO.

Estou a disposição para qualquer pergunta.

/*
OBS: note que as funções somente são criadas fora de outras funções, ou seja não podem
ser criadas dentro da função principal "int main()", todavia para toda a função rodar
ela tem que ser chamada no programa principal. Já o constructor e os metodos como são
parte da classe, não seguem o mesmo principio das funçoes. Se eu não me engano, neste
programa não criei nenhuma variavel LOCAL, pois os itens eu criei em um ENUM, e tendo
o OBJETO da CLASSE ascendendo a seus atributos, criei apenas 2 variaveis GLOBAIS. Para
saber... Fora de blocos de funções inclusive a int main() toda a variavel é global. Para
criar uma variavel LOCAL ela deve ser criada dentro de uma função. Exemplo: na função X
eu crio a variavel "Alex", como é local, em outra função, função Y eu posso criar tambem
uma variavel chamada "Alex", não havera conflito, pois cada uma responde as suas funções.
Ja uma variavel GLOBAL jamais pode ter o mesmo nome, pois o compilador
não saberia distingui-las. Tendo uma variavel GLOBAL "Alex = 10" e uma LOCAL "Alex = 20", em
qualquer parte do programa com exeção da função onde a variavel local foi criada, ao chamar
a variavel "Alex" ela tera o valor 10 (da global), em contra partida em sua função
quando chamada ela tera o valo 20. Usando o operador resolução de alcance "::" é possivel
dentro de uma função que tenha uma variavel de mesmo nome de uma global, chamar a global
para dentro da função e por ex. somar as duas, veja...

#include
using namespace std;

//x global
int x=35;

void Flocal()
{
//x local
int x=50;
:Mad += x; // a variável global x += a variável local x
}

//programa principal
int main()
{
//chamando função
Flocal();

//saída. Aqui o x equivale a soma das variaveis x global e local
cout << x << endl;

getchar();
return 0;
}

*/

Da Galáxia

Número de Mensagens : 348
Data de inscrição : 14/01/2010
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum