mercoledì 21 dicembre 2016

[GUIDA]: Progettazione di un Gioco in 2D

Il primo linguaggio di programmazione ad essere stato sviluppato è stato il Linguaggio C.
Un linguaggio creato da due smanettoni dell'informatica. Denominato dalla Stampa americana come un linguaggio creativo, innovativo, un linguaggio per smanettoni creato da smanettoni.
Attualmente esistono numerosi linguaggi di programmazione, ma il C è quello che viene insegnato scolasticamente perché, innanzitutto serve ad avvicinare ragazzi o addirittura bambini al meraviglioso mondo dell'informatica...
Il linguaggio di programmazione C ha una sintassi molto semplice e intuibile facilmente. L'utente medio, non ha bisogno di spendere grosse quantità di tempo nella comprensione del linguaggio.
Tanto facile quanto complesso con le sue strutture particolari che lo caratterizzano.
Tutto il mondo è avvolto da sistemi informatica e ormai quest'ultima ci sta dominando.
Bando alle ciance...

Una delle cose più belle e carine che si possono fare adottando questo linguaggio di programmazione è la progettazione di un gioco:

Per programmare in C, abbiamo bisogno di un editor di testo. In realtà il codice sorgente può essere redatto tramite qualsiasi editor di testo (Notepad, Editor++, Pages), senza dimenticare di rinominare il file con l'estensione finale .c. Dal codice sorgente si deve creare in seguito un file eseguibile (.exe) in Windows in modo da vedere a schermo i risultati della programmazione, il tutto può essere fatto banalmente adottando dei codici precisi nella consolle di Windows.
Inoltre, il codice sorgente deve essere "compilato" da un apposito Compiler che interpreta i comandi del nostro linguaggio di programmazione.
Per semplicità adotteremo un Ambiente di Programmazione Integrato (IDE) che ci permetterà di scrivere il nostro codice sorgente e di vedere, tramite un apposito comando, il risultato delle nostre operazioni.
Nello specifico adotteremo L'IDE CodeBlocks (in un sistema operativo Linux, per pura comodità).
Nel nostro caso, scaricheremo CodeBlocks direttamente dallo Store integrato di LinuxMint, sistema operativo che adotteremo per tutto il seguito della guida.

Prima di iniziare, ad illustrare la costruzione di un'applicazione software di gioco, ci focalizzeremo sui costrutti base e sulle funzionalità dell'IDE.

Esempio di struttura interattivadi un programma in C  (calcolatrice):



main.c:
#include   //specifica la libreria usata dal programma
 2 
 3 int main() {
 4     int a;  //Primo valore
 5     int b;  //Secondo valore
 6     int somma;  //Somma dei due valori
 7     int prodotto;  //Prodotto dei due valori
 8     int differenza;  //Differenza dei due valori
 9     int quoto;  //Quoto dei due valori
10     
11     printf("Inserisci il primo numero: ");  //Stampa sulla console
12     scanf("%d", &a);  //Legge un valore intero e lo "inserisce" nella variabile "a"
13     
14     printf("Inserisci il secondo numero: ");
15     scanf("%d", &b);
16     
17     somma = a + b;
18     prodotto = a * b;
19     differenza = a - b;
20     
21     if(b != 0){
22         quoto = a / b;
23     }
24     
25     printf("La somma e': %d\n", somma);
26     printf("Il prodotto e': %d\n", prodotto);
27     printf("La differenza e': %d\n", differenza);
28     printf("Il quoto e': %d\n", quoto);
29     
30     return 0;
31 }

Con main viene indicato la funziona principale, ovvero il primo programma che viene letto dal compilatore che può essere interconnesso tramite altri sottoprogrammi (funzioni) evitando cosi lunghi codice e una struttura del programma più compatta.

scanf() serve per leggere dei determinati dati;
printf() è l'istruzione caratteristica che ci permette di visualizzare un testo.
Il nostro linguaggio in esame è anche ricco di cicli, che ci permettono di scorrere un determinato vettore o una matrice:

Costrutti 

Ciclo for
for(<inizializzazione>; <test>; <incremento>)
  <istruzione>;

Stampa i numeri da uno a 10:
int i;
for(i = 1; i <= 10; i++)
  printf("%d", i);


Costrutto Do While:
do{
  istruzione/i;
}while(condizione);


Scelte e condizioni (IF Than ELSE):
if (condizione1) { /*se la condizione1 è vera*/
   istruzioni1; /*allora esegue le istruzioni1*/
}
  else if (condizione2) { /*altrimenti se la condizione2 è vera*/  
       istruzioni2; /*allora esegue le istruzioni2*/
  }
      else { /*altrimenti*/
           istruzioni3; /*esegue le istruzioni3*/
      }

Operatore Switch:
switch(valore){/*seleziona il valore*/
   case 1: /*confronta con 1*/
      istruzione1; /* esegue l'istruzione1*/
      break;
   case 2:
      istruzioni2;
      break;
    .
    .
   case n:
      istruzioni n
   default: /*acquisisce tutti gli altri valori diversi da quelli della selezione (case)*/
      istruzioni;
}

GO TO:
 for ( .... )
     for ( .... )
     {
    ....
    if (disaster)
   goto error;
     }
 ....

 error:
     ripristina la situazione

Inoltre oltre alle funzioni, in esistono anche le librerie, ovvero dei file di testo in cui è presente solo codice che ci permettono di adottare delle funzioni già precedentemente compilate (scanf e printf ne sono un esempio):
















Adesso daremo la definizione di funzione e poi passeremo alla progettazione di quest'applicazione.
Programma che permette l'elevamento a potenza:















Codice di prova Game:



Runner.c
#include
#include
#include
void main()
{
int driver=DETECT,mode,j=100,i=0,x1,x22,x2,x11,y1,y11,y2,y22,a,y,k,speed;
float ang1=3.839724354,ang2=5.585053606, c1=0.05,
c2=-0.05,var1=2.967059728,var2=5.410520681,d1=0.072,d2=-0.072,s=2.35619449
;
initgraph(&driver,&mode,"C:\tc\bgi");
printf("

 Enter the number of rounds
"); scanf("%d",&k);printf("
Enter 1 for fast speed or 2 for normal speed
");scanf("%d",&speed);
if(speed==1) speed=11; else speed=16;cleardevice();delay(1000);
while(k>=1)
{
 while(i<=700)
 {setcolor(8);
 circle(i,j,22);line(i,j+22,i-13,j+115);
 x1=i+50*cos(ang1);x2=i+50*cos(ang2);
 y1=j+22-50*sin(ang1);y2=j+22-50*sin(ang2);
 x11=x1+45*cos(ang1+1.54532952); x22=x2+45*cos(ang2+1.54532952);
 y11=y1-45*sin(ang1+1.54532952);
y22=y2-45*sin(ang2+1.54532952);setcolor(RED);

line(i,j+22,x1,y1);line(x1,y1,x11,y11);setcolor(GREEN);line(i,j+22,x2,y2);
line(x2,y2,x22,y22);
 x1=i-15+60*cos(ang1);  x2=i-15+60*cos(ang2);
 y1=j+115-60*sin(ang1); y2=j+115-60*sin(ang2);
 x11=x1+60*cos(var1); x22=x2+60*cos(var2);
 y11=y1-60*sin(var1); y22=y2-60*sin(var2);

line(i-13,j+115,x1,y1);line(x1,y1,x11,y11);setcolor(RED);line(i-13,j+115,x
2,y2);line(x2,y2,x22,y22);
 ang1=ang1+c1; ang2=ang2+c2;
 var1=var1+d1; var2=var2+d2;if(i==0) a=x22;
 if(ang1<=3.839724354){c1=0.05;var1=2.967059728;d1=0.072;}

if(ang1>=5.585053606){c1=-0.05;var1=5.410520681;d1=-0.072;a=x11+10;s=2.356
19449;}
 if(ang2<=3.839724354){c2=0.05;var2=2.967059728;d2=0.072;}
 if(ang2>=5.585053606){
c2=-0.05;var2=5.410520681;d2=-0.072;a=x22+10;s=2.35619449;}
 i=a+150*cos(s)+50;j=320-150*sin(s)-20;s=s-0.045;
 delay(speed);if(k!=1)cleardevice();
 }
 i=0;k--;
 }
getch();
}


Il programma online non funzionerà ovviamente, basta copiare il file di testo all'interno dell'IDE di CodeBlocks e il gioco sarà fatto.

Buon Divertimento...