| Author |
Message
|
Szeregowy Maliniak Poziom 9

Joined: 10 Jul 2008 Posts: 37 Location: Wiry
|
#1
15 Mar 2010 16:17 [C++] pierwsza gra, nie rozumiem błędów |
|
|
|
Chce zrobić coś al'a to http://www.youtube.com/watch?v=rJeY-iJZy1w&feature=related . Poruszanie (na WASD szukałem coś na temat strzałek ale mi nie wychodziło) już działa, zrobiłem na razie prostą klase rycerza i teraz Visual pokazuje mi parę błędów których znaczenia nie rozumiem. Oto kody:
rycerz.h
| Code: |
#include <iostream>
#include <string>
using namespace std;
class rycerz
{
private:
string nick;
int zloto;
int hp;
public:
rycerz():zloto(400),hp(10) {}
void setNick(string n)
{
nick = n;
}
char getNick()
{
return nick;
}
int getHp()
{
return hp;
}
void addHp(int x)
{
hp+=x;
}
int getZloto()
{
return zloto;
}
void addZloto(int x)
{
zloto+=x;
}
}; |
ruszanie.h
| Code: |
#include <iostream>
#include <windows.h>
#include <time.h>
#include <string>
#include <conio.h>
#include "rycerz.h"
using namespace std;
void plansza();
void ruszanie(int & x,int & y, rycerz soldier);
void gotoxy(int x, int y)
{
COORD cord;
cord.X = x;
cord.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), cord);
}
void ruszanie(int & x,int & y , rycerz soldier)
{
cout<<soldier.getNick()<<"\thp="<<soldier.getHp()<<"\tzloto="<<soldier.getZloto()<<endl;
cout<<endl;
cout<<"----------------------------------------------------------------\n";
cout<<endl;
int tempx=x,tempy=y;
char q,b=4;
q = getch();
cout<<"\b ";
gotoxy(0,0);
plansza();
if(q=='w')
{
y-=1;
gotoxy(x,y);
cout<<b;
}
if(q=='a')
{
x-=1;
gotoxy(x,y);
cout<<b;
}
if(q=='s')
{
y+=1;
gotoxy(x,y);
cout<<b;
}
if(q=='d')
{
x+=1;
gotoxy(x,y);
cout<<b;
}
if (q!='w'&& q!='a'&& q!='s'&& q!='d')
{
cout<<"\a";
}
if(x<=0||y<=0||x>27||y>12)
{
cout<<"\a";
x=tempx;
y=tempy;
cout<<"\b ";
gotoxy(x,y);
cout<<b;
}
}
void plansza()
{
cout<<"|--------------------------|\n";
cout<<"| |\n";
cout<<"| |\n";
cout<<"| |\n";
cout<<"| |\n";
cout<<"| |\n";
cout<<"| |\n";
cout<<"| |\n";
cout<<"| |\n";
cout<<"| |\n";
cout<<"| |\n";
cout<<"| |\n";
cout<<"|--------------------------|\n";
} |
Gra //główny plik
| Code: |
#include <iostream>
#include <string>
#include <conio.h>
#include "ruszanie.h"
#include "rycerz.h"
void c() {system("cls");}; //czyszczenie ekranu
using namespace std;
int main()
{
rycerz soldier;
int x=7,y=7;
string n;
cout<<"Podaj swoj nick:\n";
cin.getline(n,30);
soldier.setNick(n);
c();
for(int q = 0;q<100;q++)
ruszanie(x,y,soldier);
getchar();
getchar();
return 0;
} |
A oto błędy
|
|
| Back to top |
|
 |
Dżyszla Poziom 24

Joined: 15 May 2005 Posts: 4528 Location: Żory (kiedyś Opole)
|
#2
15 Mar 2010 17:32 Re: [C++] pierwsza gra, nie rozumiem błędów |
|
|
|
1. nick masz w stringu, a próbujesz funkcją zwracac znak - niekompatybilne typy.
Część błędów prawdopodobnie będzie zależna od możliwości skompilowania klasy.
|
|
| Back to top |
|
 |
Szeregowy Maliniak Poziom 9

Joined: 10 Jul 2008 Posts: 37 Location: Wiry
|
#3
15 Mar 2010 17:45 Re: [C++] pierwsza gra, nie rozumiem błędów |
|
|
|
Jak zmieniłem return na cout<< (w ruszaniu też) to mi teraz wywala błędy z getch()
|
|
| Back to top |
|
 |
Dżyszla Poziom 24

Joined: 15 May 2005 Posts: 4528 Location: Żory (kiedyś Opole)
|
#4
15 Mar 2010 18:25 Re: [C++] pierwsza gra, nie rozumiem błędów |
|
|
|
A jakie?
Tak w ogóle to nie musisz od razu zmieniać na wypisywanie - wystarczy tylko zmienić typ zwracanej wartości przez funkcję.
|
|
| Back to top |
|
 |
Google

|
#
15 Mar 2010 18:25 |
|
|
|
|
|
| Back to top |
|
 |
Szeregowy Maliniak Poziom 9

Joined: 10 Jul 2008 Posts: 37 Location: Wiry
|
#5
15 Mar 2010 20:08 Re: [C++] pierwsza gra, nie rozumiem błędów |
|
|
|
Jak zmienić typ zwracanej zmiennej na tablice??
|
|
| Back to top |
|
 |
Dżyszla Poziom 24

Joined: 15 May 2005 Posts: 4528 Location: Żory (kiedyś Opole)
|
#6
15 Mar 2010 20:43 Re: [C++] pierwsza gra, nie rozumiem błędów |
|
|
|
Co do redefinicji - z obu plików nagłówkowych masz wskazanie do pliku zawierającego klasę "rycerz". Domyślam się, że tu będzie tkwił problem.
Co do tablic - zwraca się wskaźnik na tablicę. Ale jeśli tablica jest tworzona w instancji funkcji - trzeba operować parametrami preferencyjnie przekazanymi.
|
|
| Back to top |
|
 |
Google

|
#
15 Mar 2010 20:43 |
|
|
|
|
|
| Back to top |
|
 |
Szeregowy Maliniak Poziom 9

Joined: 10 Jul 2008 Posts: 37 Location: Wiry
|
#7
18 Mar 2010 18:31 Re: [C++] pierwsza gra, nie rozumiem błędów |
|
|
|
Proszę, powiedzcie mi co mam źle. Najbardziej zastanawia mnie ten błąd
| Code: |
| error C2011: 'rycerz' : 'class' type redefinition |
Myślę, że tak jak mówi Dżyszla jeżeli klasa będzie dobrze zrobiona, to reszta powinna działać.
|
|
| Back to top |
|
 |
Dżyszla Poziom 24

Joined: 15 May 2005 Posts: 4528 Location: Żory (kiedyś Opole)
|
#8
18 Mar 2010 19:06 Re: [C++] pierwsza gra, nie rozumiem błędów |
|
|
|
Jak wspominałem - chodzi tu zapewne o includowanie w pliku includowanym. Wrzuć wszystko do jednego pliku, a pewnie tego błędu się pozbędziesz.
|
|
| Back to top |
|
 |
Szeregowy Maliniak Poziom 9

Joined: 10 Jul 2008 Posts: 37 Location: Wiry
|
#9
19 Mar 2010 16:12 Re: [C++] pierwsza gra, nie rozumiem błędów |
|
|
|
Teraz działa, tylko teraz program wygląda mniej przejrzyście. Jak zrobić by działo to w osobnych plikach ?
|
|
| Back to top |
|
 |
Dżyszla Poziom 24

Joined: 15 May 2005 Posts: 4528 Location: Żory (kiedyś Opole)
|
#10
19 Mar 2010 16:37 Re: [C++] pierwsza gra, nie rozumiem błędów |
|
|
|
Musisz tak dzielić, aby nie dokonywać podwójnego includowania.
|
|
| Back to top |
|
 |
Dr.Vee Poziom 22

Joined: 16 May 2008 Posts: 1808 Location: Wrocław
|
#11
19 Mar 2010 23:10 Re: [C++] pierwsza gra, nie rozumiem błędów |
|
|
|
Jest to problem stary jak świat, rozwiązanie z użyciem preprocesora.
plik klasa.hpp:
| Code: |
#ifndef KLASA_HPP
#define KLASA_HPP
// kod pliku
#endif // ifndef KLASA_HPP |
Jeśli tak "zawiniesz" każdy plik z deklaracjami klas, to nie będziesz miał problemów z redefinicjami.
Pozdrawiam,
Dr.Vee
|
|
| Back to top |
|
 |
Google

|
#
19 Mar 2010 23:10 |
|
|
|
|
|
| Back to top |
|
 |
Szeregowy Maliniak Poziom 9

Joined: 10 Jul 2008 Posts: 37 Location: Wiry
|
#12
20 Mar 2010 13:41 Re: [C++] pierwsza gra, nie rozumiem błędów |
|
|
|
Następne pytanie:
Dodałem sklep do planszy :D , kod wygląda tak
| Code: |
void sklep(int x,int y, rycerz & soldier)
{
int a=0;
gotoxy(7,5);
cout<<"S";
if(x==7&&y==5)
{
system("cls");
cout<<"Witaj, "<<soldier.getNick()<<". Moze zainteresuje Cie jeden z moich towarow?\n";
cout<<"1. Health Potion 40 zlota\n";
cin>>a;
switch (a)
{
case 1:
cout<<"Dzieki, milo sie z Toba robi interesy\n";
soldier.addHp(10);
soldier.addZloto(-40);
break;
default:
cout<<"Nie mam takiego towaru\n";
break;
}
_sleep(2000);
system("cls");
getch();
}
} |
Wszystko prawie działa, tylko jest problem gdy wybiore coś czego nie ma w sklepie. Pokazuje mi ładnie że nie ma takiego towaru, tylko że jak chcę znowu wejść do sklepu to od razu pokazuje mi, że nie ma takiego towaru i nie mogę sobie nic kupić. Jak to naprawić?
|
|
| Back to top |
|
 |
Dżyszla Poziom 24

Joined: 15 May 2005 Posts: 4528 Location: Żory (kiedyś Opole)
|
#13
20 Mar 2010 15:09 Re: [C++] pierwsza gra, nie rozumiem błędów |
|
|
|
Upewnij się, czy nie zostaje Ci w buforze jakiś znak... Choć generalnie trochę to dziwi...
|
|
| Back to top |
|
 |