Ich bin ein Computer-Ingenieur des ersten Jahres, so bin ich ein bisschen Amateur in Codierung C++, sowieso ich ein Spiel erstellen, wo es zwei Raumschiffe sind, die sich gegenseitig schießen. Es ist mir momentan gelungen, die erste Raumschiffbewegung durchzuführen, indem ich eine while-Schleife und die GetASyncKeyState-Funktion verwende. aber jetzt lasse ich die Kugeln reisen. Ich benutzte eine Schleife, und es gelang mir, die Kugel nach oben zu bewegen. Aber es gibt ein Problem, ich kann das Raumschiff nicht bewegen, bis der for-Loop-Stop oder das Bullet den oberen Rand des Konsolenfensters erreichen (ich benutze die Konsole btw). Gibt es eine Möglichkeit, sowohl die for-Schleife als auch gleichzeitig laufen zu lassen? oder um zwei verschiedene Funktionen gleichzeitig auszuführen, da GameMovement() für die Bewegung des Raumschiffs und BulletTravel() für die Kugel steht. und ich rufe BulletTravel() von GameMovement().Zwei Schleifen gleichzeitig ausführen? Bewegen und Reisen mit Loops
void GameMovements()
{
bool FirstInitialization = true;
int Player1XCoordinate = 55, Player2XCoordinate = 55;
int Player1YCoordinateU = 28, Player1YCoordinateD = 29;
while (true)
{
BulletPattern(Player1XCoordinate);
if (FirstInitialization == true)
{
GameBorderAndStatus();
SetCoordinate(Player1XCoordinate, Player1YCoordinateU);
cout << " ^\n";
SetCoordinate(Player1XCoordinate, Player1YCoordinateD);
cout << "^==|==^ \n";
FirstInitialization = false;
}
//MOVEMENTS FOR PLAYER 1
else if (GetAsyncKeyState(VK_LEFT) && Player1XCoordinate != 16)
{
system("cls");
GameBorderAndStatus();
Sleep(10);
Player1XCoordinate -= 3;
SetCoordinate(Player1XCoordinate, Player1YCoordinateU);
cout << " ^\n";
SetCoordinate(Player1XCoordinate, Player1YCoordinateD);
cout << "^==|==^ \n";
}
else if (GetAsyncKeyState(VK_RIGHT) && Player1XCoordinate != 94)
{
system("cls");
GameBorderAndStatus();
Player1XCoordinate += 3;
Sleep(10);
SetCoordinate(Player1XCoordinate, Player1YCoordinateU);
cout << " ^\n";
SetCoordinate(Player1XCoordinate, Player1YCoordinateD);
cout << "^==|==^ \n";
}
else if (GetAsyncKeyState(VK_UP) && Player1YCoordinateU != 24)
{
system("cls");
GameBorderAndStatus();
Player1YCoordinateU -= 2;
Player1YCoordinateD -= 2;
Sleep(10);
SetCoordinate(Player1XCoordinate, Player1YCoordinateU);
cout << " ^\n";
SetCoordinate(Player1XCoordinate, Player1YCoordinateD);
cout << "^==|==^ \n";
}
else if (GetAsyncKeyState(VK_DOWN) && Player1YCoordinateU != 28)
{
system("cls");
GameBorderAndStatus();
Player1YCoordinateU += 2;
Player1YCoordinateD += 2;
Sleep(10);
SetCoordinate(Player1XCoordinate, Player1YCoordinateU);
cout << " ^\n";
SetCoordinate(Player1XCoordinate, Player1YCoordinateD);
cout << "^==|==^ \n";
}
}
}
void GameBorderAndStatus()
{
//Draw game border
for (int i = 0; i < 31; i++)
{
SetCoordinate(15, i);
cout << "|";
SetCoordinate(104, i);
cout << "|";
}
}
void BulletPattern(int Player1MuzzleLocation)
{
for (int i = 25; i != 3; i--)
{
Sleep(100);
SetCoordinate(Player1MuzzleLocation + 3, i);
}
}
void SetCoordinate(int CoordinateX, int CoordinateY)
{
COORD Coordinate;
Coordinate.X = CoordinateX;
Coordinate.Y = CoordinateY;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), Coordinate);
}
Ich bin mir nicht sicher, dass Sie sich dessen bewusst sind, aber keiner Ihrer "Game Code", die Sie verwenden ('GetAsyncKeyState',' SetCoordinate', usw.) sind Standard C++. Das bedeutet, dass wir keine Ahnung haben, was sie sind oder ob es ein Problem damit gibt, wie Sie sie verwenden. Ich würde Ihnen aufrichtig empfehlen, dass Sie mit Ihrem Lehrer sprechen, da es sehr wenig gibt, was wir tun können, um Ihnen bei der Fehlersuche in Ihrem Code mit so vielen Mystery-Funktionen zu helfen. –
@ChrisBritt Es ist Sommer und die Klasse ist zu Ende. Ich tue das nur, um etwas Zeit zu verlieren. Wie auch immer, ich dachte, Sie alle würden GetASyncKetState() so leid tun. Irgendwie werde ich den Code mit SetCoordinate() darin aktualisieren. – Neo
@Neo Da Ihr Code stark von der Windows-API abhängt, habe ich Ihre Frage erneut geschrieben, um Sie hoffentlich besser mit den relevanten Funktionen vertraut zu machen. Fühlen Sie sich frei, meine Bearbeitung zurückzusetzen, wenn Sie es nicht hilfreich finden. – computerfreaker