C# .net1 Pfeiltasten
Hi!
Wir müssen von der Schule aus irgendein Spiel programmieren. Leider steht uns vorerst nur ein VS 2003 (.Net 1) mit einer Konsolenanwendung zuer Verfügung.
Ich habe echt keinen Plan wie man da irgendwas machen soll. Das wichtigste wäre mal das man mit den Pfeiltasten irgendwas bewegen kann, aber schon daran scheitere ich
Ist das überhaupt ohne einer zusätzlichen Bibliothek möglich?
lg Sebian
Wir müssen von der Schule aus irgendein Spiel programmieren. Leider steht uns vorerst nur ein VS 2003 (.Net 1) mit einer Konsolenanwendung zuer Verfügung.
Ich habe echt keinen Plan wie man da irgendwas machen soll. Das wichtigste wäre mal das man mit den Pfeiltasten irgendwas bewegen kann, aber schon daran scheitere ich
Ist das überhaupt ohne einer zusätzlichen Bibliothek möglich?lg Sebian
Ja, ist es, hätte ich mehr Zeit, würde ich dir ein Beispiel schreiben, aber so:
Es gibt verschiedene Möglichkeiten das umzusetzen, einlesen über schleife (naja, wenns wirklich nicht anders geht), auf MessageHandler reagieren (ziehe ich vor), Hotkeys (übertreiben wir es mal nicht), Hooks (lassen wir das
)
Es gibt verschiedene Möglichkeiten das umzusetzen, einlesen über schleife (naja, wenns wirklich nicht anders geht), auf MessageHandler reagieren (ziehe ich vor), Hotkeys (übertreiben wir es mal nicht), Hooks (lassen wir das
)
Aktuell nutze ich: Windows, Linux, MacOS X, Solaris...weil die Welt nicht nur S/W ist!
Blog
Blog
Also mit .NET 1 und einer Consolen Anwendung hab ich es nicht geschafft, aber dafür hat mir mein Lehrer erlaubt das Spiel in .NET 2.0 zu schreiben (aber auch nur Konsole)
Jetzt hab ich folgendes Problem:
mit Console.ReadKey werden mir alle gedrückten Tasten gestreamt so lange sie gedrückt sind.
In meinem Spiel müssten aber mehrere Spieler gleichzeitg mehrere verschiedene Tasten drücken.
Ich hab mir überlegt ob man sich die "Zeit" zwischen dem drücken einer Taste und dem auslassen der Taste selbst zusammenbasteln könnte, aber leider fehlt mir dazu eine KeyUp() Funktion oder anderes.
Kann mir da wer weiterhelfen?
lg Sebian
Jetzt hab ich folgendes Problem:
mit Console.ReadKey werden mir alle gedrückten Tasten gestreamt so lange sie gedrückt sind.
In meinem Spiel müssten aber mehrere Spieler gleichzeitg mehrere verschiedene Tasten drücken.
Ich hab mir überlegt ob man sich die "Zeit" zwischen dem drücken einer Taste und dem auslassen der Taste selbst zusammenbasteln könnte, aber leider fehlt mir dazu eine KeyUp() Funktion oder anderes.

Kann mir da wer weiterhelfen?
lg Sebian
Also es gibt vorerst 2 Spieler (Sollte erweiterbar sein, aber das ist nicht das Problem).
Diese sollen gleichzeitig Tasten drücken die dann verschiedene Aktionen haben.
Wenn ein Spieler alleine auf eine Taste drückt, dann bewegt er sich so lange bis er aufhört zu drücken. Wenn aber der 2. Spieler in der Zeit seine Taste drückt wird der Tastendruck von Spieler 1 unterbrochen und nur der 2. Spieler fährt herum.
In der Console gibt es aber nur ReadKey() und kein KeyPress(), KeyUp() oder Sonstiges.
Ich hoffe das ist gut genug erklärt!
Diese sollen gleichzeitig Tasten drücken die dann verschiedene Aktionen haben.
Wenn ein Spieler alleine auf eine Taste drückt, dann bewegt er sich so lange bis er aufhört zu drücken. Wenn aber der 2. Spieler in der Zeit seine Taste drückt wird der Tastendruck von Spieler 1 unterbrochen und nur der 2. Spieler fährt herum.
In der Console gibt es aber nur ReadKey() und kein KeyPress(), KeyUp() oder Sonstiges.
Ich hoffe das ist gut genug erklärt!
Ich habe mal schnell was kleines getippt.
Im Prinzip macht die ganze Klasse nichts ausser:
KeyDown aufrufen, wenn die letzte gedrückte Taste die selbe ist, wie davor (ausserdem wird ein ConsoleKeyInfo übergeben)
KeyUp wird aufgerufen, wenn die letzte gedrückte Taste ungleich der davor ist.
D.h. also, drückt ein Spieler Taste 1 wird KeyDown aufgerufen, drückt keiner was oder wird die Taste 1 gedrückt, so wird weiterhin KeyDown ausgeführt.
Erst wenn eine andere Taste gedrückt wurde, wird KeyUp ausgeführt.
(bei all den Funktionen wird immer eine ConsoleKeyInfo übergeben, damit man auch checken kann was es für ein Key ist.
Wäre zumindest ein Ansatz den ich wählen würde (wenn es schon unbedingt Konsole sein muss), oder du machst es über Hooks (wird aber nicht so einfach)
In die Main:
Im Prinzip macht die ganze Klasse nichts ausser:
KeyDown aufrufen, wenn die letzte gedrückte Taste die selbe ist, wie davor (ausserdem wird ein ConsoleKeyInfo übergeben)
KeyUp wird aufgerufen, wenn die letzte gedrückte Taste ungleich der davor ist.
D.h. also, drückt ein Spieler Taste 1 wird KeyDown aufgerufen, drückt keiner was oder wird die Taste 1 gedrückt, so wird weiterhin KeyDown ausgeführt.
Erst wenn eine andere Taste gedrückt wurde, wird KeyUp ausgeführt.
(bei all den Funktionen wird immer eine ConsoleKeyInfo übergeben, damit man auch checken kann was es für ein Key ist.
Wäre zumindest ein Ansatz den ich wählen würde (wenn es schon unbedingt Konsole sein muss), oder du machst es über Hooks (wird aber nicht so einfach)
In die Main:
|
|
Quellcode |
1 2 3 4 |
for (; ; )
{
Test.MyKeyHandler.KeyHandler(Console.ReadKey(true));
}
|
|
|
Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
namespace Test
{
class MyKeyHandler
{
private MyKeyHandler() { }
private static ConsoleKeyInfo LastPressedKey;
private static void KeyDown(ConsoleKeyInfo Key)
{
Console.WriteLine("Selbe Taste gedrückt");
}
private static void KeyUp(ConsoleKeyInfo Key)
{
Console.WriteLine("Key hat sich geändert (d.h. anderer SPieler hat Taste gedrückt)");
}
public static void KeyHandler(ConsoleKeyInfo Key)
{
if(Key == LastPressedKey)
{
KeyDown(Key);
}
else
{
LastPressedKey = Key;
KeyUp(Key);
}
}
}
}
|
Aktuell nutze ich: Windows, Linux, MacOS X, Solaris...weil die Welt nicht nur S/W ist!
Blog
Blog
Vielen Dank für deine Hilfe aber ich glaube du hast es noch nciht ganz verstanden
oder ich habs falsch erklärt!
ich will genau wissen, wann ein benutzer die taste auslässt!
Bsp.:
Spieler 1 hat die Taste ArrowLeft zum fahren.
Spieler 2 hat die Taste A zum fahren.
So sollte das Programm laufen:
Spieler 1 drückt ArrowLeft und fährt weg
Spieler 2 drückt A und fährt weg
Spieler 1 lässt die Taste aus und bleibt stehen
Spieler 2 lässt die Taste aus und bleibt stehen
In Wirklichkeit läuft mein Programm aber so ab:
Spieler 1 drückt ArrowLeft und fährt weg
Spieler 2 drückt A und fährt weg und Spieler 1 bleibt stehen obwhol er noch auf der Taste ist!!!
Spieler 2 lässt die Taste aus und bleibt stehen
oder ich habs falsch erklärt!ich will genau wissen, wann ein benutzer die taste auslässt!
Bsp.:
Spieler 1 hat die Taste ArrowLeft zum fahren.
Spieler 2 hat die Taste A zum fahren.
So sollte das Programm laufen:
Spieler 1 drückt ArrowLeft und fährt weg
Spieler 2 drückt A und fährt weg
Spieler 1 lässt die Taste aus und bleibt stehen
Spieler 2 lässt die Taste aus und bleibt stehen
In Wirklichkeit läuft mein Programm aber so ab:
Spieler 1 drückt ArrowLeft und fährt weg
Spieler 2 drückt A und fährt weg und Spieler 1 bleibt stehen obwhol er noch auf der Taste ist!!!
Spieler 2 lässt die Taste aus und bleibt stehen
Achso, dann erstell doch einfach einen Thread der immer gestartet wird, wenn eine Taste gedrückt wurde und der nach x ms die Taste "loslässt"
Ansonsten fällt mir nichts mehr ein, wie ich das ohne Hooks lösen könnt
Ansonsten fällt mir nichts mehr ein, wie ich das ohne Hooks lösen könnt
Aktuell nutze ich: Windows, Linux, MacOS X, Solaris...weil die Welt nicht nur S/W ist!
Blog
Blog


