使用方法:
複製代碼
存爲 .txt 文件
改爲 .cpp 文件
運行(編程界面有可能亂碼,但沒關係,沒改動之前,第一次運行會是正確的)
(第二次運行有可能亂碼)
T_T
別問我爲什麼
我也不知道
1.代碼1:
(有點小bug)
#include <stdio.h>
#include <time.h>
#include <conio.h>
#include <stdlib.h>
#include <windows.h>
void GoToXY(int x,int y)
{
COORD pos = {x,y};
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hOut, pos);
}
#define MAXN 10
int level,speed;
int xxx=3;
int yyy=(81-MAXN*2)/2;
int map[100][100];//24*24
void GoToXY(int x, int y);
int x=MAXN/2,y=MAXN/2;
int lastx=x,lasty=y;
char input,lastinput;
int que[100000][2],l=1,r=0;
int if_bomb=0;
int if_eaten=0,foodx,foody;
int big_food=0,fff;
int ans=0;
void first_output()
{
puts(" SNAKE ");
printf("\n MADE BY\n\n");
puts(" ■■■■■■■■■■■□□□□□□□□□□");
puts(" ■■■■■■■■■■■□□□□□□□□□□");
puts(" ■■■■■■■■■■■□□□□□□□□□□");
puts(" ■■■■■■■■□□□□□□□□□□□□□");
puts(" ■■■□■■■■□■■■□□□■■■■□□");
puts(" ■■■□■■■■□■□□■□□□□■■□□");
puts(" ■■■□■■■■□■■■□□□□■■□□□");
puts(" ■■■□■■■■□■□□■□□■■□□□□");
puts(" ■■■□□□□■□■■■□□□■■■■□□");
puts(" ■■■■■■■■□□□□□□□□□□□□□");
puts(" ■■■■■■■■■■■□□□□□□□□□□");
puts(" ■■■■■■■■■■■□□□□□□□□□□");
puts(" ■■■■■■■■■■■□□□□□□□□□□");
puts(" ■■■■■■■■■■■□□□□□□□□□□");
puts(" ■■■■■■■■■■■□□□□□□□□□□");
puts(" ■■■■■■■■■■■□□□□□□□□□□");
puts(" ■■■■■■■■■■■□□□□□□□□□□");
Sleep(2000);
system("cls");
puts("-====================================snake==========================lbz888 │");
puts(" ┗-");
printf("輸入地圖邊長:(推薦:10~20)\n");
scanf("%d",&level);
if(level>21)
{
level=21;
printf("邊長過大,自動調整爲 21\n");
}
if(level<5)
{
level=5;
printf("邊長過小,自動調整爲 5\n");
}
printf("\n輸入初始速度:(推薦:100~200)(單位:ms/格)(數值越小越快)(會隨蛇身長變長而減小)\n");
scanf("%d",&speed);
if(speed>300)
{
speed=300;
printf("數值過小,自動調整爲 300 ms/格\n");
}
if(speed<10)
{
speed=10;
printf("數值過小,自動調整爲 10 ms/格\n");
}
Sleep(1000);
system("cls");
puts("-====================================snake==========================lbz888 │");
puts(" ┗-");
printf("\n");
yyy=(81-level*2)/2;
x=level/2,y=level/2;
lastx=x,lasty=y;
que[++r][0]=x;
que[r][1]=y+1;
map[x][y+1]=1;
que[++r][0]=x;
que[r][1]=y;
map[x][y]=1;
lastinput=75;
input=75;
for(int i=0;i<level;i++)
{
for(int j=1;j<=yyy;j++)printf(" ");
for(int j=0;j<level;j++)
{
if(x==i&&y==j)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|
FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
printf("<<");
}
else if(map[i][j]==1)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|
FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
printf("■");
}
else
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
printf("□");
}
}
printf("\n");
}
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
}
void read()
{
int tempinput=input;
while(kbhit())
{
input=-32;
while(input==-32)
{
input=_getch();
}
}
if(!(input==72||input=='w'||input=='W'||input==80||input=='s'||input=='S'||input==75||input=='a'||input=='A'||input==77||
input=='d'||input=='D'))
{
input=tempinput;
return ;
}
if(input=='w'||input=='W')input=72;
if(input=='s'||input=='S')input=80;
if(input=='a'||input=='A')input=75;
if(input=='d'||input=='D')input=77;
if((lastinput==72&&input==80)||(lastinput==80&&input==72)||(lastinput==75&&input==77)||(lastinput==77&&input==75))
{
input=tempinput;
return ;
}
lastinput=input;
}
void change()
{
int if_moved=0;
GoToXY(78,0);
if(input==72||input=='w'||input=='W') // 上
{
x--;
x=(x+level)%level;
printf("↑");
if_moved=1;
}
if(input==80||input=='s'||input=='S') // 下
{
x++;
x=x%level;
printf("↓");
if_moved=1;
}
if(input==75||input=='a'||input=='A') // 左
{
y--;
y=(y+level)%level;
printf("←");
if_moved=1;
}
if(input==77||input=='d'||input=='D') // 右
{
y++;
y=y%level;
printf("→");
if_moved=1;
}
if(if_moved==1)
{
que[++r][0]=x;
que[r][1]=y;
//map[x][y]=1;
if(map[foodx][foody]!=2)
{
if_eaten=1;
ans+=10000/speed;
if(fff==8) ans+=20000/speed;
}
else
{
map[que[l][0]][que[l][1]]=0;
GoToXY(que[l][1]*2+yyy,que[l][0]+xxx);
printf("□");
l++;
}
}
if(map[x][y]==1&&if_moved==1)
{
if_bomb=1;
}
map[x][y]=1;
}
void make_food()
{
fff=rand()%10;
if(fff==8)
{
big_food++;
}
foodx=rand()%level;
foody=rand()%level;
while(map[foodx][foody]!=0)
{
foodx=rand()%level;
foody=rand()%level;
}
map[foodx][foody]=2;
GoToXY(foody*2+yyy,foodx+xxx);
if(fff==8)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|
FOREGROUND_RED);
printf("★");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
}
else
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN|
FOREGROUND_RED|FOREGROUND_INTENSITY);
printf("●");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
}
if_eaten=0;
}
void output()
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|
FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
GoToXY(lasty*2+yyy,lastx+xxx);
printf("■");
GoToXY(y*2+yyy,x+xxx);
if(input==72||input=='w'||input=='W')
{
printf("△");
}
else if(input==80||input=='s'||input=='S')
{
printf("▽");
}
else if(input==75||input=='a'||input=='A')
{
printf("<<");
}
else if(input==77||input=='d'||input=='D')
{
printf(">>");
}
map[x][y]=1;
lastx=x;
lasty=y;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
}
double timmm;
void game_over()
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|
FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
GoToXY(0,level/2+xxx-3);
printf(" GAME OVER\n");
printf(" 速度:%d\n",speed);
printf(" 長度:%d\n",r-l);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|
FOREGROUND_GREEN);
printf(" 成績:%d\n",ans);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|
FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
printf(" 時間:%.2lf s\n",(double)clock()/CLOCKS_PER_SEC-timmm);
GoToXY(5,1);
printf("\t地圖邊長:%d\t速度:%d ms/格\t成績:%d",level,speed,ans);
Sleep(2000);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
}
int main()
{
srand(time(NULL));
first_output();
make_food();
int last_long=3;
int mm=0;
timmm=(double)clock()/CLOCKS_PER_SEC;
while(1)
{
mm++;
if(r-l==last_long+3)
{
if(speed>5)
{
speed-=5;
}
last_long=r-l;
}
GoToXY(5,1);
printf("\t地圖邊長:%d\t速度:%d ms/格\t成績:%d",level,speed,ans);
Sleep(speed);
read();
change();
map[x][y]=1;
if(if_eaten||mm>(level*3)/2+1)
{
map[foodx][foody]=0;
GoToXY(foody*2+yyy,foodx+xxx);
printf("□");
make_food();
mm=0;
}
output();
if(if_bomb==1)
{
GoToXY(0,level+xxx);
game_over();
break;
}
}
GoToXY(0,level+xxx);
system("pause");
return 0;
}
/*
特殊字符:
□■→↓←↑ ◇▽ ○◎ ●
┗━│△▽ < > ???????????▲▼●◆★????☆◇○▽
Sleep(10);
puts("□□□");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN|
FOREGROUND_RED|FOREGROUND_INTENSITY|BACKGROUND_BLUE|BACKGROUND_INTENSITY);
*/
2.加邊框版:
(改了一個bug,加了邊框)
#include <stdio.h>
#include <time.h>
#include <conio.h>
#include <stdlib.h>
#include <windows.h>
void GoToXY(int x,int y)
{
COORD pos = {x,y};
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hOut, pos);
}
#define MAXN 10
int level,speed;
int xxx=3;
int yyy=(81-MAXN*2)/2;
int map[100][100];//24*24
void GoToXY(int x, int y);
int x=MAXN/2,y=MAXN/2;
int lastx=x,lasty=y;
char input,lastinput;
int que[100000][2],l=1,r=0;
int if_bomb=0;
int if_eaten=0,foodx,foody;
int big_food=0,fff;
int ans=0;
void first_output()
{
puts(" SNAKE ");
printf("\n MADE BY\n\n");
puts(" ■■■■■■■■■■■□□□□□□□□□□");
puts(" ■■■■■■■■■■■□□□□□□□□□□");
puts(" ■■■■■■■■■■■□□□□□□□□□□");
puts(" ■■■■■■■■□□□□□□□□□□□□□");
puts(" ■■■□■■■■□■■■□□□■■■■□□");
puts(" ■■■□■■■■□■□□■□□□□■■□□");
puts(" ■■■□■■■■□■■■□□□□■■□□□");
puts(" ■■■□■■■■□■□□■□□■■□□□□");
puts(" ■■■□□□□■□■■■□□□■■■■□□");
puts(" ■■■■■■■■□□□□□□□□□□□□□");
puts(" ■■■■■■■■■■■□□□□□□□□□□");
puts(" ■■■■■■■■■■■□□□□□□□□□□");
puts(" ■■■■■■■■■■■□□□□□□□□□□");
puts(" ■■■■■■■■■■■□□□□□□□□□□");
puts(" ■■■■■■■■■■■□□□□□□□□□□");
puts(" ■■■■■■■■■■■□□□□□□□□□□");
puts(" ■■■■■■■■■■■□□□□□□□□□□");
Sleep(2000);
system("cls");
puts("-====================================snake==========================lbz888 │");
puts(" ┗-");
printf("輸入地圖邊長:(推薦:10~20)\n");
scanf("%d",&level);
if(level>20)
{
level=20;
printf("邊長過大,自動調整爲 20\n");
}
if(level<5)
{
level=5;
printf("邊長過小,自動調整爲 5\n");
}
printf("\n輸入初始速度:(推薦:100~200)(單位:ms/格)(數值越小越快)(會隨蛇身長變長而減小)\n");
scanf("%d",&speed);
if(speed>1000)
{
speed=1000;
printf("數值過小,自動調整爲 1000 ms/格\n");
}
if(speed<10)
{
speed=10;
printf("數值過小,自動調整爲 10 ms/格\n");
}
Sleep(1000);
system("cls");
puts("-====================================snake==========================lbz888 │");
puts(" ┗-");
printf("\n");
yyy=(81-level*2)/2;
x=level/2,y=level/2;
lastx=x,lasty=y;
que[++r][0]=x;
que[r][1]=y+1;
map[x][y+1]=1;
que[++r][0]=x;
que[r][1]=y;
map[x][y]=1;
lastinput=75;
input=75;
GoToXY(0,xxx-1);
for(int j=1;j<=yyy-2;j++)printf(" ");
printf("┏");
for(int i=0;i<level;i++) printf("━");
printf("┓");
printf("\n");
for(int i=0;i<level;i++)
{
for(int j=1;j<=yyy-2;j++)printf(" ");
printf("┃");
for(int j=0;j<level;j++)
{
if(x==i&&y==j)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|
FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
printf("<<");
}
else if(map[i][j]==1)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|
FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
printf("■");
}
else
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
printf("□");
}
}
printf("┃");
printf("\n");
}
for(int j=1;j<=yyy-2;j++)printf(" ");
printf("┗");
for(int i=0;i<level;i++) printf("━");
printf("┛");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
}
void read()
{
int tempinput=input;
while(kbhit())
{
input=-32;
while(input==-32)
{
input=_getch();
}
}
if(!(input==72||input=='w'||input=='W'||input==80||input=='s'||input=='S'||input==75||input=='a'||input=='A'||input==77||
input=='d'||input=='D'))
{
input=tempinput;
return ;
}
if(input=='w'||input=='W')input=72;
if(input=='s'||input=='S')input=80;
if(input=='a'||input=='A')input=75;
if(input=='d'||input=='D')input=77;
if((lastinput==72&&input==80)||(lastinput==80&&input==72)||(lastinput==75&&input==77)||(lastinput==77&&input==75))
{
input=tempinput;
return ;
}
lastinput=input;
}
void change()
{
int if_moved=0;
GoToXY(78,0);
if(input==72||input=='w'||input=='W') // 上
{
x--;
x=(x+level)%level;
printf("↑");
if_moved=1;
}
if(input==80||input=='s'||input=='S') // 下
{
x++;
x=x%level;
printf("↓");
if_moved=1;
}
if(input==75||input=='a'||input=='A') // 左
{
y--;
y=(y+level)%level;
printf("←");
if_moved=1;
}
if(input==77||input=='d'||input=='D') // 右
{
y++;
y=y%level;
printf("→");
if_moved=1;
}
int lasst=map[x][y];
if(if_moved==1)
{
que[++r][0]=x;
que[r][1]=y;
map[x][y]=1;
if(map[foodx][foody]!=2)
{
if_eaten=1;
ans+=10000/speed;
if(fff==8) ans+=20000/speed;
}
else
{
map[que[l][0]][que[l][1]]=0;
GoToXY(que[l][1]*2+yyy,que[l][0]+xxx);
printf("□");
l++;
}
}
if(lasst==1&&if_moved==1&&(x!=que[l-1][0]||y!=que[l-1][1]))
{
if_bomb=1;
}
map[x][y]=1;
}
void make_food()
{
fff=rand()%10;
if(fff==8)
{
big_food++;
}
foodx=rand()%level;
foody=rand()%level;
while(map[foodx][foody]!=0)
{
foodx=rand()%level;
foody=rand()%level;
}
map[foodx][foody]=2;
GoToXY(foody*2+yyy,foodx+xxx);
if(fff==8)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|
FOREGROUND_RED);
printf("★");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
}
else
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN|
FOREGROUND_RED|FOREGROUND_INTENSITY);
printf("●");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
}
if_eaten=0;
}
void output()
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|
FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
GoToXY(lasty*2+yyy,lastx+xxx);
printf("■");
GoToXY(y*2+yyy,x+xxx);
if(input==72||input=='w'||input=='W')
{
printf("△");
}
else if(input==80||input=='s'||input=='S')
{
printf("▽");
}
else if(input==75||input=='a'||input=='A')
{
printf("<<");
}
else if(input==77||input=='d'||input=='D')
{
printf(">>");
}
map[x][y]=1;
lastx=x;
lasty=y;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
}
double timmm;
void game_over()
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|
FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
GoToXY(0,level/2+xxx-3);
printf(" GAME OVER\n");
printf(" 速度:%d\n",speed);
printf(" 長度:%d\n",r-l+1);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|
FOREGROUND_GREEN);
printf(" 成績:%d\n",ans);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|
FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
printf(" 時間:%.2lf s\n",(double)clock()/CLOCKS_PER_SEC-timmm);
GoToXY(5,1);
printf("\t地圖邊長:%d\t速度:%d ms/格\t成績:%d",level,speed,ans);
Sleep(2000);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
}
int main()
{
srand(time(NULL));
first_output();
make_food();
int last_long=3;
int mm=0;
timmm=(double)clock()/CLOCKS_PER_SEC;
while(1)
{
mm++;
if(r-l==last_long+3)
{
if(speed>5)
{
speed-=5;
}
last_long=r-l;
}
GoToXY(5,1);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|
FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
printf("\t地圖邊長:%d\t速度:%d ms/格\t成績:%d",level,speed,ans);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
Sleep(speed);
read();
change();
map[x][y]=1;
if(if_eaten||mm>(level*3)/2+1)
{
map[foodx][foody]=0;
GoToXY(foody*2+yyy,foodx+xxx);
printf("□");
make_food();
mm=0;
}
output();
if(if_bomb==1)
{
GoToXY(0,level+xxx);
game_over();
break;
}
}
GoToXY(0,level+xxx+1);
system("pause");
return 0;
}
/*
特殊字符:
□■→↓←↑ ◇▽ ○◎ ●
┗━│△▽ < > ???????????▲▼●◆★????☆◇○▽
┏┳┓
┣╋┫
┗┻┛
━┃
Sleep(10);
puts("□□□");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN|
FOREGROUND_RED|FOREGROUND_INTENSITY|BACKGROUND_BLUE|BACKGROUND_INTENSITY);
*/
3.無背景版
(其實沒什麼改動……)
#include <stdio.h>
#include <time.h>
#include <conio.h>
#include <stdlib.h>
#include <windows.h>
void GoToXY(int x,int y)
{
COORD pos = {x,y};
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hOut, pos);
}
#define MAXN 10
int level,speed;
int xxx=3;
int yyy=(81-MAXN*2)/2;
int map[100][100];//24*24
void GoToXY(int x, int y);
int x=MAXN/2,y=MAXN/2;
int lastx=x,lasty=y;
char input,lastinput;
int que[100000][2],l=1,r=0;
int if_bomb=0;
int if_eaten=0,foodx,foody;
int big_food=0,fff;
int ans=0;
void first_output()
{
puts(" SNAKE ");
printf("\n MADE BY\n\n");
puts(" ■■■■■■■■■■■□□□□□□□□□□");
puts(" ■■■■■■■■■■■□□□□□□□□□□");
puts(" ■■■■■■■■■■■□□□□□□□□□□");
puts(" ■■■■■■■■□□□□□□□□□□□□□");
puts(" ■■■□■■■■□■■■□□□■■■■□□");
puts(" ■■■□■■■■□■□□■□□□□■■□□");
puts(" ■■■□■■■■□■■■□□□□■■□□□");
puts(" ■■■□■■■■□■□□■□□■■□□□□");
puts(" ■■■□□□□■□■■■□□□■■■■□□");
puts(" ■■■■■■■■□□□□□□□□□□□□□");
puts(" ■■■■■■■■■■■□□□□□□□□□□");
puts(" ■■■■■■■■■■■□□□□□□□□□□");
puts(" ■■■■■■■■■■■□□□□□□□□□□");
puts(" ■■■■■■■■■■■□□□□□□□□□□");
puts(" ■■■■■■■■■■■□□□□□□□□□□");
puts(" ■■■■■■■■■■■□□□□□□□□□□");
puts(" ■■■■■■■■■■■□□□□□□□□□□");
Sleep(2000);
system("cls");
puts("-====================================snake==========================lbz888 │");
puts(" ┗-");
printf("輸入地圖邊長:(推薦:10~20)\n");
scanf("%d",&level);
if(level>20)
{
level=20;
printf("邊長過大,自動調整爲 20\n");
}
if(level<5)
{
level=5;
printf("邊長過小,自動調整爲 5\n");
}
printf("\n輸入初始速度:(推薦:100~200)(單位:ms/格)(數值越小越快)(會隨蛇身長變長而減小)\n");
scanf("%d",&speed);
if(speed>1000)
{
speed=1000;
printf("數值過小,自動調整爲 1000 ms/格\n");
}
if(speed<10)
{
speed=10;
printf("數值過小,自動調整爲 10 ms/格\n");
}
Sleep(1000);
system("cls");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN|
FOREGROUND_RED|FOREGROUND_BLUE|FOREGROUND_INTENSITY);
puts("-====================================snake==========================lbz888 │");
puts(" ┗-");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN|
FOREGROUND_RED|FOREGROUND_BLUE);
printf("\n");
yyy=(81-level*2)/2;
x=level/2,y=level/2;
lastx=x,lasty=y;
que[++r][0]=x;
que[r][1]=y+1;
map[x][y+1]=1;
que[++r][0]=x;
que[r][1]=y;
map[x][y]=1;
lastinput=75;
input=75;
GoToXY(0,xxx-1);
for(int j=1;j<=yyy-2;j++)printf(" ");
printf("┏");
for(int i=0;i<level;i++) printf("━");
printf("┓");
printf("\n");
for(int i=0;i<level;i++)
{
for(int j=1;j<=yyy-2;j++)printf(" ");
printf("┃");
for(int j=0;j<level;j++)
{
if(x==i&&y==j)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|
FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
printf("<<");
}
else if(map[i][j]==1)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|
FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
printf("■");
}
else
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
printf(" ");
}
}
printf("┃");
printf("\n");
}
for(int j=1;j<=yyy-2;j++)printf(" ");
printf("┗");
for(int i=0;i<level;i++) printf("━");
printf("┛");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
}
void read()
{
int tempinput=input;
while(kbhit())
{
input=-32;
while(input==-32)
{
input=_getch();
}
}
if(!(input==72||input=='w'||input=='W'||input==80||input=='s'||input=='S'||input==75||input=='a'||input=='A'||input==77||
input=='d'||input=='D'))
{
input=tempinput;
return ;
}
if(input=='w'||input=='W')input=72;
if(input=='s'||input=='S')input=80;
if(input=='a'||input=='A')input=75;
if(input=='d'||input=='D')input=77;
if((lastinput==72&&input==80)||(lastinput==80&&input==72)||(lastinput==75&&input==77)||(lastinput==77&&input==75))
{
input=tempinput;
return ;
}
lastinput=input;
}
void change()
{
int if_moved=0;
GoToXY(78,0);
if(input==72||input=='w'||input=='W') // 上
{
x--;
x=(x+level)%level;
printf("↑");
if_moved=1;
}
if(input==80||input=='s'||input=='S') // 下
{
x++;
x=x%level;
printf("↓");
if_moved=1;
}
if(input==75||input=='a'||input=='A') // 左
{
y--;
y=(y+level)%level;
printf("←");
if_moved=1;
}
if(input==77||input=='d'||input=='D') // 右
{
y++;
y=y%level;
printf("→");
if_moved=1;
}
int lasst=map[x][y];
if(if_moved==1)
{
que[++r][0]=x;
que[r][1]=y;
map[x][y]=1;
if(map[foodx][foody]!=2)
{
if_eaten=1;
ans+=10000/speed;
if(fff==8) ans+=20000/speed;
}
else
{
map[que[l][0]][que[l][1]]=0;
GoToXY(que[l][1]*2+yyy,que[l][0]+xxx);
printf(" ");
l++;
}
}
if(lasst==1&&if_moved==1&&(x!=que[l-1][0]||y!=que[l-1][1]))
{
if_bomb=1;
}
map[x][y]=1;
}
void make_food()
{
fff=rand()%10;
if(fff==8)
{
big_food++;
}
foodx=rand()%level;
foody=rand()%level;
while(map[foodx][foody]!=0)
{
foodx=rand()%level;
foody=rand()%level;
}
map[foodx][foody]=2;
GoToXY(foody*2+yyy,foodx+xxx);
if(fff==8)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|
FOREGROUND_RED);
printf("★");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
}
else
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN|
FOREGROUND_RED|FOREGROUND_INTENSITY);
printf("●");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
}
if_eaten=0;
}
void output()
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|
FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
GoToXY(lasty*2+yyy,lastx+xxx);
printf("■");
GoToXY(y*2+yyy,x+xxx);
if(input==72||input=='w'||input=='W')
{
printf("△");
}
else if(input==80||input=='s'||input=='S')
{
printf("▽");
}
else if(input==75||input=='a'||input=='A')
{
printf("<<");
}
else if(input==77||input=='d'||input=='D')
{
printf(">>");
}
map[x][y]=1;
lastx=x;
lasty=y;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
}
double timmm;
void game_over()
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|
FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
GoToXY(0,level/2+xxx-3);
printf(" GAME OVER\n");
printf(" 速度:%d\n",speed);
printf(" 長度:%d\n",r-l+1);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|
FOREGROUND_GREEN);
printf(" 成績:%d\n",ans);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|
FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
printf(" 時間:%.2lf s\n",(double)clock()/CLOCKS_PER_SEC-timmm);
GoToXY(5,1);
printf("\t地圖邊長:%d\t速度:%d ms/格\t成績:%d",level,speed,ans);
Sleep(2000);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
}
int main()
{
srand(time(NULL));
first_output();
make_food();
int last_long=3;
int mm=0;
timmm=(double)clock()/CLOCKS_PER_SEC;
while(1)
{
mm++;
if(r-l==last_long+3)
{
if(speed>5)
{
speed-=5;
}
last_long=r-l;
}
GoToXY(5,1);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|
FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
printf("\t地圖邊長:%d\t速度:%d ms/格\t成績:%d",level,speed,ans);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
Sleep(speed);
read();
change();
map[x][y]=1;
if(if_eaten||mm>(level*3)/2+1)
{
map[foodx][foody]=0;
GoToXY(foody*2+yyy,foodx+xxx);
printf(" ");
make_food();
mm=0;
}
output();
if(if_bomb==1)
{
GoToXY(0,level+xxx);
game_over();
break;
}
}
GoToXY(0,level+xxx+1);
system("pause");
return 0;
}
/*
特殊字符:
▁▂▃▄▅▆▇
□■
→↓←↑
◇▽ ○◎ ●△▽ < > ???????????▲▼●◆★????☆◇○▽
┏┳┓
┣╋┫
┗┻┛
━┃
Sleep(10);
puts("□□□");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN|
FOREGROUND_RED|FOREGROUND_INTENSITY);
*/