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

Kolko i krzyzyk, c++, rysowanie planszy

Ostatnio zmodyfikowano 2014-11-04 14:26
Autor Wiadomość
Memento96
Temat założony przez niniejszego użytkownika
Kolko i krzyzyk, c++, rysowanie planszy
» 2014-10-31 20:09:50
Witam, mam taki o to kod
C/C++
#include <iostream>
#include <stdlib.h>

using namespace std;

void rysowanie( char plansza[] );
void ruchy( char plansza[], char & gracz );
bool wygrana( char plansza[], char gracz );
bool remis( char plansza[] );
int main()

{
   
    char plansza[ 10 ];
    char wybor, gracz, wybor1;
    cout << "Gra w kolko i krzyzyk \n\nChcesz zagrac? T/N: ";
    cin >> wybor1;
   
    if( wybor1 == 't' || wybor1 == 'T' )
   
    {
       
        do {
           
           
           
            for( int i = 1; i <= 9; i++ ) plansza[ i ] = ' ';
           
            gracz = 'O'; // ktory gracz zaczyna, mozliwy X
           
            while( !wygrana( plansza, 'O' ) && !wygrana( plansza, 'X' ) && !remis( plansza ) ) ruchy( plansza, gracz );
           
            cout << "Chcesz zagrac jeszcze raz? T ";
            cin >> wybor;
            system( "cls" );
           
           
           
        } while(( wybor == 't' ) ||( wybor == 'T' ) );
       
    }
    else return 0;
   
   
}

void rysowanie( char plansza[] )

{
    cout << endl << endl;
    for( int j = 1, i = 0; j <= 9; j++, i++ ) // zapelniane kolejnych wartosci tablicy znakami
    {
        cout << plansza[ j ] << i;
       
        if( j % 3 )
       
             cout << " |";
       
        else if( j != 9 )
       
             cout << "\n---+---+---\n";
       
        else cout << endl;
       
    }
    cout << endl << endl;
   
}

bool remis( char plansza[] )

{
    for( int i = 1; i <= 9; i++ )
         if( plansza[ i ] == ' ' ) return false; // plansza zapelniona, nie ma rozwiazan
   
    rysowanie( plansza ); // wyrysowanie zapelnionej juz planszy
    cout << "\nRemis :c \n\n";
    return true; // zwrocenie remisowi wartosci true
}

bool wygrana( char plansza[], char gracz )

{
    bool sprawdzanie;
    sprawdzanie = false; // przypisanie sprawdzeniu falszu, jesli faktycznie nie znajdzie rozwiazania pozostanie falsz
    int i;
   
   
    for( i = 1; i <= 7; i += 3 )
   
         sprawdzanie |=(( plansza[ i ] == gracz ) &&( plansza[ i + 1 ] == gracz ) &&( plansza[ i + 2 ] == gracz ) ); // sprawdzanie w poziomie
   
    for( i = 1; i <= 3; i++ ) // petla wyswietlajaca kolejne 3 elementy ( 3 bo musza byc 3 znaki)
    {
       
        sprawdzanie |=(( plansza[ i ] == gracz ) &&( plansza[ i + 3 ] == gracz ) &&( plansza[ i + 6 ] == gracz ) ); // sprawdzanie w  pionie
        sprawdzanie |=(( plansza[ 1 ] == gracz ) &&( plansza[ 5 ] == gracz ) &&( plansza[ 9 ] == gracz ) ); // sprawdzanie na ukos
        sprawdzanie |=(( plansza[ 3 ] == gracz ) &&( plansza[ 5 ] == gracz ) &&( plansza[ 7 ] == gracz ) ); // sprawdzanie w drugi ukos
       
    }
   
   
    if( sprawdzanie ) // jesli sie zmienil z false na true (w petli wyzej) to znaczy, ze jest znaleziony wynik i wypisze gracza ktory wygral
   
    {
       
        rysowanie( plansza ); // Jesli tego nie bedzie nie pokaze ostatniego ruchu gracza
        cout << " \n Gracz " << gracz << " Wygral! \n";
        return true; // przypisanie wygranej wartosci true
       
    }
   
    return false; // przypisanie wygranej wartosci false
   
}

void ruchy( char plansza[], char & gracz )


{
    int ruch;
    rysowanie( plansza );
    cout << "\nGracz: " << gracz << "\nTwoj ruch : \n";
    cin >> ruch;
   
   
    cout << endl;
   
    if( cin.fail() )
   
    {
        cin.clear();
        cin.sync();
        system( "cls" );
        rysowanie( plansza );
        cout << "Podaj inna pozycje mniejsza od 10, wieksza od 0 \n";
        cout << "\nGracz: " << gracz << "\nTwoj ruch : \n";
        cin >> ruch;
       
       
       
    }
   
    if(( ruch >= 1 ) &&( ruch < 10 ) &&( plansza[ ruch ] == ' ' ) &&( plansza[ ruch ] != ruch ) )
   
    {
        plansza[ ruch ] = gracz;
       
       
        gracz =( gracz == 'O' ) ? 'X'
            : 'O'; // przekazanie ruchu kolejnemu graczowi
        system( "cls" );
       
    }
   
   
    else
   
    {
        system( "cls" );
       
       
       
        cout << "Podaj inna pozycje mniejsza od 10, wieksza od 0 \n";
    }
   
}
Tak wiem, system ssie, ale to i tak jest żeby jakoś wyglądało podczas działania ;P
Mój problem jest taki chce żeby wyświetlało plansze tak jak to robi teraz (numeruje) ale chce żeby po ruchu zamieniało tą cyfrę na znak 'X' lub 'O' jednak nie mam pojęcia jak się za to zabrać, może coś poradzicie?
P-119753
Rashmistrz
» 2014-10-31 22:28:44
C:\pomagam22.cpp||In function 'void rysowanie(char*)':|
C:\pomagam22.cpp|33|error: 'j' was not declared in this scope|
C:\pomagam22.cpp|39|error: 'cout' does not name a type|
C:\pomagam22.cpp|40|error: expected declaration before '}' token|
||=== Build failed: 3 error(s), 0 warning(s) (0 minute(s), 2 second(s)) ===|

Emmmm...

Ja bym zrobił wypisywanie numerka
gdy pole nie było jeszcze użyte.
P-119774
Memento96
Temat założony przez niniejszego użytkownika
» 2014-11-01 19:40:36
Wtedy wyświetla całą planszę (od 1 do 9) i odrazu wypisuję remis, kod działa tylko na Win :)
Ref.
P-119825
Memento96
Temat założony przez niniejszego użytkownika
» 2014-11-04 10:25:05
Wie ktoś, coś?
P-119972
1aam2am1
» 2014-11-04 14:11:19
W rysowaniu
C/C++
cout << plansza[ j ] << i;
W tej linijce rysujesz całą planszę i dodatkowo numery. Więc co się dziwisz.

Edit.
C/C++
if( plansza[ j ] != ' ' ) { cout << plansza[ j ]; } else { cout << i; }
P-119974
Memento96
Temat założony przez niniejszego użytkownika
» 2014-11-04 14:26:45
Teraz wyświetla liczby od 1 do 9 nad planszą i nic więcej, więc to nie to :) (nadal wyświetla remis.)
|@edit dobra, działa ;3
P-119975
« 1 »
  Strona 1 z 1