/*********************
*****瀛楃鐗堣椽鍚冭泧****
-------------------------------------
****by_鍟妎棰漣u楸?***
*******ver:2.0*********/
// 鍔犱簡澶ч噺娉ㄩ噴锛屽彧娉ㄩ噴涓庢父鎴忔湰韬唴瀹圭浉鍏崇殑锛岀畝鍗曠殑鍑芥暟鐨勪娇鐢ㄥ氨涓嶈鏄庝簡鈥︹€?
//鏇存柊鍐呭:
//v2.0瑙e喅妯旱姣斾笉鍚岀殑闂锛屼袱涓苟鍒楃殑绗﹀彿璧拌捣鏉ラ毦鐪嬶紝鐜板湪鐢ㄦ湁鑹茶儗鏅紝涓昏鐪嬮鑹诧紝灏变笉瑙夊緱闅剧湅浜嗏€︹€?
//v1.2鍘熷笘36妤笺€備慨澶嶄簡涓€涓ぇbug锛屽叧浜庡嚱鏁板祵濂楃殑锛宱ver鍑芥暟涓笉鏂祵濂梥tart鍑芥暟浼氬鑷磗tart鍑芥暟濮嬬粓涓嶈兘杩斿洖锛屽崰鍐呭瓨涓嶈兘閲婃斁锛岃繜鏃╁唴瀛樻孩鍑衡€︹€?
//v1.1鍘熷笘7妤?0妤笺€備慨澶嶄簡鍜熬宸碽ug锛屽鍔犱簡鎸¤矾鐭斥€︹€?
//v1.0鍘熺増鈥︹€?
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define H 16
// 楂樺害high
#define W 24
// 瀹藉害weight
#define N 4
// 闅惧害,姝ユ椂涓?1/N)s
#define UP '2'
#define DOWN '5'
#define LEFT '4'
#define RIGHT '6'
// 鑷畾涔夋柟鍚戦敭鈥?
void move();
void start();
void draw();
void getturn();
void getrand (int &a,int &b);
void turn(char direction);
int judge();
void getfood();
void getrock();
void over();
// 濂藉鑷畾涔夊嚱鏁扳€?
int x, y;
// 铔囧ご鍧愭爣鈥?
// x妯潗鏍囧嵆鍒楁暟锛寉绾靛潗鏍囧嵆琛屾暟鈥?
int l = 0; // 铔囪倸瀛愰暱
int n, i, j, jg;
int x1, y1;
// 椋熺墿鍜岀煶澶寸殑鍧愭爣鈥?
char *head, *tail, *tt;
// 鎸囧悜澶村熬锛宼t鏄复鏃剁殑灏惧反鈥?
char map[H][W];
// 鐢ㄤ簩缁存暟缁勫瓨鍏ㄥ浘鈥?
char *belly[H * W], *food, *rock; // 鑲氬瓙椋熺墿鍜岀煶澶粹€?
char left, right, front, back;
// 鏈汉鐢ㄧ殑鏄墠鍚庡乏鍙崇Щ鍔ㄢ€?
int main()
{
for (;;) // v1.2鏀光€?
start();
// 棰濓紝绠€娲佹槑浜嗙殑涓诲嚱鏁?..
}

void start() // 寮€濮嬧€?
{
for (i = 0; i != H; ++i)
for (j = 0; j != W; ++j)
{
if ((i == 0) || (i == H - 1) || (j == 0) || (j == W - 1))
map[j] = '9';
else
map[j] = '0';
}
x = W / 2, y = H / 2, l = 0;
head = &map[y][x + 1];
belly[l] = &map[y][x];
tail = &map[y][x - 1];
*head = '1';
*belly[0] = '2';
*tail = '3';
left = UP, right = DOWN;
front = RIGHT, back = LEFT;
turn(front);
getfood();
draw();
// 鍓嶉潰閮芥槸鍒濆鍖栵紝鐜板湪鎵嶅紑濮嬧€?
do
{
usleep(1000000 / N);
// 姝ユ椂涓?1/N)s
getturn();
// 璇诲彇鎷愬集鏂瑰悜鈥?
move(); // 绉诲姩鈥?
jg = judge();
// 鍒ゆ柇澶寸Щ鍒伴偅浜嗏€?
clrscr(); // 娓呭睆鈥?
draw(); // 閲嶇粯鈥?
}
while (jg); // v1.2鏀癸紝鐢ㄨ繑鍥炲€煎垽鏂父鎴忔槸鍚︾粨鏉熲€?
clrscr();
return; // 娓告垙缁撴潫灏辫繑鍥烇紝杩欏彞鏈夋病鏈夐兘鏃犳墍璋撯€?
}

void getturn()
{
char t;
while (kbhit()) // 鍒ゆ柇鏈夋棤杈撳叆鍊尖€?
{
t = getch(); // 鏈夊垯鎹曡幏鈥?
if (t == left)
// 鍒ゆ柇鏂瑰悜骞舵嫄寮€?
{
turn(left);
left = back;
back = right;
right = front;
front = t;
goto gett;
}
else if (t == right)
{
turn(right);
right = back;
back = left;
left = front;
front = t;
goto gett;
}
}
turn(front);
gett:;
while (kbhit())
t = getch();
// 鎶婂杈撳叆鐨勫悆鎺夆€?
}

void getfood() // 鏉ヤ釜鍚冪殑鈥?
{
getrand(x1, y1);
// 椋熺墿瑕佽惤鍦ㄧ┖鍦颁笂鈥?
food = &map[y1][x1];
*food = '4';
// 绉绘寚閽堝苟璧嬪€尖€?
getrock();
// 椤轰究鏉ヤ釜鐭冲ご鈥?
// 涓嶅枩娆㈠彲浠ュ幓鎺夆€?
}

void getrock()
{
getrand(x1, y1);
rock = &map[y1][x1];
// 瑕佹槸姝eソ鐭冲ご灏卞湪闈㈠墠鍙兘璇存槸杩愭皵涓嶅ソ浜嗏€︹€?
*rock = '8';
}

void getrand(int &a, int &b)
{
do
{
a = random() % (W - 2) + 1;
b = random() % (H - 2) + 1;
}
while (map[a] != '0');
}

void turn(char direction)
// 杞悜锛屾兂涓嶅埌鏇村ソ鐨勫崟璇嶄簡锛岀洿璧颁篃绠梩urn鈥?
{
switch (direction)
// 铔囧ご鍧愭爣鍏堣蛋鈥?
{
case UP:
--y;
break;
case DOWN:
++y;
break;
case LEFT:
--x;
break;
case RIGHT:
++x;
break;
}

}

void move()
// 铔囪倸瀛愯蛋鈥?
{
tt = belly[l];
// 鍏堜复鏃剁殑灏惧反璧扳€?
for (i = l; i != 0; --i) // 鎸姩鈥?
belly = belly[i - 1];
belly[0] = head;
head = &map[y][x];
// 铔囪倸瀛愬厛璧版墠璧拌泧澶粹€?
*belly[0] = '2';
// 铔囪倸瀛?浜嗏€︹€?
}

int judge()
{
switch (*head)
{
case '2':;
case '8':;
case '9':
over();
return 0; // v1.2鏀光€?
// 鍜倸瀛愭垨鎾炲姝烩€?
// 鍜熬宸翠笉绠楋紝灏惧反椹笂璧颁簡鈥?
break;
case '4':
getfood();
// 鍚冧簡杩樻湁鈥?
++l;
belly[l] = tt;
// 浼搁暱锛岀湡鐨勫熬宸村氨涓嶇敤鍔ㄤ簡鈥?
*head = '1';
// 铔囧ご璺熶笂鈥?
break;
case '0':
*tail = '0';
case '3':
*head = '1';
tail = tt;
*tail = '3';
// 娌′笢瑗垮氨璁╃湡灏惧反涔熻窡涓娾€?
//v1.1鏀癸紝瑙e喅鍜熬宸碽ug鈥?
break;
}
return 1;
}

void draw()
// 缁樺浘鈥?/v2.0鏀硅緭鍑洪鑹插拰瀹藉害鈥︹€?
{
for (i = 0; i != H; ++i)
{
for (j = 0; j != W; ++j)
switch (map[j])
{
case '0':
printf(" ");//v2.0鏀癸紝涓や釜绌烘牸锛屼笅闈㈢殑涔熼兘鏄袱涓€︹€?
break;
case '9':
printf("\033[47;36m##\33[40;37m");
break;
case '8':
printf("\33[47;36m陇陇\33[40;37m");
break;
// 鐭冲ご鈥?
case '1':
printf("\033[41;33m@@\33[40;37m");
break;
case '2':
printf("\33[42;33mOO\33[40;37m");
break;
case '3':
printf("\33[42;34moo\33[40;37m");
break;
case '4':
printf("\33[46;37m鈾モ櫏\33[40;37m");
//杩樻槸瀹藉害闂锛屽鏋滄湁浠讳綍涓嶅鍔茬殑鍦版柟锛屽氨鎶婅緭鍑虹鍙锋敼涓嬭瘯璇曗€︹€?
break;
}
printf("\n");
}
}

void over()
// game over!!!
{
printf("\tGame over!!!\n");
printf("\t\tAgain?\n");
getch();
// 杈撳叆浠绘剰瀛楃缁х画鈥?
clrscr();
// start();
// 閲嶆柊鈥?
// v1.2鏀癸紝鍘熸潵鐨勪笉鏂祵濂椾娇鐢╯tart鍑芥暟涓嶈繑鍥烇紝浼氬鑷村唴瀛樿鍗犵敤瓒婃潵瓒婂锛屾渶鍚庡唴瀛樻孩鍑衡€?
}
by:啊o额iu鱼
因为字符编码愿意网页未能正确显示中文