Vibe coding

Emner på denne side: Computer, Programmering, Spil

I et forsøg på at omfavne fremtiden, så har jeg sat mig for at prøve at kode et spil ved hjælp af såkaldt Vibe coding, hvilket betyder, at jeg ikke skriver en linje kode selv, men derimod kun anvender en AI og beskriver, hvad jeg vil have.

Jeg har lavet et par forsøg før, hvor min erfaring var, at AI’en hurtigt blev forvirret, og det hurtigt blev umuligt at komme videre, men jeg må også indrømme, at her brugte jeg blot en generel AI og ikke en AI, der var designet til at kode.

Mange bruger Claude Code, men da jeg allerede har et personligt abonnement på ChatGPT, så valgte jeg at bruge ChatGPT Codex, og det var så simpelt som at installere deres lille PC-program.

Som spilmotor har jeg valgt open source-motoren Godot, der ligeledes blot kan downloades fra internettet.

Jeg har læst lidt op på emnet på forhånd, og hemmeligheden til, at AI’en ikke skal miste overblikket, er at sprede såkaldte markdown-filer rundt i koden, som er instrukser til AI’en.

Helt centralt lægger man en AGENTS.md-fil, som giver en generel beskrivelse af projektet, og herfra kan man referere videre. Jeg fik ChatGPT til at skrive en indledende AGENTS.md-fil blot ved at beskrive, at jeg ville lave et spil i Godot og ikke havde nogen intention om at programmere noget selv.

Som en del af denne fil tilføjede jeg dette:

- The main vision for the game is documented in the [game vision](docs/vision.md).

Og i denne fil skrev jeg en kort vision for spillet.

# Vision

This is a traditional fantasy adventure game with a turnbased combat system designed to be the center of the experience.

For now we are only focusing on the combat part to ensure we are making something that is actually fun.

See the Unknown ID combat overview(combat/overview.md) for more information about the combat system.

Herfra skrev jeg så yderligere en fil om kamp i spillet.

# Combat Overview

## Combat screen overview

- The combat screen consists of a central main combat area, which fills most of the screen.

- In the top of the screen is the dice panel.

- In the left part of the screen is the action panel.

## The dice panel.

- The dice panel contains up to 8 slots that will be used to contain dices.

- A slot can either be active meaning that dices can go here or inactive meaning that no dice can go here.

## The action panel.

- Just use a placeholder for now.

## Main combat area

- Combat takes place on a combat field divided into 8 x 8 fields of a total of 64 fields.

- Each field is a green square which is subdivided into north, south, east, west and center.

- In the center of each field there can be four playing pieces in a 2x2 configuration.

- In the north and south part of each field, there can be two playing pieces beside each other.

- In the west and east part of each field, there can also be two playing pieces above/below each other.

## The playing pieces

- Each playing piece is a circular piece with a colour and a letter.

Jeg spurgte AI’en, om den kunne finde mine filer, og om den var klar til at bygge, og fik et positivt svar tilbage. Så bad jeg den gå i gang, og efter et minuts tid, hvor den endda havde prøvet at starte spillet på egen hånd for at sikre, at det ikke gik ned, fik jeg en klarmelding, og med bankende hjerte startede jeg selv Godot og åbnede det projekt, som jeg indtil videre ikke havde påvirket direkte (bortset fra mine markdownfiler).

Vildt. Det var mere eller mindre præcis, som jeg havde forestillet mig. AI’en havde dog samlet hele brættet i en fil, så både bræt, felter og figurer var samlet i samme kode-klasse. Jeg bad AI’en splitte det op, og efter 30 sekunder havde den restruktureret.

Jeg bad den initiere et GIT-repositorie til versionsstyring og lave et indledende commit. Rejsen var begyndt, og jeg var alt for op at køre til at kunne lægge det fra mig.

Min ide er, at man slår nogle terninger, og så har man nogle handlinger, der kræver bestemte terningeslag. Jeg startede med konceptet om ”Dice Slots”, som er felterne til terninger, herefter selve terningerne og til sidst restriktionerne, hvor vi først havde enkelt-restriktioner (f.eks. det skal være en sekser) og herefter grupperestriktioner (alle terningerne skal være ens / forskellige). Det tog måske en time, og så var vi her, komplet med terninger, der kan trækkes til felterne og kun kan trækkes til gyldige felter:

Min strategi, som lader til at virke indtil videre, er, at jeg skriver al logik i md-filerne og aldrig nævner den i chatten. I stedet bruger jeg hele tiden ”Jeg har nu skrevet noget om X, læs det og fortæl, hvordan du vil implementere det” eller for simplere ting blot ”Jeg har skrevet om X, implementer det”. Når jeg så vil teste med noget, så beder jeg om det i chatten. Jeg har f.eks. bedt om at få lige præcis de tre aktioner, man kan se til venstre, og at der bliver slået 8 tilfældige terninger, når mit spil starter.

Jeg er oppe at køre!