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

Program nie wykonuje się tak jak powinien

Ostatnio zmodyfikowano 2013-05-03 17:54
Autor Wiadomość
miszcz1298
Temat założony przez niniejszego użytkownika
Program nie wykonuje się tak jak powinien
» 2013-05-02 18:53:36
Napisałem skrypt, który powinien "wygenerować" mi planszę do gry w konsoli, ma być to gra typu memory. Kompiluje się bardzo dobrze ale gdy go wykonuję to nie chce mi zmienić wartości poszczególnych pól w tablicy "plansza". Proszę o rozwiązanie problemu.

Kod źródłowy jest następujący:

C/C++
#include <iostream>
#include <string>
#include <windows.h>
#include <time.h>
#include <cstdlib>
using namespace std;
int plansza[ 4 ][ 4 ];
int plansza2[ 4 ][ 4 ];
class imiona {
public:
    int imie( string & imie1 ) {
        do
        {
            system( "cls" );
            cout << "Podaj imie: ";
        }
        while( wczytaj_imie( imie1 ) == false );
       
        return( 0 );
    }
   
    bool wczytaj_imie( string & imie1 ) {
        cin.clear();
        cin.sync();
        cin >> imie1;
        return cin.good();
    }
};

class generator_planszy {
public:
    int liczba;
    int a = 0;
    int b = 0;
    int c = 0;
    int d = 0;
    int e = 0;
    int f = 0;
    int g = 0;
    int h = 0;
    int x = 0;
    int y = 0;
    int generator( int & x, int & y ) {
        liczba =( rand() % 8 ) + 1;
        for( x = 0; x < 4; x++ )
        {
            for( y = 0; y < 4; y++ )
            {
                plansza2[ x ][ y ] = 0;
            }
        }
        switch( liczba )
        {
        case 1:
            {
                if( a == 2 )
                { generator( x, y ); }
                else
                {
                    if( plansza[ x ][ y ] == 0 )
                    {
                        a++;
                        plansza[ x ][ y ] = 1;
                        break;
                    }
                    else { generator( x, y ); };
                }
            }
        case 2:
            {
                if( b == 2 )
                { generator( x, y ); }
                else
                {
                    if( plansza[ x ][ y ] == 0 )
                    {
                        b++;
                        plansza[ x ][ y ] = 2;
                        break;
                    }
                    else { generator( x, y ); };
                }
            }
        case 3:
            {
                if( c == 2 )
                { generator( x, y ); }
                else
                {
                    if( plansza[ x ][ y ] == 0 )
                    {
                        c++;
                        plansza[ x ][ y ] = 3;
                        break;
                    }
                    else { generator( x, y ); };
                }
            }
        case 4:
            {
                if( d == 2 )
                { generator( x, y ); }
                else
                {
                    if( plansza[ x ][ y ] == 0 )
                    {
                        d++;
                        plansza[ x ][ y ] = 4;
                        break;
                    }
                    else { generator( x, y ); };
                }
            }
        case 5:
            {
                if( e == 2 )
                { generator( x, y ); }
                else
                {
                    if( plansza[ x ][ y ] == 0 )
                    {
                        e++;
                        plansza[ x ][ y ] = 5;
                        break;
                    }
                    else { generator( x, y ); };
                }
            }
        case 6:
            {
                if( f == 2 )
                { generator( x, y ); }
                else
                {
                    if( plansza[ x ][ y ] == 0 )
                    {
                        f++;
                        plansza[ x ][ y ] = 6;
                        break;
                    }
                    else { generator( x, y ); };
                }
            }
        case 7:
            {
                if( g == 2 )
                { generator( x, y ); }
                else
                {
                    if( plansza[ x ][ y ] == 0 )
                    {
                        g++;
                        plansza[ x ][ y ] = 7;
                        break;
                    }
                    else { generator( x, y ); };
                }
            }
        case 8:
            {
                if( h == 2 )
                { generator( x, y ); }
                else
                {
                    if( plansza[ x ][ y ] == 0 )
                    {
                        h++;
                        plansza[ x ][ y ] = 8;
                        break;
                    }
                    else { generator( x, y ); };
                }
            }
        }
        return( 0 );
    }
};

void pauza( int ms )
{
    clock_t target = clock() + ms;
    while( clock() < target );
   
}

int main() {
    srand( time( NULL ) );
    int x;
    int y;
    string imie1;
    generator_planszy generator_planszy;
    imiona imiona;
    imiona.imie( imie1 );
    pauza( 2000 );
    for( x = 0; x < 4; x++ )
    {
        for( y = 0; y < 4; y++ )
        {
            generator_planszy.generator( x, y );
        }
    }
    cout <<( rand() % 8 ) + 1 << endl;
    for( x = 0; x < 4; x++ )
    {
        for( y = 0; y < 4; y++ )
        {
            cout << plansza[ x ][ y ];
        }
        cout << endl;
    }
    return( 0 );
}
P-81837
usmiech
» 2013-05-03 00:15:09
Nie sadze, zeby kompilowalo sie dobrze... inicjalizujesz zmienne wewnatrz klasy, nie wiem dlaczego. Wg zasad /moze sie myle/ tylko zmienne static i const moga byc tak definiowane. Pytanie dlaczego wlasnie tak chcesz to robic .... ? A tak , w ogole, to nie za bardzo rozumiem class imiona i jaka to ma byc tablica.....moze ciezko mi sie mysli po nocy ;)
Sadze, ze klasy i funkcje moga miec inne zastosowania... pozwole sobie cos pokazac .. ot przykadowa tablice. Jest to czesc programu, umiescilem ja w main, zeby latwo dalo sie sprawdzic jej dzialanie. Zmienne int yMax i char xMax, oraz tablica podane tu sa tylko dlatego, zeby funkcja dzialala. W programie wielkosci te ustala uzytkownik /nie musi byc char.. to tylko przyklad/ , pozdrawiam :)

C/C++
#include "stdafx.h"
#include <iostream>
#include <array>
using namespace std;

int main()
{
   
    char xMax[ 11 ] = { ' ', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J' };
    int yMax = 10;
    int tablica[ 10 ][ 10 ];
   
   
    for( int y = 0; y < yMax + 1; y++ )
    {
        for( int x = 0; x < 10 + 1; x++ )
        {
            if( !x )
            {
               
                if( y < 10 )
                {
                    if( y )
                         cout << " " << y << " ";
                    else
                         cout << "   ";
                   
                }
                else
                     cout << " " << y;
               
            } else if( !y )
            {
                if( x < 10 )
                     cout << " " << xMax[ x ] << " ";
                else
                     cout << " " << xMax[ x ];
               
            }
            else
            {
                if( !tablica[ x - 1 ][ y - 1 ] )
               
                     cout << "  ";
                else
                     cout << "   ";
               
            }
           
            if( x < 10 )
                 cout << "|";
           
        }
        cout << "\n";
       
        for( int z = 0; z < 10 + 1; z++ )
        {
            if( y < yMax + 1 )
            {
                cout << "___";
                if( z < 10 )
                     cout << "+";
               
            }
        }
        cout << "\n";
    }
   
   
    system( "pause" );
   
    return 0;
}

// #include "stdafx.h" tylko dla uzytkownikow visual studio :)
P-81859
miszcz1298
Temat założony przez niniejszego użytkownika
» 2013-05-03 14:20:42
Wyskoczyło parę warningów, to prawda, nawet by się zgadzało, że zwykłych zmiennych nie można. klasa imiona potrzebna mi jest to uporządkowania skryptu, bo później zamierzam tam dodać jeszcze kilka funkcji i tutaj mam pytanie:jak można w takim razie zdefiniować zmienne w funkcji, jeśli chcę, żeby funkcja była wykonywana w pętli a ich wartość była ustalana tylko raz, a potem żeby pozostawała niezmieniona i mogła być modyfikowana przez dalszą część funkcji. Jeśli chodzi to to, jaka to ma być tablica, to to ma być tablica plansz zdefiniowana jako globalna zaraz na początku skryptu.
P-81881
usmiech
» 2013-05-03 14:48:08
Duzo pytan, postaram sie tylko pokrotce powiedziec co ja bym zrobil. Moja propozycja.. Poczytaj o klasach podstawowych, pochodnych i funkcjach zaprzyjaznionych.Zmienne okreslilbym jako private /maja  do niech dostep tylko funkcje klasy, w ktorej sa zawarte lub pochodnych czy zaprzyjazninych klas, jesli tak zdecydujesz/. Najlepiej umiescic ta funkcje w klasie, ale jesli chcesz , zeby ta funkcja obslugiwala kilka klas to mozesz zrobic ja jako zaprzyjazniona z klasami i tez bedzie miala dostep do danych typu private../osobny temat do zmienne typu const/. Temat jest zbyt obszerny, dlatego tez zasugerowalem Ci lekture... Co do plansz , to uzylbym vectora.. i tablic dynamicznych , ale to tez dluzszy temat. Polecam ksiazki/wiesz czego szukac wiec powinno byc Ci latwiej/ lub google... Powodzenia :)
P-81887
usmiech
» 2013-05-03 17:27:37
Jesli zobacze, ze poczytales I nadal masz jakis .. maly problem hahaha to moze postaram sie jakos pomoc. Pamietaj , prosze , jedno... Samo kodowanie nie jest najtrudniejsza strona programowania. Duzo trudniejsza jest dokladna analiza  problemu I design, ale to tylko moje zdanie :)
P-81898
miszcz1298
Temat założony przez niniejszego użytkownika
» 2013-05-03 17:54:19
Dzięki z podpowiedź. Zrobiłem tak jak poradziłeś i ... na razie działa :-). P.S. Znam się trochę na programowaniu, ale po prostu przygodę z C++ dopiero zaczynam więc jak będę miał jeszcze jakieś problemy to namiszę na forum :-)



Zamykam temat.
P-81901
« 1 »
  Strona 1 z 1