Algoritmo snake

di il
9 risposte

Algoritmo snake

Salve,sono un nuovo sto facendo l'informatica alle scuole superiori mi sono appassionato e cosi molto spesso programmo. Oggi mi sono imbattuto in un incoveniente cercando di creare snake.
La logica fondamentale che ho usato è stata quella del gotoxy cioè che mettendo un pulisci schermo ad ogni case la psizione del serpente si aggiorna.
Ci sono 2 problemi:
1) se nel gotoxy metto coordiante diverse (cioè per esempio gotoxy(25,30) passando sopra l'asterisco con il mio "serpente" l'asterisoc saprisce mentre se il gotoxy ha coordiante uguali va,per esempio gotoxy(25,25); )
2)Esiste un metodo alternativo per creare snake senza usare il gotoxy o il pulisci schermo? Questo perchè appare del lag per i troppi aggiornamenti.
QUI IL CODICE:

#include <stdio.h>
#include <stdlib.h>
#include <conio2.h>
#define SUCCESS 0
#define NOT_SUCCESS 1
 int a=0,b=0,c=0,d=0,e=0,f=0,x=2,y=2;
int check_win()
{
             
      if(a==1&&b==1&&c==1&&d==1&&e==1&&f==1)
      {
                      system("cls");
                      textcolor(YELLOW);
        gotoxy(25,25);
        printf("HAI VNTO!\n");
                 
        
      
     _sleep(2000);
        return SUCCESS;
        }
        else 
        return NOT_SUCCESS;
        }
        
        
void up_function()
{
     
      _beep(500,50);
         system("cls");
         if(a!=1)
         {
         gotoxy(15,15);
         textcolor(BLUE);
printf("*");
}
 if(b!=1)
         {
         gotoxy(20,20);
         textcolor(BLUE);
printf("*");
}
 if(c!=1)
         {
         gotoxy(30,30);
         textcolor(BLUE);
printf("*");
}
 if(d!=1)
         {
          gotoxy(35,35);
          textcolor(BLUE);
printf("*");
}
if(e!=1)
{
        gotoxy(40,40);
        textcolor(BLUE);
        printf("*");
        }

 if(f!=1)
 {
         gotoxy(45,45);
         textcolor(BLUE);
         printf("*");
         }

 

 
         x=x-1;
         gotoxy(y,x);
         textcolor(RED);
         printf("---+");
 
      
     
       if(x==15&&y==15)
      {
      a=1;
      _beep(1000,100);
      }
      if(x==20&&y==20)
      {
      b=1;
       _beep(1000,100);
       }
      if(x==30&&y==30)
      {
      c=1; _beep(1000,100);
      }
      if(x==35&&y==35)
      {
      d=1; _beep(1000,100);
      }
       if(x==40&&y==40)
       {
      e=1; _beep(1000,100);
      }
      if(x==45&&y==45)
      {
      f=1; _beep(1000,100);
      }
      }
      
      
      void left_function()
      {
    
            system("cls");
     if(a!=1)
         {
             textcolor(BLUE);
         gotoxy(15,15);
printf("*");
}
 if(b!=1)
         {
                       textcolor(BLUE);
         gotoxy(20,20);
printf("*");
}
 if(c!=1)
         {
                       textcolor(BLUE);
        gotoxy(30,30);
printf("*");
}
 if(d!=1)
         {
                      textcolor(BLUE);
          gotoxy(35,35);
printf("*");
}
if(e!=1)
{
        gotoxy(40,40);
        textcolor(BLUE);
        printf("*");
        }
 if(f!=1)
 {
         gotoxy(45,45);
         textcolor(BLUE);
         printf("*");
         }
 

         y=y-1;
         gotoxy(y,x);
         textcolor(RED);
         printf("<---");
       
      
  
       if(x==15&&y==15)
      {
      a=1;
      _beep(1000,100);
      }
      if(x==20&&y==20)
      {
      b=1;
       _beep(1000,100);
       }
      if(x==30&&y==30)
      {
      c=1; _beep(1000,100);
      }
      if(x==35&&y==35)
      {
      d=1; _beep(1000,100);
      }
       if(x==40&&y==40)
       {
      e=1; _beep(1000,100);
      }
      if(x==45&&y==45)
      {
      f=1; _beep(1000,100);
      }
       
       }
       
       void right_function()
       {
               
             _beep(500,50);
           system("cls");
     if(a!=1)
         {
             textcolor(BLUE);
         gotoxy(15,15);
printf("*");
}
 if(b!=1)
         {
                       textcolor(BLUE);
        gotoxy(20,20);
printf("*");
}
 if(c!=1)
         {
                      textcolor(BLUE);
         gotoxy(30,30);
printf("*");
}
 if(d!=1)
         {
                       textcolor(BLUE);
          gotoxy(35,35);
printf("*");
}
if(e!=1)
{
        textcolor(BLUE);
        gotoxy(40,40);
        printf("*");
        }
  if(f!=1)
 {
          textcolor(BLUE);
         gotoxy(45,45);
       printf("*");
         }
 
 
          y=y+1;
         gotoxy(y,x);
         textcolor(RED);
        printf("--->");
     
       if(x==15&&y==15)
      {
      a=1;
      _beep(1000,100);
      }
      if(x==20&&y==20)
      {
      b=1;
       _beep(1000,100);
       }
      if(x==30&&y==30)
      {
      c=1; _beep(1000,100);
      }
      if(x==35&&y==35)
      {
      d=1; _beep(1000,100);
      }
       if(x==40&&y==40)
       {
      e=1; _beep(1000,100);
      }
      if(x==45&&y==45)
      {
      f=1; _beep(1000,100);
      }
        }
        
        
        void down_function()
        {
_beep(500,50);
             system("cls");
             
     if(a!=1)
         {
             textcolor(BLUE);
         gotoxy(15,15);
printf("*");
}
 if(b!=1)
         {
                       textcolor(BLUE);
         gotoxy(20,20);
printf("*");
}
 if(c!=1)
         {
                       textcolor(BLUE);
        gotoxy(30,30);
printf("*");
}
 if(d!=1)
         {
                      textcolor(BLUE);
         gotoxy(35,35);
printf("*");
}
if(e!=1)
{
        textcolor(BLUE);
        gotoxy(40,40);
        printf("*");
        }
 if(f!=1)
 {
         textcolor(BLUE);
         gotoxy(45,45);
  printf("*");
         }

 
         x=x+1;
         gotoxy(y,x);
         textcolor(RED);
         printf("--- -");
         
      
       if(x==15&&y==15)
      {
      a=1;
      _beep(1000,100);
      }
      if(x==20&&y==20)
      {
      b=1;
       _beep(1000,100);
       }
      if(x==30&&y==30)
      {
      c=1; _beep(1000,100);
      }
      if(x==35&&y==35)
      {
      d=1; _beep(1000,100);
      }
       if(x==40&&y==40)
       {
      e=1; _beep(1000,100);
      }
      if(x==45&&y==45)
      {
      f=1; _beep(1000,100);
      }
         }
int main() {
   register int key = 0;
int win;
printf("\t\t\tSNAKE!\n\n");
printf("Per giocare utilizza le frecce direzionali mentre per uscire usa il tasto esc\n");
printf("Premere una tasto per cominciare\n");
getch();
 system("MODE CON: COLS=1000 LINES=1000");
 printf("Premi una freccia per continuare\n");
while (key != 27) {
    win=check_win();
    if(win==SUCCESS)
    return 0;
key = getch();
if (key == 224) {
        
key = getch();
switch (key) {
case 72: 
     {
        
       up_function();
 
break;
}
case 75:
     {
        left_function();
     
break;
}
case 77:
     { 
          right_function();
     
break;
}
case 80: 
     {
         
          down_function();
     
       
break;
}
}
}
}
}

9 Risposte

  • Re: Algoritmo snake

    Non insultatemi dopo aver letto questo messaggio...
    Ho trovato l'errore del caso 1 ho invertito x e y.
    Sono un idiota quando faccio questi errori penso se diventerò mai un bravo programmatore...
    Il problema due è ancora da risolvere!
  • Re: Algoritmo snake

    Sono un idiota quando faccio questi errori penso se diventerò mai un bravo programmatore...
    Guarda che i bravi programmatori fanno un sacco di errori ...
  • Re: Algoritmo snake

    Grazie barba59. Hai qualche idea sul secondo problema?
  • Re: Algoritmo snake

    Sul gotoxy e sull' uso delle console sono un poco arrugginito e non saprei aiutarti e poi non sono riuscito a far girare il tuo programma per via della conio2.h che non ho nel mio ambiente, per cui non ho idea di cosa faccia il programma.
  • Re: Algoritmo snake

    Se hai il dev-c++ vai qui http://it.answers.yahoo.com/question/index?qid=20081206104847AAAR7ZV e scarica conio2.h sempre nella tua volonta!
  • Re: Algoritmo snake

    Uso il Visual Studio per Windows (e Eclipse per Linux), installerei anche il dev c++ però la stdio2.h non è roba standard e quasi quasi (visto la mancanza di tempo) la salto.
    Anche se il programma del serpente fatto a caratteri lo trovo intrigante

    Comunque se non vuoi cancellare tutto lo schermo devi tenere traccia di quello che disegni e cancellare solo quello. Tieni la posizione del serpente in un array, e prima di ridisegnarlo lo cancelli.
  • Re: Algoritmo snake

    Grazie ci proverò. Ti volevo chiedere una cosa,visto la presenza di un designer in visual studio che pure io ho ma ci capisco poco niente nei codice che crea,sai l'esistenza di qualche guida per passare alla programmazione con la grafica (sempre in c/c++) ? O devo imparare ancora molte cose?
  • Re: Algoritmo snake

    Siccome conio.h è sorpassato si consiglia di utilizzare le funzioni console (se si programma in Windows) delle API Windows.
  • Re: Algoritmo snake

    Grazie skynet!
Devi accedere o registrarti per scrivere nel forum
9 risposte