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

[Allegro] Zmiana klawisza dla gracza

Ostatnio zmodyfikowano 2011-12-13 14:51
Autor Wiadomość
sikora9300
Temat założony przez niniejszego użytkownika
[Allegro] Zmiana klawisza dla gracza
» 2011-12-11 00:37:32
hej, napotkałem na pewnie problem z który nie mogę Sobie poradzić
a mianowicie robię grę na zaliczenie dla 3 graczy i każdemu przypisany jest inny klawisz

pierwszemu enter
drugiemu   spacja
trzeciemu  enter_pad

i tu jest problem, chciłbym aby podczas gry było można zminić ustawienia klawiszy, np: z entera na "CTRL"

ps: chiałbym że było to na zasadzie że kody klawiszy mam w tablicy i pętlą sprawdzam czy któryś z przypisanych klawiszy został wciśnięty

C/C++
int tablica[ 3 ] = { kody klawiszy };
bool blok_klawiszy = false;
int gracz;

for( int i = 0; i < 3; i++ )
{
    if( key[ kody_klawiszy[ i ] ] && blok_klawiszy == false )
    {
        //dodawanie punktów danemu graczowi
    }
}
P-45438
malan
» 2011-12-11 00:53:30
» Kurs C++Obsługa plików lekcja jeżeli chcesz zapisywać ustawienia. W przeciwnym wypadku: » Kurs C++ » Poziom 1Pojęcie zmiennej i podstawowe typy danych lekcja.
P-45440
sikora9300
Temat założony przez niniejszego użytkownika
» 2011-12-11 04:36:44
chyba mnie nie zrozumiałeś, chodzi mi o to że chciłbym zmienić ustawienia klawiszy podczas gry, nie chodzi mi o zapis zmiennych do plik!
kiedy chciłem sprawdzić jakie kody mają dane klawisze tak aby wpisać je tablicę to przy klawiszach funkcyjnych nic nie wyskoczyło..
P-45441
malan
» 2011-12-11 10:15:18
P-45452
RazzorFlame
» 2011-12-11 10:15:42
Chlopie ;D
Robisz sobie taki cus:

C/C++
#include <allegro.h>


int main()
{
    int klawisz1 = 1;
    int klawisz2 = 2;
    int klawisz3 = 3;
    int zaznaczony_gracz = 1;
   
   
    allegro_init();
   
    //tutaj te okno itd a tu petla while;
    while( !key[ KEY_ESC ] )
    {
       
       
       
        if( klawisz1 == 1 )
        {
            //if(key[KEY_ENTER])itd.
        }
        //...
       
        if( key[ KEY_Z ] && zaznaczony_gracz == 1 ) klawisz1 += 1;
       
        if( key[ KEY_Z ] && zaznaczony_gracz == 2 ) klawisz2 += 1;
       
        if( key[ KEY_Z ] && zaznaczony_gracz == 3 ) klawisz3 += 1;
       
    }
   
    allegro_exit();
}
END_OF_MAIN();

Pisalem to na szybko wiec moga byc male bledy ;D Jak cos to jeszcze napisz.
O wlasnie mozesz sobie tez dla zapamietania tych numerkow klawiszy, defina walnac:
#define KLAWISZ_JAKISTAM 1
P-45453
sikora9300
Temat założony przez niniejszego użytkownika
» 2011-12-11 15:06:32
@RazzorFlame
właśnie coś takiego mam, ale teraz nie zmianisz ustawień klawisz !!!!!!
chyba że nasz jakiś sposób???
P-45480
kamillo121
» 2011-12-11 15:22:01
Jeżeli chcesz w miarę elastycznie to zrób tak.
Wiesz, że masz trzech graczy i każdy ma kilka "klawiszy" którymi gra, tak ?
C/C++
struct gracz
{
    int sterowanie[ 3 ];
};

Teraz tworzysz sobie trzy obiekty graczy i przypisujesz im jakieś klawisze na początek a w menu zmiany sterowania w grze po prostu zmieniasz np.

C/C++
gracz player[ 3 ];
player[ 0 ].sterowanie[ 0 ] = KEY_Z;

/*... */

while( /*  */ )
{
    if( key[ player[ 0 ].sterowanie[ 0 ] ] )
    {
    }
    //itd
}

To napisałem tak z ręki tylko dla poglądu.
P-45482
RazzorFlame
» 2011-12-13 14:51:23
Gdybys dobrze to zrozumial i chwile pokombinowal to bys to zrobil. Popatrz:
C/C++
#include <allegro.h>

enum KLAWISZE
{
    KEY_ESC,
    //...
   
   
}


int main()
{
    KLAWISZE kl1, kl2, kl3;
    //przypisujesz dane...
   
    allegro_init();
    install_keyboard();
    set_color_depth( 32 );
    set_gfx_mode( GFX_AUTODETECT_WINDOWED, 800, 600, 0, 0 );
    set_palette( default_palette );
    clear_to_color( screen, makecol( 255, 0, 0 ) );
    while( !key[ KEY_ESC ] )
    {
        if( kl1 == < klawisz > )
        {
            if( < klawisz ktory ma byc wcisniety > ) //co ma zrobic itd.
           
        }
        else if( kl1 == < klawisz2 > )
        {
            if( < klawisz ktory ma byc wcisniety > ) //co ma zrobic...
           
        }
       
        if( key[ KEY_Z ] && kl1 == < nr_klawisza > ) //wtedy nastepny klawisz
       
    }
         allegro_exit();
   
}
END_OF_MAIN();
Zeby robic programy trzeba uzywac wyobrazni!!! Np kierunek potwora ja bym zrobil tak chociaz sa pewnie inne metody:
C/C++
enum KIER
{
   
    LEFT,
    RIGHT,
    UP,
    DOWN
   
}

EDIT:

Kurcze, to co napisal kamilo jest jako tako dobre. Nie wiem czy to tu zadziala ale zobacz:

C/C++
char klawisz;

klawisz = readkey();

int kod = static_cast < int >( klawisz );

textprintf_ex(...);

Tutaj powinienes otrzymac nr'y klawiszy. A jezeli to są takie numery jak w konsoli to moge ci podpowiedziec:

80 = strzalka_w_dol
75 = w gore
72 = lewa
77 = prawa
P-45580
« 1 »
  Strona 1 z 1