CursorPosition
-
Guten Nachmittag,
da ich eine weitere Aufgabe bekommen habe und ich leider nicht vollständig kapiere wie man das genau nach dieser Anweisung macht, melde ich mich wieder hier und hoffe auf eine schnelle Antwort!.
Aufgabenstellung:
Schreibe oben Rechts immer die aktuelle CursorPosition! Und am Ende eine kurze "Anleitung".
Bei mir sieht es nun so aus:
using System; using System.Collections.Generic; using System.Text; using System.Diagnostics; namespace Figures { class Program { static void Main(string[] args) { Console.CursorVisible = true; Console.BackgroundColor = ConsoleColor.Green; Console.ForegroundColor = ConsoleColor.Black; Console.Clear(); Random r = new Random(); [b] int left, top; int xmax = Console.WindowWidth - 1; int ymax = Console.WindowHeight - 2; left = r.Next(xmax); top = r.Next(ymax); Console.SetCursorPosition(left, top); Console.Write(xmax = left); Console.Write('|'); Console.Write(ymax = top);[/b] ConsoleKeyInfo keyInfo; // code for a simple loop of type: // do // commands, statements: read a keyInfo stroke // until keyInfo was "E" do { keyInfo = Console.ReadKey(true); Debug.WriteLine(keyInfo.Key); switch (keyInfo.Key) { case ConsoleKey.LeftArrow: if (left > 1) { left = left - 1; } else { left = xmax; } break; case ConsoleKey.RightArrow: left = left + 1; left = Math.Min(left, xmax); break; case ConsoleKey.UpArrow: top = top - 1; top = Math.Max(top, 0); break; case ConsoleKey.DownArrow: top = top + 1; top = Math.Min(top, ymax); break; case ConsoleKey.R: DrawRectangle(left, top, 10, 5); break; case ConsoleKey.C: DrawCircle(left, top, 6); break; default: break; } Console.SetCursorPosition(left, top); } while (keyInfo.Key != ConsoleKey.Escape); } // end main static void DrawHorizontalLine(int left, int top, int length, char c) { Console.SetCursorPosition(left, top); int i; Console.Write('+'); for (i = 1; i < length - 1; i++) { Console.Write(c); } Console.Write('+'); } // end DrawHorizontalLine static void DrawVerticalLine(int left, int top, int length, char c) { int i; Console.SetCursorPosition(left, top); Console.Write('+'); for (i = 1; i < length - 1; i++) { Console.SetCursorPosition(left, top + i); Console.Write(c); } Console.SetCursorPosition(left, top + i); Console.Write('+'); } static void DrawRectangle(int left, int top, int width, int height) { DrawHorizontalLine(left, top, width, '-'); DrawHorizontalLine(left, top + height - 1, width, '-'); DrawVerticalLine(left, top, height, '|'); DrawVerticalLine(left + width - 1, top, height, '|'); } static void DrawCircle(int left, int top, int radius) { int x, y; double dx, dy; for (x = -radius; x <= radius; x++) { dx = x; // converts the int value to a double value dy = Math.Sqrt(radius * radius - dx * dx); y = (int)Math.Round(dy); Console.SetCursorPosition(left + x, top + y); Console.Write('*'); Console.SetCursorPosition(left + x, top - y); Console.Write('*'); } } // end main } // end class Program }// end namespace
Der Bereich wo "fett" ist bin ich der Meinung dort muss ich was ändern. Alles andere klappt wunderbar ( Rechteck + Kreis mit einem TastenDruck zeichnen ).
Was ich nun haben möchte ist folgendes:
-Immer die aktuelle CursorPosition rechts oben ( Fehler bei mir: Es zeigt nur das erste mal die Cursor Position an, sobald ich mich mit den Pfeiltasten bewege bleibt die Zahl stehen, dort wo der Cursor startet ( Random ).-Anleitung am ENDE. Ich weiss nicht genau was mit "Ende" gemeint ist?!
Hoffe auf eine schnelle Antwort
Grüße
aus Österreich.
-
Hat keiner eine Lösung auf mein Problem?
-
Zum einen mußt du den Code in die do-while-Schleife reinschreiben und zum anderen mußt du dir jeweils vorher die aktuelle Cursorposition merken und nach dem Anzeigen der Cursorposition wieder zurücksetzen...
-
Oke vielen Dank es klappt nun außer das es wenn ich horizontal mich bewege und ich gehe über den Wert 10 und dann wieder zurück auf 9 zeigts nicht 9 an sondern 90.
wie ändere ich das?
-
Dann schreib einfach jedesmal noch ein oder mehr Leerzeichen hinter die Zahl:
Console.Write(" ");
Oder aber du benutzt String.Format um die Anzeige der Zahl immer auf 2 Ziffern zu setzen.
-
Vielen Dank nun siehts wunderbar aus ;).
Danke!