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

Sterowanie klawiszami w prostej grze- C++ Builder

Ostatnio zmodyfikowano 2014-11-30 17:15
Autor Wiadomość
wojtekw0703
Temat założony przez niniejszego użytkownika
Sterowanie klawiszami w prostej grze- C++ Builder
» 2014-11-30 14:45:08
Witam,jestem nowym użytkownikiem tego forum. Mam problem. Tworzę grę coś  na podobe Brain Wars, rozgrywka High or Low.Problem polega na tym,że jak wylosuje liczbę to wtedy określam strzałkami czy poprzednia liczba była mniejsza lub większa. Wszystko mam oprócz sprawdzania czy user dobrze określił liczbę, w tym tkwi problem. Przypomnę,że grę robię w c++ builderze.
Liczę na szybką i profesjonalną odpowiedź i miłe potraktowanie,ponieważ jestem początkującym, programowanie to moja pasja.Z góry dziękuję.Poniżej pokazuję kod do "gry" : 

KOD:

C/C++
//---------------------------------------------------------------------------

#include <vcl.h>
#include <cstdlib>
#pragma hdrstop

#include "Unit2.h"
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm2 * Form2;
Tstarcik * starcik;
int gora = 0, dol = 0;
//---------------------------------------------------------------------------
__fastcall TForm2::TForm2( TComponent * Owner )
    : TForm( Owner )
{
}
//---------------------------------------------------------------------------

void __fastcall TForm2::FormCreate( TObject * Sender )
{
    tlo->Picture->LoadFromFile( "img/tlo.bmp" );
    Image1->Picture->LoadFromFile( "img/liczba.bmp" );
   
}
//---------------------------------------------------------------------------






void __fastcall TForm2::FormKeyUp( TObject * Sender, WORD & Key,
TShiftState Shift )
{
   
    if( Key == VK_UP )
    {
       
        int min1 = 0;
        int max1 = 100;
        srand( time( NULL ) );
        int losowa1 = rand() %( max1 - min1 + 1 ) + min1;
        Label3->Caption = CurrToStr( losowa1 );
        Label3->Visible = true;
        Image1->Visible = true;
        Label7->Visible = false;
       
    }
   
   
   
   
   
    if( Key == VK_DOWN )
    {
        int min1 = 0;
        int max1 = 100;
        srand( time( NULL ) );
        int losowa2 = rand() %( max1 - min1 + 1 ) + min1;
        Label3->Caption = CurrToStr( losowa2 );
        Label3->Visible = true;
        Image1->Visible = true;
        Label7->Visible = false;
       
    }
   
   
}

//---------------------------------------------------------------------------
P-121745
NopeDotAvi
» 2014-11-30 15:01:29
Otóż, nie jestem w stanie Ci pomóc, gdyż nie rozumiem zbytnio Twojego problemu. Jak dla mnie by sprawdzić to po prostu:
C/C++
//psuedo kod

bool sprawdz( int & wylosowana, int & numerOdGracza )
{
    if( wylosowana == numerOdGracza )
         return true;
   
    return false;
}
[ / cpp ]
//znów coś zepsuło formatowanie wiadomości ;<
Nie pisze w c++builderze, nie wiem jak to mia ł oby tam wygl ą da ć.

Poza tym:[ cpp ] srand( time( NULL ) );[ / cpp ] wstaw tylko raz na pocz ą tek kodu.

Kod wstawiaj w znaczniki[ cpp ] tu kod[ / cpp ]( bez spacji )
P-121748
wojtekw0703
Temat założony przez niniejszego użytkownika
» 2014-11-30 15:12:51
Dzięki za odpowiedź i zwróconą uwagę. Poprawiłem.
Wyjaśnię ponownie:
1.Naciskam strzałkę do góry (VK_UP) lub w dół (VK_DOWN),
2.Program pokazuje mi wylosowaną liczbę,
3.Sprawdza czy dobrze zrobiłem (początkowa liczba jest zawsze ustawiona na 0),
4.Jeśli dobrze to dodaje punkt, jeśli nie pokazuje ilość błędow ( To zrobię sam z punktacją :D Tylko mówię jak to ma wyglądać, działanie gry),
5.Losuje następną liczbę,
6.Sprawdza czy dobrze zrobiłem (początkowa liczba jest zawsze ustawiona na 0),
7..Jeśli dobrze to dodaje punkt, jeśli nie pokazuje ilość błędow,
I TAK CAŁY CZAS PÓKI USER ZDECYDUJE,ŻE JUŻ KOŃCZY GRĘ.

Mój problem tkwi w tym,że nie wiem jak napisać aby komputer sprawdzał czy user dobrze nacisnął strzałkę.


P.S Zasada gry: Losuje się liczba i określamy za pomocą strzałek czy poprzednia była mniejsza lub większa od tej aktualnej.
P-121751
NopeDotAvi
» 2014-11-30 15:31:51
ok teraz kapuje, normalnie bym to zrobił mniej więcej tak:
C/C++
srand( time( NULL ) );
int wylosowana = 0;
int wylosowanaPoprzednia = 0;
int punkty = 0;

//teraz losuję 2 razy, by nadać obydwóm zmiennym wartość
wylosowana = rand() % 100;
wylosowanaPoprzednia = wylosowana;
wylosowana = rand() % 100;

bool czyGraczChceGrac = true;
//tworzymy petle while
while( czyGraczChceGrac )
{
    //tutaj można sprawdzać czy grac nacisnął escape, jeżeli tak to zmienną "czyGraczChceGrac" ustawiamy na false
    if( keyPressed == Key_Escape ) //pseudokod
    {
        czyGraczChceGrac = false;
        break; //przerywamy petle
    }
    //teraz logika
    if( keyPressed == Key_Arrow_Down )
    {
        if( wylosowana < wylosowanaPoprzednia )
        {
            //ten if sprawdza, jeżeli gracz nacisnal strzalke w dol i wylosowana liczb poprzednia jest wieksza od wylosowanej aktualnie
            //to dobrze i gracz trafil
            punkty += 1;
        }
        else
             cout << "nie trafiles" << endl;
       
    }
    else if( keyPressed == Key_Arrow_Up )
    {
        if( wylosowana > wylosowanaPoprzednia )
        {
            punkty += 1;
        }
        else
             std::cout << "zle" << std::endl;
       
    }
    //po wszystkich ifach
    wylosowanaPoprzednia = wylosowana;
    wylosowana = rand() % 100;
}

Zrobiłem jak zrozumiałem (pseudo kod)
1. Wylosowuje 2 razy
2. Jeżeli gracz naciśniej strzałkę w dół (czyli uważa, że poprzednia jest mniejsza od aktualnej i tak faktycznie jest) to dostaje punkt
3. Jeżeli naciśnie w dół a poprzednia nie będzie większa od aktualnej to komunikat, że źle.
4. To samo z strzałką w górę, tylko odwrotny warunek by dostać punkt (aktualna > poprzednia)
5. Przed końcem pętli losuje ponownie

Pętla działa dopóki gracz nie wciśnie escape.

Ważne: To jest pseudo kod, musisz go dostosować do c++ buildera.
P-121753
wojtekw0703
Temat założony przez niniejszego użytkownika
» 2014-11-30 17:15:54
Wielkie dzięki za kod. Oczywiście wiem,że muszę przerobić go na c++ builder, ale z tym sobie dam radę. Jeszcze raz wielkie dzięki,miły początek na c++0x.
P-121756
« 1 »
  Strona 1 z 1