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

allegro gra kółko i krzyżyk

Ostatnio zmodyfikowano 2012-07-20 19:03
Autor Wiadomość
braders
Temat założony przez niniejszego użytkownika
allegro gra kółko i krzyżyk
» 2012-07-20 17:02:49
witam mam taki kod
C/C++
#include <allegro.h>
#include <iostream>
#include <conio.h>
#include <ctime>
int tablica[ 2 ][ 2 ];



void kod()
{
    for( int i = 0; i < 3; ++i )
    for( int j = 0; j < 3; ++j )
         tablica[ i ][ j ] = 0;
   
   
   
   
   
   
   
   
   
   
}



int main()
{
    allegro_init();
    install_keyboard();
    install_mouse();
    set_color_depth( 16 );
    set_gfx_mode( GFX_AUTODETECT_WINDOWED, 232, 232, 0, 0 );
    show_mouse( screen );
    unscare_mouse();
    clear_to_color( screen, makecol( 128, 128, 128 ) );
    BITMAP * bufor = NULL;
   
    bufor = create_bitmap( 232, 232 );
    if( !bufor )
    {
        set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
        allegro_message( "Nie mogę utworzyć bufora !" );
        allegro_exit();
        return 0;
    }
    BITMAP * paleta = NULL;
    paleta = load_bmp( "paleta.bmp", default_palette );
    if( !paleta )
    {
        set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
        allegro_message( "nie mogę załadować obrazka paleta !" );
        allegro_exit();
        return 0;
       
    }
    BITMAP * kolko = NULL;
    kolko = load_bmp( "kolko.bmp", default_palette );
    if( !kolko )
    {
        set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
        allegro_message( "nie mogę załadować obrazka kolko !" );
        allegro_exit();
        return 0;
       
    }
   
   
   
   
    kod();
    while( !key[ KEY_ESC ] )
    {
       
       
        int mx = 0, my = 0, mb = 0;
       
        masked_blit( paleta, bufor, 0, 0, 0, 0, paleta->w, paleta->h );
        if( mx != mouse_x || my != mouse_y || mb != mouse_b )
        {
            mx = mouse_x;
            my = mouse_y;
            mb = mouse_b;
        }
        int pmx = 0, pmy = 0;
        //std::cout<<"mx="<<mx<<std::endl;
        //std::cout<<"my="<<my<<std::endl;
        if( mx >= 0 && mx <= 64 && my <= 64 && my >= 0 ) pmx = 0, pmy = 0;
       
        if( mx >= 64 + 20 && mx <= 64 + 64 + 20 && my <= 64 && my >= 0 ) pmx = 1, pmy = 0;
       
        if( mx >= 64 + 40 + 64 && mx <= 64 + 64 + 40 + 64 && my <= 64 && my >= 0 ) pmx = 2, pmy = 0;
       
        if( mx >= 0 && mx <= 64 && my <= 148 && my >= 84 ) pmx = 0, pmy = 1;
       
        if( mx >= 64 + 20 && mx <= 64 + 64 + 20 && my <= 148 && my >= 84 ) pmx = 1, pmy = 1;
       
        if( mx >= 64 + 40 + 64 && mx <= 64 + 64 + 40 + 64 && my <= 148 && my >= 84 ) pmx = 2, pmy = 1;
       
        if( mx >= 0 && mx <= 64 && my <= 148 + 20 + 64 && my >= 84 + 20 + 64 ) pmx = 0, pmy = 2;
       
        if( mx >= 64 + 20 && mx <= 64 + 64 + 20 && my <= 148 + 20 + 64 && my >= 84 + 20 + 64 ) pmx = 1, pmy = 2;
       
        if( mx >= 64 + 40 + 64 && mx <= 64 + 64 + 40 + 64 && my <= 148 + 20 + 64 && my >= 84 + 20 + 64 ) pmx = 2, pmy = 2;
       
        if( mx > 64 && mx < 84 || mx > 84 + 64 && mx < 84 + 84 ) pmx = 5, pmy = 5;
       
        if( my > 64 && my < 84 || my > 84 + 64 && my < 84 + 84 ) pmx = 5, pmy = 5;
       
        if( mb == 1 )
        {
            tablica[ pmx ][ pmy ] = 1;
           
        }
       
       
        system( "cls" );
        std::cout << pmx << std::endl;
        std::cout << pmy << std::endl;
        std::cout << tablica[ 0 ][ 0 ] << std::endl;
        std::cout << tablica[ 1 ][ 0 ] << std::endl;
        std::cout << tablica[ 2 ][ 0 ] << std::endl;
        std::cout << tablica[ 0 ][ 1 ] << std::endl;
        std::cout << tablica[ 1 ][ 1 ] << std::endl;
        std::cout << tablica[ 2 ][ 1 ] << std::endl;
        std::cout << tablica[ 0 ][ 2 ] << std::endl;
        std::cout << tablica[ 1 ][ 2 ] << std::endl;
        std::cout << tablica[ 2 ][ 2 ] << std::endl;
       
       
       
       
        if( tablica[ 0 ][ 0 ] == 1 ) masked_blit( kolko, bufor, 0, 0, 0, 0, kolko->w, kolko->h );
       
        if( tablica[ 1 ][ 0 ] == 1 ) masked_blit( kolko, bufor, 0, 0, 84, 0, kolko->w, kolko->h );
       
        if( tablica[ 2 ][ 0 ] == 1 ) masked_blit( kolko, bufor, 0, 0, 168, 0, kolko->w, kolko->h );
       
        if( tablica[ 0 ][ 1 ] == 1 ) masked_blit( kolko, bufor, 0, 0, 0, 84, kolko->w, kolko->h );
       
        if( tablica[ 1 ][ 1 ] == 1 ) masked_blit( kolko, bufor, 0, 0, 84, 84, kolko->w, kolko->h );
       
        if( tablica[ 2 ][ 1 ] == 1 ) masked_blit( kolko, bufor, 0, 0, 168, 84, kolko->w, kolko->h );
       
        if( tablica[ 0 ][ 2 ] == 1 ) masked_blit( kolko, bufor, 0, 0, 0, 168, kolko->w, kolko->h );
       
        if( tablica[ 1 ][ 2 ] == 1 ) masked_blit( kolko, bufor, 0, 0, 84, 168, kolko->w, kolko->h );
       
        if( tablica[ 2 ][ 2 ] == 1 ) masked_blit( kolko, bufor, 0, 0, 168, 168, kolko->w, kolko->h );
       
       
       
       
        blit( bufor, screen, 0, 0, 0, 0, 232, 232 );
        clear_to_color( bufor, makecol( 150, 150, 150 ) ); //czyscimy bufor
        clear_keybuf();
    }
    readkey();
    destroy_bitmap( paleta );
    destroy_bitmap( bufor );
    destroy_bitmap( kolko );
    allegro_exit();
    return 0;
}
END_OF_MAIN();


wszystko działa tylko jeśli mam paletę w kształcie jak do kółko i krzyżyk każdy powinien się połapać.
i jeśli kliknę w lewy górny róg to działa ale jeśli kliknę w środek u góry to mi się pojawi kółko w polu klikniętym oraz w lewym dolnym rogu.
tak samo jest z prawym górnym rogiem jeśli na niego kliknę to pojawi się kółko na tym polu oraz na dolnym środku. nie wiem co morze być przyczyną jeśli będzie potrzeba to zapodam wszystkie pliki.
P-60707
mostrom
» 2012-07-20 17:23:57
C/C++
int tablica[ 2 ][ 2 ];
void kod()
{
    for( int i = 0; i < 3; ++i )
    for( int j = 0; j < 3; ++j )
         tablica[ i ][ j ] = 0;
   
}
Co to jest?
jeśli masz tablice 2x2, to nie możesz przypisać jej aż 3 elementów na wymiar - wyjdziesz za zakres.
C/C++
{
    for( int i = 0; i < 2; ++i )
    for( int j = 0; j < 2; ++j )
         tablica[ i ][ j ] = 0;
   
}


Jeszcze kilka rzeczy dla porządku kodu: Stałe przechowuj w zmiennych, np zamiast pisać 64 w każdym warunku, to zapisz liczbe 64 w zmiennej, i ją wywołuj w warunkach.
Przy takim zapisie łatwiej znaleźć błąd.
P-60709
braders
Temat założony przez niniejszego użytkownika
» 2012-07-20 17:35:08
w tej pętli for musi być 3 ponieważ jak zrobię 2 to mi do tablicy [2][2] zapisuję jakieś dziwne liczby takie jak się do zmiennej nie zapiszę "0"
P-60711
kampar
» 2012-07-20 18:46:44
tablica[2][2] nie istnieje. Tworząc tablicę tablica[2] tworzysz 2 elementy, czyli tablica[0] i tablica[1]. Powtórz kurs.
P-60717
braders
Temat założony przez niniejszego użytkownika
» 2012-07-20 19:03:28
dzięki działa
P-60718
« 1 »
  Strona 1 z 1