• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

c++ builder zablokowanie mozliwosci ruchu

Object Storage Arubacloud
0 głosów
176 wizyt
pytanie zadane 11 marca 2020 w C i C++ przez lujasjeden Użytkownik (860 p.)

Dzień dobry, szukałem po internecie dobre 2 godziny ale nie znalazłem, tworzę grę kamień papier nożyce dla 2 graczy jednocześnie, przy jednym stanowisku, takie 1vs1, po wybraniu swojej broni zdjęcie gracza wyświetli się na miejsce np kamienia po czym wystrzeli on pocisk analogicznie gracz po przeciwnej stronie. Nie wiem jak napisać taką pauze, freeza nie wiem jak to nazwać ale chodzi mi żeby po wybraniu swojej broni gracz nie mógł już nacisnąć nic aż do momentu kiedy pocisk trafi w przeciwnika lub przyciski spotkają się i się zniszczą no do momentu nowej rundy, bo narazie to wygląda to tak, że gracz może wybrać wszystkie 3 opcje a nie o to chodzi.

tldr Jak uniemozliwić sterowanie, naciskanie klawiszy w aplikacji w c++ builder? Jest jakaś funkcja do tego np Application-> i coś?

void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
 if (Key==(90))
 {
  Michal1->Visible=true;
  kula1->Visible=true;
  stoper1->Enabled=true;
 }
 if (Key==(88))
 {
 Michal2->Visible=true;
 kula2->Visible=true;
 stoper2->Enabled=true;
 }

 

komentarz 11 marca 2020 przez DragonCoder Nałogowiec (36,500 p.)
Moze jakas zmienna bool i jesli jest true, to nie czytasz to co user wpisal.
komentarz 11 marca 2020 przez lujasjeden Użytkownik (860 p.)

Dzięki za komentarz, właśnie myślałem nad tym ale zupełnie nie wiem jak to napisać żeby zignorować to co user wpisał jaka komenda? Nie mam pojęcia. Zmienną bool wtedy wpisać w Tform1 Form1 tak? Wstawie kodzik co mam dotychczas, póki co zwykłe ustawienia poruszania co nie no i limituje mnie własnie to żeby napisać żeby zablokować możliwość poruszania się po jednym ruchu w jednej rundzie

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;



void sekwencja()
{
 Form1->Label1->Caption="Następna runda za 3";
 Application->ProcessMessages(); Sleep(1000);
 Form1->Label1->Caption="Następna runda za 2";
 Application->ProcessMessages(); Sleep(1000);
 Form1->Label1->Caption="Następna runda za 1";
 Application->ProcessMessages(); Sleep(1000);

 Form1->Label1->Caption="Wybierz kamień/papier/nożyce";






}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
 if (Key==(90))
 {
  Michal1->Visible=true;
  kula1->Visible=true;
  stoper1->Enabled=true;
  




 }
 if (Key==(88))
 {
 Michal2->Visible=true;
 kula2->Visible=true;
 stoper2->Enabled=true;
 }
 if (Key==(67))
 {
 Michal3->Visible=true;
 kula3->Visible=true;
 stoper3->Enabled=true;
 }
 if (Key==(VK_LEFT))
 {
 Pawel1->Visible=true;
 kula4->Visible=true;
 stoper4->Enabled=true;
 }
 if (Key==(VK_DOWN))
 {
 Pawel2->Visible=true;
 kula5->Visible=true;
 stoper5->Enabled=true;
 }
 if (Key==VK_RIGHT)
 {
 Pawel3->Visible=true;
 kula6->Visible=true;
 stoper6->Enabled=true;
 }







}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormKeyUp(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
 if (Key==(90)) gora_m->Enabled = false;
 if (Key==(67)) dol_m->Enabled = false;
 if (Key==VK_LEFT) dol_p->Enabled = false;
 if (Key==VK_RIGHT) gora_p->Enabled = false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Label1Click(TObject *Sender)
{

 sekwencja();

}
//---------------------------------------------------------------------------

void __fastcall TForm1::stoper1Timer(TObject *Sender)
{
 kula1->Left+=6;        
}
//---------------------------------------------------------------------------

void __fastcall TForm1::stoper4Timer(TObject *Sender)
{
 kula4->Left-=6;        
}
//---------------------------------------------------------------------------

void __fastcall TForm1::stoper2Timer(TObject *Sender)
{
 kula2->Left+=6;        
}
//---------------------------------------------------------------------------

void __fastcall TForm1::stoper5Timer(TObject *Sender)
{
 kula5->Left-=6;        
}
//---------------------------------------------------------------------------

void __fastcall TForm1::stoper3Timer(TObject *Sender)
{
 kula3->Left+=6;        
}
//---------------------------------------------------------------------------

void __fastcall TForm1::stoper6Timer(TObject *Sender)
{
 kula6->Left-=6;
}
//---------------------------------------------------------------------------

 

komentarz 11 marca 2020 przez DragonCoder Nałogowiec (36,500 p.)
Nie mam pojecia jak to wyglada w builderze i polecam wcinac kod, dla czytelnosci.

i te nazwy zmiennych nic nie mowia.

Z pseudo kodu cos w stylu pewnie:

input od usera

rostrzygniecie wygranej

ustawiasz zmienna bool na true, dopoki czas na timerze sie nie skonczyl

timer skonczyl odliczanie zmienna na false i dopiero wtedy dalej mozna grac, tzn input bedzie brany pod uwage
komentarz 11 marca 2020 przez lujasjeden Użytkownik (860 p.)
if ((Key==(90)) && (Key==VK_LEFT))
 {
  Michal1->Visible=true;
  kula1->Visible=true;
  stoper1->Enabled=true;
 }

Np takie cos nie działa w ogole, jak naciskam te dwa klawisze to zdjecia sie nie ujawniaja ani stoper nie rusza (kula nie leci)

I dlatego nie wiem jak to napisac jezeli chce zeby gra byla tak rownoczesna ze 2 osoby klikaja w tym samym czasie, no tez myslalem ze klik-->Sleep(2000) i wtedy ujawnienie.Na dole pseudobrazek to wszystko ma Visible->false, i stopery kul Enabled->False, no i jak narazie to moge se kliknac wszystko na raz a zalezy mi zeby jak klikne np (Key==90) i (Key==VK_LEFT) to ujawnia sie Michal1 i kula 1 leci w stronie Pawel1 I ujawnia sie Pawel1 no a gracz juz nie ma mozliwosci klikniecia niczego

komentarz 12 marca 2020 przez DragonCoder Nałogowiec (36,500 p.)
Znaczy wydaje mi sie, ze jezeli chcesz wykonywac te operacje w tym samym czasie, to musisz chyba uzyc watkow. Bo inaczej musisz raczej najpierw wczytac wejscie jednego pozniej drugiego, bo bedzie to odpracowywane w kolejnosci. Przy uzyciu threadow mozesz wykonac 2 operacje w tym samym czasie
komentarz 12 marca 2020 przez lujasjeden Użytkownik (860 p.)
okej moglbys polecic mi jakis link gdzie moglbym o tym poczytac/obejrzec o threadach, plus no zalezy mi na tym jak wykonac to zablokowanie mozliwosci klikniecia wiecej niz 1 opcji masz jakis pomysl?
komentarz 12 marca 2020 przez DragonCoder Nałogowiec (36,500 p.)
Polecilbym zmienienie IDE i uzywanie QtCreatora + ich bibliotek.

A co do threadow to nie mam co polecic, bo sam tylko perzeczytalem o tym raz po niemiecku. Pewnie gdzies na forum cos znajdziesz o tym i linki

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
2 odpowiedzi 1,054 wizyt
pytanie zadane 23 marca 2017 w C i C++ przez Jakub 0 Pasjonat (23,120 p.)
0 głosów
1 odpowiedź 201 wizyt
0 głosów
2 odpowiedzi 4,419 wizyt
pytanie zadane 3 kwietnia 2016 w C i C++ przez chet Nowicjusz (170 p.)

92,551 zapytań

141,397 odpowiedzi

319,528 komentarzy

61,936 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...