Laden...

Mein erstes Spiel: Snake Klon mit GDI+ (Mit Quellcode)

Erstellt von Peter Bucher vor 17 Jahren Letzter Beitrag vor 17 Jahren 25.359 Views
Peter Bucher Themenstarter:in
5.941 Beiträge seit 2005
vor 17 Jahren
Mein erstes Spiel: Snake Klon mit GDI+ (Mit Quellcode)

Hallo zusammen

Für meine ersten Versuche mit C# musste ich mir ein Ziel setzen,
damit die Motivation nicht sinkt.

Am besten nimmt man für eine solche Aufgabe, was leichtes.
Also hab ich mich an einem Snake Klon versucht.

Nun, das Spiel an sich ist nicht so aufregend, kennen ja alle schon.
Wichtig war für mich was dahinter steckt.
Ich habe zudem auch Wert auf gutaussehend-geschmückte GUI gelegt.

Runtime:
Das Spiel basiert auf .NET Framework 2.0

Steuerung:
Mit den normalen Pfeiltasten

Bekannte Fehler:
Wenn man zu schnell die Richtung wechselt, also z. B. die Schlange nach oben fährt und man drückt "Rechts" und gleich danach "Runter", kommt der Timer damit nicht klar bzw. bekommt er die falsche Information und es gibt eine Selbstkollision.
Konnte dies noch nicht beheben.

Das Spiel ist im Anhang.

<edit>
- Version 1.1 mit Sourcecode ist im Anhang
!! Vor dem Ausführen in Visual Studio muss noch die Referenz auf "DoubleBufferedPanel" registriert werden.
DLL liegt bei !!
</edit>

Ich freue mich auf euer Feedback.

Gruss Peter


--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

L
497 Beiträge seit 2006
vor 17 Jahren

Coole Sache. Hab jetzt gezockt bis die Augen geflimmert haben - leider geht das nach einem durchprogrammierten Tag recht schnell... Immerhin 840 Punkte.

Meinst Du, Du kriegst es hin, dass die grünen was auch immer - waren das nicht Äpfel im Original ? - nicht unter der Schlange auftauchen könne?

Ansonsten - ich warte schon auf Version 2.0 mir Gegner und Netzwerkmodus 😁

Sarkusmus ist, wenn nichts mehr hilft, außer Lachen.

Peter Bucher Themenstarter:in
5.941 Beiträge seit 2005
vor 17 Jahren

Hi Lord Hessia

Danke für dein Feedback.

Original von Lord Hessia
Coole Sache. Hab jetzt gezockt bis die Augen geflimmert haben - leider geht das nach einem durchprogrammierten Tag recht schnell... Immerhin 840 Punkte.

Wow, so weit bin ich nicht einmal gekommen 🙂

Original von Lord Hessia
Meinst Du, Du kriegst es hin, dass die grünen was auch immer - waren das nicht Äpfel im Original ? - nicht unter der Schlange auftauchen könne?

Ja, sollte kein Problem sein, kann ich direkt über die Kollision regeln.
Ich habe das schon bemerkt, fand es aber nicht weiter schlimm, da die Schlange ja darübermoven kann und nur der Kopf frisst 😉
Äpfel, kann sein - ehrlich gesagt, habe ich das Original noch gar nie gesehen.
Das erste Snake auf dem Nokia und ansonsten nur Klone auf dem PC.... ich glaube es gibt überhaupt nur Klone 😉

Original von Lord Hessia
Ansonsten - ich warte schon auf Version 2.0 mir Gegner und Netzwerkmodus 😄

Mit Gegnern, was sollen die dann tun?
Netzwerkmodus, wie soll der, deiner Meinung nach, aussehen?

Gruss Peter

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

E
10 Beiträge seit 2005
vor 17 Jahren

Anregungen:

*Tastaturkürzel für Pause
*Geschwindigkeit einstellen

und wenn ich z.B mit Tab den Focus ner anderen Applikation gebe und zum Spiel zurückwechsel, kann ich nicht mehr steuern!?

Emac

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo Peter Bucher,

gibt eine Selbstkollision.

das löst war das Problem nicht vollständig, aber ich habe es in meinem Klon (bevor ihr fragt, ob ihr den haben könnt: Textoberfläche auf einem PC mit 8088 (also zwei Generationen vor den 286ern) in C unter QNX; ist mittlerweile ohnehin den Weg alles irdischen gegangen) so gemacht, dass ich Tasten, die zu einer Selbstkollision durch direktes Rückwärtslaufen führen würden, einfach ignoriert habe.

Ich habe das schon bemerkt, fand es aber nicht weiter schlimm,

Es ist aber nervig, wenn man eine lange Schlange hat, dass man warten muss, bis man drübergekrochen ist, bevor man wieder fressen kann. Mal abgesehen davon, dass der Konflikt gerade dann besonderst häufig auftritt, wenn die Schlange lang ist.

Äpfel, kann sein

Zumindest kämen Äpfel (welche Symbolkraft 🙂 einem gutaussehend-geschmückten GUI näher als grüne Quadrate. Auch grüne Tomaten wären eine Möglichkeit.

Mit Gegnern, was sollen die dann tun?

Weitere Schlangen steuern und einem möglichst fies vor der Nase rumfahren. Könnten auch Computergegner sein.

Netzwerkmodus, wie soll der, deiner Meinung nach, aussehen?

Dass mehrere Spieler über das Netzwerk zusammen auf einem gemeinsamen Spielfeld (das jeder auf seinem Schirm sieht) ihre Schlange steuern können.

herbivore

B
342 Beiträge seit 2006
vor 17 Jahren

Hi,
hast du die Icons und das Bild im About-Fenster selbst gemacht?
Wie siehts mit dem Source aus, willst du den veröffentlichen?
Grüße
Big Al

Da man Spatzen nicht mit Kanonen jagt, sollte man auch nicht mit Computern auf Spatzenhirne losgehen.

L
497 Beiträge seit 2006
vor 17 Jahren

Herbivore ist also offensichtlich auch ein alter Snake-Guru und hat Deine Fragen schon weitesgehend mit dem beantwortet, was ich auch geschrieben hätte.

Für den Mehspielermodus fallen mir mindestens zwei Möglichkeiten ein. Zum einen ein einfaches Spiel gegen die Zeit, in der in einem festgelegten Zeitraum die meisten Punkte geholt werden müssen. Und dann eben der Modus, wo es darum geht, den Gegner in die Enge zu treiben.

Außerdem noch weitere interessante Features:

** Highscoreliste offline (also im Programm direkt abrufbar) und online (also auf einer Webseite).

** Nicht nur grüne, essbare Dinge sondern auch nicht essbare (z.B. Spinat - damit würdest Du gleich ein viel jüngeres Publikum ansprechen, die doch heutzutage ein wahres 2D-Spiel gar nicht mehr zu schätzen wissen 😉 - oder Zitronen - wie wir alle wissen, vertragen Schlagen ja kein Vitamin C... oder so).
Hier könnte man sich natürlich auch noch andere Gimmicks ausdenken, die die Schlange temporär schneller oder langsamer werden lassen, vergrößern oder verkleinern, die aufgesammelten Punkte für einen bestimmten Zeitraum erhöhen oder verringern, etwas dass die ganze Schlange unsichtbar werden lässt bis auf den Kopf oder das einfach die Farben umdreht usw.

** Psychedelische Fahrstuhlmusik im Hintergrund

** Explosionsanimationen beim Zerstören der Schlange

mir fällt bestimmt noch mehr ein bis morgen 🙂

Sarkusmus ist, wenn nichts mehr hilft, außer Lachen.

1.371 Beiträge seit 2004
vor 17 Jahren

Hi,

ich hab auch gerade mal ne Runde gezockt, ist wirklich gut geworden.

Ps.: Bei mir warens im ersten Versuch gerade mal 280 Punkte X(

Aber großes Lob, ist gut geworden.

==============================
Wenn ichs wüsst', würd' ich nicht fragen!!! 😁
==============================

35 Beiträge seit 2006
vor 17 Jahren

moin,

hab noch nen bug endeckt

=> schaut euch das pic im anhang an

Das Tempo wird nach einem "neues spiel" nicht resetet.
Aber ich weiß nicht ob es nur ein Anzeigen bug ist, oder ob die Geschwindigkeit dann wirklich bei gehalten wird (die geschwindigkeitsveränderungen fallen nicht großartig auf, erst im laufe der zeit)

überprüfe das bitte 😉

aber sonst ein tolles game für die mittagspause ;D

life is to short, dont go to big !!

Peter Bucher Themenstarter:in
5.941 Beiträge seit 2005
vor 17 Jahren

Hallo zusammen,

danke für das reichliche Feedback.
Ich habe ein paar eurer gewünschten Änderungen durchgeführt.
Und die gemeldeten Fehler gefixt.

Der Quellcode ist freigegeben (zu finden im Initialposting von mir).

Original von Emac
*Tastaturkürzel für Pause

[x] done

Original von Emac
*Geschwindigkeit einstellen

Wie meinst du das genau, wann und wie soll die Geschwindigkeit einstellbar sein?

Original von Emac
und wenn ich z.B mit Tab den Focus ner anderen Applikation gebe und zum Spiel zurückwechsel, kann ich nicht mehr

steuern!?

[x] done

Original von herbivore
Es ist aber nervig, wenn man eine lange Schlange hat, dass man warten muss, bis man drübergekrochen ist, bevor man

wieder fressen kann. Mal abgesehen davon, dass der Konflikt gerade dann besonderst häufig auftritt, wenn die Schlange

lang ist.

Stimmt vollkommen!
[x] done

Original von herbivore
Zumindest kämen Äpfel (welche Symbolkraft 🙂 einem gutaussehend-geschmückten GUI näher als grüne Quadrate. Auch

grüne Tomaten wären eine Möglichkeit.

Ja du hast Recht, ich habee ein bisschen übertrieben.
Jetzt ist es eine Banane und ein Apfel, mit Bildern.

Original von herbivore
Weitere Schlangen steuern und einem möglichst fies vor der Nase rumfahren. Könnten auch Computergegner sein.

Dass mehrere Spieler über das Netzwerk zusammen auf einem gemeinsamen Spielfeld (das jeder auf seinem Schirm sieht)

ihre Schlange steuern können.

Okay, das heb ich mir für später auf.

Original von Big Al
hast du die Icons und das Bild im About-Fenster selbst gemacht?

Jein, ein Kollege von mir (Alexander von http://www.twin4matic.ch/) hat sie gemacht.

Original von Big Al
Wie siehts mit dem Source aus, willst du den veröffentlichen?

Ja, mit dieser Antwort ist er im Anhang bei der aktuellen Version dabei!

Original von Lord Hessia
** Highscoreliste offline (also im Programm direkt abrufbar) und online (also auf einer Webseite).

** Nicht nur grüne, essbare Dinge sondern auch nicht essbare (z.B. Spinat - damit würdest Du gleich ein viel jüngeres

Publikum ansprechen, die doch heutzutage ein wahres 2D-Spiel gar nicht mehr zu schätzen wissen 😉 - oder Zitronen -

wie wir alle wissen, vertragen Schlagen ja kein Vitamin C... oder so).
Hier könnte man sich natürlich auch noch andere Gimmicks ausdenken, die die Schlange temporär schneller oder langsamer

werden lassen, vergrößern oder verkleinern, die aufgesammelten Punkte für einen bestimmten Zeitraum erhöhen oder

verringern, etwas dass die ganze Schlange unsichtbar werden lässt bis auf den Kopf oder das einfach die Farben umdreht

usw.

** Psychedelische Fahrstuhlmusik im Hintergrund

** Explosionsanimationen beim Zerstören der Schlange

Interessante Anregungen, die online Highscore Liste hab ich mir sowieso vorgenommen. Brauche ich dann nicht nur für das

Programm.
Die anderen Sachen könnt ihr euch doch selber machen, de Quellcode ist freigegeben.

Original von Maddinel
ich hab auch gerade mal ne Runde gezockt, ist wirklich gut geworden.

Danke Maddinel 🙂

Original von vicon
Das Tempo wird nach einem "neues spiel" nicht resetet.
aber sonst ein tolles game für die mittagspause ;D

[x] done && danke!

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

35 Beiträge seit 2006
vor 17 Jahren

Ach ja, und bitte änder die Geschwindikeits Anzeige, nicht in 10er Schritten sondern in in 1nern (übersichtlicher) UND vll dass die Geschwindigkeit sich vll nicht alle 5 viecher erhöht, sondern alle 10.

naja, dass man die Geschwindigkeit einstellen kann, könnte man sich ja wie beim Handy-Snake vorstellen. Bei welcher Geschwindigkeit man startet will, zB wenn man nun immer bei einer geschwindigkeit von 300 stirbt, dass man da dann immer einsteigen kann, um mit dieser geschwindikeit zurecht zukommen.

Vll so =>

life is to short, dont go to big !!

1.271 Beiträge seit 2005
vor 17 Jahren

Eine Frage: Du benutzt Visual Studio 2005 (es ist zumindest eine VS05-Solution) und somit auch .NET 2.0. Warum benutzt du dann eine ArrayList zum speichern von Punkten anstatt einer List<Point>?

A wise man can learn more from a foolish question than a fool can learn from a wise answer!
Bruce Lee

Populanten von Domizilen mit fragiler, transparenter Außenstruktur sollten sich von der Translation von gegen Deformierung resistenter Materie distanzieren!
Wer im Glashaus sitzt, sollte nicht mit Steinen werfen.

Peter Bucher Themenstarter:in
5.941 Beiträge seit 2005
vor 17 Jahren

Original von progger
Eine Frage: Du benutzt Visual Studio 2005 (es ist zumindest eine VS05-Solution) und somit auch .NET 2.0. Warum benutzt du dann eine ArrayList zum speichern von Punkten anstatt einer List<Point>?

Ja ich benutze VS 2005 (sollte in meinem Profil zu sehen sein).
Ich habe mich noch nicht gross mit Generics auseinandergesetzt, darum.

<edit>
Danke für deinen Hinweis.
Habs jetzt mit List<Point> gemacht, Webcast sei Dank 🙂
</edit>

Gruss Peter

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo Peter Bucher,

Ich habe mich noch nicht gross mit Generics auseinandergesetzt, darum.

solltest du. Ist auch nicht schwer, im Gegenteil, eigentlich ist es leichter, u.a. weil man nicht Casten muss. Und sicherer ist es auch.

herbivore

Peter Bucher Themenstarter:in
5.941 Beiträge seit 2005
vor 17 Jahren

Original von herbivore
solltest du. Ist auch nicht schwer, im Gegenteil, eigentlich ist es leichter, u.a. weil man nicht Casten muss. Und sicherer ist es auch.

Hallo Herbivore

Hab mir einen Webcast zum Thema angeschaut, eigentlich gar nicht schwierig.
Nun, im Spiel erspare ich mir einen Cast 😉

Gruss Peter

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

S
112 Beiträge seit 2006
vor 17 Jahren

so, jetzt dürfen mich alle mal ganz laut auslachen aber ich habe ne frage 🙂
Wie kann ich das spiel öffnen ? ich hab die ganzen sachen runtergeladen und wenn ich auf irgendsne dateiklicke öffnet sich mein c# !

mfg
Stube

Auch anfänger haben "mal" ne frage 😁

3.170 Beiträge seit 2006
vor 17 Jahren

@Stube
einfach mal das Projekt kompilieren...

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

Peter Bucher Themenstarter:in
5.941 Beiträge seit 2005
vor 17 Jahren

Die Solution Datei öffnen.
Referenz auf DoubleBufferedPanel.dll aktaullisieren bzw. korrigieren.

Starten!

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

S
112 Beiträge seit 2006
vor 17 Jahren

kompilieren geht doch über dos und dann crs oder sowas, das hatte ich probiert, ging nit

Auch anfänger haben "mal" ne frage 😁

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo Stube,

crs? Du meinst csc, oder? Ja sollte auch gehen, aber man muss natürlich genau die Schritte machen, die VS auch macht, also vermutlich auch noch Ressourcen einbinden.

Davon abgesehen ist "geht nicht" leider keine hilfreiche Fehlerbeschreibung.

herbivore

347 Beiträge seit 2006
vor 17 Jahren

Original von herbivore
Hallo Stube,

crs? Du meinst csc, oder? Ja sollte auch gehen, aber man muss natürlich genau die Schritte machen, die VS auch macht, also vermutlich auch noch Ressourcen einbinden.

Davon abgesehen ist "geht nicht" leider keine hilfreiche Fehlerbeschreibung. Oder einfach das Projekt/die Solution mit MsBuild kompilieren. 🙂

msbuild.exe DeinProjekt.csproj

natürlich noch den Pfad zu msbuild ergänzen bzw als Umgebungsvariable setzen.