Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] wypisywanie znaku w danym polu

Ostatnio zmodyfikowano 2014-11-25 23:18
Autor Wiadomość
kevindurant95
Temat założony przez niniejszego użytkownika
[C++] wypisywanie znaku w danym polu
» 2014-11-24 00:00:53
Witam, mam problem związany z wypisaniem znaku w polu planszy. Jedynym możliwym wypisywalnym znakiem jest pojedynczy hasz '#', podczas gdy chciałbym,by było to:
###
###


oto mój kod:
C/C++
#include <cstdlib>
#include <iostream>
#include <iomanip>

using namespace std;
const int MAX_WIERSZ = 6;
const int MAX_KOLUMNA = 6;
char board[ MAX_WIERSZ ][ MAX_KOLUMNA ];
int numer_wiersza;
int numer_kolumny;
/*
void rysuj_plansze()
{
     for (int i=0;i<6;i++)
     {
     cout << " +-----+-----+-----+-----+-----+-----+"<<endl;
     cout << " |"<< setw(6) <<"|" << setw(6) <<"|" << setw(6) <<"|"<< setw(6) <<"|"<< setw(6) <<"|"<< setw(6) <<"|"<<endl;
     cout << i+1 <<"|"<< setw(6) <<"|" << setw(6) <<"|" << setw(6) <<"|"<< setw(6) <<"|"<< setw(6) <<"|"<< setw(6) <<"|"<<endl;
     }
     cout << " +-----+-----+-----+-----+-----+-----+"<<endl;
     cout << "    A     B     C     D     E     F   "<<endl;
     cout << endl << endl;
}
*/
void inicjuj_plansze()
{ for( int i = 0; i < MAX_WIERSZ; i++ ) {
        for( int j = 0; j < MAX_KOLUMNA; j++ )
             board[ i ][ j ] = ' ';
       
    }
}
void rysuj_plansze()
{
    for( int i = 0; i < MAX_WIERSZ; i++ )
    { cout << " +-----+-----+-----+-----+-----+-----+" << endl;
        cout << " |";
        for( int j = 0; j < MAX_KOLUMNA; j++ )
             cout << "  " << board[ i ][ j ] << "  |";
       
        cout << endl;
        cout << i + 1 << "|" << setw( 6 ) << "|" << setw( 6 ) << "|" << setw( 6 ) << "|" << setw( 6 ) << "|" << setw( 6 ) << "|" << setw( 6 ) << "|" << endl;
    }
    cout << " +-----+-----+-----+-----+-----+-----+" << endl;
    cout << "    A     B     C     D     E     F   " << endl;
    cout << endl << endl;
}


void wybierz_pole()
{
    char znak;
    //int numer_wiersza;
    //int numer_kolumny;
    cout << "podaj wiersz: ";
    cin >> numer_wiersza;
    cout << "podaj kolumne (A=1, B=2, C=3, D=4, E=5, F=6): ";
    cin >> numer_kolumny;
    if( numer_kolumny == 1 )
    {
        znak = 'A';
    }
    if( numer_kolumny == 2 )
    {
        znak = 'B';
    }
    if( numer_kolumny == 3 )
    {
        znak = 'C';
    }
    if( numer_kolumny == 4 )
    {
        znak = 'D';
    }
    if( numer_kolumny == 5 )
    {
        znak = 'E';
    }
    if( numer_kolumny == 6 )
    {
        znak = 'F';
    }
   
    if( numer_wiersza >= 1 and numer_wiersza <= 6 and numer_kolumny >= 1 and numer_kolumny <= 6 )
         cout << "wybrane pole to: " << numer_wiersza << znak << endl;
    else
         cout << "takie pole nie istnieje" << endl;
   
}

void rysuj_kamien()
{
    board[ numer_wiersza - 1 ][ numer_kolumny - 1 ] = '#';
    cout << board[ MAX_WIERSZ ][ MAX_KOLUMNA ];
}






int main()
{
    inicjuj_plansze();
    rysuj_plansze();
    wybierz_pole();
    rysuj_kamien();
    system( "cls" );
    rysuj_plansze();
    wybierz_pole();
    rysuj_kamien();
    system( "cls" );
    rysuj_plansze();
    system( "pause" );
    return 0;
}
P-121250
darko202
» 2014-11-24 08:16:51
ponieważ stworzyłeś board jako tablicę char
nie możesz do niej pisać wielu znaków

zmień na klasę string board[][]
i w miejscach wywołania wpisz board[x][y].c_str()
P-121253
kevindurant95
Temat założony przez niniejszego użytkownika
» 2014-11-24 11:53:27
Miejsce wywołania, czyli gdzie?
P-121259
darko202
» 2014-11-24 14:18:28
zmień tablicę na typu string
a kompilator pokaże Ci miejsca wywołania tablicy  board
tam popraw

U mnie pokazały i program rysuje "###"
P-121268
Tomek_z_W11
» 2014-11-24 14:40:13
Widzę, że drugi temat założyłeś, tu też Ci odpisze :)

W funkcji rysuj_kamien piszesz
cout << board[ max ][ max ]
, czyli board[6][6], a takie pole nie istnieje, jeżeli masz na myśli pole "ostatnie" zarówno w pionie i poziomie, to napisz
board[ 5 ][ 5 ]
, co do wpisywania wartości, napisz na przykład
board[ 2 ][ 3 ] = 'A'
, pamiętaj, żeby ta linijka znajdowała się za funkcją inicjuj_plansze, bo z tego co widze, to w tej funkcji pod każdą komórkę tablicy przypisujesz spację.

Na przykład:

C/C++
int main()
{
    inicjuj_plansze();
   
    board[ 0 ][ 0 ] = 'Z';
    board[ 0 ][ 1 ] = 'A';
   
    rysuj_plansze();
    wybierz_pole();
    rysuj_kamien();
    system( "pause" );
    return 0;
}
P-121272
kevindurant95
Temat założony przez niniejszego użytkownika
» 2014-11-24 19:31:09
Poradziłem sobie już w ten sposób:
C/C++
#include <cstdlib>
#include <iostream>
#include <iomanip>

using namespace std;
const int MAX_WIERSZ = 6;
const int MAX_KOLUMNA = 6;
char board[ MAX_WIERSZ ][ MAX_KOLUMNA ];
int numer_wiersza;
int numer_kolumny;



void inicjuj_plansze()
{ for( int i = 0; i < MAX_WIERSZ; i++ ) {
        for( int j = 0; j < MAX_KOLUMNA; j++ )
             board[ i ][ j ] = ' ';
       
    }
}
void rysuj_plansze()
{ for( int i = 0; i < MAX_WIERSZ; i++ )
    {
        cout << " +-----+-----+-----+-----+-----+-----+" << endl;
        cout << i + 1 << "|";
        for( int j = 0; j < MAX_KOLUMNA; j++ )
        if( board[ i ][ j ] == '#' )
             cout << " ### |";
        else
             cout << "     |";
       
        cout << endl;
        cout << " |";
        for( int j = 0; j < MAX_KOLUMNA; j++ )
        if( board[ i ][ j ] == '#' )
             cout << " ### |";
        else
             cout << "     |";
       
        cout << endl;
    }
    cout << " +-----+-----+-----+-----+-----+-----+" << endl;
    cout << "    A     B     C     D     E     F   " << endl;
    cout << endl << endl;
}
void wybierz_pole()
{
    char litera;
    cout << "podaj wiersz: ";
    cin >> numer_wiersza;
    cout << "podaj kolumne (A=1, B=2, C=3, D=4, E=5, F=6): ";
    cin >> numer_kolumny;
    if( numer_kolumny == 1 )
    {
        litera = 'A';
    }
    if( numer_kolumny == 2 )
    {
        litera = 'B';
    }
    if( numer_kolumny == 3 )
    {
        litera = 'C';
    }
    if( numer_kolumny == 4 )
    {
        litera = 'D';
    }
    if( numer_kolumny == 5 )
    {
        litera = 'E';
    }
    if( numer_kolumny == 6 )
    {
        litera = 'F';
    }
   
    if( numer_wiersza >= 1 and numer_wiersza <= MAX_WIERSZ and numer_kolumny >= 1 and numer_kolumny <= MAX_KOLUMNA )
         cout << "wybrane pole to: " << numer_wiersza << litera << endl;
    else
         cout << "takie pole nie istnieje" << endl << "podaj inne pole: ";
   
}

void rysuj_kamien()
{
    if( numer_wiersza >= 1 and numer_wiersza <= MAX_WIERSZ and numer_kolumny >= 1 and numer_kolumny <= MAX_KOLUMNA )
         board[ numer_wiersza - 1 ][ numer_kolumny - 1 ] = '#';
   
    cout << board[ MAX_WIERSZ ][ MAX_KOLUMNA ];
}






int main()
{
   
    inicjuj_plansze();
    rysuj_plansze();
    wybierz_pole();
    rysuj_kamien();
    system( "cls" );
    rysuj_plansze();
    wybierz_pole();
    rysuj_kamien();
    system( "cls" );
    rysuj_plansze();
    system( "pause" );
    return 0;
}


Teraz moje pytanie brzmi: co powinienem zrobić, aby nie wywoływać za każdym razem w 'mainie' funkcji, tylko żeby jakoś skrócić ten zapis? I jak sprawić, żeby komputer losowo dobierał pole, ale żeby to pole nie było już zajęte?
P-121301
Tomek_z_W11
» 2014-11-24 21:02:25
Człowieku!
Program nie będzie działać poprawnie!

C/C++
void rysuj_kamien()
{
    board[ numer_wiersza - 1 ][ numer_kolumny - 1 ] = '#';
    cout << board[ MAX_WIERSZ ][ MAX_KOLUMNA ];
}

Nie mozesz pisac
C/C++
cout << board[ MAX_WIERSZ ][ MAX_KOLUMNA ]

bo taki element nie istnieje, jak masz coś takiego:
C/C++
int tablica[ 6 ][ 6 ];
to elementy będą wyglądać tak:
C/C++
tablica[ 0 ][ 0 ]
tablica[ 0 ][ 1 ]
tablica[ 0 ][ 2 ]
...
tablica[ 0 ][ 5 ]

tablica[ 1 ][ 0 ]
tablica[ 1 ][ 2 ]
...
tablica[ 1 ][ 5 ]
tablica[ 2 ][ 0 ]
tablica[ 2 ][ 1 ]
.
.
.
.
tablica[ 5 ][ 5 ] - ostatni element, a ty piszesz
[ cpp ]
cout << board[ MAX_WIERSZ ][ MAX_KOLUMNA ]
//czyli cout << board[6][6] - taka komorka nie istnieje!!!

P-121316
kevindurant95
Temat założony przez niniejszego użytkownika
» 2014-11-24 22:31:03
Racja, moja głupota. Jednakże, gdy zmieniam na
C/C++
void rysuj_kamien()
{
    if( numer_wiersza >= 1 and numer_wiersza <= MAX_WIERSZ and numer_kolumny >= 1 and numer_kolumny <= MAX_KOLUMNA )
         board[ numer_wiersza - 1 ][ numer_kolumny - 1 ] = '#';
   
    cout << board[ MAX_WIERSZ - 1 ][ MAX_KOLUMNA - 1 ];
}

to nadal nie działa, a MAX_WIERSZ - 1, to po prostu 5. Przepraszam za moje dyletanctwo, ale średnio ogarniam programowanie.
P-121327
« 1 » 2
  Strona 1 z 2 Następna strona