Wie cool! Diesen Spieleklassiker habe ich vor circa acht Jahren auch mal programmiert, als ich mit Flash Actionscript experimentiert habe. Dieses Video könnte ein super Aufhänger sein, um mich mal etwas mit C# zu beschäftigen. Danke, Herr Löviscach.
Wo finde ich den Teil 0? Denn dieser Teil 1 springt offensichtlich mitten in ein schon bestehendes Programmgerüst (1:21). Welche Werkzeuge muß ich auf meinem Computer wohin installieren und verknüpfen, um mit dem Video beginnen zu können?
Das Programmgerüst ist das, was Microsoft Visual Studio (aktuell dann Microsoft Visual Studio 2022 Community Edition; das Video ist aber alt) sofort liefert (Projekttyp: "WPF-Anwendung"). Quellcode usw. siehe hier: j3L7h.de/lectures/2222ss/Informatik_2/ThemenUndTermine.html
In C++ gibt es das Keyword 'friend'. Hätte man das hier auch für die Lösung des Problems nehmen können, in der Klasse Asteroid an die x- und y-Koordinate der Klasse Spiel heranzukommen? Dass man also in die Klasse Spielobjekt friend class Asteroid schreibt? Ich weiß, dass friend nicht so gerne gesehen wird, weil es bei häufiger Verwendung den Quelltext undurchsichtig macht, aber würde das funktionieren?
um die Asteroiden realistischer aussehen zu lassen, könnte man statt Polygone auch kleine Icons laden lassen, die sich dann in einem source-Ordner befinden, dasselbe gilt dann auch für Raumschiff und Photonentorpedos. Es muss doch eine Möglichkeit in C# geben Icons zu laden.
Hallo Herr Loviscach, sie hatten ein Video hochgeladen wo drin beschrieben wird wie sie in c# dieses Quiz Spiel erstellen. Leider finde ich dieses Video nicht mehr. Ich freue mich über eine Rückmeldung. Mit freundlichen Grüßen
Hallo! Auch wenn ich hier gerade den C# Necromanten representiere. Ich benutze für das Problem, der nicht gesetzten Werte für die Zeichenfläche beim Start des Programms, den Eventhandler "Loaded". Ob das Üblich ist, weiß ich nicht - Aber es funktioniert bei mir zuverlässig. private void zeichenfläche_Loaded(object sender, RoutedEventArgs e){} Siehe Problemstellung 31:00
@@JoernLoviscach Ich kann den Void "Animiere" innerhalb der Spielobjekt-Klasse nicht mit "Timer.Tick += Animiere" erreichen. Dann kommt nur: "Animiere" ist im aktuellen Kontext nicht vorhanden. Setze ich den Void jedoch außerhalb einer Klasse, so erkennt der ".Tick" den Void.
@@kashishan7603 Ah, "void" = "eine Methode mit Rückgabetyp void". Lieber keine neue Sprache erfinden. "Setze ich den Void jedoch außerhalb einer Klasse": Eine Methode kann in C# nicht außerhalb aller Klassen stehen. Steht Animiere in der Spielobjekt-Klasse vielleicht statt direkt in der Klasse versehentlich in einer anderen Methode? (So etwas geht inzwischen.)
@@JoernLoviscach Ja, in der Spieleobjekt klasse und dort wird diese nicht vom Timer.Tick erkannt. platziere ich den Void jedoch direkt neben der Spieleobjektklasse bzw (In den "Freiraum"), wo sich alle Klassen (Raumschiff, Torpedo, Asteroide) befinden, wird er vom Timer.Tick erkannt, innerhalb einer dieser Klassen jedoch nicht. z.B: Timer wird erstellt... Timer.Tick += Move1; Timer.Tick += Move2; void Move1 (object, sender EventArgs e) { Bla Bla... } public class NPC { NPC () { Bla Bla... } public void Move2 (object, sender EventArgs e) { Bla Bla... } } Ende des Beispiels. Bei Timer.Tick += Move2; wird jetzt das "Move2" unterstrichen. "Ist im aktuellen Kontext nicht vorhanden" Timer.Tick += Move1; funktioniert jedoch. Im Video hat jedoch auch Move2 funktioniert, habe alles so abgeschrieben, doch innerhalb von Klassen kann ich keinen Void mit Zeigern ansteuern.
@@JoernLoviscach ja sowas habe ich vermutet, an der Art wie du zu den Leuten redest, also man merkt dass du nicht zu den Video, sondern echten Zuschauern redest. Und später hört man auch jmd reden und so
@@JoernLoviscach Also bei mir klappt alles, ABER nachdem man die intervall totalseconds hinzugefügt hat ist bei mir alles auf dem mainwindow verschwunden xD
@@frohnkevin Dann scheint WPF nicht mehr zum Zeichnen zu kommen. Vielleicht wird durch die Funktion, die das Timer-Tick aufruft, etwas blockiert. Einen Breakpunkt in jener Funktion setzen und sowieso den Konstruktor von MainWindow in Einzelschritten durchsteppen.
Hi, ich habe das Problem, dass der "Start!"-Button durch den Befehl "zeichenfläche.Children.Clear();" "gelöscht" wird. Kennt jemand das Problem und hat jemand eine Abhilfe für mich? Danke im Voraus! (C# 2015)
Okay, ich bin jetzt selber draufgekommen. :-) Der entscheidende Hinweis kommt im 2. Teil bei 10:22 Minuten. Der Button darf nicht auf der Canvas liegen! Dies wird sichergestellt, indem der Button außerhalb des inneren blauen Rahmens gelegt wird. Der Text im MainWindow.xaml muss folgendermaßen aussehen. Richtig, Button liegt NICHT auf der Canvas:
Ich verstehe jenen Satz nicht. Aber das Projekt gibts sowieso hier zum Herunterladen ("05E.3_Material.zip"): j3l7h.de/lectures/2020ss/Informatik_2/ThemenUndTermine.html
Ich kriege das mit den Polygonen nicht hin, sie werden nicht dargestellt. Bei der elli klappt alles tadellos.... for (int i = 0; i < 20; i++) { double alpha = 2.0 * Math.PI / 20.0 * i; double radius = 8.0 + 4.0 * zufall.NextDouble(); poly.Points.Add(new Point(radius * Math.Cos(alpha),radius* Math.Cos(alpha))); } poly.Fill = Brushes.Red; zeichenflaeche.Children.Add(poly); Canvas.SetLeft(poly, X); Canvas.SetTop(poly, Y);
Sieht zumindest auf den ersten Blick richtig aus. Vielleicht mit meinem Quellcode gegenchecken: j3L7h.de/lectures/1919ss/Informatik_2/ThemenUndTermine.html
@@JoernLoviscach Merci, da ich etwas ungeduldig war, habe ich den Code für poly einfach übernommen, läuft ! Und jetzt geht es weiter. Herzlichen Dank für die tollen Beiträge !!
@@x-gamerking2706 Im Zweifelsfall einfach in das XAML-Textfenster tippen. Hier mittendrin ist der Quellcode verlinkt: j3l7h.de/lectures/2121ss/Informatik_2/ThemenUndTermine.html
Wie cool! Diesen Spieleklassiker habe ich vor circa acht Jahren auch mal programmiert, als ich mit Flash Actionscript experimentiert habe. Dieses Video könnte ein super Aufhänger sein, um mich mal etwas mit C# zu beschäftigen.
Danke, Herr Löviscach.
Wo finde ich den Teil 0? Denn dieser Teil 1 springt offensichtlich mitten in ein schon bestehendes Programmgerüst (1:21). Welche Werkzeuge muß ich auf meinem Computer wohin installieren und verknüpfen, um mit dem Video beginnen zu können?
Das Programmgerüst ist das, was Microsoft Visual Studio (aktuell dann Microsoft Visual Studio 2022 Community Edition; das Video ist aber alt) sofort liefert (Projekttyp: "WPF-Anwendung"). Quellcode usw. siehe hier: j3L7h.de/lectures/2222ss/Informatik_2/ThemenUndTermine.html
In C++ gibt es das Keyword 'friend'. Hätte man das hier auch für die Lösung des Problems nehmen können, in der Klasse Asteroid an die x- und y-Koordinate der Klasse Spiel heranzukommen? Dass man also in die Klasse Spielobjekt friend class Asteroid schreibt? Ich weiß, dass friend nicht so gerne gesehen wird, weil es bei häufiger Verwendung den Quelltext undurchsichtig macht, aber würde das funktionieren?
um die Asteroiden realistischer aussehen zu lassen, könnte man statt Polygone auch kleine Icons laden lassen, die sich dann in einem source-Ordner befinden, dasselbe gilt dann auch für Raumschiff und Photonentorpedos. Es muss doch eine Möglichkeit in C# geben Icons zu laden.
Hallo Herr Loviscach,
sie hatten ein Video hochgeladen wo drin beschrieben wird wie sie in c# dieses Quiz Spiel erstellen. Leider finde ich dieses Video nicht mehr. Ich freue mich über eine Rückmeldung. Mit freundlichen Grüßen
Oh, das können so verschiedene gewesen sein. Hier nachgucken:
j3L7h.de/videos.html
Ich habe das Video leider nicht gefunden könnten sie die drauf zutreffenden Videos als link Posten bitte.
@@ozgenur95 Wenn es nicht in der Liste ist, kann ich leider nicht helfen.
Es war eigentlich auf ihrem TH-cam Kanal hochgeladen aber dort finde ich es leider nicht mehr.
Hallo!
Auch wenn ich hier gerade den C# Necromanten representiere. Ich benutze für das Problem, der nicht gesetzten Werte für die Zeichenfläche beim Start des Programms, den Eventhandler "Loaded". Ob das Üblich ist, weiß ich nicht - Aber es funktioniert bei mir zuverlässig.
private void zeichenfläche_Loaded(object sender, RoutedEventArgs e){}
Siehe Problemstellung 31:00
verlinke bitte das programm
www.j3L7h.de
Ich kann mit dem "Timer.Tick" NICHT auf Voids innerhalb von Klassen zugreifen, warum?
und auf Public sind sowohl Klasse als auch der Void gestellt.
Ich verstehe die Frage nicht. Was ist mit "auf Voids innerhalb von Klassen zugreifen" gemeint?
@@JoernLoviscach Ich kann den Void "Animiere" innerhalb der Spielobjekt-Klasse nicht mit "Timer.Tick += Animiere" erreichen.
Dann kommt nur: "Animiere" ist im aktuellen Kontext nicht vorhanden. Setze ich den Void jedoch außerhalb einer Klasse, so erkennt der ".Tick" den Void.
@@kashishan7603 Ah, "void" = "eine Methode mit Rückgabetyp void". Lieber keine neue Sprache erfinden. "Setze ich den Void jedoch außerhalb einer Klasse": Eine Methode kann in C# nicht außerhalb aller Klassen stehen.
Steht Animiere in der Spielobjekt-Klasse vielleicht statt direkt in der Klasse versehentlich in einer anderen Methode? (So etwas geht inzwischen.)
@@JoernLoviscach Ja, in der Spieleobjekt klasse und dort wird diese nicht vom Timer.Tick erkannt. platziere ich den Void jedoch direkt neben der Spieleobjektklasse bzw (In den "Freiraum"), wo sich alle Klassen (Raumschiff, Torpedo, Asteroide) befinden, wird er vom Timer.Tick erkannt, innerhalb einer dieser Klassen jedoch nicht.
z.B:
Timer wird erstellt...
Timer.Tick += Move1;
Timer.Tick += Move2;
void Move1 (object, sender EventArgs e)
{
Bla Bla...
}
public class NPC
{
NPC ()
{
Bla Bla...
}
public void Move2 (object, sender EventArgs e)
{
Bla Bla...
}
}
Ende des Beispiels.
Bei Timer.Tick += Move2;
wird jetzt das "Move2" unterstrichen.
"Ist im aktuellen Kontext nicht vorhanden"
Timer.Tick += Move1; funktioniert jedoch.
Im Video hat jedoch auch Move2 funktioniert, habe alles so abgeschrieben, doch innerhalb von Klassen kann ich keinen Void mit Zeigern ansteuern.
Wurde das im IT Unterricht aufgenommen?
Das ist aus meiner Vorlesung "Informatik 1" in einem Bachelor-Studiengang an einer FH.
@@JoernLoviscach ja sowas habe ich vermutet, an der Art wie du zu den Leuten redest, also man merkt dass du nicht zu den Video, sondern echten Zuschauern redest. Und später hört man auch jmd reden und so
hallo wollte das tutorial nach programmieren, benutze visualstudio 2017 community, mit den usings klappt es nicht
Bitte eine genauere Angabe als "mit den usings klappt es nicht".
also beim canvas bekomm ich nicht das using auf system.windows.control
Ist das Projekt zu Fuß leer angelegt? Dann könnte im Projekt die Referenz auf die Assembly PresentationFramework.dll fehlen.
@@JoernLoviscach Also bei mir klappt alles, ABER nachdem man die intervall totalseconds hinzugefügt hat ist bei mir alles auf dem mainwindow verschwunden xD
@@frohnkevin Dann scheint WPF nicht mehr zum Zeichnen zu kommen. Vielleicht wird durch die Funktion, die das Timer-Tick aufruft, etwas blockiert. Einen Breakpunkt in jener Funktion setzen und sowieso den Konstruktor von MainWindow in Einzelschritten durchsteppen.
Hi, ich habe das Problem, dass der "Start!"-Button durch den Befehl "zeichenfläche.Children.Clear();" "gelöscht" wird. Kennt jemand das Problem und hat jemand eine Abhilfe für mich? Danke im Voraus! (C# 2015)
Dann ist der Button wohl versehentlich ein Kind der Canvas, will sagen: Er steht im XAML in der Canvas und damit eine Hierarchiestufe zu tief.
Okay, ich bin jetzt selber draufgekommen. :-) Der entscheidende Hinweis kommt im 2. Teil bei 10:22 Minuten. Der Button darf nicht auf der Canvas liegen! Dies wird sichergestellt, indem der Button außerhalb des inneren blauen Rahmens gelegt wird.
Der Text im MainWindow.xaml muss folgendermaßen aussehen.
Richtig, Button liegt NICHT auf der Canvas:
Falsch, Button liegt auf der Canvas:
Danke, genau das war das Problem!
Ich benutze 2019 visual studio und Canvas zeigt ist ein
fehler
Ich verstehe jenen Satz nicht. Aber das Projekt gibts sowieso hier zum Herunterladen ("05E.3_Material.zip"): j3l7h.de/lectures/2020ss/Informatik_2/ThemenUndTermine.html
Ich kriege das mit den Polygonen nicht hin, sie werden nicht dargestellt. Bei der elli klappt alles tadellos....
for (int i = 0; i < 20; i++)
{
double alpha = 2.0 * Math.PI / 20.0 * i;
double radius = 8.0 + 4.0 * zufall.NextDouble();
poly.Points.Add(new Point(radius * Math.Cos(alpha),radius* Math.Cos(alpha)));
}
poly.Fill = Brushes.Red;
zeichenflaeche.Children.Add(poly);
Canvas.SetLeft(poly, X);
Canvas.SetTop(poly, Y);
Sieht zumindest auf den ersten Blick richtig aus. Vielleicht mit meinem Quellcode gegenchecken:
j3L7h.de/lectures/1919ss/Informatik_2/ThemenUndTermine.html
@@JoernLoviscach Merci, da ich etwas ungeduldig war, habe ich den Code für poly einfach übernommen, läuft ! Und jetzt geht es weiter.
Herzlichen Dank für die tollen Beiträge !!
geht das auch bei 2019
Hmm, ich verstehe die Frage nicht. Bitte für mich (Boomer, halt) mal eine Langfassung.
@@JoernLoviscach wie kann mann die zeichenfläche finzufugen weil bei mir ist es nicht
@@x-gamerking2706 Im Zweifelsfall einfach in das XAML-Textfenster tippen. Hier mittendrin ist der Quellcode verlinkt:
j3l7h.de/lectures/2121ss/Informatik_2/ThemenUndTermine.html
@@JoernLoviscach oh danke du bist sehr nett
ah und ich wollte dir sagen ich bin 12 und lerne jetzt das progammieren
@@JoernLoviscach ah und welche davon ist es oder soll ich alle cods schrieben oder welche
und danke das du Antwortest.:-)
Super Video
52:00
???
Mir scheint, der Ersteller dieses Videos sollte selbst mal ein wenig Nachhilfe in Sachen C# beantragen.
Miesnik. :)