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

Program nie wyswietla funkcji od razu i czeka na uzytkownika

Ostatnio zmodyfikowano 2019-09-23 20:18
Autor Wiadomość
Piotras
Temat założony przez niniejszego użytkownika
Program nie wyswietla funkcji od razu i czeka na uzytkownika
» 2019-09-23 19:50:43
Hej! Moj nauczyciel informatyki pokazał grupie gre - "Samotnik".
Stwierdziłem ze sprobuje napisac ja samemu.
Wszystko dziala jak nalezy, z tym ze po wybraniu planszy program nie wyswietla jej od razu i trzeba nacisnac klawisz.
Czy ktos moze mi to rozjasnic?
Dziekuje :)

C/C++
// Autor: Piotras

#include<iostream>
#include<winbgim.h>

using namespace std;

int tablica[ 7 ][ 7 ]; //plansza
int xp, yp, xk, yk;
int ip, jp, ik, jk; // koordynaty pionkow
int znakp;
int x = 200, y = 70;
void mouse_down( int xm, int ym );
void mouse_up( int xm, int ym );
void plansza();
void wybor();
void start2();
void start1();
void start3();

char z;


int main() {
   
    initwindow( 800, 600 );
   
    registermousehandler( WM_LBUTTONDOWN, mouse_down );
    registermousehandler( WM_LBUTTONUP, mouse_up );
   
    setcolor( YELLOW );
    setbkcolor( BLUE );
    cleardevice();
   
    outtextxy( 220, 300, "Wybierz plansze [1] , [2] lub [3]" );
   
    wybor();
   
    return 0;
}
void mouse_down( int xm, int ym ) {
   
    jp =( xm -( x - 35 ) ) / 70;
    ip =( ym -( y - 35 ) ) / 70;
    znakp = true;
    plansza();
}

void mouse_up( int xm, int ym ) {
   
    jk =( xm -( x - 35 ) ) / 70;
    ik =( ym -( y - 35 ) ) / 70;
    znakp = false;
   
    if( tablica[ ip ][ jp ] == 1 && ip - ik == 2 && tablica[ ip - 1 ][ jp ] == 1 && tablica[ ik ][ jk ] == 0 )
    {
        tablica[ ip ][ jp ] = 0;
        tablica[ ip - 1 ][ jp ] = 0;
        tablica[ ik ][ jk ] = 1;
        plansza();
    }
    if( tablica[ ip ][ jp ] == 1 && ik - ip == 2 && tablica[ ip + 1 ][ jp ] == 1 && tablica[ ik ][ jk ] == 0 )
    {
        tablica[ ip ][ jp ] = 0;
        tablica[ ip + 1 ][ jp ] = 0;
        tablica[ ik ][ jk ] = 1;
        plansza();
    }
    if( tablica[ ip ][ jp ] == 1 && jp - jk == 2 && tablica[ ip ][ jp - 1 ] == 1 && tablica[ ik ][ jk ] == 0 )
    {
        tablica[ ip ][ jp ] = 0;
        tablica[ ip ][ jp - 1 ] = 0;
        tablica[ ik ][ jk ] = 1;
        plansza();
    } if( tablica[ ip ][ jp ] == 1 && jk - jp == 2 && tablica[ ip ][ jp + 1 ] == 1 && tablica[ ik ][ jk ] == 0 )
    {
        tablica[ ip ][ jp ] = 0;
        tablica[ ip ][ jp + 1 ] = 0;
        tablica[ ik ][ jk ] = 1;
        plansza();
    }
   
}

void plansza() {
    int i, j;
    for( i = 0; i < 7; i++ )
    {
        for( j = 0; j < 7; j++ )
        {
            if( tablica[ i ][ j ] == 1 )
            {
                circle( x + j * 70, y + i * 70, 30 );
                setfillstyle( 1, RED );
                floodfill( x + j * 70, y + i * 70, YELLOW );
                if( i == ip && j == jp && znakp )
                {
                    circle( x + j * 70, y + i * 70, 30 );
                    setfillstyle( 1, COLOR( 255, 157, 255 ) );
                    floodfill( x + j * 70, y + i * 70, YELLOW );
                }
            }
            if( tablica[ i ][ j ] == 0 )
            {
                circle( x + j * 70, y + i * 70, 30 );
                setfillstyle( 1, BLUE );
                floodfill( x + j * 70, y + i * 70, YELLOW );
            }
           
        }
    }
}

void start2() {
    int i, j;
    for( i = 0; i < 7; i++ )
    {
        for( j = 0; j < 7; j++ )
        {
            tablica[ i ][ j ] = 1;
        }
    }
   
    tablica[ 3 ][ 3 ] = 0;
    tablica[ 0 ][ 0 ] = 2; tablica[ 1 ][ 0 ] = 2; tablica[ 0 ][ 1 ] = 2; tablica[ 1 ][ 1 ] = 2;
    tablica[ 0 ][ 6 ] = 2; tablica[ 0 ][ 5 ] = 2; tablica[ 1 ][ 6 ] = 2; tablica[ 5 ][ 1 ] = 2;
    tablica[ 6 ][ 6 ] = 2; tablica[ 6 ][ 5 ] = 2; tablica[ 5 ][ 6 ] = 2; tablica[ 1 ][ 5 ] = 2;
    tablica[ 6 ][ 0 ] = 2; tablica[ 6 ][ 1 ] = 2; tablica[ 5 ][ 0 ] = 2; tablica[ 5 ][ 5 ] = 2;
}

void start1() {
    int i, j;
    for( i = 0; i < 7; i++ )
    {
        for( j = 0; j < 7; j++ )
        {
            tablica[ i ][ j ] = 1;
        }
    }
   
    tablica[ 3 ][ 3 ] = 0;
    tablica[ 0 ][ 0 ] = 2; tablica[ 1 ][ 0 ] = 2; tablica[ 0 ][ 1 ] = 2;
    tablica[ 0 ][ 6 ] = 2; tablica[ 0 ][ 5 ] = 2; tablica[ 1 ][ 6 ] = 2;
    tablica[ 6 ][ 6 ] = 2; tablica[ 6 ][ 5 ] = 2; tablica[ 5 ][ 6 ] = 2;
    tablica[ 6 ][ 0 ] = 2; tablica[ 6 ][ 1 ] = 2; tablica[ 5 ][ 0 ] = 2;
}

void start3() {
    int i, j;
    for( i = 0; i < 7; i++ )
    {
        for( j = 0; j < 7; j++ )
        {
            tablica[ i ][ j ] = 1;
        }
    }
   
    tablica[ 3 ][ 3 ] = 0;
}

void wybor() {
    if( getch() == 49 ) {
        do {
            cleardevice();
            plansza();
            start1();
        } while( getch() != 27 );
       
    }
    if( getch() == 50 ) {
        do {
            cleardevice();
            plansza();
            start2();
        } while( getch() != 27 );
       
    }
    if( getch() == 51 ) {
        do {
            cleardevice();
            plansza();
            start3();
        } while( getch() != 27 );
       
    }
}
P-175223
pekfos
» 2019-09-23 19:57:52
C/C++
if( getch() == 49 ) {
    do {
        cleardevice();
        plansza();
        start1();
    } while( getch() != 27 );
   
}
if( getch() == 50 ) {
    do {
        cleardevice();
        plansza();
        start2();
    } while( getch() != 27 );
   
}
if( getch() == 51 ) {
    do {
        cleardevice();
        plansza();
        start3();
    } while( getch() != 27 );
   
}
Każdy z tych warunków czeka na znak od użytkownika.
P-175224
Piotras
Temat założony przez niniejszego użytkownika
» 2019-09-23 20:00:16
No tak. Bo jest to warunek wyboru planszy.
Z tym że nie rozumiem czemu nalezy wcisnac go 2 razy
P-175225
pekfos
» 2019-09-23 20:14:43
Każdy z tych warunków niezależnie czeka na znak od użytkownika. Wczytaj znak raz i potem sprawdzaj różne opcje.
P-175227
Piotras
Temat założony przez niniejszego użytkownika
» 2019-09-23 20:18:08
Okej. Teraz rozumiem. Dzieki
P-175228
« 1 »
  Strona 1 z 1