Hallo Zusammen,
der Schlüssel zu einem erfolgreichen Spiel ist ein guter Aufbau und eine gute Struktur. In dem folgenden Tutorial erkläre ich dich wichtigsten Grundelemente, die bei der Entwicklung helfen. Ich setze Grundkentnisse zu VB.net und GDI vorraus. Dann mal los:
1.) Start & Screen-Management
Spoiler anzeigen
Zuerst richten wir ein neues Windows Forms Projekt ein. "Form1" habe ich hier in "Form" umbenannt. Zuerst ändern wir die Größe der Form und optimieren die Darstellung.
Wenn wir ein Spiel mit verschiedenen Ansichten und Menüs programmieren wollen, empfiehlt es sich, diese in verschiedene Klassen zu trennen. So können wir z.B. das Start-Menu und das Spiel in 2 verschiedene Klassen packen. Dazu erstellen wir zuerst eine Klasse, von der die anderen Klassen erben können. Wir nennen diese Klasse "Screen" und geben ihr die Eigenschaft "MustInherit". Nun erstellen wir 3 Methoden "Draw", "KeyDown" und "KeyUp" und geben ihnen die selben Überladungen wie die Events der Form. In der "New" Methode verknüpfen wir die drei Methoden mit den Events der Form ("AddHandler"). Natürlich kannst du auch ganz einfach neue Events der Form verknüpfen.
Und was soll das ganze? Jetzt haben wir diese drei Events der Form auf eine externe Klasse übertragen. Wie können nun ganz einfach neue Klassen erstellen, die von dieser "Screen" Klasse erben und können zum Beispiel die "Draw" Methode füllen. So trennen wir verschiedene Screens und machen das Projekt übersichtlicher.
Nun erstellen wir zwei Screens, ein Menü-Screen und ein Spiel-Screen. Ich nenne sie jeweils "MenuScreen" und "GameScreen". Mit "Inherits Screen" erben wir Methoden und Variablen der "Screen" Klasse und wir können auf die Paint Methode zugreifen. Um die Funktion zu testen zeichne ich in der Draw Methode jeweils einen Text.
Wenn wir nun das Spiel starten passiert ... nicht viel. Zuerst müssen wir noch eine Variable erstellen um den Code der Klassen ausführen zu können. Ich erstelle in der "Form" Klasse eine Variable "Public Screen as Screen" und bestimme damit, dass es sich um irgendeine Screen-Klasse handeln muss. Im Form_Load Event deklariere ich diese Variable mit "Screen = New MenuScreen". Damit habe ich festgelegt, dass nur die "MenuScreen" Klasse ausgeführt wird.
Wenn wir nun die Anwendung ausführen, wir nur das Paint-Event des Menus gezeichnet. Damit ist dieser Teil beendet.
2.) Enitäten & Environment
Spoiler anzeigen
Im nächsten Schritt möchten wir unsere Spiel auch Inhalt geben. Alle Objekte, die sich in unserem Level befinden sollen, nennen wir Entität (engl. Entity). Alle Entitäten speichern wir in einer Liste. Die Klasse "Environment" soll alle Entitäten verwalten und die Umgebung des Levels simulieren. Zuerst erstellen wir eine neue Klasse mit dem Namen Entity. Diese Klasse enthält alle Informationen über ein Objekt im Level, also Position und Größe. Da die Entität aber immer wissen soll in welcher Umwelt sie sich befindet fügen wir auch noch eine Variable Environment hinzu und deklarieren sie als Environment (Wir fügen diese Klasse gleich hinzu).
Danach erstellen wir die Klasse Environment. Diese Klasse enthält eine Liste mit allen Entitäten, die sich im Level befinden. Wir programmieren dazu noch eine Methode "RegisterEntity" (mit einem Entity als Überladung), die das Entity der Liste hinzufügt und die Variable "Environment" der Entität mit sich selbst verknüpft.
Nun wollen wir ein Environment erstellen, dem Objekt Entitäten übergeben und diese auf der Form zeichnen. Um den Game-Screen anzuzeigen setzen wir im Form_Load Event der Form
Wenn wir unser Spiel starten, werden beide Entitäten gezeichnet.
der Schlüssel zu einem erfolgreichen Spiel ist ein guter Aufbau und eine gute Struktur. In dem folgenden Tutorial erkläre ich dich wichtigsten Grundelemente, die bei der Entwicklung helfen. Ich setze Grundkentnisse zu VB.net und GDI vorraus. Dann mal los:
1.) Start & Screen-Management
Zuerst richten wir ein neues Windows Forms Projekt ein. "Form1" habe ich hier in "Form" umbenannt. Zuerst ändern wir die Größe der Form und optimieren die Darstellung.
VB.NET-Quellcode
- Public Class Form
- Private Sub Form_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
- 'Form adjustieren
- Me.Width = 800
- Me.Height = 500
- Me.Text = "VB-Paradise Beispielspiel...spiel...spiel"
- 'Verhindert das Flackern von Elementen
- SetStyle(ControlStyles.AllPaintingInWmPaint, True)
- SetStyle(ControlStyles.OptimizedDoubleBuffer, True)
- End Sub
- End Class
Wenn wir ein Spiel mit verschiedenen Ansichten und Menüs programmieren wollen, empfiehlt es sich, diese in verschiedene Klassen zu trennen. So können wir z.B. das Start-Menu und das Spiel in 2 verschiedene Klassen packen. Dazu erstellen wir zuerst eine Klasse, von der die anderen Klassen erben können. Wir nennen diese Klasse "Screen" und geben ihr die Eigenschaft "MustInherit". Nun erstellen wir 3 Methoden "Draw", "KeyDown" und "KeyUp" und geben ihnen die selben Überladungen wie die Events der Form. In der "New" Methode verknüpfen wir die drei Methoden mit den Events der Form ("AddHandler"). Natürlich kannst du auch ganz einfach neue Events der Form verknüpfen.
VB.NET-Quellcode
- Public MustInherit Class Screen
- Public Sub New()
- AddHandler Form.KeyDown, AddressOf KeyDown
- AddHandler Form.KeyUp, AddressOf KeyUp
- AddHandler Form.Paint, AddressOf Paint
- End Sub
- Friend Overridable Sub Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs)
- End Sub
- Friend Overridable Sub KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs)
- End Sub
- Friend Overridable Sub KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs)
- End Sub
- End Class
Und was soll das ganze? Jetzt haben wir diese drei Events der Form auf eine externe Klasse übertragen. Wie können nun ganz einfach neue Klassen erstellen, die von dieser "Screen" Klasse erben und können zum Beispiel die "Draw" Methode füllen. So trennen wir verschiedene Screens und machen das Projekt übersichtlicher.
Nun erstellen wir zwei Screens, ein Menü-Screen und ein Spiel-Screen. Ich nenne sie jeweils "MenuScreen" und "GameScreen". Mit "Inherits Screen" erben wir Methoden und Variablen der "Screen" Klasse und wir können auf die Paint Methode zugreifen. Um die Funktion zu testen zeichne ich in der Draw Methode jeweils einen Text.
VB.NET-Quellcode
- Public Class GameScreen
- Inherits Screen
- Friend Overrides Sub Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs)
- e.Graphics.DrawString("Hier seht ihr meinen supertollen Game-Screen", New Font(FontFamily.GenericMonospace, 18), Brushes.Black, New Point(50, 50))
- End Sub
- End Class
Wenn wir nun das Spiel starten passiert ... nicht viel. Zuerst müssen wir noch eine Variable erstellen um den Code der Klassen ausführen zu können. Ich erstelle in der "Form" Klasse eine Variable "Public Screen as Screen" und bestimme damit, dass es sich um irgendeine Screen-Klasse handeln muss. Im Form_Load Event deklariere ich diese Variable mit "Screen = New MenuScreen". Damit habe ich festgelegt, dass nur die "MenuScreen" Klasse ausgeführt wird.
VB.NET-Quellcode
- Public Class Form
- Public Screen As Screen
- Private Sub Form_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
- 'Form adjustieren
- Me.Width = 800
- Me.Height = 500
- Me.Text = "VB-Paradise Beispielspiel..spiel...spiel"
- 'Wir setzen die Styles, um das Flackern von Elementen zu verhindern
- SetStyle(ControlStyles.AllPaintingInWmPaint, True)
- SetStyle(ControlStyles.OptimizedDoubleBuffer, True)
- Screen = New MenuScreen
- End Sub
- End Class
Wenn wir nun die Anwendung ausführen, wir nur das Paint-Event des Menus gezeichnet. Damit ist dieser Teil beendet.
2.) Enitäten & Environment
Im nächsten Schritt möchten wir unsere Spiel auch Inhalt geben. Alle Objekte, die sich in unserem Level befinden sollen, nennen wir Entität (engl. Entity). Alle Entitäten speichern wir in einer Liste. Die Klasse "Environment" soll alle Entitäten verwalten und die Umgebung des Levels simulieren. Zuerst erstellen wir eine neue Klasse mit dem Namen Entity. Diese Klasse enthält alle Informationen über ein Objekt im Level, also Position und Größe. Da die Entität aber immer wissen soll in welcher Umwelt sie sich befindet fügen wir auch noch eine Variable Environment hinzu und deklarieren sie als Environment (Wir fügen diese Klasse gleich hinzu).
Danach erstellen wir die Klasse Environment. Diese Klasse enthält eine Liste mit allen Entitäten, die sich im Level befinden. Wir programmieren dazu noch eine Methode "RegisterEntity" (mit einem Entity als Überladung), die das Entity der Liste hinzufügt und die Variable "Environment" der Entität mit sich selbst verknüpft.
Nun wollen wir ein Environment erstellen, dem Objekt Entitäten übergeben und diese auf der Form zeichnen. Um den Game-Screen anzuzeigen setzen wir im Form_Load Event der Form
Screen = New MenuScreen
auf Screen = New GameScreen
. In der GameScreen-Klasse erstellen wir eine Environment, Player- und eine Obstaclevariable und deklarieren sie als Entitity. In "Sub New" stellen wir jeweils die Position und Größe der Entitäten ein und registrieren sie im Environment Objekt. Danach löschen wir den Inhalt der Zeichenmethode, die einen Text angezeigt hat. In der Zeichenmethode erstellen wir eine Schleife und zeichnen mit der Größe und Position der Entitätenlisten Rechtecke auf die Form.VB.NET-Quellcode
- Public Class GameScreen
- Inherits Screen
- 'Variablen
- Public Environment As New Environment
- Public Player As Entity
- Public Obstacle As Entity
- Public Sub New()
- Player = New Entity
- Player.Size = New Size(70, 100)
- Player.Position = New Point(15, 15)
- Obstacle = New Entity
- Obstacle.Size = New Size(300, 50)
- Obstacle.Position = New Point(50, 300)
- Environment.RegisterEntity(Player)
- Environment.RegisterEntity(Obstacle)
- End Sub
- Friend Overrides Sub Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs)
- For Each Entity As Entity In Environment.Entities
- e.Graphics.FillRectangle(Brushes.Red, New Rectangle(Entity.Position, Entity.Size))
- e.Graphics.DrawRectangle(Pens.Black, New Rectangle(Entity.Position, Entity.Size))
- Next
- End Sub
- End Class
Wenn wir unser Spiel starten, werden beide Entitäten gezeichnet.
Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „J-F“ ()