贪吃蛇

来源:互联网 发布:淘宝店铺开通花呗条件 编辑:程序博客网 时间:2024/04/30 11:01

真正意义上的第一个程序.留作纪念.

#include<stdio.h>#include<conio.h>#include<stdlib.h>#include<graphics.h>#include<time.h>#define N 100int 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

0 0