1. 2201.
    0
    Snake Game

    9. include<iostream.h>
    10. include<conio.h>
    11. include<graphics.h>
    12. include<dos.h>
    13. include<stdlib.h>
    14. include<stdio.h>
    15. include<time.h>
    16. include<string.h>
    class Snake
    {
    int p1,p2,v1,v2,v3,e1,e2,prev,now,n,colr,dsp,cnt,dly,m;
    int stp, egGen;
    int xr,yr;
    void caught();
    public:
    long scr;
    int strtX, strtY,endX, endY;
    int pos[100][2];
    void show();
    void init();
    void egg();
    void transpose();
    void gnrtCond();
    void gnrtUnCond();
    void check();
    void checkEgg();
    void move();
    void chngDir();
    void sndEt();
    void sndCgt();
    int test();
    void score();
    Snake();
    Snake(Snake*);
    ~Snake();
    };
    Snake::Snake()
    {
    }
    Snake::~Snake()
    {

    }
    void Snake::checkEgg()
    {
    if((e1

    p1) && (e2

    p2))
    {sndEt();
    egg();
    dly--;
    score();
    n++;
    }
    }
    void Snake::sndEt()
    {nosound();
    sound(2500);
    delay(2);
    nosound();
    }
    void Snake::sndCgt()
    {nosound();
    for(int x=1000;x>0;x--)
    {sound(x);
    delay(1);
    }
    nosound();
    }
    void Snake::score()
    { char *p;

    ltoa(scr,p,10);
    settextstyle(8,0,1);
    setcolor(0);
    outtextxy(585,40,p);
    if(egGen != 1){
    scr = scr + dly / 10;
    }
    ltoa(scr,p,10);
    setcolor(10);
    outtextxy(585,40,p);

    }
    void Snake::gnrtCond()
    {if(n < 367)
    {if(now == 8 && (prev != 8 && prev != 2))
    {pos[0][0] = p1;
    pos[0][1] = p2 - dsp;
    prev = now;
    }
    if(now == 4 && (prev != 4 && prev != 1))
    {pos[0][0] = p1 + dsp;
    pos[0][1] = p2;
    prev = now;
    }
    if(now == 2 && (prev != 8 && prev != 2))
    {pos[0][0] = p1;
    pos[0][1] = p2 + dsp;
    prev = now;
    }
    if(now == 1 && (prev != 1 && prev != 4))
    {pos[0][0] = p1 - dsp;
    pos[0][1] = p2;
    prev = now;
    }
    }
    }
    void Snake::gnrtUnCond()
    {
    if( prev == 8 )
    {pos[0][0] = p1;
    pos[0][1] = p2 - dsp;
    }
    if( prev == 4 )
    {pos[0][0] = p1 + dsp;
    pos[0][1] = p2;
    }
    if( prev == 2 )
    {pos[0][0] = p1;
    pos[0][1] = p2 + dsp;
    }
    if( prev == 1 )
    {pos[0][0] = p1 - dsp;
    pos[0][1] = p2;
    }
    p1 = pos[0][0];
    p2 = pos[0][1];
    }
    void Snake::check()
    {
    if(p1 > endX)
    {p1 = strtX;}
    else if(p1 < strtX)
    {p1 = endX;}

    if(p2 > endY)
    {p2 = strtY;}
    else if(p2 < strtY)
    {p2 = endY;}

    pos[0][0] = p1;
    pos[0][1] = p2;
    for(int i = 1;i < n;i++)
    { if(p1

    pos[i][0] && p2

    pos[i][1])
    {caught();
    break;
    }
    }
    }
    void Snake::show()
    {
    int x = getcolor();
    if(egGen != 1)
    {
    setcolor(getbkcolor());
    setfillstyle(1,getbkcolor());
    fillellipse(v1,v2,yr,yr);
    }
    else
    egGen = 0;
    if(egGen

    2)
    egGen--;
    setcolor(colr);
    setfillstyle(1,9);
    if(now

    8 || now

    2)
    fillellipse(pos[0][0],pos[0][1],xr,yr);
    else if(now

    4 || now == 1)
    fillellipse(pos[0][0],pos[0][1],yr,xr);
    setcolor(x);
    }
    void Snake::transpose()
    { int i,j,x,y;
    p1 = pos[0][0];
    p2 = pos[0][1];
    if(!egGen){
    v1 = pos[n-1][0];
    v2 = pos[n-1][1];
    }
    else
    egGen = 0;
    for(i = n-1;i >= 1;i--)
    {pos[i][0] = pos[i-1][0];
    pos[i][1] = pos[i-1][1];
    }
    }
    void Snake::move()
    { int st = 0;
    do{
    if(!kbhit())
    {checkEgg();
    if(!st)
    show();
    else
    st = 0;
    delay(dly/4);
    transpose();
    delay(dly/4);
    gnrtUnCond();
    delay(dly/4);
    check();
    delay(dly/4);
    }
    else if(stp){
    chngDir();
    gnrtCond();
    check();
    show();
    st = 1;
    }
    }while(stp);
    }
    void Snake::init()
    {time_t tm;
    srand(time(&tm));
    dsp = 20;
    n = 5;
    prev = 4;
    for(int i = 4;i >= 0;i--)
    {pos[i][0] = 201 + (n - i - 1) * dsp;
    pos[i][1] = 301;
    }
    strtX = 21;
    strtY = 21;
    endX = 481;
    endY = 361;
    colr = 14;
    now = prev;
    dsp = 20;
    stp = 111;
    cnt = -1;
    scr = 0;
    dly = 150;
    xr = 3;
    yr = 9;
    egg();
    egGen = 1;
    score();
    int x = getcolor();
    setlinestyle(0,1,3);
    setcolor(15);
    rectangle(strtX-15,strtY-15,endX+15,endY+15);
    rectangle(endX+25,strtY-15,getmaxx()-15,endY+15);
    rectangle(strtX-15,endY+25,getmaxx()-15,getmaxy()-5);
    line(endX+25,strtY+75,getmaxx()-15,strtY+75);
    line(endX+25,strtY+200,getmaxx()-15,strtY+200);
    line(endX+25,strtY+275,getmaxx()-15,strtY+275);
    setlinestyle(0,1,1);
    settextstyle(8,0,1);
    setcolor(11);
    outtextxy(514,40,"SCORE");
    setcolor(14);
    settextstyle(11,0,5);
    outtextxy(524,110," CONTROLS ");
    outtextxy(522,135,"p = PAUSE");
    outtextxy(522,155,"g = RESUME");
    outtextxy(522,175,"e = EXIT");
    outtextxy(513,195,"ARROWS");
    outtextxy(512,205," -MOVEMENT");
    setcolor(14);
    settextstyle(4,0,9);
    outtextxy(getmaxx()-500,getmaxy()-110,"SNAKE");
    settextstyle(8,0,1);
    setcolor(x);
    }
    void Snake::caught()
    {
    stp = 0;
    sndCgt();
    for(int i=0;i<=7;i++)
    {if(i%2)
    {setcolor(10);
    outtextxy(512,250,"GAME OVER");
    delay(900);
    }
    else
    {setcolor(0);
    outtextxy(512,250,"GAME OVER");
    delay(500);
    }
    }
    sleep(1);
    }
    void Snake::chngDir()
    {int clr;
    fillsettingstype *p;
    char x = getch();
    if(x == 72)
    now = 8;
    else if(x == 77)
    now = 4;
    else if(x == 80)
    now = 2;
    else if(x == 75)
    now = 1;
    else if(x

    'e')
    caught();
    else if(x

    'p')
    {//int y = getcolor();
    int twnkl = 1;
    settextstyle(11,0,9);
    while(1)
    {if(kbhit())
    {int c = getch();
    if(c == 'g')
    {clr = getcolor();
    setcolor(0);
    rectangle(endX+40,endY-10,getmaxx()-35,getmaxy()-160);
    outtextxy(endX+60,endY-29,"PAUSE");
    break;
    }
    }
    else
    {if(twnkl%2)
    {clr = getcolor();
    setcolor(10);
    rectangle(endX+40,endY-10,getmaxx()-35,getmaxy()-160);
    outtextxy(endX+60,endY-29,"PAUSE");
    setcolor(clr);
    delay(1000);
    }
    else
    {
    clr = getcolor();
    setcolor(0);
    rectangle(endX+40,endY-10,getmaxx()-35,getmaxy()-160);
    outtextxy(endX+60,endY-29,"PAUSE");
    delay(1000);
    }
    }
    twnkl++;
    }
    settextstyle(8,0,1);
    }
    }
    Snake::Snake(Snake *p)
    {
    *p=NULL;
    }
    void Snake::egg()
    { do
    {e1 = (rand() % 100) * dsp + strtX;
    e2 = (rand() % 100) * dsp + strtY;
    }while(test());
    int x = getcolor();
    setcolor(7);
    setfillstyle(1,random(15)+1);
    fillellipse(e1,e2,xr+2,xr+2);
    setcolor(x);
    egGen = 2;
    }
    int Snake::test()
    { for(int i=0;i<n;i++)
    {if(e1

    pos[i][0] && e2

    pos[i][1])
    break;
    if(v1

    e1 && v2

    e2)
    break;
    if((e1 >= endX+1) || (e2 >= endY+1))
    break;
    }
    if(i != n)
    return 1;
    else
    return 0;
    }

    void main()
    {Snake snk;
    int gd=DETECT,gm,i,j,k,x,y;
    clrscr();
    initgraph(&gd,&gm,"E:Turboc3");
    snk. init();
    snk. move();

    closegraph();
    restorecrtmode();
    }
    Tümünü Göster
    ···
   tümünü göster