真正意义上的第一个程序.留作纪念.
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<graphics.h>
#include<time.h>
#define N 100
int i,s,m;
char key;
struct Food
{
int x;
int y;
int flag;
}food;
struct Snake
{
int x[N];
int y[N];
int node;
int dir;
int life;
}snake;
void welcome()
{
initgraph(640,480);
setcolor(RED);
//setlinestyle(PS_DASHDOT,10); //线条类型
setlinestyle(PS_SOLID, 10);
line(200,120,440,120); //欢迎界面的上划线
line(200,300,440,300); //欢迎界面的下划线
line(200,120,200,300); //欢迎界面的左划线
line(440,120,440,300); //欢迎界面的右划线
setcolor(YELLOW);
settextstyle(30, 0, "黑体");
outtextxy(240,180,"贪吃蛇游戏");
int i=255;
int c=255;
while(!kbhit())
{
setcolor(RGB(c, 0, 0));
settextstyle(15, 0, "宋体");
outtextxy(280, 240, "按任意键继续");
c -= 8;
if (c < 0) c = 255;
Sleep(50);
}
getch();
cleardevice();
}
int speed()
{
setcolor(RED);
setlinestyle(PS_DASHDOT);
line(200,120,440,120); //登录界面的上划线
line(200,300,440,300); //登录界面的下划线
line(200,120,200,300); //登录界面的左划线
line(440,120,440,300); //登录界面的右划线
setcolor(RED);
settextstyle(25, 0, "黑体");
outtextxy(240,140,"选择游戏难度");
settextstyle(20, 0, "宋体");
outtextxy(260,180,"1.不战而退.");
outtextxy(260,200,"2.简单难度.");
outtextxy(260,220,"3.一般难度.");
outtextxy(260,240,"4.噩梦难度.");
m=getch();
switch(m)
{
case 49:
return 0;
break;
case 50:
return 300;
break;
case 51:
return 150;
break;
case 52:
return 50;
break;
}
}
void wall(int x,int y)
{
setfillcolor(WHITE);
solidrectangle(x, y, x+10, y+10);
setfillcolor(RED);
solidrectangle(x+2, y+2, x+8, y+8);
}
void Dwall()
{
cleardevice();
int i;
setlinecolor(RED);
setlinestyle(PS_SOLID, 10);
line(10,10,500,10); //游戏界面的上划线
line(10,460,500,460); //游戏界面的下划线
line(10,10,10,460); //游戏界面的左划线
line(500,10,500,460); //游戏界面的右划线
for(i=20;i<=480;i=i+20){
wall(i,20); //游戏界面的上面墙
wall(i,440); //游戏界面的下面墙
}
for(i=20;i<440; i=i+20){
wall(20,i); //游戏界面的左面墙
wall(480,i); //游戏界面的右面墙
}
setcolor(BLUE);
settextstyle(30,0, "黑体");
outtextxy(540,120,"score");
outtextxy(540,200,"longth");
setcolor(RGB(120,220,255));
settextstyle(20,0, "宋体");
outtextxy(510,280,"W --上");
outtextxy(510,300,"s --下");
outtextxy(510,320,"a --左");
outtextxy(510,340,"d --右");
outtextxy(510,360,"esc --退出");
outtextxy(510,380,"space --暂停");
}
void gameover()
{
cleardevice(); //清屏
int c=255;
while(!kbhit())
{
setcolor(RGB(c, 0, 0));
settextstyle(50, 0, "宋体");
outtextxy(100,240,"GAME OVER,LOSER!!!");
settextstyle(15, 0, "宋体");
outtextxy(260,300,"按任意键退出.");
c -= 8;
if (c < 0) c = 255;
Sleep(30);
}
}
void play()
{
int score;
char str1[5];
char str2[5];
srand((unsigned)time(0)); //这个函数是给随机数产生一个随机种子
food.flag=1;
snake.life=0;
snake.dir=1;
snake.x[0]=250;
snake.y[0]=220;
snake.x[1]=240;
snake.y[1]=220;
snake.node=2;
do{
if(snake.node==100){
cleardevice();
setcolor(RED);
settextstyle(50, 0, "宋体");
outtextxy(100,240,"GAME OVER,WINNER!!!");
settextstyle(20,0, "宋体");
outtextxy(260,300,"按任意键退出.");
break;
}
score=(snake.node-2)*(m-49);
sprintf(str1, "%d", score);
sprintf(str2, "%d", snake.node);
setcolor(RED);
settextstyle(20,0, "宋体");
outtextxy(570,160,str1);
setcolor(RED);
settextstyle(20,0, "宋体");
outtextxy(570,240,str2);
while(!kbhit()){
if(food.flag==1){
do{
food.x=rand()%450+30;
food.y=rand()%410+30;
food.flag=0;
}while(food.x%10!=0||food.y%10!=0);
}
//出现食物
if(food.flag==0){
setfillcolor(GREEN);
solidrectangle(food.x, food.y,food.x+10,food.y+10);
}
//蛇移动
for(i=snake.node-1;i>0;i--){
snake.x[i]=snake.x[i-1];
snake.y[i]=snake.y[i-1];
}
switch(snake.dir){
case 1:
snake.x[0]=snake.x[0]+10; //向右移动
break;
case 2:
snake.x[0]=snake.x[0]-10; //向左移动
break;
case 3:
snake.y[0]=snake.y[0]-10; //向上移动
break;
case 4:
snake.y[0]=snake.y[0]+10; //向下移动
break;
}
//咬到自己
for(i=3;i<=snake.node;i++){
if(snake.x[i]==snake.x[0]&&snake.y[i]==snake.y[0]){
gameover();
snake.life=1;
break;
}
}
//撞墙
if(snake.x[0]<30||snake.x[0]>470||snake.y[0]<30||snake.y[0]>430){
gameover();
snake.life=1;
break;
}
//画蛇
setfillcolor(GREEN);
solidrectangle(snake.x[0], snake.y[0],snake.x[0]+10,snake.y[0]+10);
for(i=1;i<snake.node;i++){
setfillcolor(BLUE);
solidrectangle(snake.x[i], snake.y[i],snake.x[i]+10,snake.y[i]+10);
}
//吃食物
if(snake.x[0]==food.x&&snake.y[0]==food.y){
setfillcolor(BLACK);
solidrectangle(food.x,food.y,food.x+10,food.y+10);
snake.node++;
food.flag=1;
}
setfillcolor(RED);
solidrectangle(snake.x[snake.node-1], snake.y[snake.node-1],snake.x[snake.node-1]+10,snake.y[snake.node-1]+10);
Sleep(s);
setfillcolor(BLACK);
solidrectangle(snake.x[snake.node-1], snake.y[snake.node-1],snake.x[snake.node-1]+10,snake.y[snake.node-1]+10);
}
if(snake.life==1){
break;
}
key=getch();
if(key=='w'||key==38&&snake.dir!=4) //上移
{
snake.dir=3;
}
else if(key=='s'||key==40&&snake.dir!=3) //下移
{
snake.dir=4;
}
else if(key=='d'||key==39&&snake.dir!=2) //右移
{
snake.dir=1;
}
else if(key=='a'||key==37&&snake.dir!=1) //左移
{
snake.dir=2;
}
else if(key==32)
{
getch();
}
}while(s!=0&&key!=27);
}
void main()
{
initgraph(640,480);
welcome();
s=speed();
Dwall();
play();
//getch();
closegraph();
}
程序用的IDE是VC6.0 编译器没有graphics.h头文件,采用了第三方库Easyx