Unconfigured Ad Widget

Collapse

Anúncio

Collapse
No announcement yet.

Código Fonte - Jogo Snake

Collapse
X
 
  • Filter
  • Tempo
  • Show
Clear All
new posts

  • Font Size
    #1

    C / C++ Código Fonte - Jogo Snake

    Olá pessoal depois de ficar um tempo sem postar nada aqui pra galera, resolvi postar o código fonte de um jogo conhecido. O Famoso Snake, dei umas modificadinhas como de costume. kkkk

    Segue o código.

    Código:
    #include<iostream.h>
    #include<conio.h>
    #include<graphics.h>
    #include<dos.h>
    #include<stdlib.h>
    #include<stdio.h>
    #include<time.h>
    #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,"PONTOS");
      setcolor(14);
      settextstyle(11,0,5);
      outtextxy(524,110," CONTROLES ");
      outtextxy(522,135,"p = PAUSAR");
      outtextxy(522,155,"g = RESUMO");
      outtextxy(522,175,"e = SAIR");
      outtextxy(513,195,"SETAS");
      outtextxy(512,205,"    -MOVIMENTOS");
      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();
    }
    Bom é isso pessoal.

    Divirtam-se !


    WCG147
    Last edited by WCG147; 01-01-2012, 13:25.
    sigpic

  • Font Size
    #2
    Obrigado por compartilhar =D

    Comment


    • Font Size
      #3
      Obrigado, sempre qui aprender um pouco sobre a lib graphics.h
      Cuidado com cada peça do xadrez que você mexe, pois o próximo a ir pro xadrez pode ser você !

      Comment


      • Font Size
        #4
        Maneiro ! o jogo

        Comment

        X
        Working...
        X