RE: Here is what Qwen 3.5 still cannot answer, still struggles with C64 coding skills. Full transcript (Qwen3.5-35B-A3B)
You are viewing a single comment's thread:
Ich schaff das irgendwie mit VICE nicht. Anscheinend muss man das nochmal ändern mit petcat oder so, .. aber das geht bei mir nicht.
Kannst du mal schauen, ob das ein gültiger Code ist?
10 REM *** SNAKE SPIEL - COMMODORE 64 ***
20 PRINT "SNAKE GAME" : GOTO 300
300 SCREEN 1 : DEFDBL A-Z
400 GOSUB 800 : P = 0
500 REM --- SCHNAPPAZTE ---
600 ON S GOTO 700,800,900,1000
700 IF S=1 THEN GOTO 720 ELSE RETURN
800 IF S=2 THEN GOTO 830 ELSE RETURN
900 IF S=3 THEN GOTO 930 ELSE RETURN
1000 IF S=4 THEN GOTO 1030 ELSE RETURN
720 D=-5 : RETURN
830 D=5 : RETURN
930 D=-1 : RETURN
1030 D=1 : RETURN
110 REM --- KONTROLLE ---
120 IF D=P THEN RETURN : P=D
130 REM --- SCHNAPPAZTE ZUORDNEN ---
140 IF D=5 THEN S=1
150 IF D=-5 THEN S=2
160 IF D=-1 THEN S=3
170 IF D=1 THEN S=4
180 REM --- SCHLAUCHBEWEGUNG ---
190 A = P(1) : B = 0
200 FOR I = 1 TO 25 : P(I) = P(I+1) : NEXT I
210 P(1) = S : B = 1
220 REM --- SCHNAPPE ---
230 IF D=B THEN GOSUB 600 : RETURN
240 REM --- KOLLISIONEN ---
250 A = INT((X / 20)) : B = INT((Y / 20))
260 IF X < 0 OR X > 430 OR Y < 0 OR Y > 390 THEN GOSUB 1000
270 FOR I = 1 TO 25
280 IF A = P(I) THEN GOTO 260 : RETURN
290 NEXT I
300 REM --- NEUE SCHNAPPE ---
310 Y = RND(400) - 200 : X = RND(400) - 200
320 RETURN
1000 PRINT "GAME OVER" : RETURN
600 GOTO 400
800 REM --- STARTEN ---
900 P(1) = 1 : P(2) = 2 : D = 5 : X = 100 : Y = 100 : S = 1 : B = 0
1000 A = 0 : Z = 0
1100 FOR K = 1 TO 10 : S = INT(RND(4)) + 1 : NEXT K
1200 REM --- ZEICHNEN ---
1300 CLS : SCREEN 1
1400 ON S GOSUB 300, 400, 500, 600
1500 ON D GOSUB 700, 800, 900, 1000
1600 WAIT 100 : RETURN
300 REM --- SNAKE TEILE ZUORDNEN ---
400 FOR I = 1 TO 25
500 P(I) = P(I+1) : NEXT I
600 P(1) = S
700 RETURN
800 REM --- KONTROLLE DER SCHNAPPE ---
900 GOTO 1000
1000 REM --- SPIELBEENDEGUNG ---
1100 CLS : PRINT "SPIEL VORUB" : RETURN
Ich habe die Überlegung, zB Dokumente mit einzubinden. Vielleicht würde das helfen. Momentan habe ich etwas gefunden mit 237 Seiten (C64). Das habe ich gekürzt, aber das ladet schon viele Stunden. Ich verwende gerade qwen 3.5 9B und
Das sagt Copilot dazu:
Kurzantwort
Der gezeigte Code ist nicht korrekt für Commodore 64 BASIC V2. Er enthält mehrere Syntax‑ und Logikfehler (doppelte Zeilennummern, falsche Verwendung von
RND, Arrays nicht dimensioniert, widersprüchliche GOSUB/RETURN‑Flüsse u. a.). Unten erkläre ich die wichtigsten Probleme und liefere eine bereinigte, lauffähigere Struktur als Ausgangspunkt.Hauptprobleme im Originalcode
300,600,800,1000,1100): BASIC führt nur die letzte Definition einer Zeilennummer aus — das zerstört die Programmstruktur.P(1)wird verwendet, aberPwurde nie mitDIMdeklariert; gleichzeitig wirdPauch als Skalar (P = 0) benutzt — Namekonflikt.RND‑Aufruf:RND(400)ist falsch. In C64 BASIC istRND(1)(oderRND(0)) üblich; um Zufallszahlen in einem Bereich zu erzeugen, multipliziert manRND(1)mit der gewünschten Spanne und nimmtINT(...).RETURNausführen oderGOTOauf Zeilennummern, die anderswo wiederverwendet wurden — das führt zu unvorhersehbarem Verhalten.IF A = P(I) THEN GOTO 260 : RETURN— dasRETURNnachGOTOist sinnlos und verwirrend.S,P,D,B,Awerden mehrfach und inkonsistent verwendet; das macht das Programm schwer lesbar und fehleranfällig.SCREEN 1undDEFDBL A-Zsind nicht unbedingt falsch, aber deren Einsatz muss konsistent sein; Tastatureingabe (Richtung) fehlt oder ist nicht korrekt implementiert (GET,INKEY$o.ä. fehlt).Wichtige Korrekturen / Regeln
DIM PX(25), PY(25)für Körpersegmente.X = INT(RND(1) * 21)für Werte 0..20.dirX,dirY,headX,headY,len.GET A$/INKEY$(je nach Interpreter) verwenden, damit das Spiel weiterläuft, auch wenn keine Taste gedrückt wird.PRINT CHR$(147)löscht Bildschirm;PRINTmitTABoderPOKEfür Grafik; für ein einfaches Text‑Snake reichtPRINTmit Koordinaten nicht — man brauchtPOKE/PRINTan Positionen oder ein PETSCII‑Raster.Bereinigte Struktur (Beispielgerüst, kommentiert)
Das folgende Programm ist ein vereinfachtes, strukturiertes Gerüst in BASIC‑Stil. Es ist als Ausgangspunkt gedacht — je nach gewünschter Darstellung (Text/PETSCII/Bitmap) und Eingabemethode (GET/INKEY$) sind Anpassungen nötig.
Hinweise zum Beispielgerüst
DIMdeklariert Arrays;lenist die aktuelle Länge der Schlange.RANDOMIZEundRND(1)erzeugen Zufallszahlen;INT(RND(1)*N)liefert 0..N-1.GET A$ist ein Platzhalter für nicht‑blockierende Tastenerfassung; auf manchen C64‑Emulatoren/Interpretern istGET A$oderINKEY$zu verwenden.PRINTmit Cursorpositionierung oderPOKEin Bildschirmram) verwenden.Nächste Schritte ich kann übernehmen
GETvs.INKEY$und wie man auf dem echten C64 Tasten abfragt.Möchtest du, dass ich aus dem Gerüst eine komplett lauffähige C64 BASIC V2‑Version erstelle (mit PETSCII‑Anzeige und funktionierender Tastatursteuerung)?
ja, ChatGPT hats mir dann auch gesagt^