貪喫蛇測試版1.0

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
#include <string.h>
#include <time.h>
void gotoxy(int x, int y)
{
COORD pos = {x,y};
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hOut, pos);
}
int length;
int corner[2]={0};
int random[2]={0};
struct Snake
{
int headx;
int heady;
char MoveDirection;
};
struct Snake snake[15]={0};
void PrintX();
void Introduction();
void start();
void move(char space[40][24]);
void PrintSpace();
void WASD_direction(int SnakeLength);
void body_direction(int SnakeLength);
void TurnLeft(int i);
void TurnRight(int i);
void TurnUp(int i);
void TurnDown(int i);
void rand_SnakeBody_start(char space[40][24]);
void rand_SnakeBody_end(char space[40][24]);
int rand_X_axis();
int rand_Y_axis();
void GetMarks(char space[40][24]);
void newBody();

void final();
main()
{
int i_0;
char space[40][24]={0};
Introduction();
system("cls");
gotoxy(0,0);
for(i_0=0;i_0<24;i_0++)
printf("|\n");
for(i_0=0;i_0<24;i_0++)
{
gotoxy(40,i_0);
printf("|");
}
start();
gotoxy(44,10);
printf("您的得分是:%d*100",length);
rand_SnakeBody_start(space);
move(space);
final();
system("pause");
return 0;
}
void Introduction()
{
gotoxy(15,0);
printf("貪喫蛇beta1.0\n");
printf("WASD四個按鍵控制\n");
printf("蛇的身體碰到牆壁就會game over\n");
printf("按任意鍵開始.");
getch();

}
void start()
{
int i;
length=2;
snake[0].headx=18;
snake[0].heady=10;
for(i=0;i<2;i++)
{
snake[i].MoveDirection='R';
}
}
void PrintX()
{
printf("x");
}
void move(char space[40][24])
{
int i,n,m;
while(snake[0].headx<40&&snake[0].headx>1&&snake[0].heady>1&&snake[0].heady<24&&length<15)
{
for(i=0;i
{
body_direction(i);
gotoxy(snake[i].headx,snake[i].heady);
PrintX();
GetMarks(space);
}
for(n=0;n<40000;n++)
for(m=0;m<10000;m++);
for(i=0;i
{
gotoxy(snake[i].headx,snake[i].heady);
PrintSpace();
WASD_direction(i);
}
}

}
void PrintSpace()
{
printf(" ");
}
void WASD_direction(int SnakeLength)
{
int fangxiangjian;
if(kbhit()!=0)
{
fangxiangjian=getch();
switch(fangxiangjian)
{
case'A':
case 'a':
if(snake[0].MoveDirection=='U'||snake[0].MoveDirection=='D')
{
   corner[0]=snake[0].headx;
corner[1]=snake[0].heady;
snake[0].MoveDirection='L';
TurnLeft(0);
}
break;

case 'D':
case 'd':
if(snake[0].MoveDirection=='U'||snake[0].MoveDirection=='D')
{
   corner[0]=snake[0].headx;
corner[1]=snake[0].heady;
snake[0].MoveDirection='R';
TurnRight(0);
}
break;
case 'W':
case 'w':
if(snake[0].MoveDirection=='R'||snake[0].MoveDirection=='L')
{
  corner[0]=snake[0].headx;
corner[1]=snake[0].heady;
snake[0].MoveDirection='U';
TurnUp(0);
}
break;
case 'S':
case's': 
if(snake[0].MoveDirection=='R'||snake[0].MoveDirection=='L')
{
corner[0]=snake[0].headx;
corner[1]=snake[0].heady;
snake[0].MoveDirection='D';
TurnDown(0);
}
break;

default:
break;

}

}
else
{
switch(snake[SnakeLength].MoveDirection)
{
case 'R':
snake[SnakeLength].headx++;
break;
case 'L':
snake[SnakeLength].headx--;
break;
case 'U':
snake[SnakeLength].heady--;
break;
case 'D':
 snake[SnakeLength].heady++;
 break;
  default:
break;
}

}

}

void TurnLeft(int i)
{
gotoxy(snake[i].headx,snake[i].heady);
PrintSpace();
gotoxy(snake[i].headx-1,snake[i].heady);
PrintX();

gotoxy(snake[i].headx,snake[i].heady);
PrintSpace();
snake[i].headx--;

}
void TurnRight(int i)
{
gotoxy(snake[i].headx+1,snake[i].heady);
PrintX();
gotoxy(snake[i].headx,snake[i].heady);
PrintSpace();
snake[i].headx++;

}
void TurnUp(int i)
{
gotoxy(snake[i].headx,snake[i].heady-1);
PrintX();

gotoxy(snake[i].headx,snake[i].heady);
PrintSpace();
snake[0].heady--;

}
void TurnDown(int i)
{
gotoxy(snake[i].headx,snake[i].heady+1);
PrintX();

gotoxy(snake[i].headx,snake[i].heady);
PrintSpace();
snake[i].heady++;

}
void body_direction(int SnakeLength)
{
if(snake[SnakeLength].MoveDirection!=snake[0].MoveDirection&&SnakeLength>0)
{
switch(snake[SnakeLength].MoveDirection)
{
case 'R':
if(snake[SnakeLength].headx
{}
else
snake[SnakeLength].MoveDirection=snake[SnakeLength-1].MoveDirection;
break;
case 'L':
if(snake[SnakeLength].headx>corner[0])
{}
else
snake[SnakeLength].MoveDirection=snake[SnakeLength-1].MoveDirection;
break;
case 'U':
if(snake[SnakeLength].heady>corner[1])
{}
else
snake[SnakeLength].MoveDirection=snake[SnakeLength-1].MoveDirection;
break;  
break;
case 'D':
if(snake[SnakeLength].heady
{}
else
snake[SnakeLength].MoveDirection=snake[SnakeLength-1].MoveDirection;
break;
break;
  default:
break;
}
}
else
{
switch(snake[SnakeLength-1].MoveDirection)
{
case 'R':
snake[SnakeLength].headx=snake[SnakeLength-1].headx-1;
snake[SnakeLength].heady=snake[SnakeLength-1].heady;
break;
case 'L':
snake[SnakeLength].headx=snake[SnakeLength-1].headx+1;
snake[SnakeLength].heady=snake[SnakeLength-1].heady;
break;
case 'U':
snake[SnakeLength].heady=snake[SnakeLength-1].heady+1;
snake[SnakeLength].headx=snake[SnakeLength-1].headx;  
break;
case 'D':
 snake[SnakeLength].heady=snake[SnakeLength-1].heady-1;
 snake[SnakeLength].headx=snake[SnakeLength-1].headx;
break;
  default:
break;
}
}

}
void rand_SnakeBody_start(char space[40][24])
{
int x,y;
x=rand_X_axis();
y=rand_X_axis();
while(x>40||y<10)
{
if(x>40)
{
x-=10;
}
if(y<10)
{
y+=10;
}
 
}
random[0]=x;
random[1]=y;
gotoxy(x,y);
PrintX();
space[x][y]='x';

}
void rand_SnakeBody_end(char space[40][24])
{
int x,y;
x=random[0];
y=random[1];
gotoxy(x,y);
space[x][y]=' ';
PrintSpace();

}
int rand_X_axis()
{
int randX;
srand(time(0));
randX=rand() +4;
 
return randX;
}
int rand_Y_axis()
{
int randY;
srand(time(0));
randY=rand() +2;
return randY;
}
void GetMarks(char space[40][24])
{
switch(snake[0].MoveDirection)
{
case 'R':
if(space[snake[0].headx+1][snake[0].heady]=='x')
{
rand_SnakeBody_end(space);
length=length+1;
newBody();
gotoxy(44,10);
printf("您的得分是:%d*100",length);
rand_SnakeBody_start(space);

}
   break;
case 'L':
if(space[snake[0].headx-1][snake[0].heady]=='x')
{
rand_SnakeBody_end(space);
length=length+1;
newBody();
gotoxy(44,10);
printf("您的得分是:%d*100",length);
rand_SnakeBody_start(space);
}
   break;
case 'U':
if(space[snake[0].headx][snake[0].heady-1]=='x')
{
rand_SnakeBody_end(space);
length=length+1;
newBody();
gotoxy(44,10);
printf("您的得分是:100*%d",length);
rand_SnakeBody_start(space);
}
   break;
case 'D':
if(space[snake[0].headx][snake[0].heady+1]=='x')
{
rand_SnakeBody_end(space);
length=length+1;
newBody();
gotoxy(44,10);
printf("您的得分是:100*%d",length);
rand_SnakeBody_start(space);
}
   break;
default:
break;
}
}
void newBody()
{
snake[length-1].headx=random[0];
snake[length-1].heady=random[1];
snake[length-1].MoveDirection=snake[length-2].MoveDirection;

}

void final()
{
system("cls");
gotoxy(25,25);
printf("遊戲結束");
gotoxy(25,26);
printf("你的最終得分%d",length*100);
}

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