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:
#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; } }
|
|
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:
bool sprawdz( int & wylosowana, int & numerOdGracza ) { if( wylosowana == numerOdGracza ) return true; return false; } [ / cpp ]
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 )
|
|
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.
|
|
NopeDotAvi |
» 2014-11-30 15:31:51 ok teraz kapuje, normalnie bym to zrobił mniej więcej tak: srand( time( NULL ) ); int wylosowana = 0; int wylosowanaPoprzednia = 0; int punkty = 0;
wylosowana = rand() % 100; wylosowanaPoprzednia = wylosowana; wylosowana = rand() % 100;
bool czyGraczChceGrac = true;
while( czyGraczChceGrac ) { if( keyPressed == Key_Escape ) { czyGraczChceGrac = false; break; } if( keyPressed == Key_Arrow_Down ) { if( wylosowana < wylosowanaPoprzednia ) { punkty += 1; } else cout << "nie trafiles" << endl; } else if( keyPressed == Key_Arrow_Up ) { if( wylosowana > wylosowanaPoprzednia ) { punkty += 1; } else std::cout << "zle" << std::endl; } 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. |
|
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. |
|
« 1 » |