Projekt do školy – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Projekt do školy – C / C++ – Fórum – Programujte.comProjekt do školy – C / C++ – Fórum – Programujte.com

 

TomasP
~ Anonymní uživatel
24 příspěvků
26. 11. 2010   #1
-
0
-

Zdravím,
mám do školy projekt a potřebuji generátor náhodných čísel 1-10, ale aby se generátor dal spustit vícekrát a vyřadil již použité číslo...
Použití je pro generování rozhovoru v textové adventuře, aby nebyl pokaždé stejný...

Zatím to mám takto, že to jede rozhovory od 1 do 3.....

void potkal(Nepritel* nepr){

if (nepr->vratIq()) {
int x;
x=x+1;
switch (x)
{
case 1 : cout<<"První rozhovor";break;
case 2 : cout<<"Druhý rozhovor";break;
case 3 : cout<<"Třetí rozhovor";break;
default : cout<<"Nejsi natolik inteligenti, aby jsi alespon trefil spravnou klavesu, jdi radeji hned bojovat!"; metoda boje; break;
}

}else{
cout << "zde bude metoda BOJE" <<endl;}

}

Nahlásit jako SPAM
IP: 90.179.27.–
petr.satka0
Newbie
26. 11. 2010   #2
-
0
-

To TomasP :
Řešení bude určitě víc. Takové jednoduché, co mě teď napadá, může být třeba:

Udělej si pole o 10 int prvcích.
Prvky pole inicializuj pole[i]=i+1 (pro čísla 1-10).
Udělej si cyklus o libovolném (ale vhodném) počtu opakování.
V každém běhu cyklu prohoď dva prvky na náhodně vybraných indexech.

Tím si pole zamícháš.

A v tom tvém algoritmu vyměň switch(x) za switch(pole[x % 10]).

Nahlásit jako SPAM
IP: 217.112.175.–
TomasP
~ Anonymní uživatel
24 příspěvků
26. 11. 2010   #3
-
0
-

OK, to pole se pokusím udělat, pole umím zatím jen v Pascalu...
Další dotaz:
Mám třídu HRDINA a ta má metodu SOUBOJ a tuto POTKAL mohu nějak z metody POTKAL zavolat metodu SOUBOJ?
Díky

Nahlásit jako SPAM
IP: 90.179.27.–
TomasP
~ Anonymní uživatel
24 příspěvků
27. 11. 2010   #4
-
0
-

Tak jsem se teď ještě zasekl u posledního problému, v zadání je, že musíme vytvořit několik planet :

Z planety na planetu lze cestovat pomocí hlavního menu hry nebo přímo z určité jiné planety.

Příkad obsahu planety: Přicestoval jsi na Venuši, můžeš jít do kosmického baru U proražené helmy (klávesa H), do hotelu U natrhlého skafandru (S) nebo na policejní stanici (P). Tvoje volba:

Nevím jak tohle udělat, nespíše nějakou třídu PLANETAX, ze které se bude dědit nějaké vlastnosti (spíše bych řekl metody, jediný atribut co by to mohlo mít je leda název) jako je ten CESTOVACI PORTAL, BAR, HOTEL.... a pak ke každé planetě mohu ještě přidat XY míst, kam se dá jít...
Tady však moje uvažování končí... Jak udělat to MENU hry a ten portal, nevím.... A jak pak udělt, že když jdu do baru, tak to vypíše "něco" a vygeneruje to tam nějaký předmět, nebo nepřítele? Nebo to nejde generovat a musím ručně napsat, že na té a té planetě v baru je nepřítel, ve zbrojovce dostane štít atd... ?

Nahlásit jako SPAM
IP: 90.179.27.–
Náhodný kolemjdoucí
~ Anonymní uživatel
15 příspěvků
27. 11. 2010   #5
-
0
-

Vcelku důležitá otázka - má se jednat o textovou hru, nebo bude mít i nějaké grafické rozhraní?

Nahlásit jako SPAM
IP: 81.90.174.–
TomasP
~ Anonymní uživatel
24 příspěvků
27. 11. 2010   #6
-
0
-

pouze textová hra :)

Nahlásit jako SPAM
IP: 90.179.27.–
TomasP
~ Anonymní uživatel
24 příspěvků
27. 11. 2010   #7
-
0
-

Tak mi to pořád nejde, jak to udělat? Pokoušel jsem se to udělat přímo v MAINu a nic... ani pomocí nějakých metod mi to nechce fungovat, jak bych si přál :(...
Poraďte alespoň nějaký způsob jak to bude fungovat, ať vím kde hledat chybu, zda v mém kódu, nebo v myšlence...

Nahlásit jako SPAM
IP: 90.179.27.–
Matrix17
~ Anonymní uživatel
300 příspěvků
28. 11. 2010   #8
-
0
-

Můžeš to udělat třeba tak že planeta bude třída a bude si uchovávat pole/spojový seznam míst kam můžeš jít a hlavně ukazatel na pole/začátek spojovýho seznamu planet. Z hlavního menu ti to vypíše seznam planet. A z každý planety se taky dostaneš na každou páč tam máš ten ukazatel. Je to návrhovej vzor jméno si nevzpomenu ale on mě když tak někdo doplní.

Nahlásit jako SPAM
IP: 78.156.128.–
TomasP
~ Anonymní uživatel
24 příspěvků
28. 11. 2010   #9
-
0
-

@Matrix17: Tak to už je na mě moc.... :-( Nejde to nějak jednodušeji? Nebo nějaký příklad, abych to okoukal? Díky...

Nahlásit jako SPAM
IP: 90.179.27.–
Matrix17
~ Anonymní uživatel
300 příspěvků
28. 11. 2010   #10
-
0
-

Možná se to dá řešit jednodušejc ale mě napadl jen ten návrhovej vzor. Tady je Taková funkční ukázka nic moc tam definovanýho není jen tak aby to něco dělalo. Je tam takovej nástřel jak by to mohlo bejt samozřejmě data tam asi budeš cpát nějak jinak než takhle natvrdo ale jako ukázka to snad bude stačit.



#include <iostream>
#include <cstdlib>
using namespace std;

class Misto
{
private:
string nazev; //jmeno mista
public:
Misto(char *ret) : nazev(ret) { }
~Misto() { }
void VypisNazev() { cout << "Jmeno mista: " << nazev << endl; }
};

class Planeta
{
private:
Misto *mista; //dynamicke pole ktere bude uchovavat mista kam muzete jit na planete
Planeta *seznam; //zacatek pole planet
int MAX; //pocet planet
string nazev; //jmeno planety
public:
Planeta() : nazev() { mista = NULL; seznam = NULL; MAX = 0; }
~Planeta() { seznam = NULL; mista = NULL; }
void NastJmeno(char *ret) { nazev = ret; }
void NastPlanety(Planeta *p, int poc) { seznam = p; MAX = poc; }
void JmenoPlanety() { cout << "Jmeno planety: " << nazev << endl; }
void SeznamPlanet() {
for (int i = 0; i < MAX; i++) { //vypise vse krom aktualni planety
if ((seznam+i) != this)
seznam[i].JmenoPlanety();
}
}
};

int main()
{
const int MAX = 4;
Planeta planety[MAX];

planety[0].NastJmeno("Venuse"); //ulozeni jmen planet
planety[1].NastJmeno("Zeme");
planety[2].NastJmeno("Uran");
planety[3].NastJmeno("Neptun");
for (int i = 0; i < MAX; i++) {
planety[i].NastPlanety(planety, MAX); //nastavi ukazatel na zacatek pole vsem planetam
}

cout << "Seznam planet z menu hry:\n";
for (int i = 0; i < MAX; i++) {
planety[i].JmenoPlanety();
}

cout << "\n\nSeznam planet, na ktery se dostanete z prvni planety:\n";
planety[0].SeznamPlanet();
cout << "\n\n";

system("pause");
return 0;
}

Nahlásit jako SPAM
IP: 78.156.128.–
TomasP
~ Anonymní uživatel
24 příspěvků
30. 11. 2010   #11
-
0
-

]

@Matrix17: tak jsme na to ve škole s kámošem koukali a nikdo nevěděl jak tam to cestování bude fungovat (c++ máme první semestr) a hlavně jak tam dostat tohle (27.11.2010):

Příkad obsahu planety: Přicestoval jsi na Venuši, můžeš jít do kosmického baru U proražené helmy (klávesa H), do hotelu U natrhlého skafandru (S) nebo na policejní stanici (P). Tvoje volba:

A když bych třeba zmáčkl to H tak by mi to zavolalo nějakou metodu, dvě, které mám ve třídě HRDINA a něco vypsalo...

Nechce se mi sem dávat celý zdroják, protože je to přeci jen projekt ze školy a kdyby to někdo okopíroval, tak to asi nevysvětlím, ale pokud bude mít někdo stejnou část na přemisťování z planet, tak bych si to obhájil jednoduše, že jsem nevěděl, tak jsem potřeboval pomoct a tu jsem našel tady a vysvětlil bych mu co a jak funguje atd., proto to chci taky pochopit, nejen zkopírovat...

Nahlásit jako SPAM
IP: 90.179.27.–
Matrix17
~ Anonymní uživatel
300 příspěvků
30. 11. 2010   #12
-
0
-

O veškerý cestování by se starala planeta. Třída Misto by mohla bejt buď třída od který by se dědily věci jako bar, hospoda, hotel nebo že by všechny místa měly stejný atributy takže by to bylo pro všechny společný.
Fungovat by to mohlo třeba takhle. Z nějakýho souboru si načtečteš všechny planety, tj. jména, jaký místa tam dou navštívit a případně nějaký další věci co si vymyslíš. Pak tomu předáš ukazatel na začátek pole těch planet jako sem to dal do toho For cyklu.
A když tam chceš narvat i hrdinu tak máš dvě možnosti:
1) dáš tam taky takhle adresu hrdiny do všech planet, není to moc praktický ale máš jednoduchej přístup
2) akorát při volání funkce předáš adresu hrdiny jako parametr fce. Takže máš k němu přístup a klidně tam hrdinů můžeš mít víc.
Mohl bys to udělat třeba tak že přicestuješ na planetu předáš funkci cesta toho hrdinu. Budeš se tam nějak motat, tj. zajdeš do baru, do hotelu, do dolu to je fuk. A když budeš chtít odejít tak akorát přes to menu planety vrátíš ukazatel na novou planetu. V hlavní funkci si ten ukazatel odchytneš a zavoláš tu samou fci jako předtím a předáš jí zase toho hrdinu. Snad sem to moct nezamotal... :-)))

Nahlásit jako SPAM
IP: 78.156.128.–
joudicek0
Návštěvník
2. 12. 2010   #13
-
0
-

Co takhle nejaka trida vesmir, ktera by drzela napr pole trid planeta a obstaravala "cestovani" + drzela info na jaky planete prave jsi. Ve tride planeta by jsi pak drzel info kam se vsude muzes dostat + info o planete? Jenom napad...

Nahlásit jako SPAM
IP: 212.20.106.–
TomasP
~ Anonymní uživatel
24 příspěvků
4. 12. 2010   #14
-
0
-

Dobrý den,
tak jsem tu po delší době a ty předchozí řešení jsou na mou hlavu až moc.... Vymyslel jsem svoje, ale nefunguje, můžete poradit, popřípadě to trochu poupravit??? Děkuji!


#include <iostream>



using namespace std;

class Mista{
private:
string bar;
string hotel;
public:
Mista(){
bar = "Bar u sileny kravy (b)";
hotel = "Hotel ***** (h)";
cout << "Vznikly mista"<<endl;
}

void vypisPopis(){
cout << "Nazev mista: "<< bar <<endl;
cout << "Nazev mista: "<< hotel <<endl;
}

};
class Planeta{
private:
string Jmeno;
Mista* mistaNaPlanete;
public:
Planeta(){
Jmeno = "zeme";
cout << "Vznikla planeta"<<endl;
}

void vypisPopis(){
cout << "Jsi na planete: " << Jmeno <<endl;
cout << "zde muzes jit do: " << endl;
mistaNaPlanete->vypisPopis();
}
};

class nepritel{
public:
int sila;
nepritel(){
sila=10;
cout << "Vznikl nepritel"<<endl;
}

};

class clovek{
public:
int zivot;

clovek(){
zivot=100;
cout << "Vznikl clovek"<<endl;
}
void cestuj(Planeta* planeta){
planeta->vypisPopis();

zacatek:
string x;
switch (x)
{
case 'b' :
cout << potkal(mutant);
break;
case 'h' : potkal(mutant2);
break;
default : cout<<"Jina klavesa, znovu";goto zacatek;
break;
}

}

void boj(nepritel* nep){
zivot = zivot - nep->sila;
}

void potkal(nepritel*nep){
cout << "Potkal jsi nepritele, chces s nim bojovat? (a) ANO - (n) NE"<<endl;
string rozhodnuti;
cin >>rozhodnuti;
if (rozhodnuti == "a"){boj(nep);}else{cout<<"OK tak jdi dal..."<<endl;}

}
};

int main()
{
Planeta* zeme = new Planeta();
Mista* jedna = new Mista();
nepritel* mutant =new nepritel();
nepritel* mutant2 =new nepritel();
clovek* cestovatel = new clovek();
jedna->vypisPopis();
zeme->vypisPopis();

cout << "Bezchybne zkompilovano..." << endl;
return 0;
}

Nahlásit jako SPAM
IP: 90.179.27.–
TomasP
~ Anonymní uživatel
24 příspěvků
4. 12. 2010   #15
-
0
-

Ono by stačilo cestování pouze 1* ... Chci mít 3 planety, jedna mě hned zabije, na druhé budu mít možnost - prozkoumat - ANO - NE pokud ANO tak se zavola metoda nasel a pak zase by byla možnost odletět pryč... Na té hlavní planetě by byly ty místa, kde kdyz zmáčknu B tak mi to zavolá metodu POTKAL (dosadím si koho) a metodu NASEL (opet nejak dosadim co) a takto prozkoumat cely svet a konec... :(

Nahlásit jako SPAM
IP: 90.179.27.–
Matrix17
~ Anonymní uživatel
300 příspěvků
4. 12. 2010   #16
-
0
-

To joudicek : Tvůj příspěvek to pěkně popisuje a zkus se na to zaměřit a najít cestu jak to udělat. Z toho kódu je vidět, že objektově moc programovat neumíš. To neber prosím nijak zle... Já vím, že objektově programovat není hračka. Takhle rád bych ti to opravil ale háček je v tom, že bych ti to vlastně celý předělal, ty bys tomu nerozumněl a já bych ti to udělal prakticky celý, což nechci. Musíš se víc mrknout na třídy a ještě jednou si pak projdi ten můj kód. Případně se zeptej jestli některá věc není úplně jasná.

Takhle sem to myslel já:
Trida clovek: mela by zivoty, utok, jmeno
metody: ziskani poctu zivotu, ziskani jmena, zmenu zivotu...
z tridy clovek si pak vytvoris nepratele i hrdinu

Trida planeta: jmeno, seznam mist (pole trid Misto)
metody: ziskani jmena, vypis mist kam se dostanes...

Trida misto popisuje misto kde se nachazis:
atributy: nazev
metody: menu co tam muzes delat

Ty metody si nadefinujes tak jak si psal. Jediny, co mas spatne je navrh...

Nahlásit jako SPAM
IP: 78.156.128.–
Matrix17
~ Anonymní uživatel
300 příspěvků
4. 12. 2010   #17
-
0
-

Nebo to zkus jak ti radil joudicek. To je nejspíš i lepší a hlavně pro začátečníka snáž napsatelný.

Trida vesmir bude tvoje rozhrani kde budes mit planety a bude se starat o veškerou režiji kolem cestování.
atributy: pole planet, neco (ukazatel, index pole) co bude rikat kde si

Nahlásit jako SPAM
IP: 78.156.128.–
TomasP
~ Anonymní uživatel
24 příspěvků
5. 12. 2010   #18
-
0
-

Tak ja mam c++ zatim v prvnim semestru, jsem rad ze to vubec funguje... Jak se správně programuje objektově vlastně poradně nevím, vím jak se dělaj nějaky metody a znám pár funkcí a to je vše... Programování vidím poprvé, takže budu rád za kritiku, popřípadě nějaký dobrý odkaz na literaturu....

OK, pokusim se to tedy nějak udělat.... Snad je to poslední příspěvek a už to pošlape.... Díky moc všem za rady

Nahlásit jako SPAM
IP: 90.179.27.–
Matrix17
~ Anonymní uživatel
300 příspěvků
5. 12. 2010   #19
-
0
-

Můžeš zkusit Mistrovství C++. Celý to 100% nestihneš ale stačí když si tam najdeš třídy a věci kolem. Nebo C++ za 21 dní. Případně i nějaký materiály na netu. První dva sou kurzy ten třetí odkaz tam sou další odkazy.

[url]
http://web.archive.org/web/20050214190118/www.eternal.cz/index.php?nLevel=21
[/url]
[url]
http://www.builder.cz/serial24.html
[/url]
[url]
http://pepinator.tym.cz/tutorials/cpp/tutorial_cpp.php
[/url]

Nahlásit jako SPAM
IP: 78.156.128.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 55 hostů

Podobná vlákna

Práce do školy — založil Black

Program do školy... — založil Mokky

NTB do školy — založil ITLover

Práce do školy. — založil Začátečník JK

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý