Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Projekt: PacMan
Remling
myCSharp.de - Member



Dabei seit:
Beiträge: 50
Herkunft: Südtirol

Themenstarter:

Projekt: PacMan

beantworten | zitieren | melden

Hallo liebe Community,

Ich habe vor kurzem mich mal an mein erstes größeres Spiel in C# gewagt. Einem PacMan. Es ist bei weitem nicht Perfekt, heißt es fehlen ein paar dinge aber in prinzip ist es Spielbar. Das heißt folgende dinge sind vorhanden:
-PacMan selbst mit animation (heißt mund auf und zu)
-münzen zum einsammeln mit punktecounter
-3 Leben (bei 0 ist Spielende)
-Ein Timer der Mitzählt
-Gegner (3 geister welche sich wirr ohne ziel bewegen)
-Spezialitem (damit man für kurze zeit die gegner töten kann)

Was ist nicht vorhanden:
-Eine gute KI (die gegner bewegen sich komplett random)
-gute Hitboxberechnungen bei gegnern (zurzeit stirbt man nur wenn man genau im gegner steht)
-Das movement ist teilweise noch schlecht, heißt man bleibt gerne an ecken hängen
-Musik (es gibt zwar die Audiodateien, diese funktionieren im code aber nicht einwandfrei)

Das dürfte soweit alles sein

Wenn es fragen zum Code gibt kann gerne gefragt werden.
Ps: es war mein erstes größeres projekt, die programmierung ist warscheinlich für die besseren unter euch grottig, sry dafür aber ich lerne noch :I

Edit: Die datei gibts jetzt als Dateianhand jedoch ohne musik weils sonst zu groß wäre, sonst bleibt alles gleich :P




Changelog: 18.06.2015

-Verbessertes Movement. PacMan Speichert nun die gedrückte taste für eine gewisse zeit um das movement zu verbessern. (Danke an: OlafSt)

-Edit: Uuuund gleich nen BugFix hinterher:
es war ein Bug vorhanden bei dem man teilweise an wänden für Kurzezeit stecken blieb (also wenn man mit dem rücken dagegen stand und z.B. links dann rechts gedrückt hat)


Changelog: 19.06.2015

-Neues Layout (Bild wurde weiter unten gepostet)
-X-Button zum beenden wurde hinzugefügt
-Sollten nurnoch maximal 10 Punkte auf dem Spielfeld sein wird kein neues Specialitem generiert
-achja fast vergessen: beim aufsammeln des Speedboostet bekommt man nun einen kleinen Speedboost für die Zeit :)

Bugfixes:
-Es wurde ein Bug behoben durch den man an einer gewissen Stelle aus der Map gehen konnte :P
-Es wurde ein bug behoben bei dem eine Fehlermeldung kahm wenn man das Spiel gewonenn hatte. (Edit: Danke an inflames2k für das Melden des Bugs)


Changelog: 22.06.2015
Es gab jetzt länger kein Update dafür ist das jetzt umso größer :P
-PacMan's farbe im "Ragemode" wurde ein wenig verdunkelt, einfach der Optikhalber
-Im "Ragemode" verändert sich das aussehen der Geister wie im Original
-Es wurden unnötige Timer und Methoden entfernt (hat keine direkte auswirkung auf das Gameplay, es wirkt nur flüssiger)

Und nun kommen wir zu den großen neuerungen :D
-Die KI der Geister wurde leicht verbessert, d.h. die Geister versuchen jetzt immer irgentwie zu euch zu kommen und euch zu verfolgen, wenn auch manchmal etwas unbeholfen
-Solltet ihr im "Ragemode" sein werden die Geister versuchen vor euch zu fliehen
-Geister haben einen gewissen Radius in dem sie euch verfolgen
Dieser Beitrag wurde 9 mal editiert, zum letzten Mal von Remling am .
Attachments
WHAT DOES THE FOX SAYS
private Nachricht | Beiträge des Benutzers
bredator
myCSharp.de - Member



Dabei seit:
Beiträge: 368

beantworten | zitieren | melden

Zwar noch nicht getestet, aber ich halte erst mal nichts davon, jemanden von der Seite anzumachen, nur weil derjenige noch lernt. Von daher schonmal: Gute Arbeit, unabhängig von der Codequalität. Guten Code kann man mit der Zeit lernen, aber jemand, der gar nicht erst den Hintern hochbekommt, kriegt man nur schwer dazu, überhaupt was zu tun.

Beim kurzen reinschauen allerdings gesehen, dass du bei jedem Tastendruck ein Bild von der Festplatte ausliest. Das würde ich einmal zu Spielbeginn machen und dann nur noch zwischen den Speicherobjekten wechseln. Besser noch: du brauchst nur 2 Bilder, eins mit und eins ohne Mund. Das kannst du im Speicher in 90° Schritten drehen. Spart Ressourcen und vor allem IO-Zugriffe. ;)
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von bredator am .
private Nachricht | Beiträge des Benutzers
Remling
myCSharp.de - Member



Dabei seit:
Beiträge: 50
Herkunft: Südtirol

Themenstarter:

beantworten | zitieren | melden

Danke schonmal für das nette Feedback :)

ich hatte anfangs die selbe Idee mit dem 90° hatte dann aber das problem das wenn ich z.B. nach oben gehe und dann nach unten will ich ja um 180° drehen muss und ich anfangs eher dachte es sei so einfacher als das alles einzeln abzufragen :I
WHAT DOES THE FOX SAYS
private Nachricht | Beiträge des Benutzers
chilic
myCSharp.de - Experte



Dabei seit:
Beiträge: 2112

beantworten | zitieren | melden

KI ist ein bisschen zu viel gesagt für das Spiel. Was genau meinst du damit?
Zeige oder beschreibe relevante Teile, wie bewegst du die Figuren? Wie berechnest du den Hit?
Berechne die Distanz zwischen zwei Figuren mit Pythagoras, wenn die kleiner ist als ... dann ist es ein Hit.
Wie ist das Prinzip der Bewegung, was passiert beim hängenbleiben?

Zur Bewegung: Bei jedem Schritt neu per Random eine Richtung wählen ergibt nur ein Zittern. Das musst du verfeinern, damit eine eingeschlagene Richtung für eine bestimmte (zufällige) Zeit beibehalten wird.
Zum drehen der Figur kannst du den Originalzustand behalten und den jedes mal drehen. Oder du hältst einfach alle 4 Richtungen. So schlimm resourcenfressend finde ich das noch nicht, das dürfte nur ein kleines Bildchen sein.
private Nachricht | Beiträge des Benutzers
malignate
myCSharp.de - Member

Avatar #avatar-3206.png


Dabei seit:
Beiträge: 751

beantworten | zitieren | melden

Bei Pacman gibts genau 4 Geister, jeder hat eine eigene Strategie.

Schau mal hier rein: http://home.comcast.net/~jpittman2/pacman/pacmandossier.html#Chapter_4

Du kannst natürlich deinen eigenen Ansatz reinbringen, aber für den Anfang ist das vll. nicht schlecht.
private Nachricht | Beiträge des Benutzers
Stefan.Haegele
myCSharp.de - Member

Avatar #avatar-3068.jpg


Dabei seit:
Beiträge: 440
Herkunft: Untermeitingen

beantworten | zitieren | melden

Wollte es mir gerade anschauen, aber ich finde keinen Link, oder bin ich blind?
private Nachricht | Beiträge des Benutzers
Remling
myCSharp.de - Member



Dabei seit:
Beiträge: 50
Herkunft: Südtirol

Themenstarter:

beantworten | zitieren | melden

Sry die Datei ist nun als Dateianhang zu finden :)


-malignate:
Danke für den Hinweis, werde es mir gleich mal durlesen :)
WHAT DOES THE FOX SAYS
private Nachricht | Beiträge des Benutzers
OlafSt
myCSharp.de - Member



Dabei seit:
Beiträge: 71
Herkunft: HH

beantworten | zitieren | melden

Das der Pacman beim Abbiegen an einer Wand oder Ecke hängen bleibt, ist n bissel nervig Der geübte WASD-WoW-Zocker kriegt da schnell ne Zornesader :auf der Stirn Aber dagegen gibt es ein Mittel. Das original-Pacman aus den 70er Jahren ist einfach so lange in die bisherige Richtung weitergelaufen, bis es abbiegen konnte - allerdings nur solange, bis es einen (oder waren es zwei ?) "Freßpunkte" überquert hatte (unabhängig davon, ob der Punkt nun tatsächlich gefressen wurde oder nicht). Jedes Kommando zur Richtungsänderung hat diese "Warten bis ich abbiegen kann" natürlich überschrieben.

Ansonsten finde ich das ganze echt gelungen - den Code habe ich mir allerdings nicht angeschaut, der ist ausdrücklich aus dieser Wertung ausgenommen
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von OlafSt am .
private Nachricht | Beiträge des Benutzers
Remling
myCSharp.de - Member



Dabei seit:
Beiträge: 50
Herkunft: Südtirol

Themenstarter:

beantworten | zitieren | melden

hh danke für das feedback
ja ich weiß die Steuerung ist sehr hackelig, wollte das mit dem zwischenspeichern schon vorher einbauen hatte da aber ein par schwierigkeiten werde es aber nochmal versuchen damit das alles flüssiger leuft :3

edit: hier mal ein bild vom neuen Design
vorschläge sind immer willkommen :D
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Remling am .
Attachments
WHAT DOES THE FOX SAYS
private Nachricht | Beiträge des Benutzers
inflames2k
myCSharp.de - Experte

Avatar #AARsmmPEUMee0tQa2JoB.png


Dabei seit:
Beiträge: 2340

beantworten | zitieren | melden

Hallo,

ich habe es mal angetestet. Nach dem Beenden der Spielrunde erscheint die Meldung, dass es abgeschlossen wurde und wie lange man dafür gebraucht hat. - Nach Bestätigung der Meldung wird eine IndexOutOfRange Exception geworfen. - Das solltest du auf jeden Fall noch Fixen.
Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager | Spielkartenbibliothek
private Nachricht | Beiträge des Benutzers
Remling
myCSharp.de - Member



Dabei seit:
Beiträge: 50
Herkunft: Südtirol

Themenstarter:

beantworten | zitieren | melden

oha danke hab ich garnicht gesehen :D
aber ich weiß schon was ich fixen muss :)
WHAT DOES THE FOX SAYS
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15705
Herkunft: BW

beantworten | zitieren | melden

Kurzer Hinweis.
Meines Wissens nach ist "Pac-Man" von Namco geschützt, wie auch die Figuren.
Du solltest es dann - vermutlich - nicht direkt PacMan nennen, sondern vielleicht eher sowas wie "ähnlich wie PacMan".
Aber was da der sichere Weg ist, das kann ich Dir nicht sagen.

Das ist ja wie wenn Du in der Garage nen Auto zusammen baust und es dann Porsche nennst.
private Nachricht | Beiträge des Benutzers
Palin
myCSharp.de - Member



Dabei seit:
Beiträge: 1115

beantworten | zitieren | melden

Zu KI vieliecht einen Vorschlag.

Grundlegend könntest du für die Geister immer den kürzesten Weg zu PacMan berechnen und sie ihn gehen lasse. (Sollte sich ein Algorithmus zu im Internet finden.)

Wenn sich 2 Geister berühren, kannst du den einen den kürzesten Weg gehen lassen. Für den 2. tust du dann so tun als ob der Weg in der Richtung Blockiert ist. Für den 3 (oder Mehr). kannst du dann schauen ob noch ein Weg frei ist, wenn ja da den den Weg nehmen, ansonsten denn des ersten.

Ich denke den Weg wirst du auch nicht jede "GameLoop" neu berechnen müssen (Wo mit du einen Skalierungs Faktor hast). Und je weiter die Geister von PacMan weg sind, des soweniger offt / genau musst du den Weg berechnen.

Ich denke da hat Abt schon recht. In meiner jugend habe ich "Rudi the Rat" gespielt. Ein PacMan Clon in dem eine Ratte Käse gesammelt hat und von Katzen gejagt wurde.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Palin am .
Sollte man mal gelesen haben:

Clean Code Developer
Entwurfsmuster
Anti-Pattern
private Nachricht | Beiträge des Benutzers
MrSparkle
myCSharp.de - Team

Avatar #avatar-2159.gif


Dabei seit:
Beiträge: 5963
Herkunft: Leipzig

beantworten | zitieren | melden

Zitat von Palin
In meiner jugend habe ich "Rudi the Rat" gespielt.

Auf der Robotron PolyPlay war der Pacman-Clone im Hase-und-Wolf-Stil.

Ich würde ja ein Oktopus-Thema bevorzugen.

Aber offenbar sind Abts Bedenken nicht ganz abwegig: Namco Shuts Down Student's Pac-Man Project 8o

Christian
Weeks of programming can save you hours of planning
private Nachricht | Beiträge des Benutzers
Remling
myCSharp.de - Member



Dabei seit:
Beiträge: 50
Herkunft: Südtirol

Themenstarter:

beantworten | zitieren | melden

Danke für die Anregungen, bin grade nur viel mit dem Design und Bugfixen beschäftigt
aber hier mal das Aktuelle Design, gefällt mir persönlich besser als das Alte :D
Attachments
WHAT DOES THE FOX SAYS
private Nachricht | Beiträge des Benutzers