Mein SpaceInvaders project, Spieler interaktion macht probleme (UPDATE_3.1)
-
hab ich net sry ^^ bin aber im forum immer wieder da
^^ hab mir überlegt am besten is noch ne methode
static void Schreibe(int X,int Y, string Text) { int altX = Left; int altY = Top; Console.SetCursorPosition(X,Y); Console.Write(Text); Console.SetCursorPosition(altX,altY); }
also damit kannst du ja dann immer i-wo was zeichnen und trotzdem an der alten position sein danach
-
Hi, ich komme einfach nicht weiter... ich habe nicht mal einen Ansatz
ich weiss nicht wie ich die schuss funktion "sinnvoll" programmieren soll ich hatte zwar nen ansatz bei dem er das geschoss immer 1 reihe pro 0.5 sek hoch gesetzt hat aber der code war schwachsinn (7-8 mal Setcursorposition, write,sleep) vorallem konnte man den Cursor nicht "richtig" bewegen als es ausgeführt wurde da die position ja immer mal wieder kurz woanders hingesetzt wurde. Kann mir jmd verraten wie ich die schuss funktion coden soll ? (siraja vielleicht ? :))
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using System.Threading; class Program { //Top und Left sind die CursorPosition nur bisschen kürzer //damit kann die CursorPosition auch verändert werden static int Top { get { return Console.CursorTop; } set { Console.CursorTop = value; } } static int Left { get { return Console.CursorLeft; } set { Console.CursorLeft = value; } } static void Main() { Console.CursorVisible = false;//is ja hässlich wenn man den sieht ^^ credits(); Console.WriteLine("\r\nBitte eine Taste drücken um das Spiel zu starten!"); Console.ReadKey(); Console.Clear(); Console.WriteLine("Das spiel beginnt !..."); Thread.Sleep(500); Console.Clear(); Console.SetWindowSize(80, 50); Console.WriteLine("\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n");//\r\n = Escapesequenz für zeilenumbruch String Player = "#"; Console.Write(" " + Player);//Player das erste mal schreiben Left--;//Springe wieder mit Cursor auf Playerstelle ConsoleKeyInfo Input; do { Input = Console.ReadKey(true); switch (Input.Key) { case ConsoleKey.RightArrow: if (Left < 78) { Console.Write(" " + Player);//überschreibt alt und macht neu Left--;//setzt wieder auf aktuell } break; case ConsoleKey.LeftArrow: if (Left > 2)// Hab den Wert erhöht damit es symetrisch ist :) { Left--;//Setzt dahin wo player hinkommt Console.Write(Player + " ");//macht neues zeichen und automatisch altes überschreiben Left -= 2;//Setzt wieder dahin wo player ist } break; case ConsoleKey.Spacebar: { int altX = Left; int altY = Top; Console.SetCursorPosition(altX, altY); Schuss(Left, Top - 5, altX, altY); } break; } } while (Input.Key != ConsoleKey.Escape); } static void credits()//static dadurch kannst dus direkt benutzen { Console.WriteLine("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"); Console.WriteLine("X X"); Console.WriteLine("X This Game was coded by µBx X"); Console.WriteLine("X X"); Console.WriteLine("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"); } static void Schuss(int SchussPosLeft, int SchussPosTop, int altX_2, int altY_2) { Console.SetCursorPosition(SchussPosLeft, SchussPosTop); Console.Write("!"); Console.SetCursorPosition(altX_2, altY_2); } }
-
ich kann dir eig nur empfehlen in klassen zu programmieren, also dass du eine schussklasse hast die dann ihre verschiebung intern regelt
-
hehe das habe ich eigl auch versucht aber es hat nicht geklappt...
wenn ich innerhalb der programm classe eine classe verwende gibt er mir irgendeinen error aus, wenn ich daraufhin die program klasse quasi vererbe gibt er mir wieder nen error aus ...
-
programmier mal und dann poste den fehler ^^
-
ich bin mir nicht sicher ob die klasse in der mainfunktion sein darf... deswegen hab ich sie für alle fälle rausgeschrieben bin atm bissl zu müde um was ordentliches zu machen aber so in etwasiehts aus nun gibt er mir nen error aus in der hilfe steht das dann der modifizierer ungültig ist, ich habe public, private und internal probiert aber er gibt mir immer wieder den error aus...
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using System.Threading; class Program { //Top und Left sind die CursorPosition nur bisschen kürzer //damit kann die CursorPosition auch verändert werden static int Top { get { return Console.CursorTop; } set { Console.CursorTop = value; } } static int Left { get { return Console.CursorLeft; } set { Console.CursorLeft = value; } } static void Main() { Console.CursorVisible = false;//is ja hässlich wenn man den sieht ^^ credits(); Console.WriteLine("\r\nBitte eine Taste drücken um das Spiel zu starten!"); Console.ReadKey(); Console.Clear(); Console.WriteLine("Das spiel beginnt !..."); Thread.Sleep(500); Console.Clear(); Console.SetWindowSize(80, 50); Console.WriteLine("\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n");//\r\n = Escapesequenz für zeilenumbruch } public class Spieler { String Player = "#"; Console.Write(" " + Player);//Player das erste mal schreiben Left--;//Springe wieder mit Cursor auf Playerstelle ConsoleKeyInfo Input; do { Input = Console.ReadKey(true); switch (Input.Key) { case ConsoleKey.RightArrow: if (Left < 78) { Console.Write(" " + Player);//überschreibt alt und macht neu Left--;//setzt wieder auf aktuell } break; case ConsoleKey.LeftArrow: if (Left > 2)// Hab den Wert erhöht damit es symetrisch ist :) { Left--;//Setzt dahin wo player hinkommt Console.Write(Player + " ");//macht neues zeichen und automatisch altes überschreiben Left -= 2;//Setzt wieder dahin wo player ist } break; case ConsoleKey.Spacebar: { int altX = Left; int altY = Top; Console.SetCursorPosition(Left, Top - 1); Console.Write("!"); Console.SetCursorPosition(altX, altY); Schuss(Left, Top - 5, altX, altY); } break; } } while (Input.Key != ConsoleKey.Escape); } static void credits()//static dadurch kannst dus direkt benutzen { Console.WriteLine("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"); Console.WriteLine("X X"); Console.WriteLine("X This Game was coded by µBx X"); Console.WriteLine("X X"); Console.WriteLine("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"); } static void Schuss(int SchussPosLeft, int SchussPosTop, int altX_2, int altY_2) { Console.SetCursorPosition(SchussPosLeft, SchussPosTop); Console.Write("!"); Console.SetCursorPosition(altX_2, altY_2); } }
-
du brauchst einen construktor, du kannst nicht einfach methoden ausführen wenn kein einstiegspunkt vorhanden ist, das sieht dann so aus:
class Spieler { public Spieler() { String Player = "#"; Console.Write(" " + Player);//Player das erste mal schreiben Left--;//Springe wieder mit Cursor auf Playerstelle ConsoleKeyInfo Input; do { Input = Console.ReadKey(true); switch (Input.Key) { case ConsoleKey.RightArrow: if (Left < 78) { Console.Write(" " + Player);//überschreibt alt und macht neu Left--;//setzt wieder auf aktuell } break; case ConsoleKey.LeftArrow: if (Left > 2)// Hab den Wert erhöht damit es symetrisch ist :) { Left--;//Setzt dahin wo player hinkommt Console.Write(Player + " ");//macht neues zeichen und automatisch altes überschreiben Left -= 2;//Setzt wieder dahin wo player ist } break; case ConsoleKey.Spacebar: { int altX = Left; int altY = Top; Console.SetCursorPosition(Left, Top - 1); Console.Write("!"); Console.SetCursorPosition(altX, altY); Schuss(Left, Top - 5, altX, altY); } break; } }
und dann musst du in main den spieler erstellen mit:
Spieler spieler1 = new Spieler();
aber ich kann dir eig nur empfehlen mal ein grundlagen tutorial in c# zu machen weil das ist wirklich wichtig, ein vernünftiges projekt mittlerer größe sollte gänzlich aus klassen bestehen und nur der input und output in main
-
yo, ich ging davon aus das der standard konstruktor reichen würde... ich habe mich vor ca. nem jahr mit c# und visual c++ (also c++/cli) beschäftigt gehabt aber seit dem aufgehört und quasi wieder neu angefangen die grundlagen sind noch weitgehenst drin aber ein paar sachen sind halt relativ schwammig... ich dachte der std. konstruktor würde dafür ausreichen
gibts eigl online cook books ? ich hab nicht das nötige kleingeld dafür mit eins für 60-70 e zu kaufen
-
Du kannst mal bei http://www.galileocomputing.de/katalog/openbook vorbeischauen (C#, Visual Basic .Net und OOP sind für dich intereresant). Oder eben zum Nachschauen einzelner Fragen MSDN (oder Forum).
-
Ich besitze die Bücher "Einsteig in Visual C# 2008" und "Der Visual C# Programmierer"
Einstieg in visual C# hat mich nicht soo sehr begeistert, es ist ok aber es gibt meiner Meinung nach bessere.
Der Visual C# Programmierer von Hanser ist meiner Meinung nach ein sehr gutes Buch und ich bin auch sehr zufrieden damit... mein problem ist nur das ich manchmal längere coding pausen einlege weil mir der reiz fehlt... ich versuche z.b. ein problem zu lösen, und noch mal und nochmal aber es klappt einfach nicht ... ich breche das projekt ab und höre quasi wieder auf ... ausserdem fehlen mir häufig auch leute mit denen ich übers coden reden kann so dass ich immer wieder dran bleibe... Ich verusche derzeit halt das space invaders projekt erstmal fertig zu stellen . Eigl kenne ich die sachen was ein konstruktor ist usw ja ... das problem ist nur das ich solche sachen hin und wieder vergesse, vorallem wenn ich pausen einlege.
Code lesen kann ich ja fast ohne probleme, aber selber schreiben wird bei sachen wie SpaceInvaders teilweise schwer... (zu meiner verteidigung, ich kenne viele klassen und methoden aus dem tool nicht wirklich :P) so wusste ich früher z.b. was ein stringbuilder war und wozu er gut war... ich gehe eigl davon aus das ich ihn im projekt gebrauchen kann hab aber wieder vergessen welche member er hatte usw...
ich muss mich einfach nochmal richtig einleben