Foto von Joshua Doherty auf Unsplash

Öffnen Sie chatgpt PLUS

Apropos: Kann ChatGPT+SGDK ein neues MD-Spiel (SEGA Mega Drive) veröffentlichen? In den letzten Tagen habe ich ChatGPT PLUS geöffnet und möchte versuchen, ChatGPT als kleines Spiel zu verwenden, das auf MD-Konsolen gespielt werden kann. Übrigens werde ich den Entstehungsprozess dieses Spiels aufzeichnen. Welches Spiel ich erstellen soll ? Der letzte Artikel hat den kleinen google Chrome-Dinosaurier gefälscht. Wählen Sie also den kleinen Google Chrome-Dinosaurier und tun Sie es, ohne zu viel zu reden. . .

Einfache Projektdatei- und Umgebungsinstallation

Als ich anfing, Google Chrome Little Dinosaur zu schreiben, um den Plan auszuführen, dachte ich plötzlich, ich könnte ChatGPT bitten, es von Hand zu schreiben, und ChatGPT öffnen, um es direkt einzugeben„Bitte helfen Sie mir, die einfache Produktionsplanungsdokumentation für das Google Chrome-Dinosaurierspiel zu sortieren.“ChatGPT antwortete auch sofort:

Leider nicht schlecht, sieht gut aus, obwohl es nicht besser ist als mein Schreiben (schuldig), zumindest ist es schneller als ich, dann werden wir uns widerwillig auf dieses Dokument beziehen und anfangen, Spiele zu machen. Zuerst bauen wir die Entwicklungsumgebung auf. Bitte Link zur folgenden Website, um das Tool herunterzuladen. Insgesamt gibt es drei Dateien:

  • KMod v0.7.3-Emulator (Dateiname:Gens_KMod_v0.7.3.7z)
  • Visual Studio Code (Dateiname:VSCodeUserSetup-x64–1.78.0-insider.exe)

Erstellen Sie nach dem Herunterladen ein MegaDrive-Verzeichnis, in das Sie die drei Dateien kopieren können. Dekomprimieren Sie zunächst sgdk180.7z und Gens_KMod_v0.7.3.7z, installieren Sie dann VSCodeUserSetup-x64–1.78.0-insider.exe und öffnen Sie es, nachdem die Installation von Visual Studio Code abgeschlossen ist Sehen Sie sich die folgende Abbildung an, um das Genesis-Code-Plug-in zu finden und zu installieren:

Legen Sie als Nächstes den Genesis-Code fest und öffnen Sie die Option „Einstellungen“.

Richten Sie es gemäß der Abbildung unten ein

Schließen Sie nach dem Festlegen Visual Studio Code, geben Sie dann das Verzeichnis sgdk180 ein und führen Sie build_adv.bat und build_lib.bat aus

Starten Sie nach Abschluss Visual Studio Code neu, drücken Sie die Tastenkombination Strg+Umschalt+P und erstellen Sie ein Testprojekt gemäß den folgenden Schritten:

Erstellen Sie ein Testverzeichnis und wählen Sie dieses Verzeichnis aus

Öffnen Sie das Terminal

Befolgen Sie die Schritte in der folgenden Abbildung, um die Konfiguration auszuführen und das Programm zu kompilieren

Wenn Sie nach dem Kompilieren das folgende Fenster sehen, herzlichen Glückwunsch! Unsere Entwicklungsumgebung ist eingerichtet

Beginnen Sie mit ChatGPT zu kommunizieren, um Spiele zu erstellen

Kommen Sie noch einmal, wir werden ChatGPT PLUS mit einem monatlichen Gehalt von 600 Taiwan-Dollar einladen und es ihm direkt auf den Punkt bringen„Verwenden Sie bitte SGDK 1.70, um ein Spiel ähnlich dem Google Chrome-Dinosaurier zu schreiben.“weil ich zu nervös und stotterte, wollte ich ursprünglich sagen, dass ich eine Stunde laufen soll, aber als ich mich gerade umdrehen und in die Speisekammer gehen wollte, um einen Kaffee zu kochen und faul zu sein, hatte ChatGPT bereits die Hälfte geschrieben Code und blieb stehen, also musste ich anrufen. Er beobachtet mich weiterhin!

Die Fertigstellung dauerte weniger als zwei Minuten, okay! Ich persönlich denke, dass diese Ausgabegeschwindigkeit unvergleichlich ist, und ich kann mich nur trösten, dass der schnelle Inhalt, den ich geschrieben habe, richtig ist. Gemäß den Aussagen von ChatGPT erstellen wir zunächst ein sgdk_dino-Projekt (das Das Verfahren ist das gleiche wie beim Erstellen eines Testprojekts. Öffnen Sie nach Abschluss der Erstellung main.c, löschen Sie alle darin enthaltenen Daten, kopieren Sie den gesamten von ChatGPT geschriebenen Code und fügen Sie ihn ein. Beginnen Sie dann mit dem Verständnis des Codes. und festgestellt, dass nur zwei Fehler #include resources.h nicht erforderlich sind. Löschen Sie es zuerst und fügen Sie den Code hinzu, der den Joystick nicht antreibt. Bitte fügen Sie Folgendes hinzu:

u8 value;
value = JOY_getPortType(PORT_1);
switch (value)
{
   case PORT_TYPE_MENACER:
       JOY_setSupport(PORT_1, JOY_SUPPORT_MENACER);
       break;
   case PORT_TYPE_JUSTIFIER:
       JOY_setSupport(PORT_1, JOY_SUPPORT_JUSTIFIER_BOTH);
       break;
   case PORT_TYPE_MOUSE:
       JOY_setSupport(PORT_1, JOY_SUPPORT_MOUSE);
       break;
   case PORT_TYPE_TEAMPLAYER:
       JOY_setSupport(PORT_1, JOY_SUPPORT_TEAMPLAYER);
       break;
}

Die anderen Codes scheinen in Ordnung zu sein. Integrieren Sie sie in unser Programm, kompilieren Sie sie und führen Sie sie aus. Drücken Sie den Griff A, um den Dinosaurierwürfel zum Hochspringen zu steuern, und drücken Sie den Griff Start, um das Spiel neu zu starten. Das Folgende ist das Ausführungsvideo:

Siehe auch  Google Translate vs. ChatGPT: Welcher ist der beste Sprachübersetzer?

Um ehrlich zu sein, hatte ich damals schreckliche Angst und konnte es wirklich spielen. Ich glaube, ich habe eine Woche gebraucht, um SGDK zu lernen, bevor ich Hello SEGA gesehen habe!! Machen wir weiter. Ich möchte sagen, dass es ein bisschen ermüdend ist, damit zu spielen Ich selbst jedes Mal, und ich möchte auch wissen, wo der Dinosaurierwürfel ist. Wird es weitere Probleme geben, wenn Sie weiterhin nach rechts laufen, ohne zu sterben, also geben wir weiterhin Anweisungen an ChatGPT„Bitte modifizieren Sie den Dinosaurier so, dass er automatisch springt, wenn er auf Hindernisse stößt.“::

Nachdem wir uns den Programmcode angesehen haben, gibt es kein großes Problem, er ist direkt in unser Programm integriert und kann nach der Kompilierung und Ausführung tatsächlich normal ausgeführt werden:

Nachdem das Spiel für kurze Zeit automatisch gespielt wurde, stellte sich heraus, dass der Dinosaurierwürfel nach dem Auf- und Abspringen zu Boden fiel, und befahl ChatGPT weiterhin zu sagen: „Der Protagonist wird nach dem Auf- und Abspringen zu Boden fallen.“ , bitte beheben Sie dieses Problem“:

Wenn man sich den Programmcode ansieht, ist es kein großes Problem, ihn direkt zu integrieren, und nach dem Kompilieren und Ausführen funktioniert er normal:

Nachdem ich eine Weile glücklich gespielt hatte, stellte ich fest, dass es nur einen Block mit Hindernissen gab, also musste ich ChatGPT weiterhin befehlen, die Hindernisse bei jedem Erscheinen unterschiedlich hoch zu machen. Bitte geben Sie „Bitte ändern Sie die Hindernisvariable so ein, dass die Hindernisse unterschiedliche Höhen haben.“ Höhen jedes Mal, wenn sie erscheinen“:

Verstehen Sie den Code weiterhin und stellen Sie fest, dass es viele Probleme gibt. Daher wird er nicht als ChatGPT-Änderung bezeichnet Hindernis für 1

obstacle.height = OBSTACLE_HEIGHT
修改
obstacle.height = 1

Die Parameter zum Zeichnen von Hindernisquadraten im Zeichenhinderniskreis sind falsch. Bitte nehmen Sie die folgenden Änderungen vor

VDP_fillTileMapRect(BG_A, TILE_ATTR_FULL(PAL2, FALSE, FALSE, FALSE, 1), 
obstacle.x / 8, (obstacle.y - i * 8) / 8, obstacle.width, 2);
修改
VDP_fillTileMapRect(BG_A, TILE_ATTR_FULL(PAL2, FALSE, FALSE, FALSE, 1), 
obstacle.x / 8, (obstacle.y - i * 8) / 8, 1, 2);

Nachdem die Korrektur abgeschlossen ist, fahren Sie mit dem Kompilieren und Ausführen fort:

Aus dem Video ist ersichtlich, dass die Hindernisse in unterschiedlichen Höhen aufgetaucht sind, aber der Dinosaurierwürfel beendet das Spiel nicht, wenn er auf die Hindernisse trifft. Sprechen Sie weiterhin mit ChatGPT„Nach den oben genannten Änderungen beendet der Dinosaurier das Spiel nicht, wenn er auf ein Hindernis trifft. Bitte beheben Sie dieses Problem.“::

Nach dem Betrachten des Codes gibt es außer dem Hindernishöhenfehler kein größeres Problem. Integrieren Sie ihn zuerst und ändern Sie dann den Hindernishöhenteil wie folgt:

if (dino.x + 16  obstacle.x + obstacle.width * 8) {
修改
if (dino.x + 16  obstacle.x + obstacle.width * 2) {

Übrigens muss eine Game Over-Anzeige hinzugefügt werden, damit der Dinosaurierwürfel angezeigt werden kann, nachdem er auf ein Hindernis gestoßen ist. Dies stellt für ChatGPT kein Problem dar, daher kann ich es selbst ändern und die Hauptschleife wie folgt modifizieren :

while(1)
{        
   SYS_doVBlankProcess();

   // 更新恐龍與障礙物.        updateDino();    updateObstacle();

   // 修改.    if (checkCollision()) {                    // 清除障礙物.        VDP_setTileMapDataRect ( BG_A, TILE_ATTR_FULL(PAL0, FALSE, FALSE, FALSE, 0), 0, 0, 40, 25, 1, DMA);               // 當遊戲結束時,顯示文字提示                    VDP_drawTextBG( BG_A, "Game Over!", 15, 12);

       while (1) {            SYS_doVBlankProcess();                           u16 keys = JOY_readJoypad(JOY_1);            if (keys & BUTTON_A){                // 清除畫面.                VDP_clearPlane  (BG_A, TRUE);                // 初始遊戲.                createDino();                createObstacle();                break;            }            VDP_waitVSync();        }    }    VDP_waitVSync(); }

Direkt nach der Änderung kompilieren und ausführen:

Es fängt an, ein bisschen anständig zu sein. Fügen Sie weiterhin eine Punkteanzeige hinzu und sprechen Sie direkt mit ChatGPT„Bitte fügen Sie die Score-Funktion hinzu. Die Berechnungsmethode für den Score besteht darin, jedes Mal, wenn Sie sich nach rechts bewegen, 1 zum Score hinzuzufügen (obstacle.x — )“::

Siehe auch  Ask QX, neuer ChatGPT-Konkurrent mit Unterstützung für 12 indische Sprachen, gestartet

Nachdem ich mir den Code angesehen hatte, gab es kein großes Problem, also habe ich ihn integriert. Als ich ihn jedoch integriert habe, dachte ich plötzlich, dass die Punktzahl um 1 erhöht wird, wenn ich mich um 1 Pixel nach rechts bewege zu groß, also habe ich es so geändert, dass für jeden bewegten Block (8 Pixel) 1 hinzugefügt wird. Das wird besser sein, und dann füge ich die Einstellung hinzu, dass die Bewegungsgeschwindigkeit umso schneller ist, je höher die Punktzahl ist:

void updateObstacle() {
   
   // ... 保持代碼不變
   
   // CHANNEL修改.
   // 更新障礙物位置,依照分數設定障礙物一動速度.
   if(score>1200){
       obstacle.x-=8;
   }else if(score>500){
       obstacle.x-=4;
   }else if(score>50){
       obstacle.x-=2;
   }else{
       obstacle.x--;
   }

   // 讓恐龍往右每走一格(8像素)就加1分.    if(obstacle.x%8 == 0){        score++;    }

   // ... 保持代碼不變,直到主迴圈

}

Kompilieren und nach Abschluss ausführen

Es sieht langsam gut aus, wir fügen einen Rekord für die höchste Punktzahl hinzu, sagen Sie es einfach ChatGPT„Bitte fügen Sie die Funktion hinzu, nach jeder Runde die höchste Punktzahl zu bewerten, und zeigen Sie sie in der oberen Mitte des Bildschirms an.“

Nach dem Lesen des Codes stellt die Integration kein großes Problem dar. Ich habe das Gefühl, dass der Bildschirm etwas unklar ist, daher habe ich einige Anpassungen an der Farbe des Bildschirmblocks vorgenommen:

int main() {
   // ... 保持代碼不變

   // 設定背景顏色.    PAL_setColor (0, RGB24_TO_VDPCOLOR(0xa1adff));    // 設定障礙物顏色.    PAL_setColor (1, RGB24_TO_VDPCOLOR(0xde5718));    // 設定恐龍顏色.    PAL_setColor (2, RGB24_TO_VDPCOLOR(0x0600ff));    // 設定寶物顏色.    PAL_setColor (3, RGB24_TO_VDPCOLOR(0xff0000));    // 設定雲顏色.    PAL_setColor (4, RGB24_TO_VDPCOLOR(0xc9c9c9));

   // ... 保持代碼不變 }

Um das Spiel interessanter zu machen, fügen wir einen Block hinzu, der sich von rechts nach links bewegt. Der Dinosaurierblock kann hochspringen und fressen und die Punktzahl erhöhen. Das Gleiche gilt für ChatGPT„Bitte erhöhen Sie die Bewertungspunktvariable. Jedes Mal, wenn die Bewertungsvariable um 100 Punkte erhöht wird, entsteht ein Block von rechts und bewegt sich nach links. Wenn er sich zum Ende der linken Seite bewegt, verschwindet er. Und beurteilen Sie das, wenn.“ Berührt der Dinosaurier diesen Block, addiere 20 zur Punktzahl und schließe den Block.“

Nachdem ich mir den Code angesehen hatte, stellte ich fest, dass der Teil des Blocks, der sich von rechts nach links bewegte, den verschobenen Block nicht löschte, sodass verbleibende Blöcke vorhanden sind. Sprechen Sie weiterhin mit ChatGPT„Nachdem der Block nach links verschoben wurde, bleibt der alte Block bestehen. Bitte ändern und löschen Sie ihn.“

Nachdem Sie den Code gelesen, integriert, einige Logikprobleme behoben und schließlich kompiliert und ausgeführt haben, gibt es kein Problem

Das Spiel ist ungefähr fertig. Nachdem ich zehn Minuten lang gespielt habe, habe ich das Gefühl, dass ich zwei Wolken hinzufügen kann, um das Bild zu ändern, also habe ich es ChatGPT gesagt„Bitte machen Sie 2 Wolken oben, um sich langsam von ganz rechts nach links zu bewegen, bewegen Sie sich ganz nach links und lassen Sie sie nach rechts zurückkehren und sich weiter nach links bewegen. Wiederholen Sie die obigen Aktionen. Nachdem sich die Wolken bewegt haben, löschen Sie sie.“ die alten Wolken und lass sie nicht zurück Nachbild“

Es gibt kein großes Problem mit dem Code, integrieren, kompilieren und ausführen

Im Film wurde der Dinosaurierwürfel zur Vereinfachung des Testens in „unbesiegbar“ geändert.

Fertig, den Code aufräumen

Okay! Bisher wurde das Google Chrome Little Dinosaur-Spiel fertiggestellt und der Code wurde von Anfang bis Ende neu organisiert und wie folgt mit Kommentaren versehen:

#include 
#include "pal.h"

// 常數設定. #define GROUND_Y 200 #define DINO_Y 180 #define DINO_WIDTH 16 #define DINO_HEIGHT 16 #define OBSTACLE_WIDTH 8 #define OBSTACLE_HEIGHT 16 #define JUMP_HEIGHT 40

#define BONUS_START_X 320 #define BONUS_Y 120 #define BONUS_SPEED 4

#define CLOUD1_START_X 320 #define CLOUD1_Y 16 #define CLOUD2_START_X 400 #define CLOUD2_Y 24 #define CLOUD_SPEED 1

// 恐龍方塊結構. typedef struct {    s16 x, y;    u16 width, height;    u8 isJumping;    s16 jumpCounter; } Dino; // 障礙物結構. typedef struct {    s16 x, y;    u16 width, height;    u8 isActive; } Obstacle; // 寶物結構. typedef struct {    s16 x;    s16 y;    bool isActive; } Bonus; // 雲結構. typedef struct {    s16 x;    s16 y; } Cloud;

Dino dino; Obstacle obstacle; Bonus bonus; Cloud cloud1; Cloud cloud2;

// 在main函數開頭添加分數變數. int score = 0;       // 在main函數開頭添加最高分數變數. int highScore = 0;  

void createDino(); void createObstacle(); void updateDino(); void updateObstacle(); bool checkCollision(); void updateScore(); void updateHighScore();

//---------------------------------------------------------------------------- // 雲 - 初始. //---------------------------------------------------------------------------- void initClouds() {    cloud1.x = CLOUD1_START_X;    cloud1.y = CLOUD1_Y;    cloud2.x = CLOUD2_START_X;    cloud2.y = CLOUD2_Y; }

//---------------------------------------------------------------------------- // 雲 - 更新. //---------------------------------------------------------------------------- void updateCloud(Cloud *cloud) {    // 清除舊雲位置    VDP_setTileMapXY(BG_A, TILE_ATTR_FULL(PAL0, FALSE, FALSE, FALSE, 0), cloud->x / 8, cloud->y / 8);

   cloud->x -= CLOUD_SPEED;

   // 如果雲超出螢幕左邊邊界,將其重置到右側    if (cloud->x x = 320;    }

   // 繪製新雲位置    VDP_setTileMapXY(BG_A, TILE_ATTR_FULL(PAL0, FALSE, FALSE, FALSE, 4), cloud->x / 8, cloud->y / 8); }

//---------------------------------------------------------------------------- // 初始寶物方塊. //---------------------------------------------------------------------------- void spawnBonus() {    bonus.x = BONUS_START_X;    bonus.y = BONUS_Y;    bonus.isActive = TRUE; }

//---------------------------------------------------------------------------- // 更新寶物方塊. //---------------------------------------------------------------------------- void updateBonus() {    if (!bonus.isActive) {        return;    }

   // 清除舊方塊位置    VDP_setTileMapXY(BG_A, TILE_ATTR_FULL(PAL0, FALSE, FALSE, FALSE, 0), bonus.x / 8, bonus.y / 8);

   bonus.x -= BONUS_SPEED;

   // 如果方塊超出螢幕左邊邊界,將 isActive 設為 FALSE    if (bonus.x

   // 檢查恐龍與方塊之間的碰撞    if (dino.y + 16 >= bonus.y && dino.y = bonus.x && dino.x

   // 繪製方塊    if (bonus.isActive) {        VDP_setTileMapXY(BG_A, TILE_ATTR_FULL(PAL0, FALSE, FALSE, FALSE, 3), bonus.x / 8, bonus.y / 8);    } else {        VDP_setTileMapXY(BG_A, TILE_ATTR_FULL(PAL0, FALSE, FALSE, FALSE, 0), bonus.x / 8, bonus.y / 8);    } }

//---------------------------------------------------------------------------- // 初始障礙物. //---------------------------------------------------------------------------- void initObstacle() {    obstacle.x = 320;    obstacle.y = GROUND_Y - 8;    obstacle.width = 2; }

//---------------------------------------------------------------------------- // 亂數障礙物高低. //---------------------------------------------------------------------------- void spawnObstacle() {    obstacle.x = 320;

   // 生成隨機高度(1到5格)    obstacle.height = 1 + (random() % 5);        // 繪製障礙物    for (int i = 0; i

//---------------------------------------------------------------------------- // 程式進入點. //---------------------------------------------------------------------------- int main() {    // 初始化螢幕    VDP_init();

   // 設置解析度    VDP_setScreenWidth320();    VDP_setScreenHeight224();

   // 設定背景顏色.    PAL_setColor (0, RGB24_TO_VDPCOLOR(0xa1adff));    // 設定障礙物顏色.    PAL_setColor (1, RGB24_TO_VDPCOLOR(0xde5718));    // 設定恐龍顏色.    PAL_setColor (2, RGB24_TO_VDPCOLOR(0x0600ff));    // 設定寶物顏色.    PAL_setColor (3, RGB24_TO_VDPCOLOR(0xff0000));    // 設定雲顏色.    PAL_setColor (4, RGB24_TO_VDPCOLOR(0xc9c9c9));

   // 加入搖桿判斷.    u8 value;    value = JOY_getPortType(PORT_1);    switch (value)    {        case PORT_TYPE_MENACER:            JOY_setSupport(PORT_1, JOY_SUPPORT_MENACER);            break;        case PORT_TYPE_JUSTIFIER:            JOY_setSupport(PORT_1, JOY_SUPPORT_JUSTIFIER_BOTH);            break;        case PORT_TYPE_MOUSE:            JOY_setSupport(PORT_1, JOY_SUPPORT_MOUSE);            break;        case PORT_TYPE_TEAMPLAYER:            JOY_setSupport(PORT_1, JOY_SUPPORT_TEAMPLAYER);            break;    }        createDino();    createObstacle();

   // 初始化雲.    initClouds();

   while(1)    {                SYS_doVBlankProcess();

       // 更新恐龍與障礙物.            updateDino();        updateObstacle();        updateScore();        // 更新分數        updateHighScore();        updateBonus();        // 更新方塊

       updateCloud(&cloud1); // 更新雲1        updateCloud(&cloud2); // 更新雲2

       if (checkCollision()) {                        // 當遊戲結束時,顯示文字提示                        VDP_drawTextBG( BG_A, "Game Over!", 15, 12);

           while (1) {                SYS_doVBlankProcess();                                u16 keys = JOY_readJoypad(JOY_1);                if (keys & BUTTON_START){                    // 清除畫面.                    VDP_clearPlane (BG_A, TRUE);                    // 初始遊戲.                    createDino();                    createObstacle();                    // 初始分數.                    score = 0;

                   break;                }                VDP_waitVSync();            }        }        VDP_waitVSync();    }    return 0; }

//---------------------------------------------------------------------------- // 建立恐龍方塊. //---------------------------------------------------------------------------- void createDino() {    dino.x = 32;    dino.y = DINO_Y;    dino.width = DINO_WIDTH;    dino.height = DINO_HEIGHT;    dino.isJumping = FALSE;    dino.jumpCounter = 0; }

//---------------------------------------------------------------------------- // 建立障礙物. //---------------------------------------------------------------------------- void createObstacle() {    obstacle.x = 320;    obstacle.y = GROUND_Y - OBSTACLE_HEIGHT;    obstacle.width = OBSTACLE_WIDTH;    obstacle.height = 1;    obstacle.isActive = TRUE; }

//---------------------------------------------------------------------------- // 更新恐龍方塊. //---------------------------------------------------------------------------- void updateDino() {    // 清除恐龍之前的位置    VDP_setTileMapXY(BG_A, TILE_ATTR_FULL(PAL0, FALSE, FALSE, FALSE, 0), dino.x / 8, dino.y / 8);    VDP_setTileMapXY(BG_A, TILE_ATTR_FULL(PAL0, FALSE, FALSE, FALSE, 0), dino.x / 8 + 1, dino.y / 8);    VDP_setTileMapXY(BG_A, TILE_ATTR_FULL(PAL0, FALSE, FALSE, FALSE, 0), dino.x / 8, dino.y / 8 + 1);    VDP_setTileMapXY(BG_A, TILE_ATTR_FULL(PAL0, FALSE, FALSE, FALSE, 0), dino.x / 8 + 1, dino.y / 8 + 1);

   if (dino.isJumping) {        dino.jumpCounter++;        if (dino.jumpCounter

   // 根據按鍵狀態更新恐龍    u16 keys = JOY_readJoypad(JOY_1);    if (keys & BUTTON_A && !dino.isJumping) {        dino.isJumping = TRUE;    }

   // 根據恐龍與障礙物的距離自動跳起    //if (!dino.isJumping && dino.y == DINO_Y && obstacle.x - (dino.x + DINO_WIDTH)

   // 恐龍落地後將 dino.isJumping 設定為 FALSE    if (dino.y > DINO_Y) {        dino.y = DINO_Y;        dino.isJumping = FALSE;    }

   // 繪製新的恐龍位置    VDP_fillTileMapRect(BG_A, TILE_ATTR_FULL(PAL0, FALSE, FALSE, FALSE, 2), dino.x / 8, dino.y / 8, 2, 2); }

//---------------------------------------------------------------------------- // 更新障礙物. //---------------------------------------------------------------------------- void updateObstacle() {    // 清除障礙物之前的位置    for (int i = 0; i

   // 更新障礙物位置,依照分數設定障礙物一動速度.    if(score>1200){        obstacle.x-=8;    }else if(score>500){        obstacle.x-=4;    }else if(score>50){        obstacle.x-=2;    }else{        obstacle.x--;    }

   // 讓恐龍往右每走一格(8像素)就加1分.    if(obstacle.x%8 == 0){        score++;    }

   // 檢查是否需要重新生成障礙物    if (obstacle.x + 8 * obstacle.width

   // 繪製新的障礙物位置    for (int i = 0; i

//---------------------------------------------------------------------------- // 判斷恐龍方塊與障礙物碰撞. //---------------------------------------------------------------------------- bool checkCollision() {    // 如果恐龍在空中並且足夠高以避免碰撞,則返回FALSE.    if (dino.isJumping && dino.y

   // 如果恐龍和障礙物在水平位置上沒有接觸,則返回FALSE.    if (dino.x + 16 obstacle.x + obstacle.width * 2) {        return FALSE;        }

   return TRUE; }

//---------------------------------------------------------------------------- // 更新分數. //---------------------------------------------------------------------------- void updateScore() {    static int prevScore = 0;        // 新增修改方塊顯示中就不要再進入執行(!bonus.isActive).    if (score % 100 == 0 && score != prevScore && !bonus.isActive) {        spawnBonus();        prevScore = score;    }

   char scoreStr[10];    sprintf(scoreStr, "Score: %d", score);    VDP_drawText(scoreStr, 2, 0); }

//---------------------------------------------------------------------------- // 更新最高分數. //---------------------------------------------------------------------------- void updateHighScore() {    if (score > highScore) {        highScore = score;    }    char highScoreStr[15];    sprintf(highScoreStr, "High Score: %d", highScore);        VDP_drawText(highScoreStr, 16, 0); }

Alle Codes und ChatGPT-Chatinhalte werden auch auf Github hochgeladen

Siehe auch  Der schlechteste Krypto-BNB der Welt? ChatGPT antwortet uns!

Github

Demovideo einer echten Maschine

Nachwort

Wenn Sie sich den Chat-Inhalt mit ChatGPT im Detail ansehen (die Datei wird auf GitHub hochgeladen), werden Sie feststellen, dass viele von ChatGPT geschriebene Codes nicht verwendet werden können oder zu viele Fehler aufweisen, sodass sie nicht übernommen werden. Ein wichtiger Grund Dies liegt daran, dass die eingegebenen Befehle nicht genau genug sind. Aus Gründen der Glätte habe ich diesen Teil des Artikels nicht geschrieben. Ich war von der ersten ChatGPT-Erfahrung sehr überrascht. Auch die KI hat den sogenannten Singularitätspunkt erreicht. Aufgrund dieses Fortschritts glaube ich, dass KI in Zukunft zur Standardkonfiguration in unserem Leben werden wird. Okay. ! Diese MD-Minispiel-Erstellungslehre ist ebenfalls zu Ende, bis zum nächsten Mal.

Übrigens, wenn Sie mit SGDK vertraut sind, können Sie die Blöcke im Spiel auch durch Bilder ersetzen, wodurch das Bild professioneller aussieht, und ich freue mich auf Ihre Arbeit.

Update-Protokoll

  • 26.04.2023 Online-Youtube-Video
5/5 - (193 votes)
Anzeige

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein