Kontrolki C ++ dla gry działającej w konsoli Windows

Próbuję stworzyć małą grę dla 2 graczy, która działa w wierszu poleceń. Wszystkie rzeczy były dobre, dopóki nie zacząłem pracować nad kontrolkami graczy. Tak więc do przechwytywania klawiszy klawiatury uważałem, że najlepszym rozwiązaniem będzie użycie funkcji getch (). To dlatego, że getch () bierze klucze w locie, bez wyświetlania ich na ekranie, czekając na naciśnięcie klawisza Enter lub innych klawiszy.

Kod, który należy wykonać, o ile mi się wydaje, jest dość prosty:

c=getch();
switch(c)
{
case 'a': make player 1 go left
          break;
case 'd': make player 1 go right
          break;
case 's': make player 1 go down
          break;
case 'w': make player 1 go up
          break;
case 'h': make player 2 go left
          break;
case 'k': make player 2 go right
          break;
case 'j': make player 2 go down
          break;
case 'u': make player 2 go up
          break; 
}

wszystko jest oczywiście w pętli.

Chodzi o to, że potrzebuję obu graczy, aby móc się poruszać, gdy przyciski są wciśnięte w tym samym czasie. W przypadku getch (), gdy gracz 1 porusza się tuż po naciśnięciu przez gracza 2 klawisza przypisanego do ruchu lewostronnego, gracz 1 blokuje gracza 2, gdy obaj naciskają klawisze ruchu. Oczywiście, jeśli gracz 2 zwolni klawisz i naciśnie inny przypisany klawisz, przejmuje kontrolę nad ruchem podczas blokowania odtwarzacza 1 i tak dalej.

Aby uczynić siebie bardziej zrozumiałym, kod wygląda tak:

c=getch();
switch(c)
{
case 'a': cout <<"a";
          break;
case 'd': cout <<"b";
          break;
}

gdy ktoś trzyma wciśnięty klawisz „a”, wyjście będzie „aaaaaaaaaaaaaaa”, a gdy ktoś inny naciśnie „b”, nawet jeśli pierwsza osoba trzyma się „a”, wynikiem będzie „aaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbb”. Gdyby pierwsza osoba uwolniła „a” i ponownie ją nacisnęła, wyjściem byłoby „aaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaa”, ponieważ druga osoba ma „b”. Aby moja gra działała, gdy oboje naciskali „a” i „b”, uważam, że wyjście powinno być coś w rodzaju „ababababababababab”.

Szczerze mówiąc, wypróbowałem wszystko, co do tej pory mogłem myśleć, ale jestem nowicjuszem w programowaniu w C / C ++, więc może nie mam wystarczającego doświadczenia z tymi językami programowania, aby to działało. Nie jest konieczne, aby moja strategia getch () + switch () działała, podobnie jak inne sugestie. Ale będą musieli wrócić do konsoli Windows.

Z góry dziękuję za poświęcony czas

questionAnswers(1)

yourAnswerToTheQuestion