#include <iostreamの> する#include <conio.h> の#include <WINDOWS.H> の#include <TIME.H> INT g_Dir = 3 。 #define UP 0 の#define DOWN 1 の#define LEFT 2 の#define RIGHT 3 構造体FOOD { INT X = 0 。 int型 Y = 0 ; BOOL状態= 0 ; }食物; // 方向控制ボイドSnekeMove() { 場合(:: GetAsyncKeyState(VK_UP)&1 ) g_Dir = 0 。 もし(:: GetAsyncKeyState(VK_DOWN)&1 ) g_Dir = 1 。 もし(:: GetAsyncKeyState(VK_LEFT)&1 ) g_Dir = 2 。 もし(:: GetAsyncKeyState(VK_RIGHT)&1 ) g_Dir = 3 。 } // 主函数 INT メイン() { にsrand((符号なし整数)時間(NULL))。 int型 W = 20 ; int型 H =20 ; int型レン= 3 ; INTマップ[ 20 ] [ 20 ] = { 0 }。 INTスネーク[ 50 ] [ 2 ] = { 0 }。 // スネーク[0] 2 =。// 为蛇头 ため(int型 i = 0 ; iはレンを<; iは++ ) { スネーク[I] [ 0 ] =レン- 、I - 1 。 } Food.X = W / 2 。 Food.Y = H / 2 。 地図[Food.Y] [Food.X] = 2 ; CONST のchar *ヘビ[] = { " "、" ■ "、" ★ " }。 一方、(真) { システム(" CLS " )。 INT X = 0 。 int型、Y = 0 。 以下のために(int型 i = 0 ; iはレンを<; iは++ ) { // 2 1 0 // 1 1 1 // 321 // 0111 // ここで留意その X =スネーク[I] [ 0 ]; Y =スネーク[I] [ 1。]; // ここで、二次元アレイの理解に依存 // もののYは常に0です // 向かっマップ[Y]アドレス // 書き込み、これらのタイプ得ることが推論によって // *(地図[Y] + X)= 1; // マップ[Y] [X] = 1;。 *(地図[ 0 ] + X)= 1 ; // マップ[0] [X] = 1; } のための(INT I = 0; 私はHを<; 私は++ ) { ため(INT J = 0 J <W; J ++ ) { のstd :: COUT << SNAKE [マップ[I] [J]。 } のstd :: coutの << はstd :: ENDL。 } のmemset(地図、0、はsizeof (MAP))。 SnekeMove(); 用(int型 I =レン; I> 0 ; i-- ) { スネーク[I] [ 0 ] =スネーク[I - 1 ] [ 0 ]。 } もし(g_Dir == UP) { スネーク[ 0 ] [ 0 ] - = W。 } であれば(g_Dir == DOWN) { スネーク[ 0 ] [ 0 ] + = W。 } であれば(g_Dir == LEFT) { スネーク[ 0 ] [ 0 ] - 。 } であれば(g_Dir == RIGHT) { スネーク[ 0 ] [ 0 ] ++ ; } 睡眠(50 )。 } // https://www.bilibili.com/video/av29007126/?spm_id_from=333.788.videocard.1 システム(" 一時停止" )。 リターン 0 ; }