Algoritmo snake

di Anonimizzato10049 il
9 risposte
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

  • 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!
  • Sono un idiota quando faccio questi errori penso se diventerò mai un bravo programmatore...
    Guarda che i bravi programmatori fanno un sacco di errori ...
  • Grazie barba59. Hai qualche idea sul secondo problema?
  • 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.
  • 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.
  • 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?
  • Siccome conio.h è sorpassato si consiglia di utilizzare le funzioni console (se si programma in Windows) delle API Windows.
  • Grazie skynet!
Devi accedere o registrarti per scrivere nel forum
9 risposte