Gioco snake

di il
6 risposte

Gioco snake

Ciao a tutti sto provando a programmare snake... la parte grafica è ok ma ogni volta che da tastiera inserisco un carattere "il serpente" non si muove e il carattere viene scritto su schermo dopo il punteggio... Non capisco cosa ho sbagliato...
#include <iostream>
#include <unistd.h>
#include <stdlib.h>
#include <time.h>


#define FRECCIA_SU 72
#define FRECCIA_GIU 80
#define FRECCIA_SINISTRA 75
#define FRECCIA_DESTRA 77
using namespace std;

bool gameover;
const int larghezza = 20;
const int altezza = 20;
int playerx, playery, punteggio, fruttox, frut
enum edirezione
{
    STOP = 0,
    SINISTRA,
    DESTRA,
    SU,
    GIU
};
edirezione direzionecorrente;

void Setup()
{  
  srand((unsigned)(time(NULL)));
   gameover = false;
   playerx = larghezza/2;
   playery = altezza/2;
   punteggio = 0;
   fruttox = rand() % larghezza;
   fruttoy = rand() % altezza;
   direzionecorrente = STOP;

}





void Visual()
{
    
    
    //bordo superiore
   for(int i = 0; i< larghezza; i++)
   {
     cout << "#";
   }
   cout << endl;
   
   //arena
   for(int i = 0; i< altezza; i++)
    {
        for (int j = 0; j < altezza; j++)
        {
          if((i==playery) && (j == playerx) )
          {
             cout << "+";
          }
          else if((i==fruttoy) && (j==fruttox)
          {
            cout << "O";
          }
          else 
          {
              if ((j==0)|| (j==larghezza-1))
{
  cout << "#";
}
 else
 {
   cout << " ";
 }
          }
        
          


        }
        cout << endl;
    }
cout << endl;
   
   //bordo inferiore
   for(int i = 0; i< larghezza; i++)
{
  cout << "#";
}
cout << endl;
cout << "punteggio: " << punteggio << endl;

}

void Logic()
{
    switch(direzionecorrente)
    {
      case STOP: break;
      case SU:
        playery--;
        break;
      case GIU:
        playery++;
        break;
      case DESTRA:
         playerx--;
         break;
      case SINISTRA:
         playerx++;
         break;
      default: break;
    }
  
  if((playerx == fruttox) || (playery == frutt

  {
    punteggio++;
     fruttox = rand() % larghezza;
     fruttoy = rand() % altezza;

  }
}

void Input()
{
  char tastopremuto = cin.get();
  if(tastopremuto == cin.get())
   { 
  
    
    switch (tastopremuto)
    {
      case 'w':
      case FRECCIA_SU:
      direzionecorrente = SU;
      break;
      case 's':
      case FRECCIA_GIU:
      direzionecorrente = GIU;
      break;
      case 'a':
      case FRECCIA_SINISTRA:
      direzionecorrente = SINISTRA;
      break;
      case 'd':
      case FRECCIA_DESTRA:
      direzionecorrente = DESTRA;
      break;
      case 'x':
      gameover =true;
      break;
      default:
      break;
    }
    
  }
}

int main()
{
    Setup();
    
    
    while(!gameover)
    {
      Visual();
      Input();
      Logic();
      sleep(50);
    }

    system("pause");
    return 0;
}

6 Risposte

  • Re: Gioco snake

    È ovvio, l'input è bloccante.

    Devi utilizzare una modalità di Input del tasto non bloccante, che dipende dal sistema operativo e dalle librerie del linguaggio.
  • Re: Gioco snake

    Relativamente a quanto detto da @oregon di solito si utilizza l'accoppiata di funzioni kbhit() e getch() (necessitano dell'inclusione della libreria conio.h).

    Da un' occhiata veloce al codice direi che ci sono parecchie cose da aggiustare, in ogni caso inizia a postare un codice compilabile.
  • Re: Gioco snake

    Lo so ma il terminale non mi legge quella libreria ne keyboard.h e non so dove sbattere la testa... comunque grazie a tutti
  • Re: Gioco snake

    Che vuoi dire con "il terminale..."???

    Cosa hai provato a fare? Che problemi hai?
  • Re: Gioco snake

    Se non hai Windows la libreria è ncurses.h
  • Re: Gioco snake

    Ciao a tutti ! alla fine ho dovuto scaricare conio.h da github ... comunque grazie mille
Devi accedere o registrarti per scrivere nel forum
6 risposte