#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 ] = { 0 }。 // スネーク[0] 2 =。// 为蛇头 ため(int型 i = 0 ; iはレンを<; iは++ ) { スネーク[I] =レン- 、I - 1 。 } Food.X = W / 2 。 Food.Y = H / 2 。 地図[Food.Y * W + Food.X] =2 ; CONST のchar *ヘビ[] = { " "、" ■ "、" ★ " }。 一方、(真) { システム(" CLS " )。 以下のために(int型 i = 0 ; iはレンを<; iは++ ) { // 2 1 0 // 1 1 1 // 3 2 1 // 0 1 1 1 // 这里需要注意 マップ[スネーク[I] = 1 。 } マップ[Food.Y * W + Food.X] = 2 ; もし(MAP [スネーク[ 0 ]] ==マップ[Food.Y * W + Food.X]) { マップ[Food.Y * W + Food.X] = 0 ; やる { BOOL FoodState = 偽; Food.X =ランド()%のW。 Food.Y =ランド()%のH。 以下のために(int型私= 0 ;私はレンを<;私は++ ) { もし!(マップ[Food.Y * W + Food.X] =地図[スネーク[I]]) { FoodState = 真。 } } もし(FoodState) { マップ[Food.Y * W + Food.X] = 2 ; 破ります; } } 一方(真)。 レン ++ ; } のために(int型 i = 0 ; iはHを<; iは++ ) { ため(INT J =0 ; J <Wであり; J ++ ) { // スネークヘッドが地図上の座標 IF(I Jが== * Wが蛇ある+ [ 0 ]) { IF - (I == H 1 - || J == Wである。1 ) { // 壁 システム(" PAUSE " ); 戻り 0 ; } } } } のための(int型 I = 0を I ++は; IはHを< ) { 用(int型 J = 0 ; J <W; J ++ ) { のstd :: COUT << SNAKE [マップ[iがW * + J]。 } のstd :: coutの << はstd :: ENDL。 } のstd :: coutの << はstd :: ENDL。 // ため(; iはレンを<; I = 0 int型私は++) // { // はstd :: COUT <<スネーク[I] <<」「。 // } // はstd :: coutの<<はstd ::てendl; std :: coutの<< " 蛇的长度为:" <<レン<< はstd ::てendl;0、はsizeof (マップ)); SnekeMove(); のため(int型 I>; I =レンを0 ; i-- ) { // 2. 1 0 // 右移動デフォルト @ 2210 @ リア++ // 3210 // 完全に一度移動 スネークを[I]は[Iは- =スネーク1。]; / * このような下向き 3210 @ 23 @は3210 * / } IF(== g_Dir UP ) { 蛇[ 0 ] - = W。 } であれば(g_Dir == DOWN) { スネーク[ 0 ] + = W。 } であれば(g_Dir == LEFT) { スネーク[ 0 ] - 。 } であれば(g_Dir == RIGHT) { スネーク[ 0 ] ++ ; } スリープ(50 )。 } // https://www.bilibili.com/video/av29007126/?spm_id_from=333.788.videocard.1 システム(「一時停止" ); 戻り 0 ; }