Wie lerne ich mit C# spiele zu Programmieren?

3 Antworten

(...) allerdings weiß ich jetzt nicht genau wie mir das beim spiele Programmieren helfen soll.

Schleifen, Verzweigungen, Arrays u.ä. sind die Grundbausteine für deine Algorithmen. Nimm nur einmal das Spiel Space Invaders als Beispiel: Eine Schleife kann als Game Loop dienen, mittels Verzweigungen kann der Spielstatus (oder andere Spielregeln, wie die Begrenzung des Spielfeldes) überwacht werden und ein Array kann sich die vom Spieler abgefeuerten Schüsse merken.

(...) Ich habe mir das 3 stündige C# Grundkursvideo von Programmieren Lernen! auf Youtube angeschaut. (...)

Beim Lernen von C#/Programmierung ist es wichtig, das Angelernte auch praktisch zu üben. Ich weiß nun nicht, wie dein aktuelles Vorgehen ist, doch wenn es sich nur auf das Anschauen von Videos beschränkt, reicht das definitiv nicht aus. Ebenso würde ich empfehlen, Themen (wie OOP) nicht crashkursmäßig in ein paar Stunden/Tagen abzuklappern.

Hat vielleicht jmd. eine Idee wie ich weiter machen könnte um solche Befehle zu lernen und anwenden zu können?

Innerhalb eines Konsolenprojekts lassen sich schon viele verschiedene Themen gut erproben. Du kannst eigene Datenstrukturen (z.B. Stack, Tree, Graph) implementieren oder Minispiele (Conway's Game Of Life, ein Text-Adventure, Snake, Kartenspiele wie Mau-Mau, Schiffe versenken, Tic-Tac-Toe, Schach, ...).

Fange bei solchen Übungen erst mit einer Planungsphase (außerhalb des Editors) an. Mache dir darüber Gedanken, was du benötigst und wie es sich zusammensetzt. Bau dir z.B. Programmablaufpläne o.ä.. Für Spiele (vor allem größere Projekte als Pong oder Tic-Tac-Toe) macht ein GDD Sinn.

Wenn du der Ansicht bist, in den Grundlagen (dazu zähle ich auch die OOP) halbwegs fit zu sein und dir solche Aufgaben, wie die von mir oben vorgeschlagenen, keine Probleme bereiten, spricht sicherlich nichts dagegen, mit Unity zu starten.

Von da an wäre das Manual von Unity sowie deren Lernplattform dein bester Freund. All diese Inhalte sind von der Unity-Startseite aus erreichbar.

(...) Was ich nicht verstehe sind Klassen und Eigenschaften. (...)

Die objektorientierte Programmierung ist eine Methodik der Programmstrukturierung. Dabei versucht man ein System (die Spielwelt) mit Objekten (Spieler, Gegner, Waffe, Baum, Haus, ...) zu beschreiben. Jedes Objekt hat einen eigenen Zustand, der durch verschiedene Eigenschaften beschrieben wird. Das könnte beispielsweise die Lebensenergie, die Sprungkraft oder äußerliche Merkmale wie Farbe, Höhe, Breite sein. Ebenso hat jedes Objekt eigene Verhaltensweisen / Methoden: Eine Spielfigur kann zum Beispiel laufen, springen, kämpfen oder sterben. Die Beziehungen/Interaktionen zwischen den Objekten können ihre Zustände ändern (Beispiel: Spieler schlägt Troll, welcher dadurch Lebensenergie verliert).

Welche Objekttypen es grundsätzlich gibt und wie sie sich aufbauen (welche Eigenschaften und Methoden sie haben), wird mit Klassen spezifiziert. Eine Klasse ist also ein Bauplan, anhand dessen verschiedene Objekte erstellt werden können.

Bei Pong wäre das schon einmal nützlich, um einen Ball und zwei Schläger zu kreieren. Bei Pac-Man wären der Hauptcharakter, die Geister, die Felder (Mauer oder begehbares Feld) sowie die aufsammelbaren Früchte und Punkte einzelne Objekte.

Jan18466 
Fragesteller
 12.02.2024, 14:49

Hab bis jetzt nur Die Programme im Video nachgebaut, ausprobiert, versucht zu verstehen und mir immer nebendran Kommentare hingeschrieben, die den Ablauf erläutern, um immer nach schauen zu können, falls ich mal vergessen hab wie zum Beispiel Arrays funktionieren oder so. Danke für die Tipps und die Erklärung

0

Hey,

es wirkt so, als seist du mit der Programmierung generell noch nicht so vertraut. Dieses Verständnis ist aber für die Spieleentwicklung entscheidend, deswegen würde ich dort anfangen. Den Einstieg mit Tutorials finde ich schon gut. Du kannst einfach weitermachen und immer mehr Tutorials zu verschiedenen Bereichen mit Unity machen, mit Schwerpunkt Programmierung.

Sinnvoll könnte es aber auch sein, dass du ganz unabhängig von Unity das Programmieren grob lernst, z.B. in der Sprache C++ oder Java, oder auch direkt C#, das z.B. auch für iPhone-Apps verwendet wird. Programmieren zu lernen, zu verstehen und anwenden zu können, ist am Anfang etwas knochig, aber es lohnt sich. Für die Spieleprogrammierung ist es sogar notwendig. Und ich schätze es so ein, dass dir ein paar Basis-Skills ausreichen, damit du dann ein Grundverständnis entwickelst und eigenständig den Rest erschließen kannst

Jan18466 
Fragesteller
 12.02.2024, 10:29

Danke für die umfangreiche Anwort. ich werde es weiter probieren!

1
Neuron123  12.02.2024, 10:32
@Jan18466

Hast du denn verstanden, wozu du generell diese Programmierung, Schleifen etc brauchst bei Unity? Vielleicht kann ich dir die Basics ja schnell hier erklären :D

0
Jan18466 
Fragesteller
 12.02.2024, 10:41
@Neuron123

Ich glaube Schleifen benutzt man z.b. zur Steuerung, da man ja immer Laufen möchte. Oder If Abfragen beim Tod evnt.. Was ich nicht verstehe sind Klassen und Eigenschaften. Da bin ich echt am verzweifeln was die bringen sollen :(

0
Jan18466 
Fragesteller
 12.02.2024, 10:44
@Neuron123

würde mich freuen wenn du mir die Basics erklären könntest

0
Neuron123  12.02.2024, 10:55
@Jan18466

Es ist viel Allgemeiner: Schleifen und generell alle Befehle sind universelle Werkzeuge, mit denen du Probleme lösen kannst und Aufgaben erfüllen kannst

Bei Unity ist es so, dass für jedes Spielobjekt zu bestimmten Zeitpunkten, z.B. bei jedem Frame oder zu Beginn ein Porgrammcode ausgeführt wird und du hast im Prinzip alle Freiheit der Welt, irgendwelche Dinge ausführen zu lassen

Wie du schon gesagt hast, ist das z.B. sinnvoll bei der Steuerung, wenn du z.B. überprüfen möchtest, ob eine Taste gedrückt ist und, falls ja, die Geschwindigkeit der Spielfigur manipulieren willst. Du kannst aber auch komplett andere Dinge machen, wie z.B. neue Objekte erstellen zu lassen, einen Sound abspielen zu lassen oder einen Highscore online abzuspeichern, falls du einen neuen erreicht hast

Welche dieser Tools du wie kombinierst, hängt von der Aufgabe ab, die du erfüllen willst. For-Schleifen z.B. sind meistens dafür da, Listen abzuklappern oder Dinge einach sehr oft zu wiederholen. Das könnten z.B. Objektlisten sein, die du z.B. auf Kollision überprüfen möchtest etc

Diese ganzen Befehle dienen also nur dazu, Aufgaben zu erfüllen, aus denen dein gesamtes Spiel sich dann zusammen setzt

Ich weiß jetzt nicht, in welchem Kontext du die Klassen verstehen möchtest, aber generell sind das quasi "Bauanleitungen" für Objekte, aus denen dann einzelne Objekte, z.B. halt Spielobjekte erstellt werden können. Sie beschreiben einfach, was ein Objekt für Funktionen hat, welche Eigenschaften es hat etc

0
Jan18466 
Fragesteller
 12.02.2024, 12:40
@Neuron123

Danke! hat wirklich sehr geholfen. Das mit den Klassen habe ich glaube ich auch verstanden :)

0
Jan18466 
Fragesteller
 12.02.2024, 12:52
@Jan18466

Braucht man Klassen zum Beispiel für Gegner?

0
JokesOnYou  12.02.2024, 12:58
@Jan18466

Klassen sind, wie Neuron schon gesagt hat, Baupläne für Objekte oder Charaktere. Was da wichtig ist ist Vererbung. Stell dir vor du hast in einem Spiel 3 Potions, Leben, Mana, und eine Gift Potion die geworfen werden kann und Gegner vergiftet. Du willst jetzt aber nicht für jede Potion eine eigene Klasse anlegen. Könntest du zwar machen, ist aber nicht Sinnvoll.

Statdessen machst du folgendes: Du schreibst eine Basisklasse, die du Potion nennst, und von dieser Klasse erstellst du Kindklassen, die alles was in Potions ist haben, und Funktionen überschreiben können. Sie "Erben" quasi alles von Potion. Das ist Vererbung. So kannst du eine Basiklasse Potions anlegen und da Informationen wie Farbe, Wert, Gewicht und so hinterlegen. Jedes Objekt von Potion muss jetzt auch diese Werte haben, da sparst du dir die Arbeit das nochmal neu für jede einzelne Potion zu definieren.

Dann haben die Potions aber jeweils einen anderen Effekt. Und hier kommt das Zauberwort "virtual" ins Spiel. Eine Methode als "virtual" zu deklarieren erlaubt es Klassen die von der Mutterklasse erben eine Methode auf ihre ganz eigene Weise zu implementieren, aber sie müssen sie implementieren. Also hat Health Potion den Effekt Health +120, Mana Potion dann Mana +150, und Poison bekommt dann die Wurf funktion, und bei einem Treffer, fügt dem Gegner 80 poison damage zu.

0
Neuron123  12.02.2024, 13:01
@Jan18466

Puh, es ist eine Weile her, dass ich mit Unity etwas gemacht habe, habe es zur Zeit auch nicht installiert. Aber soweit ich mich erinnere, bestanden die meisten Objekte aus GameObject, was selbst schon eine Klasse ist. D.h., GameObjects haben Funktionen (Methoden) und Eigenschaften. In der objektorientierten Programmierung (wie bei Unity) geht man meist so vor, dass man vorhandene Klassen nimmt und eine eigene Klasse, basierend auf der alten Klasse schreibt und ihr neue Funktionen gibt oder sie verändert (Vererbung). Ob man Gegner jetzt auf GameObjects basieren lässt, weiß ich nicht mehr, aber vermutlich musst du für deine Gegner eine neue Klasse erstellen, die auf irgendeiner Klasse basiert, die Unity mitliefert

0

Da ist das Problem: Unerfahrenheit. In Spielen sind Interaktionen, Mechaniken und Co. allesamt durch grundlegende Programierbausteine darstellbar. Dialogbaum? Reihe von if Abfragen oder besser, switch case. Inventar? Array, oder besser, Liste, oder noch besser, Dictionary. Schadenskalkulation? + und - rechnen. Bewegungen? Verschieben eines Punktes auf einem Koordinatensystem. Du musst lernen deine Probleme in winzige, programmierbare Bauteile zu zerlegen, und diese dann umzusetzen.

Ein ganz tolles Beispiel um das zu verstehen ist Minecraft. Wenn du im Spiel bist und die Überwachung aktivierst, siehst du drei Koordinaten auf 3 Achsen, X, Y und Z, die deine Spielposition jederzeit überwachen. Das ist in jedem Spiel so oder so ähnlich gelöst.

Jan18466 
Fragesteller
 12.02.2024, 10:22

Daran hab ich noch nie gedacht. Danke für die Antwort. Ich versuche es weiter um mehr erfahrung zu sammeln

0