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

Ograniczenie zmiennej do jednego znaku

Ostatnio zmodyfikowano 2014-12-06 18:34
Autor Wiadomość
pampolini
Temat założony przez niniejszego użytkownika
Ograniczenie zmiennej do jednego znaku
» 2014-12-06 17:48:45
Chciałbym, żeby do zmiennej x, można było dopisać tylko jeden znak, ale nie potrafie sobie z tym poradzić. W funkcji "wybieranie_kolumn";


To część kodu:
C/C++
int wybieranie_kolumn( int plansza[ xMax ][ yMax ], int gracz, int szerokosc, int wysokosc )
{
    char x, y;
    int obieg = 0;
    do
    {
        system( "cls" );
        if( obieg++ )
        {
            cout << " Niepoprawny znak !" << endl;
        }
        rysowanie( wysokosc, szerokosc, plansza );
        cout << "Jezeli chcesz przejsc do pomocy wcisnij'?'" << endl;
        cout << "Jezeli chcesz wyjsc 'Q'" << endl;
        cout << "Podaj kolumne w ktorej umiescic znak." << endl;
        cin >> x;
       
        if( x == '?' )
        {
            pomoc();
            obieg = 0;
            continue;
        }
       
        else if( x == 'Q' )
        {
            wyjscie();
        }
       
       
        else if( x >= 'a' && x <= 'z' )
             x =( x + 9 ) - 'a';
        else
             x = x - '1';
       
    } while( !(( x >= 0 && x < szerokosc ) && plansza[ 0 ][ x ] == 0 ) );
   
    int i = 0;
   
    while( plansza[ i + 1 ][ x ] == 0 && i + 1 < wysokosc )
         i++;
   
    plansza[ i ][ x ] = gracz;
    return x;
}


O to cały kod:
C/C++
#include <iostream>
#include <cstdlib>

using namespace std;
const char pionowa = 0xBA;
const char pozioma = 0xCD;
const char lewy_gorny = 0xC9;
const char prawy_gorny = 0xBB;
const char lewy_dolny = 0xC8;
const char prawy_dolny = 0xBC;
const int xMax = 35;
const int yMax = 35;


void menu();
void pomoc();
void rysowanie( int wysokosc, int szerokosc, int plansza[ xMax ][ yMax ] );
int wybieranie_kolumn( int plansza[ xMax ][ yMax ], int gracz, int szerokosc, int wysokosc );
void wyjscie();
int wynik( int kolumna, int plansza[ xMax ][ yMax ], int szerokosc, int wysokosc );
void gra();



int main()

{
    menu();
    system( "Pause" );
    return 0;
}
//--------------------------------------- Menu------------------------------
void menu()
{
    while( 1 )
    {
        char wybor;
        system( "cls" );
        cout << "Witamy w grze (ZMODYFIKOWANA WERSJA KOLKA I KRZYZYK)!" << endl;
        cout << "*****************************************************" << endl;
        cout << "Jesli chcesz rozpoczac gre napisz:'1' " << endl;
        cout << "Jesli potrzebujesz pomocy napisz:'?' " << endl;
        cout << "Jesli chcesz zakonczyc gre:'Q' " << endl;
        cout << "*****************************************************" << endl;
        cin >> wybor;
       
        if( wybor == '1' ) gra();
        else if( wybor == '?' ) pomoc();
        else if( wybor == 'Q' ) wyjscie();
        else cout << "Program nie obsluguje takich komend" << endl;
       
    }
}

void pomoc()
{
    char wybor;
    system( "cls" );
    cout << "Witaj w menu pomoc! :)" << endl;
    cout << "Gra to zmodyfikowana wersja kolka i krzyzyk dla dwoch graczy." << endl;
    cout << "Krok pierwszy to wybor rozmiaru planszy przez gracza." << endl;
    cout << "Gracza pierwszy to 'O', gracz adrugi to 'X'." << endl;
    cout << "Gracz pierwszy wybiera numer kolumny w ktorej chce umiescic swoj znak." << endl;
    cout << "Nastepny krok gracza drugiego analogiczny do ruchu przeciwnika." << endl;
    cout << "Wygrywa gracz, ktory ulozy swoje 4 znaki w PIONIE, POZIOMIE, lub po SKOSIE." << endl << endl << endl << endl;
   
    cout << "Jezeli chcesz wrocic do MENU wcisnij: '1' " << endl;
    cout << "Jezeli chcesz zakonczy gre wcisnij: 'Q'" << endl;
    cin >> wybor;
    if( wybor == '1' ) menu();
    else if( wybor == 'Q' ) wyjscie();
    else cout << "Program nie obsluguje takich komend" << endl;
   
    system( "pause" );
}

void wyjscie()
{
    exit( 0 );
}

void gra()
{
    system( "cls" );
    int szerokosc, wysokosc, wybor;
    int plansza[ xMax ][ yMax ]; //wartosci ktore przyjmuje plaszna to 0, 1, 2.
   
    do
    {
        cout << "SZEROKOSC PLANSZY=";
        cin >> szerokosc;
       
    } while( szerokosc > yMax || szerokosc < 4 );
   
    do
    {
        cout << "WYSOKOSC PLANSZY=";
        cin >> wysokosc;
       
    } while( wysokosc > xMax || wysokosc < 4 );
   
    for( int i = 0; i < xMax; i++ )
    for( int j = 0; j < yMax; j++ )
         plansza[ i ][ j ] = 0;
   
    int stan = 1;
    int gracz = 0;
    int ostatnia_kolumna;
    int pozostalo_pol = szerokosc * wysokosc;
    while( 1 )
    {
        ostatnia_kolumna = wybieranie_kolumn( plansza,( gracz ) % 2 + 1, szerokosc, wysokosc );
        stan = wynik( ostatnia_kolumna, plansza, szerokosc, wysokosc );
       
        if( stan == 0 )
        {
            system( "cls" );
            rysowanie( wysokosc, szerokosc, plansza );
            cout << "Koniec gry!" << endl;
            cout << "Wygral: " <<(( gracz % 2 == 1 ) ? "X"
                : "O" ) << "(gracz " << gracz % 2 + 1 << ")" << endl;
            system( "pause" );
            break;
        }
       
       
       
        gracz++;
        pozostalo_pol--;
        if( pozostalo_pol == 0 )
        {
            system( "cls" );
            rysowanie( wysokosc, szerokosc, plansza );
            cout << "Koniec gry!" << endl;
            cout << "wystapil remis" << endl;
            system( "pause" );
            break;
        }
    }
   
   
   
}

void rysowanie( int wysokosc, int szerokosc, int plansza[ xMax ][ yMax ] )
{
    cout << " ";
    for( int i = 0; i < szerokosc; i++ )
    {
        if( i < 9 ) cout << i + 1;
        else cout << char( i - 9 + 'a' );
       
    }
    cout << endl;
    cout << lewy_gorny;
    for( int i = 0; i < szerokosc; i++ )
         cout << pozioma;
   
    cout << prawy_gorny;
    cout << endl;
    for( int j = 0; j < wysokosc; j++ )
    {
        cout << pionowa;
        for( int i = 0; i < szerokosc; i++ )
        {
            if( plansza[ j ][ i ] == 0 )
                 cout << " ";
            else if( plansza[ j ][ i ] == 1 )
                 cout << "O";
            else
                 cout << "X";
           
        }
        cout << pionowa << endl;
    }
    cout << lewy_dolny;
    for( int i = 0; i < szerokosc; i++ )
         cout << pozioma;
   
    cout << prawy_dolny;
    cout << endl;
   
}

int wybieranie_kolumn( int plansza[ xMax ][ yMax ], int gracz, int szerokosc, int wysokosc )
{
    char x, y;
    int obieg = 0;
    do
    {
        system( "cls" );
        if( obieg++ )
        {
            cout << " Niepoprawny znak !" << endl;
        }
        rysowanie( wysokosc, szerokosc, plansza );
        cout << "Jezeli chcesz przejsc do pomocy wcisnij'?'" << endl;
        cout << "Jezeli chcesz wyjsc 'Q'" << endl;
        cout << "Podaj kolumne w ktorej umiescic znak." << endl;
        cin >> x;
       
        if( x == '?' )
        {
            pomoc();
            // cout<<"jesli chcesz wrocic do gry";
            // cin>>y;
            // if(y=='P')
            //{
            obieg = 0;
            continue;
            // }
            // else continue;
        }
       
        else if( x == 'Q' )
        {
            wyjscie();
        }
       
       
        else if( x >= 'a' && x <= 'z' )
             x =( x + 9 ) - 'a';
        else
             x = x - '1';
       
    } while( !(( x >= 0 && x < szerokosc ) && plansza[ 0 ][ x ] == 0 ) );
   
    int i = 0;
   
    while( plansza[ i + 1 ][ x ] == 0 && i + 1 < wysokosc )
         i++;
   
    plansza[ i ][ x ] = gracz;
    return x;
}


int wynik( int kolumna, int plansza[ xMax ][ yMax ], int szerokosc, int wysokosc )
{
    char znak;
    int x =- 1;
   
    while( plansza[ ++x ][ kolumna ] == 0 );
   
    znak = plansza[ x ][ kolumna ];
   
   
    int i[ 7 ];
    for( int x = 0; x < 7; x++ )
         i[ x ] =- 1;
   
    int tempx, tempy; ///tymczasowe, na potrzeby while'ów
   
    ///0
    tempx = x;
    tempy = kolumna;
    while( tempx >= 0 && tempy < szerokosc && plansza[ tempx ][ tempy ] == znak )
    {
        i[ 0 ] ++;
        tempx--;
        tempy++;
    }
   
    ///1
    tempx = x;
    tempy = kolumna;
    while( tempy < szerokosc && plansza[ tempx ][ tempy ] == znak )
    {
        i[ 1 ] ++;
        tempy++;
    }
   
    ///2
    tempx = x;
    tempy = kolumna;
    while( tempx < wysokosc && tempy < szerokosc && plansza[ tempx ][ tempy ] == znak )
    {
        i[ 2 ] ++;
        tempx++;
        tempy++;
    }
   
    ///3
    tempx = x;
    tempy = kolumna;
    while( tempx < wysokosc && plansza[ tempx ][ tempy ] == znak )
    {
        i[ 3 ] ++;
        tempx++;
    }
   
    ///4
    tempx = x;
    tempy = kolumna;
    while( tempx < wysokosc && tempy >= 0 && plansza[ tempx ][ tempy ] == znak )
    {
        i[ 4 ] ++;
        tempx++;
        tempy--;
    }
   
    ///5
    tempx = x;
    tempy = kolumna;
    while( tempy >= 0 && plansza[ tempx ][ tempy ] == znak )
    {
        i[ 5 ] ++;
        tempy--;
    }
   
    ///6
    tempx = x;
    tempy = kolumna;
    while( tempx >= 0 && tempy >= 0 && plansza[ tempx ][ tempy ] == znak )
    {
        i[ 6 ] ++;
        tempx--;
        tempy--;
    }
   
    if( i[ 0 ] + i[ 4 ] + 1 >= 4 )
         return 0;
   
    if( i[ 1 ] + i[ 5 ] + 1 >= 4 )
         return 0;
   
    if( i[ 2 ] + i[ 6 ] + 1 >= 4 )
         return 0;
   
    if( i[ 3 ] + 1 >= 4 )
         return 0;
   
    return 1;
   
}
P-122367
Parapet
» 2014-12-06 18:32:19
Sprawdzaj czy do zmiennej została wprowadzona poprawna wartość.
P-122378
Kaikso
» 2014-12-06 18:34:35
Możesz pobrać znak funkcją getchar() z #include <stdio.h>, albo wczytać srting i sprawdzić jego długość np.:

C/C++
char znak;
std::string buff;

std::cout << "Podaj znak: ";
std::cin >> buff;
while( buff.size() > 1 )
{
    std::cout << "Niepoprawna wartość." << std::endl;
    std::cout << "Podaj znak: ";
    std::cin >> buff;
}

znak = buff[ 0 ];
P-122381
« 1 »
  Strona 1 z 1