Ograniczenie zmiennej do jednego znaku
Ostatnio zmodyfikowano 2014-12-06 18:34
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: 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: #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; }
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 ]; 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(); 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; }
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; tempx = x; tempy = kolumna; while( tempx >= 0 && tempy < szerokosc && plansza[ tempx ][ tempy ] == znak ) { i[ 0 ] ++; tempx--; tempy++; } tempx = x; tempy = kolumna; while( tempy < szerokosc && plansza[ tempx ][ tempy ] == znak ) { i[ 1 ] ++; tempy++; } tempx = x; tempy = kolumna; while( tempx < wysokosc && tempy < szerokosc && plansza[ tempx ][ tempy ] == znak ) { i[ 2 ] ++; tempx++; tempy++; } tempx = x; tempy = kolumna; while( tempx < wysokosc && plansza[ tempx ][ tempy ] == znak ) { i[ 3 ] ++; tempx++; } tempx = x; tempy = kolumna; while( tempx < wysokosc && tempy >= 0 && plansza[ tempx ][ tempy ] == znak ) { i[ 4 ] ++; tempx++; tempy--; } tempx = x; tempy = kolumna; while( tempy >= 0 && plansza[ tempx ][ tempy ] == znak ) { i[ 5 ] ++; tempy--; } 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; }
|
|
Parapet |
» 2014-12-06 18:32:19 Sprawdzaj czy do zmiennej została wprowadzona poprawna wartość. |
|
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.: 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 ];
|
|
« 1 » |