• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

C++ Uzywanie zmiennych z innych Klas

VPS Starter Arubacloud
0 głosów
1,144 wizyt
pytanie zadane 2 kwietnia 2016 w C i C++ przez veryhotshark Obywatel (1,620 p.)
witam mianowici chodzi mi o to że zrobiłem odzielnego void() Menu i tam jest Switch który wywołuje dane metody z klasy i chciałem użyc pętli while z warunkiem (HP!=0) ale piszą że nie ma deklaracji HP w tym voidzie ,a zmienna HP jest w klasie Gracz i która dziedziczy z klasy Postać i konstruktorem klasy Gracz przypisałem HP=1

2 odpowiedzi

0 głosów
odpowiedź 2 kwietnia 2016 przez draghan VIP (106,230 p.)
Podaj kod. Opis jest niejasny.
komentarz 2 kwietnia 2016 przez veryhotshark Obywatel (1,620 p.)
// plik nagłowkowy

#include <iostream>

using namespace std;

void Poczatek();
void Menu();

class Bohater // czyli nasi bohaterowie w grze
{
   public:
   virtual void Atak()=0;
   virtual void Obrona()=0;
   virtual void Przeladowanie()=0;

};

class Ty:public Bohater // czyli nasz boheter
{
   int ammo;

   public:

   int HP;
   Ty(int=1,int=0);
   virtual void Atak();
   virtual void Obrona();
   virtual void Przeladowanie();
};

//plik cpp

#include <iostream>
#include "Kowboj.h"
#include <windows.h>
#include <cstdlib>
#include <conio.h>
#include <cstdio>


using namespace std;

void Poczatek()
{
   Sleep(1000);
   cout<<"-------------------------------"<<endl;
   cout<<"|      GRA   W   KOWBOJE      |"<<endl;
   cout<<"-------------------------------"<<endl;
   Sleep(2000);
   cout<<"Zeby zaatakowac nacisnij : 1"<<endl;
   Sleep(1000);
   cout<<"Zeby zablokowac nacisnij : 2"<<endl;
   Sleep(1000);
   cout<<"Zeby przeladowac nacisnij : 3"<<endl;
   Sleep(1000);
   cout<<"Nacisnij ""enter"" zeby zaczac:";

}

void Menu()
{
   int runda=1;
   int wybor;
   getch(); // pobiera znak z klawiatury zeby zaczac Menu
   cout<<"\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\\b\b\b\b\b\b"; // wykasowuje slowo "nacisnij enter..."
   cout<<"Twoja rozgrywka rozpocznie sie za :";
     for (int i=3; i>=0;i--)
    {
       Sleep(1000);
         cout<<i<<"\b";
    }
    system("cls");
   cout<<"1.ATTACK"<<" || "<<"2.BLOCK"<<" || "<<"3.RELOAD"<<endl;
   cout<<"-----------------------------------------------"<<endl;
   Ty atakuj;
    do{
   cout<<"Wybierz : ";
   cin>>wybor;
   switch(wybor) // to musisz wlozyc w petle nieskonczona np. while hp !=0 albo dopoki ktorys z graczy nie jest martwy zrob zmienna
   {
   case 1:
      {
      atakuj.Atak();
      runda--;
      }
   break;
   case 2:
      {
      atakuj.Obrona();
      }
   break;
   case 3:
      {
      atakuj.Przeladowanie();
      }
   break;
   default:
      cout<<"Fail";
   }}while(runda==1);
}

Ty::Ty(int hp,int am)
{
   HP=hp;
   ammo=am;
}

void Ty::Atak()
{
   HP--;
   if(HP==0)
   {
      cout<<"Strzal";
   }
   getchar();
}
void Ty::Obrona()
{
      cout<<"Tarcza";
   getchar();
}

void Ty::Przeladowanie()
{

      if(ammo==6)
      {
         cout<<"pelny magazynek, zmarnowales ruch";
      }
      else
      {
      ammo++;
      cout<<"Ladowanie , masz w magazynku "<<ammo<<" naboji"<<endl;
      }

    getchar();
}

//main

#include <iostream>
#include "Kowboj.h"
#include <windows.h>
#include <cstdlib>
#include <conio.h>
#include <cstdio>


using namespace std;



int main()
{
   Poczatek();
   Menu();

    return 0;
}

mianowicie chciałem żeby switch się wykonywał dopóki HP jest różne od zera ale mówią że hp nie było zdeklarowane

komentarz 2 kwietnia 2016 przez veryhotshark Obywatel (1,620 p.)
narazie zrobiłem zmienną runda i w case 1 dekrementuje ją ale chciałbym żeby było to hp w voidzie atak.
komentarz 3 kwietnia 2016 przez draghan VIP (106,230 p.)

Potrzebujesz przesyłać do funkcji obiekt danej klasy lub tworzyć go w zasięgu tej funkcji.

Z tego co widzę, masz tam jeden obiekt klasy Ty, nazwany atakuj. Jeśli to stan HP tego obiektu chciałbyś badać, piszesz w warunku, np.:

while( atakuj.HP > 0 )
{
   // ...
}

 

komentarz 3 kwietnia 2016 przez veryhotshark Obywatel (1,620 p.)
o dziękuje bardzo
0 głosów
odpowiedź 2 kwietnia 2016 przez KubenQPL Maniak (62,820 p.)
#include /* jakiś kod */ InnaKlasa klasa; klasa.zmienna;
komentarz 2 kwietnia 2016 przez Dawid Shoemaker Nowicjusz (170 p.)
przy założeniu, ze zmienna ta jest publiczna.

Ogólnie jeżeli masz do czynienia z dziedziczeniem, to switch nie powinien być użyty w kodzie. Swticha używasz jedynie podczas tworzenia odpowiedniego obiektu. Gdy już masz stworzony obiekt, wywołujesz na nim odpowiednią metodę, a konkretne zachowanie jest zależne od typu klasy- czyli czysty polimorfizm.

Podeślij kod to zobaczymy co da się zrobić ;)
komentarz 2 kwietnia 2016 przez veryhotshark Obywatel (1,620 p.)
witam kod jest na górze  chodzi mi mianowicie żeby switch się wykonywał dopóki HP jest różne od zera a jeśli wybieramy case 1 gdzie wywołuje metode z klasy to tam się HP dekrementuje i staje się zerem i wtedy program się przerywa

Podobne pytania

0 głosów
1 odpowiedź 277 wizyt
pytanie zadane 21 stycznia 2017 w PHP przez Mistrz0000000 Bywalec (2,780 p.)
0 głosów
3 odpowiedzi 269 wizyt
pytanie zadane 1 kwietnia 2016 w PHP przez Karol Wiczling Początkujący (430 p.)
0 głosów
2 odpowiedzi 606 wizyt

93,020 zapytań

141,982 odpowiedzi

321,283 komentarzy

62,366 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...