Autor Beitrag
orti
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Do 30.04.09 13:31 
Guten Tag!

Bin neu hier also erst mal Hallo ;)
kurz etwas zu mir:
Ich bin 16 jahre alt und lernte in einer Technischen Lehranstalt die Anfänge von C# (bis Zeiger, Vererbung, Polymorphie). Da ich aber die Schule abgebrochen hatte, hörte ich auch auf C# zu programmieren. Jetzt habe ich aber einen EDV-spezifischen Beruf ergriffen bei dem ich unter anderem auch .bat und Assembler programmieren muss, dachte ich mir, ich beginne auch wieder mit C#.
Da das wieder mein erstes Programm seit langem ist bitte ich um Verzeihung wenn ich etwas auf der Leitung stehe ;)
Hier mein Programm:

(Erklärung)
Das Bild sollte, wie im Bild (anhang) gezeigt, zwei imaginäre arrays erstellen, bei denen man per klick auf die Seitentasten der Maus die Zeile wechseln kann. (das array sind die 12 tastenbinds für bewegen, angreifen und spells die ich bei Warcraft3 habe.)
Per Klick auf die mittlere Maustaste soll es in das zweite imaginäre Array hüpfen und dort wieder per seitentasten die 3 zeilen ausgewählt werden können.
Das hat den Effekt das ich beim Spielen nur mit den vier Fingern der Linken Hand auf A, S, D und F haben muss und per Seitentaste die Zeile und per Mittlere Maustaste das imaginäre Array wechseln kann.
Zur besseren Verdeutlichung ein Beispiel:

Man ist in Zeile 1
Der Spieler drückt A.
Das wird vom Programm verarbeitet als würde die Q-Taste gedrückt werden.

Der Spieler wechselt per Seitentaste das array (arraychoose ist nun 1)
Der spieler drückt S.
Die Standard Zeile ist immer null. (die oberste)
Das Programm verarbeitet den Tastendruck als numblock 8.


Ich werde das ganze mit einem Mainloop umsetzen, der mit einem Timer alle 100 ms die Schleife durchläuft und auf einen Tastendruck(Tastatur oder Maus) wartet.
Je nach dem in welcher Reihe befindet werden die einzigen 4 Tasten die gedrückt werden (A,S,D,F) als eine Reihe darüber (Q,W,E,R) an Warcraft 3 weitergegeben oder ein Reihe darunter (Y,X,C,V).
Wenn auf das andere Array umgeschaltet wird, können nur die Tasten A und S verarbeitet werden und leiten dann wieder je nach Reihe Q;W, A;S oder Y und X weiter.
Ein weiteres Array soll per X Koordinate die durch die Maustasten ausgewählte Zeile definieren.
Also bei Klick auf eine Seitentaste soll je nachdem ob nach oben oder unten gedrückt wird die Koordinatenvariable +1 oder -1 erhalten.
Diese Wird dann bei der Methode, die die Taste weiter an Warcraft gibt, mitgegeben.
Per Knopfdruck auf Esc soll der Mainloop durch 'false' setzen der Laufvariable (bool) beendet werden.
Bild dazu ist im Anhang.




(Pseudocode)


ausblenden volle Höhe C#-Quelltext
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:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
public class Methoden{
  
  public void ChooseSpell(char tempchar, int arraychoose, int linechoose)
  {
    
    if(arraychoose == 0)
    {
    if((tempchar == 'a' || tempchar == 'A') && linechoose == 0) Ein q wird an Warcraft 3 weitergegeben.
    if((tempchar == 'a' || tempchar == 'A') && linechoose == 1) Ein a wird an Warcraft 3 weitergegeben.
    if((tempchar == 'a' || tempchar == 'A') && linechoose == 2) Ein y wird an Warcraft 3 weitergegeben.

    if((tempchar == 's' || tempchar == 'S') && linechoose = 0) Ein w wird an Warcraft 3 weitergegeben.
    if((tempchar == 's' || tempchar == 'S') && linechoose == 1) Ein s wird an Warcraft 3 weitergegeben.
    if((tempchar == 's' || tempchar == 'S') && linechoose == 2) Ein x wird an Warcraft 3 weitergegeben.

    if((tempchar == 'd' || tempchar == 'D') && linechoose == 0) Ein e wird an Warcraft 3 weitergegeben.
    if((tempchar == 'd' || tempchar == 'D') && linechoose == 1) Ein d wird an Warcraft 3 weitergegeben.
    if((tempchar == 'd' || tempchar == 'D') && linechoose == 2) Ein c wird an Warcraft 3 weitergegeben.

    if((tempchar == 'f' || tempchar == 'F') && linechoose == 0) Ein r wird an Warcraft 3 weitergegeben.
    if((tempchar == 'f' || tempchar == 'F') && linechoose == 1) Ein f wird an Warcraft 3 weitergegeben.
    if((tempchar == 'f' || tempchar == 'F') && linechoose == 2) Ein v wird an Warcraft 3 weitergegeben.
    }

    if(arraychoose == 1)
    {
    if((tempchar == 'a' || tempchar == 'A') && linechoose == 0) Ein numblock 7 wird an Warcraft 3 weitergegeben.
    if((tempchar == 'a' || tempchar == 'A') && linechoose == 1) Ein numblock 4  wird an Warcraft 3 weitergegeben.
    if((tempchar == 'a' || tempchar == 'A') && linechoose == 2) Ein numblock 1  wird an Warcraft 3 weitergegeben.

    if((tempchar == 's' || tempchar == 'S') && linechoose == 0) Ein numblock 8  wird an Warcraft 3 weitergegeben.
    if((tempchar == 's' || tempchar == 'S') && linechoose == 1) Ein numblock 5  wird an Warcraft 3 weitergegeben.
    if((tempchar == 's' || tempchar == 'S') && linechoose == 2) Ein numblock 2  wird an Warcraft 3 weitergegeben.    
    }
  }
}

static void Main(string[] args)
{
  int arraychoose = 0 //welches array gerade angesprochen wird
  int linechoose = 0 //zeilenauswahl
  bool i=true;
  char tempchar = 'null'
  Console.WriteLine("Program is running…");
  while(i != false)
  {
    tempchar = Convert.ToChar(Console.ReadKey()); und maustasten sollte er auch irgendwie aufnehmen… tempmaus = gedrückte maustaste //in welcher form auch immer ASCII-Zahl oÄ.
    switch(tempmaus) //ich habe keine ahnung welcher dateityp das sein sollte z.B. ASCII Code per int-Zahl
      case 'Mouse4'
      if(arraychoose = 2){linechoose = 0;} // wenn die oberste Reihe erreicht wurde und nach oben geschaltet wird hüpft man in die unterste.
      else{linechoose++};
      break;
      case 'Mouse5':
      if(arraychoose = 0){linechoose = 2;}// wenn die unterste Reihe erreicht wurde und nach unten geschaltet wird hüpft man in die oberste.
      else{linechoose--;}
      break;
      case 'MouseMid'
      If(arraychoose = 1) arraychoose = 0;
      if(arraychoose = 0) arraychoose = 1;


    switch(tempchar)
      case 'a'case 's'case 'd'case 'f'case 'A'case 'S'case 'D'case 'F'
      ChoseSpell(tempchar, arraychoose);
      break;
      default:
      break;

    if( Esc-taste wurde gedrückt ) i = false;
  }
  
}




(Fragen)
Ist das mit Mainloop eine gute Idee oder kann ich auch generell eine Methode erstellen die immer wenn irgendeine Taste gedrückt wird aufgerufen wird und per switch dann die gedrückte Taste verarbeitet? (bitte um erklärung mit code)
Wie kann ich das Programm konfigurieren, das die tastendrücke zuerst an das Programm weitergeleitet werden und dann weiter an Warcraft 3 obwohl Warcraft 3 im Vordergrund läuft?
Wie kann ich Tastendrücke abrufen? (per readkey? Passt das so im Pseudocode?)
Wie ich das mit den Maustasten und der Esc-taste abrufen soll weiss ich noch gar nicht.
Bitte um hilfe, ideen und verbesserungsvorschläge

Ich hoffe Ihr könnt euch halbwegs ein Bild von meinem Vorhaben machen und könnt mir bei der Umsetzung helfen.

Einen generell einfacheren Ansatz bitte ich zu Posten.

Vielen Dank im Vorraus

Lg orti

Moderiert von user profile iconKha: C#-Tags hinzugefügt
Einloggen, um Attachments anzusehen!