Problem s kontrolou ohrozeni vezi - sachovnice – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Problem s kontrolou ohrozeni vezi - sachovnice – C / C++ – Fórum – Programujte.comProblem s kontrolou ohrozeni vezi - sachovnice – C / C++ – Fórum – Programujte.com

 

brash0
Duch
5. 4. 2010   #1
-
0
-

Zdravim,

zkousel jsem si naprogramovat sachovnici, kde muzu vkladat napriklad vez reprezentovanou znakem 'v'.

Pri vlozeni vezi mi nefunguje jak by mela funkce, ktera ma na starost kontrolu ohrozeni vezi. To znamena ze vlozena vez nesmi byt na stejnem radku nebo sloupci jako jiz existujici vez, ohrozovaly by se. Vez se vlozi misto toho aby se vypsala chybova hlaska.
Dekuji za pripadne rady.

#include <cstdlib>
#include <iostream>

using namespace std;

class Sachovnice{

public:
char sachovnice[8][8];



Sachovnice(){
for (int i=0; i<8; i++){
for (int j=0; j<8; j++){
sachovnice[i][j]='_'; //prazdnou pozici predstavuje znak '_'
}
}
}

void vypisSachovnici(){

for (int i=0; i<8; i++){
for (int j=0; j<8; j++){
cout << sachovnice[i][j]<<" ";

}
cout<<endl;
}
cout<<endl;
}





bool kontrola(int r, int s){ //kontroluje, jestli se veze ohrozuji
for (int i=0; i<8; i++){
for (int j=0; j<8; j++){
if (sachovnice[i][j]=='v'){ //jestlize na pozici i,j je znak 'v' predstavujici vez
if ((i==r) or (j==s)){ //jestlize je radek a sloupec na kterem je vez totozny se zadavanym
return true;
}
}
else{
return false;
}
}
}
}


void vlozFigurku(int radek, int sloupec, char co){
if (kontrola(radek,sloupec)==false){ //jestlize se veze navzajem neohrozuji
sachovnice[radek][sloupec]=co; //vloz na zadanou pozici vez (znak 'v')
}
else {
cout<<"nelze obsadit, veze by se navzajem ohrozovaly"<<endl;

}

}





};



int main()
{
Sachovnice* sachy = new Sachovnice();
sachy -> vypisSachovnici();

sachy -> vlozFigurku(1,2,'v'); //korektni vlozeni
sachy -> vypisSachovnici();

sachy -> vlozFigurku(3,4,'v'); //korektni vlozeni
sachy -> vypisSachovnici();

sachy -> vlozFigurku(3,6,'v'); //zde by se melo vypsat ze se veze ohrozuji, jelikoz je zadana vez na stejnem radku jako vez zadana minule
sachy -> vypisSachovnici();


system("PAUSE");
return 0;
}

Nahlásit jako SPAM
IP: 78.102.113.–
MZetko0
Stálý člen
5. 4. 2010   #2
-
0
-

Jednoduše při vkládání projdi všechny pozice v řádku a sloupci, které jsou určeny zadávanou pozicí. Pokud jsou všechny "čisté" - tedy obsahují všude '_', pak je bezpečné věž vložit.

Nahlásit jako SPAM
IP: 88.102.106.–
"Přirozená inteligence bude umělou brzy překonána. Přirozenou blbost však umělá nemůže nahradit nikdy"
Jára da CIMRMAN
http://www.newgame.cz
LukoSS
~ Anonymní uživatel
73 příspěvků
5. 4. 2010   #3
-
0
-

Problém je podle mě v této části kódu:



if (sachovnice[i][j]=='v'){ //jestlize na pozici i,j je znak 'v' predstavujici vez
if ((i==r) or (j==s)){ //jestlize je radek a sloupec na kterem je vez totozny se zadavanym
return true;
}
}
else{
return false;
}
}

Když při prvním průchodu cyklu není na políčku znak 'v', funkce vrátí false a další kontrola se neprovede.

Nahlásit jako SPAM
IP: 88.103.252.–
MZetko
~ Anonymní uživatel
190 příspěvků
5. 4. 2010   #4
-
0
-

Klicove slovo return ukonci okamzite jakoukoliv funkci, proto skonci i ten for okamzite. staci tedy smazat else blok a return false dat az uplne na konec funkce, mimo vse ostatni.

Nahlásit jako SPAM
IP: 85.160.168.–
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, 12 hostů

Podobná vlákna

Problém s kontrolou. — založil vamvam

Revize kódu Hanojských věží — založil KARLOSCZ1979

Šachovnice — založil Adadfefek

GUI šachovnice — založil JanH

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ý