#include<stdio.h>
#include<windows.h>
#include<conio.h>
#include<time.h>
#define wide 20
#define framex 5
#define framey 5
int i=0,a[2];
//光标定位
void gotoxy(HANDLE hout,int x,int y){
COORD pos;
pos.X=x;
pos.Y=y;
SetConsoleCursorPosition(hout,pos);
}
//蛇结构
struct snake{
int x[30];
int y[30];
int length;
int speed;
};
//食物结构
struct food{
int x;
int y;
};
//输出框架
void framework(HANDLE hout){
for(i=0;i<=wide;i++){
gotoxy(hout,framex+2*i,framey);
printf("■");
gotoxy(hout,framex+2*i+2,framey+wide+1);
printf("■");
gotoxy(hout,framex,framey+1+i);
printf("■");
gotoxy(hout,framex+2*wide+2,framey+i);
printf("■");
}
}
//蛇初始化
void initsnake(struct snake *snake){
snake->speed=300;
snake->length=3;
for(i=0;i<3;i++){
snake->x[i]=7;
snake->y[i]=15;
}
}
//打印蛇
void printsnake(HANDLE hout,struct snake *snake){
for(i=0;i<snake->length;i++){
gotoxy(hout,snake->x[i],snake->y[i]);
printf("■");
}
}
//移动蛇
void movesnake(HANDLE hout,struct snake *snake){
gotoxy(hout,snake->x[0],snake->y[0]);
printf(" ");
for(i=0;i<snake->length-1;i++){
snake->x[i]=snake->x[i+1];
snake->y[i]=snake->y[i+1];
}
}
//输出食物
void printfood(HANDLE hout,struct snake *snake,struct food *food){
begin:
srand(time(NULL));
food->x=framex+2*rand()%wide+2;
food->y=framey+rand()%wide+1;
for(i=0;i<snake->length;i++){
if(food->x==snake->x[i]&&food->y==snake->y[i])
goto begin;
}
gotoxy(hout,food->x,food->y);
printf("■");
}
//吃食物
void eatfood(HANDLE hout,struct snake *snake,struct food *food){
if(snake->x[snake->length-1]==food->x&&snake->y[snake->length-1]==food->y){
snake->length++;
for(i=snake->length-1;i>0;i--){
snake->x[i]=snake->x[i-1];
snake->y[i]=snake->y[i-1];
}
snake->x[0]=a[0];
snake->y[0]=a[1];
printfood(hout,snake,food);
if(snake->length%3==0)
snake->speed-=50;
}
}
//判断死亡
int ifdeath(struct snake *snake){
for(i=0;i<snake->length-1;i++){
if(snake->x[snake->length-1]==snake->x[i]&&snake->y[snake->length-1]==snake->y[i])
return 0;
}
if(snake->x[snake->length-1]==framex||snake->x[snake->length-1]==framex+2*wide+2||snake->y[snake->length-1]==framey||snake->y[snake->length-1]==framey+wide+1)
return 0;
return 1;
}
//主函数
int main(){
char c=77;
HANDLE hout=GetStdHandle(STD_OUTPUT_HANDLE);
struct snake s,*snake=&s;
struct food f,*food=&f;
initsnake(snake);
framework(hout);
printfood(hout,snake,food);
printsnake(hout,snake);
Sleep(500);
while(1){
a[0]=snake->x[0];
a[1]=snake->y[0];
begin:
if(kbhit()){
c=getch();
}
switch(c){
case 'w':case 'W':case 72:
movesnake(hout,snake);
snake->y[snake->length-1]--;
break;
case 's':case 'S':case 80:
movesnake(hout,snake);
snake->y[snake->length-1]++;
break;
case 'a':case 'A':case 75:
movesnake(hout,snake);
snake->x[snake->length-1]-=2;
break;
case 'd':case 'D':case 77:
movesnake(hout,snake);
snake->x[snake->length-1]+=2;
break;
default:goto begin;
}
eatfood(hout,snake,food);
printsnake(hout,snake);
Sleep(snake->speed);
if(ifdeath(snake)==0||c==27||snake->speed==0){
gotoxy(hout,18,15);
if(snake->speed==0) {
printf("恭喜你!你赢了");
}
else printf("你输了");
Sleep(2000);
break;
}
}
}
#include<windows.h>
#include<conio.h>
#include<time.h>
#define wide 20
#define framex 5
#define framey 5
int i=0,a[2];
//光标定位
void gotoxy(HANDLE hout,int x,int y){
COORD pos;
pos.X=x;
pos.Y=y;
SetConsoleCursorPosition(hout,pos);
}
//蛇结构
struct snake{
int x[30];
int y[30];
int length;
int speed;
};
//食物结构
struct food{
int x;
int y;
};
//输出框架
void framework(HANDLE hout){
for(i=0;i<=wide;i++){
gotoxy(hout,framex+2*i,framey);
printf("■");
gotoxy(hout,framex+2*i+2,framey+wide+1);
printf("■");
gotoxy(hout,framex,framey+1+i);
printf("■");
gotoxy(hout,framex+2*wide+2,framey+i);
printf("■");
}
}
//蛇初始化
void initsnake(struct snake *snake){
snake->speed=300;
snake->length=3;
for(i=0;i<3;i++){
snake->x[i]=7;
snake->y[i]=15;
}
}
//打印蛇
void printsnake(HANDLE hout,struct snake *snake){
for(i=0;i<snake->length;i++){
gotoxy(hout,snake->x[i],snake->y[i]);
printf("■");
}
}
//移动蛇
void movesnake(HANDLE hout,struct snake *snake){
gotoxy(hout,snake->x[0],snake->y[0]);
printf(" ");
for(i=0;i<snake->length-1;i++){
snake->x[i]=snake->x[i+1];
snake->y[i]=snake->y[i+1];
}
}
//输出食物
void printfood(HANDLE hout,struct snake *snake,struct food *food){
begin:
srand(time(NULL));
food->x=framex+2*rand()%wide+2;
food->y=framey+rand()%wide+1;
for(i=0;i<snake->length;i++){
if(food->x==snake->x[i]&&food->y==snake->y[i])
goto begin;
}
gotoxy(hout,food->x,food->y);
printf("■");
}
//吃食物
void eatfood(HANDLE hout,struct snake *snake,struct food *food){
if(snake->x[snake->length-1]==food->x&&snake->y[snake->length-1]==food->y){
snake->length++;
for(i=snake->length-1;i>0;i--){
snake->x[i]=snake->x[i-1];
snake->y[i]=snake->y[i-1];
}
snake->x[0]=a[0];
snake->y[0]=a[1];
printfood(hout,snake,food);
if(snake->length%3==0)
snake->speed-=50;
}
}
//判断死亡
int ifdeath(struct snake *snake){
for(i=0;i<snake->length-1;i++){
if(snake->x[snake->length-1]==snake->x[i]&&snake->y[snake->length-1]==snake->y[i])
return 0;
}
if(snake->x[snake->length-1]==framex||snake->x[snake->length-1]==framex+2*wide+2||snake->y[snake->length-1]==framey||snake->y[snake->length-1]==framey+wide+1)
return 0;
return 1;
}
//主函数
int main(){
char c=77;
HANDLE hout=GetStdHandle(STD_OUTPUT_HANDLE);
struct snake s,*snake=&s;
struct food f,*food=&f;
initsnake(snake);
framework(hout);
printfood(hout,snake,food);
printsnake(hout,snake);
Sleep(500);
while(1){
a[0]=snake->x[0];
a[1]=snake->y[0];
begin:
if(kbhit()){
c=getch();
}
switch(c){
case 'w':case 'W':case 72:
movesnake(hout,snake);
snake->y[snake->length-1]--;
break;
case 's':case 'S':case 80:
movesnake(hout,snake);
snake->y[snake->length-1]++;
break;
case 'a':case 'A':case 75:
movesnake(hout,snake);
snake->x[snake->length-1]-=2;
break;
case 'd':case 'D':case 77:
movesnake(hout,snake);
snake->x[snake->length-1]+=2;
break;
default:goto begin;
}
eatfood(hout,snake,food);
printsnake(hout,snake);
Sleep(snake->speed);
if(ifdeath(snake)==0||c==27||snake->speed==0){
gotoxy(hout,18,15);
if(snake->speed==0) {
printf("恭喜你!你赢了");
}
else printf("你输了");
Sleep(2000);
break;
}
}
}