【LB】C語言實現貪喫蛇

懶得寫註釋~~~


#include<stdio.h>
#include<windows.h>
#include<conio.h>
#include<time.h>
#include<stdlib.h>

typedef struct{
int x;
int y;
}foods;

typedef struct{
int x;
int y;
}point;

typedef struct{
int top;

point at[100];
}points;

points a;
foods food;


int map[20][20]={  {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
                   {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
   {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
   {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
   {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
   {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
   {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
   {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
   {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
   {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
   {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
   {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
   {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
   {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
   {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
   {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
   {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
   {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
   {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
   {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}   
};

void print(){
int mx,my;
for(my=0;my<20;my++){
for(mx=0;mx<20;mx++){
if(map[mx][my]==1) printf("田");
if(map[mx][my]==2) printf("■");
if(map[mx][my]==0) printf("  ");}
printf("\n");}
}

void push(int x,int y)
{if(a.top>99) printf("錯誤");
else{
a.top++;
a.at[a.top].x=x;
a.at[a.top].y=y;
}
}

void start(){
a.top=-1;
push(3,10);
push(4,10);
}

void draw(){
int temp;
for(temp=a.top;temp>=0;temp--)
map[a.at[temp].x][a.at[temp].y]=2;
}

int check_food(){
int temp;
for(temp=a.top;temp>=0;temp--)
if(food.x==a.at[temp].x&&food.y==a.at[temp].y) return 1;
return 0;
}

void set_food(){
do{
srand((int)time(0));
food.x=rand()%18+1;
food.y=rand()%18+1;
map[food.x][food.y]=2;}
while(check_food());
}

int check(int x)
{int temp;
switch(x){
case 1:
for(temp=a.top-3;temp>0;temp--)
if(a.at[a.top].x+1==a.at[temp].x&&a.at[a.top].y==a.at[temp].y) return 1;break;
case 2:
for(temp=a.top-3;temp>0;temp--)
if(a.at[a.top].y+1==a.at[temp].y&&a.at[a.top].x==a.at[temp].x) return 1;break;
case 3:
for(temp=a.top-3;temp>0;temp--)
if(a.at[a.top].x-1==a.at[temp].x&&a.at[a.top].y==a.at[temp].y) return 1;break;
case 4:
for(temp=a.top-3;temp>0;temp--)
if(a.at[a.top].y-1==a.at[temp].y&&a.at[a.top].x==a.at[temp].x) return 1;}
return 0;

}

void goright(){
int temp;
if(a.at[a.top].x+1==food.x&&a.at[a.top].y==food.y)
{push(food.x,food.y);
set_food();
}
else if(a.at[a.top].x+1==19) {print();printf("撞牆啦!");system("pause");exit(1);}
else if(check(1)) {print();printf("咬到自己啦!");system("pause");exit(1);}
else
{map[a.at[0].x][a.at[0].y]=0;
for(temp=0;temp<a.top;temp++){
a.at[temp].x=a.at[temp+1].x;
a.at[temp].y=a.at[temp+1].y;}
a.at[a.top].x++;}
}

void godown(){
int temp;
if(a.at[a.top].y+1==food.y&&a.at[a.top].x==food.x)
{push(food.x,food.y);
set_food();
}
else if(a.at[a.top].y+1==19) {print();printf("撞牆啦!");system("pause");exit(1);}
else if(check(2)) {print();printf("咬到自己啦!");system("pause");exit(1);}
else{
map[a.at[0].x][a.at[0].y]=0;
for(temp=0;temp<a.top;temp++){
a.at[temp].x=a.at[temp+1].x;
a.at[temp].y=a.at[temp+1].y;}
a.at[a.top].y++;}
}

void goleft(){
int temp;
if(a.at[a.top].x-1==food.x&&a.at[a.top].y==food.y)
{push(food.x,food.y);
set_food();
}
else if(a.at[a.top].x-1==0) {print();printf("撞牆啦!");system("pause");exit(1);}
else if(check(3)) {print();printf("咬到自己啦!");system("pause");exit(1);}
else{
map[a.at[0].x][a.at[0].y]=0;
for(temp=0;temp<a.top;temp++){
a.at[temp].x=a.at[temp+1].x;
a.at[temp].y=a.at[temp+1].y;}
a.at[a.top].x--;}
}

void goup(){
int temp;
if(a.at[a.top].y-1==food.y&&a.at[a.top].x==food.x)
{push(food.x,food.y);
set_food();
}
else if(a.at[a.top].y-1==0) {print();printf("撞牆啦!");system("pause");exit(1);}
else if(check(4)) {print();printf("咬到自己啦!");system("pause");exit(1);}
else{
map[a.at[0].x][a.at[0].y]=0;
for(temp=0;temp<a.top;temp++){
a.at[temp].x=a.at[temp+1].x;
a.at[temp].y=a.at[temp+1].y;}
a.at[a.top].y--;}
}


void go(int way){
switch(way){
case 1:goright();break;
case 2:godown();break;
case 3:goleft();break;
case 4:goup();
}
}

void main(){
int way=1;
char keyboard;
start();
set_food();
draw();
print();
while(1){
if(!_kbhit()){
system("cls");
     go(way);
draw();
print();
Sleep(200);}
else {
keyboard=_getch();
if(way!=3&&keyboard=='d') way=1;
else if(way!=4&&keyboard=='s') way=2;
else if(way!=1&&keyboard=='a') way=3;
else if(way!=2&&keyboard=='w') way=4;
else if(keyboard=='p') system("pause");}
};
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章