Barrel Hop - Donkey Kong Clone

Hier könnt ihr euch selbst, eure Homepage, euren Entwicklerstammtisch, Termine oder eure Projekte vorstellen.
Forumsregeln
Bitte Präfixe benutzen. Das Präfix "[Projekt]" bewirkt die Aufnahme von Bildern aus den Beiträgen des Themenerstellers in den Showroom. Alle Bilder aus dem Thema Showroom erscheinen ebenfalls im Showroom auf der Frontpage. Es werden nur Bilder berücksichtigt, die entweder mit dem attachement- oder dem img-BBCode im Beitrag angezeigt werden.

Die Bildersammelfunktion muss manuell ausgeführt werden, die URL dazu und weitere Details zum Showroom sind hier zu finden.

This forum is primarily intended for German-language video game developers. Please don't post promotional information targeted at end users.
Antworten
Benutzeravatar
grinseengel
Establishment
Beiträge: 887
Registriert: 29.03.2011, 13:47
Echter Name: Andreas

Barrel Hop - Donkey Kong Clone

Beitrag von grinseengel »

Hallo,

gestern wurde ich inspiriert mich mit ChatGPT zu befassen. Idee war, ein Spiel nur mit ChatGPT Hilfe zu erstellen. Als Idee musste das gute alte Donkey Kong herhalten. Also habe ich ein generelles Gamescript, Kollisonserkennung und einen dazugehörigen Spritecontroller erstellen lassen. Noch ein paar Ergänzungen dazu gemacht (GUI), Leitererkennung und in meinen Assets gestöbert und dann hatte ich recht schnell etwas fertig.

Es fehlt noch der Feinschliff, aber es funktioniert schon ganz gut.

Bild
bruebaker
Establishment
Beiträge: 433
Registriert: 08.12.2015, 10:42
Benutzertext: Sven Rahn
Echter Name: Sven Rahn

Re: Barrel Hop - Donkey Kong Clone

Beitrag von bruebaker »

Cooles Experiment, das heist du hast chatcpt die monobehevior scripte schreiben lassen? Magst mal eins als Beispiel hochladen?
Benutzeravatar
grinseengel
Establishment
Beiträge: 887
Registriert: 29.03.2011, 13:47
Echter Name: Andreas

Re: Barrel Hop - Donkey Kong Clone

Beitrag von grinseengel »

Hier das grundsätzliche Game:

Code: Alles auswählen

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class DonkeyKongClone : MonoBehaviour
{
    public float jumpForce = 5f;
    public float moveSpeed = 3f;

    private Rigidbody2D rb;
    private bool isJumping = false;

    void Start()
    {
        rb = GetComponent<Rigidbody2D>();
    }

    void Update()
    {
        float moveX = Input.GetAxis("Horizontal");

        if (Input.GetButtonDown("Jump") && !isJumping)
        {
            rb.AddForce(new Vector2(0f, jumpForce), ForceMode2D.Impulse);
            isJumping = true;
        }

        rb.velocity = new Vector2(moveX * moveSpeed, rb.velocity.y);
    }

    void OnCollisionEnter2D(Collision2D collision)
    {
        if (collision.gameObject.CompareTag("Ground"))
        {
            isJumping = false;
        }
    }
}
Und hier der Spritecontroller:

Code: Alles auswählen

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class AnimatedSpriteController : MonoBehaviour
{
    public Sprite[] animationFrames;
    public float frameRate = 10f;

    private SpriteRenderer spriteRenderer;
    private int currentFrameIndex = 0;
    private float frameTimer = 0f;

    void Start()
    {
        spriteRenderer = GetComponent<SpriteRenderer>();
    }

    void Update()
    {
        frameTimer += Time.deltaTime;

        if (frameTimer >= 1f / frameRate)
        {
            frameTimer -= 1f / frameRate;

            currentFrameIndex++;
            if (currentFrameIndex >= animationFrames.Length)
            {
                currentFrameIndex = 0;
            }

            spriteRenderer.sprite = animationFrames[currentFrameIndex];
        }
    }
}
Benutzeravatar
grinseengel
Establishment
Beiträge: 887
Registriert: 29.03.2011, 13:47
Echter Name: Andreas

Re: Barrel Hop - Donkey Kong Clone

Beitrag von grinseengel »

Das Ganze geht auch mit einem Promt incl. Erkennung der Leitern:

Code: Alles auswählen

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class DonkeyKongClone : MonoBehaviour
{
    public float moveSpeed = 3f;
    public float jumpForce = 5f;

    public Sprite[] idleFrames;
    public Sprite[] walkFrames;
    public Sprite[] climbFrames;

    private SpriteRenderer spriteRenderer;
    private bool isJumping = false;
    private bool isClimbing = false;

    void Start()
    {
        spriteRenderer = GetComponent<SpriteRenderer>();
    }

    void Update()
    {
        float moveX = Input.GetAxis("Horizontal");
        float moveY = Input.GetAxis("Vertical");

        if (moveX != 0f && !isClimbing)
        {
            PlayAnimation(walkFrames);
            transform.Translate(new Vector3(moveX * moveSpeed * Time.deltaTime, 0f, 0f));
        }
        else if (isClimbing)
        {
            PlayAnimation(climbFrames);
            transform.Translate(new Vector3(0f, moveY * moveSpeed * Time.deltaTime, 0f));
        }
        else
        {
            PlayAnimation(idleFrames);
        }

        if (Input.GetButtonDown("Jump") && !isJumping)
        {
            Jump();
        }
    }

    void Jump()
    {
        Rigidbody2D rb = GetComponent<Rigidbody2D>();
        rb.AddForce(new Vector2(0f, jumpForce), ForceMode2D.Impulse);
        isJumping = true;
    }

    void OnCollisionEnter2D(Collision2D collision)
    {
        if (collision.gameObject.CompareTag("Ground"))
        {
            isJumping = false;
        }
    }

    void OnTriggerStay2D(Collider2D collision)
    {
        if (collision.gameObject.CompareTag("Ladder"))
        {
            isClimbing = true;
        }
    }

    void OnTriggerExit2D(Collider2D collision)
    {
        if (collision.gameObject.CompareTag("Ladder"))
        {
            isClimbing = false;
        }
    }

    void PlayAnimation(Sprite[] animationFrames)
    {
        int frameIndex = Mathf.FloorToInt(Time.time * moveSpeed) % animationFrames.Length;
        spriteRenderer.sprite = animationFrames[frameIndex];
    }
}
bruebaker
Establishment
Beiträge: 433
Registriert: 08.12.2015, 10:42
Benutzertext: Sven Rahn
Echter Name: Sven Rahn

Re: Barrel Hop - Donkey Kong Clone

Beitrag von bruebaker »

Nicht schlecht.
NytroX
Establishment
Beiträge: 387
Registriert: 03.10.2003, 12:47

Re: Barrel Hop - Donkey Kong Clone

Beitrag von NytroX »

Auf jeden Fall interessant. Bei mir kommt bei den AI-Sachen immer nur Grütze raus; er vergisst nach dem 6. oder 7. Nachbessern immer, was vorher besprochen wurde. Für einfache Sachen reichts, aber das wars dann auch schon; ich kriege das nicht richtig hin mit AI.
Benutzeravatar
grinseengel
Establishment
Beiträge: 887
Registriert: 29.03.2011, 13:47
Echter Name: Andreas

Re: Barrel Hop - Donkey Kong Clone

Beitrag von grinseengel »

Für einfache Sachen reichts, aber das wars dann auch schon; ich kriege das nicht richtig hin mit AI.
Ja das stimmt schon. Aber es nimmt einem viel der Nervarbeiten ab und wenn man mal einen Umsetzungsvorschlag haben möchte gibt es ganz gute Ansätze.
Benutzeravatar
joeydee
Establishment
Beiträge: 1127
Registriert: 23.04.2003, 15:29
Kontaktdaten:

Re: Barrel Hop - Donkey Kong Clone

Beitrag von joeydee »

Kommt auch darauf an, mit welchem Modell man arbeitet. ChatGPT 3/3.5 kann glaube ich um die 2000 Wörter als Benutzereingabe verarbeiten, GPT4 25000. Ich denke die Erweiterung trifft dann auch sicher irgendwie auf die Backref des Chatverlaufs zu.
Die meisten freien Alternativen sind soweit ich weiß merklich leistungsschwächer als GPT3, auch wenn sie als gleichwertig beworben werden.
Außerdem natürlich, ob in den Trainingsdaten ähnliche Aufgaben schon oft ähnlich gelöst wurden, oder ob man z.B. eine Neu-/Weiterentwicklung eines Algos diskutieren möchte, was dann ja nur schwer aus den Trainingsdaten ableitbar ist.
Benutzeravatar
grinseengel
Establishment
Beiträge: 887
Registriert: 29.03.2011, 13:47
Echter Name: Andreas

Re: Barrel Hop - Donkey Kong Clone

Beitrag von grinseengel »

Kommt auch darauf an, mit welchem Modell man arbeitet. ChatGPT 3/3.5 kann glaube ich um die 2000 Wörter als Benutzereingabe verarbeiten, GPT4 25000.
Ok, das ist schon enorm. Ich frage mich nur, ob das dann so eine Erleichterung darstellt wenn ich mir erst einen Prompt mit 1000 Worten einfallen lassen muss. Es kommt natürlich auf die Komplexität des Scripts an. Ich denke aber da ist man dann teilweise schneller am Ziel, das herkömmlich zu erstellen.

Ich habe das an meinem Beispiel eher mit kleinen Einzelscripten gemacht. Das ist natürlich nicht elegant, aber darauf kam es mir auch nicht an. Ich habe einfach, egal ob ich das jeweils selber hinbekommen hätte, meine jeweiligen Wünsche von ChatGPT umsetzen lassen und die einzelnen "Module" dann ins Projekt gebracht. Das funktionierte natürlich nicht ohne etwas weitere Handarbeit, da das ja auch dem UI und den Objekten zugewiesen werden musste. Das kann ChatGPT natürlich "noch" nicht.

Im Moment sind die einzelnen KI (Text, Grafik, Video und Audio) nicht generell verknüpft. Ich bin mal gespannt wann das Fahrt aufnimmt.
Benutzeravatar
woodsmoke
Establishment
Beiträge: 100
Registriert: 30.06.2023, 14:05
Benutzertext: behandeltObjektewieFrauen
Wohnort: Ludwigshafen
Kontaktdaten:

Re: Barrel Hop - Donkey Kong Clone

Beitrag von woodsmoke »

Haha der Affe gefällt mir gut!

Wäre sehr interessant zu sehen mit welchen Wörtern du "gefragt" hast. Das ist ja die Kunst um ChatGPT zu nutzen und was Programmierer vielleicht schnell lernen sollten um nicht zurück gelassen zu werden.
Benutzeravatar
joeydee
Establishment
Beiträge: 1127
Registriert: 23.04.2003, 15:29
Kontaktdaten:

Re: Barrel Hop - Donkey Kong Clone

Beitrag von joeydee »

grinseengel hat geschrieben: 07.07.2023, 10:43 wenn ich mir erst einen Prompt mit 1000 Worten einfallen lassen muss.
Kurz offtopic:
Das ist ja kein Muss, bietet aber die Gelegenheit größere Dokumente zu besprechen, auszuwerten, zu vergleichen. Wird vor allem auch bei API-Anwendungen interessant, da werden i.d.R. längere Prompts generiert um GPT auf die Rolle vorzubereiten und Basiswissen zu vermitteln.
Und ich gehe einfach mal davon aus, dass durch mehr möglichen Kontext auch die zurückliegende Unterhaltung länger sein kann und genauer beachtet wird, aber genau weiß ich es nicht.
Benutzeravatar
joeydee
Establishment
Beiträge: 1127
Registriert: 23.04.2003, 15:29
Kontaktdaten:

Re: Barrel Hop - Donkey Kong Clone

Beitrag von joeydee »

Zum Projekt jedenfalls: Interessantes Experiment :)
Zum Screenshot: Grafisch sieht das auch schon sehr stimmig aus, Stil der Assets passt gut zusammen, Hintergrund lenkt nicht ab.
Die Outline beim Affen könnte etwas kräftiger sein im Vergleich zum Rest, ansonsten passt es gut.
Benutzeravatar
grinseengel
Establishment
Beiträge: 887
Registriert: 29.03.2011, 13:47
Echter Name: Andreas

Re: Barrel Hop - Donkey Kong Clone

Beitrag von grinseengel »

Wäre sehr interessant zu sehen mit welchen Wörtern du "gefragt" hast. Das ist ja die Kunst um ChatGPT zu nutzen und was Programmierer vielleicht schnell lernen sollten um nicht zurück gelassen zu werden.
Übung habe ich damit ja auch nicht. Am Beispiel mit dem Spritecontroller bin ich so vorgegangen:

Schreibe ein Script für unity für einen spritecontroller der die animationsphasen für idle, Run und climbing abspielt.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SpriteController : MonoBehaviour
{
private Animator animator;

// Animation states
private const string IdleAnimation = "Idle";
private const string RunAnimation = "Run";
private const string ClimbAnimation = "Climb";

void Start()
{
// Holen Sie sich den Animator-Komponenten des GameObjects
animator = GetComponent<Animator>();
}

void Update()
{
// Überprüfen Sie den Eingang des Spielers, um die entsprechenden Animationen abzuspielen
float moveInput = Input.GetAxis("Horizontal");

if (moveInput != 0)
{
// Wenn der Spieler sich horizontal bewegt, spiele die Run-Animation ab
animator.Play(RunAnimation);
}
else if (Input.GetKey(KeyCode.Space))
{
// Wenn der Spieler die Leertaste drückt, spiele die Climb-Animation ab
animator.Play(ClimbAnimation);
}
else
{
// Ansonsten spiele die Idle-Animation ab
animator.Play(IdleAnimation);
}
}
}

Hier ist mir dann aufgefallen, dass nur ein einzelnes Sprite abgespielt wird.

Also Ergänzung.

Jede spriteanimation hat 8 sprites

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SpriteController : MonoBehaviour
{
private SpriteRenderer spriteRenderer;

// Animation states
private const string IdleAnimation = "Idle";
private const string RunAnimation = "Run";
private const string ClimbAnimation = "Climb";

// Sprites for each animation
public Sprite[] idleSprites;
public Sprite[] runSprites;
public Sprite[] climbSprites;

// Animation speed
public float animationSpeed = 0.1f;

private void Start()
{
spriteRenderer = GetComponent<SpriteRenderer>();
StartCoroutine(PlayAnimation(IdleAnimation, idleSprites));
}

private IEnumerator PlayAnimation(string animationState, Sprite[] sprites)
{
int spriteIndex = 0;
while (true)
{
// Set the current sprite based on the animation state and index
spriteRenderer.sprite = sprites[spriteIndex];

// Increment the sprite index
spriteIndex = (spriteIndex + 1) % sprites.Length;

yield return new WaitForSeconds(animationSpeed);
}
}

private void Update()
{
float moveInput = Input.GetAxis("Horizontal");

if (moveInput != 0)
{
StopAllCoroutines();
StartCoroutine(PlayAnimation(RunAnimation, runSprites));
}
else if (Input.GetKey(KeyCode.Space))
{
StopAllCoroutines();
StartCoroutine(PlayAnimation(ClimbAnimation, climbSprites));
}
else
{
StopAllCoroutines();
StartCoroutine(PlayAnimation(IdleAnimation, idleSprites));
}

}

Damit kann ich leben.
Benutzeravatar
grinseengel
Establishment
Beiträge: 887
Registriert: 29.03.2011, 13:47
Echter Name: Andreas

Re: Barrel Hop - Donkey Kong Clone

Beitrag von grinseengel »

Soweit ist mein kleines Experiment spielbar. Es existiert ein Level. Ziel ist es die Person oben beim Affen zu befreien, dann ist das Spiel gewonnen. Links ist die lebensanzeige zu sehen und ein Punktezähler. Die erreichten Punkte werden dann in den Sieg-Screen übernommen.

Was noch kommt, ist ein zusätzlicher Level und die obligatorische Highscore Anzeige. Die fehlt noch. Bis hierher ist alles mit Scripten aus Chat GPT erstellt worden. Minimale Änderungen habe ich aber vornehmen müssen.

Hier der Download: https://www.pchobbyspieleschmiede.de/Ba ... relHop.rar

Bild

Bild

Bild

Bild
Benutzeravatar
grinseengel
Establishment
Beiträge: 887
Registriert: 29.03.2011, 13:47
Echter Name: Andreas

Re: Barrel Hop - Donkey Kong Clone

Beitrag von grinseengel »

Gerade den zweiten Level fertig gestellt. Damit es etwas anspruchsvoller wird, doppelte Affenpower und ein etwas anderes Szenario. Jetzt noch den Highscore einbauen und fertig.

Benutzeravatar
grinseengel
Establishment
Beiträge: 887
Registriert: 29.03.2011, 13:47
Echter Name: Andreas

Re: Barrel Hop - Donkey Kong Clone

Beitrag von grinseengel »

Der Online Highscore ist eingebaut und die Punkte werden in den zweiten Level mit übernommen. Viel Spaß beim Affentheater.

Download: https://www.pchobbyspieleschmiede.de/Ba ... relHop.rar
Benutzeravatar
grinseengel
Establishment
Beiträge: 887
Registriert: 29.03.2011, 13:47
Echter Name: Andreas

Re: Barrel Hop - Donkey Kong Clone

Beitrag von grinseengel »

Ich muss ja so langsam alle meine angefangenen Projekte zum Ende bringen. Heute habe ich meinen Donkey Kong Clone fertig.

Was habe ich:

- zwei Level
- drei Spielerleben
- drei Schwierigkeitsgrade
- drei unterschiedliche Online-Highscore-Boards

Spielprinzip:

Der Spieler startet mit 500 Punkten, die jede Sekunde um 1 gemindert werden. Je schneller der Spieler beide Level erledigt hat, umso höher fällt sein Punktestand aus. Dieser kann dann in den Highscore übertragen werden.

Hier der Download von der aktuellen Version: https://www.pchobbyspieleschmiede.de/Ba ... p1.0.0.rar

Bild

Bild

Bild
Benutzeravatar
Jonathan
Establishment
Beiträge: 2545
Registriert: 04.08.2004, 20:06
Kontaktdaten:

Re: Barrel Hop - Donkey Kong Clone

Beitrag von Jonathan »

Habs mal ausprobiert. Soweit alles ganz nett.

Erstes Problem: Auf Ultra-Widescreens (3440 x 1440) ist die GUI abgeschnitten. Ich kann das Spiel trotzdem starten, aber beispielsweise der "Barrel Hop" Titel im Hauptmenü ist nicht zu sehen.
(Habs gerade getestet, Harald hat ein ganz ähnliches Problem, das muss ich wohl auch mal anpassen.)

Das Spiel ansich läuft dann aber gut. Ich war erst etwas verwundert, dass man an der Laterne hängen bleiben kann, das ist jetzt nicht wirklich ein Bug (sie ist ja da) aber ich fands merkwürdig, dass sie nicht einfach im Hintergrund ist. Egal. Steuerung fühlte sich erst etws träge an, aber für ein Donkey Kong Clone muss das wohl so - die Herausforderung soll ja sein, über die Fässer zu kommen, da kann man nicht hyper-agil sein.

Ich habs einmal auf Mittel und dann auf schwer gespielt. Hab keinen großen Unterschied feststellen können und bin keinmal gestorben und war jeweils nach einer Minute Spielzeit durch. Das Fässerausweichen fühlt sich gut an, im Gegensatz zum Original hatte ich nicht das Gefühl, dass ich weden der komischen Steuerung dutzendemale sterbe. Man kann einfach drüber springen und auch die Leitern gut greifen. Aber insgesamt wars dadurch viel zu einfach, beim zweiten mal bin ich ziemlich optimal durchgerannt, quasi ohne stehen zu bleiben. Und da es nur 2 Level gibt hatte ich dann Gefühl auch schon alles gesehen zu haben, nichts besser machen zu können und keinen Grund zu haben eine dritte Runde zu spielen. Mit insgesamt vlt. 2 Minuten Spielzeit also sicherlich das kürzeste Spiel, dass ich je gespielt habe.

Ich sag ja immer "besser kurz und lustig, als lang und nervig". Aber hier geht mir das vlt. ein wenig zu weit ;)

Der Highscore Bildschirm ist btw. sehr verwirrend. Ich bin mir nicht sicher was die Buttons unten alle sollen, man scheint sich damit durch tausende Einträge klicken zu können, allerdings schien ich auch der einzige in der Liste zu sein. Hm.
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
Benutzeravatar
grinseengel
Establishment
Beiträge: 887
Registriert: 29.03.2011, 13:47
Echter Name: Andreas

Re: Barrel Hop - Donkey Kong Clone

Beitrag von grinseengel »

Ok, danke für deinen Test.

Ja der Spielumfang ist recht bescheiden. Sollte ursprünglich ja ein Chat-GPT Projekt werden. Dann habe ich doch irgendwie mehr daraus gemacht. Mir war wichtig das in ein fertiges Gesamtbild zu bringen und dann habe ich noch etwas mit dem Online-Highscore rumprobiert.

Der ist jetzt für viele hundert Einträge gedacht. Daher machen die Möglichkeiten der Anzeige mit nur einem Eintrag nicht viel Sinn. Mann kann vorgeben wie viele Einträge man sehen möchte. Dann kann man das noch zeitlich filtern , reloaden und einzeln durch die Einträge klicken..
Antworten