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;
}
Fórum › C / C++
Problem s kontrolou ohrozeni vezi - sachovnice
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.
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.
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žení videa
Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
Uživatelé prohlížející si toto vlákno
Uživatelé on-line: 0 registrovaných, 70 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
DÚ v C, šachovnice s figurkou — založil Zapl
Moderátoři diskuze