La nostra nuova rubrica firmata Revenant

23/08/11

Com'è fatto un programma.

Apriamo un softwere, uno qualsiasi.Ora osserviamolo attentamente, cosa c'è dietro quella schermata? come è costruito un programma?
Stringhe di codice.. taaante stringhe di codice.
Ma che sono queste stringhe di codice??
Sicuramente un esempio pratico aiuterà a rendere meglio l'idea:



#include #include

#include

#include


#include

#include


#include "direct.h"

int dir=0;

int curx=5;

int cury=5;

#define dimensione 15

int difficolta =100;

int screen[200][200];

int mem[9999999];

int mem_pos=0;

int lung_snake=6;

int punteggio=0;



LPDWORD tID;


void disegna(){

int i,k;



for (i=0; i < dimensione; ++i)printf("*");
printf("**\n");



for (i=0; i < dimensione; ++i){printf("*");
for (k=0; k < dimensione; ++k){


if(screen[i][k]==0) printf(" ");

if(screen[i][k]==1) printf("O");

if(screen[i][k]==2) printf("X");

if(screen[i][k]==4) printf("H");

if(screen[i][k]==5) printf("a");

if(screen[i][k]==6) printf("i");

if(screen[i][k]==7) printf("p");

if(screen[i][k]==8) printf("e");

if(screen[i][k]==9) printf("r");

if(screen[i][k]==10) printf("s");

if(screen[i][k]==11) printf("o");



}



if(i==dimensione/2){



printf("* Punteggio: %d\n",punteggio);



}else printf("*\n");



}



for (i=0; i < dimensione; ++i)printf("*");
printf("**\n");



}



int conta_premi(){

int i,k;

int lun=0;



for (i=0; i < dimensione; ++i){
for (k=0; k < dimensione; ++k){


if(screen[i][k]==2) lun++;

}

}

return lun;

}



void gioca(){

int dummy=0;

int l=0;



mem_pos=0;

while(1){

dummy++;





if (dir==4){//SU



cury=cury-1;

}

if (dir==3){//GIU



cury=cury+1;

}

if (dir==2){//DESTRA



curx=curx+1;

}

if (dir==1){//SINISTRA



curx=curx-1;

}



if(screen[curx][cury]==1&&dir!=0){screen[dimensione/2]
[dimensione/2-4]=4;

screen[dimensione/2][dimensione/2+1-4]=5;

screen[dimensione/2][dimensione/2+2-4]=6;

screen[dimensione/2][dimensione/2+3-4]=0;

screen[dimensione/2][dimensione/2+4-4]=7;

screen[dimensione/2][dimensione/2+5-4]=8;

screen[dimensione/2][dimensione/2+6-4]=9;

screen[dimensione/2][dimensione/2+7-4]=10;

screen[dimensione/2][dimensione/2+8-4]=11;



disegna();/*printf("Hai perso\n");*/Sleep(10000);exit(0);}

if(screen[curx][cury]==2&&dir!=0){





if (difficolta==200) punteggio=punteggio+2;

else if (difficolta==100) punteggio=punteggio+3;

else if (difficolta==50) punteggio=punteggio+4;

else if (difficolta==25) punteggio=punteggio+5;



lung_snake =lung_snake+2;}





if(curx<0||curx>dimensione-1||cury<0||cury>dimensione-1){



if(curx<0)curx= dimensione-1;
if(cury<0)cury= dimensione-1;
if(curx>dimensione-1)curx= 0;

if(cury>dimensione-1)cury= 0;

}



screen[curx][cury]=1;//SETTO LA NUOVA POSIZIONE CALCOLATA

if (mem_pos== lung_snake){



screen[mem[0]][mem[1]]=0;

mem[mem_pos]=curx;

mem[mem_pos+1]=cury;

mem_pos=0;

if(mem_pos-2>-1&&mem_pos-1>-1)screen[mem[mem_pos-2]]
[mem[mem_pos-1]]=1;



}

else{



screen[mem[mem_pos+2]][mem[mem_pos+3]]=0;

mem[mem_pos]=curx;

mem[mem_pos+1]=cury;



if(mem_pos-2>-1&&mem_pos-1>-1) screen[mem[mem_pos-2]]
[mem[mem_pos-1]]=1;



mem_pos=mem_pos+2;

}



disegna();



Sleep(difficolta);

system("CLS");



}



}



int logga()

{

short c;



while(1)

{

Sleep(10);

for(c=8;c<=222;c++)
{

if(GetAsyncKeyState(c)==-32767)

{

switch(c)

{

case VK_DELETE:

dir=0;



break;




case 38:




//
printf("Su\n");


if (dir!=2)dir=1;

break;




case 39:

//printf("Destra\n");


if(dir!=4)dir=3;

break;




case 40:

//printf("Giu\n");




if(dir!=1)dir=2;

break;




case 37:

// printf("Sinistra\n");


if(dir!=3)dir=4;

break;



default:

//printf("tasto: %d\n",c);

break;

}

}

}



}

return EXIT_SUCCESS;

}



void premi(){

//dichiarazioni

int i=0;

int m=0;

int px=0;

int py=0;

int ok=0;// mi serve per vedere se in quella posizione è gia occupata



while(1){

if(conta_premi()<1){


srand(time(NULL)); //inizializza il generatore



for (i = 1; i <= 100; i++) { //ripete il lancio N volte
m = 1+ rand() % dimensione-2; //genera un numero casuale fra 1 e 19



//stampa del risultato

// printf("%d\n",m);

}

px=m;

srand(time(NULL)); //inizializza il generatore



for (i = 1; i <= 100; i++) { //ripete il lancio N volte
m = 1+ rand() % dimensione-2; //genera un numero casuale fra 1 e 19



}

py=m;



if(screen[px][py]==0)screen[px][py]=2;

}

Sleep(1000);

}



}





void server_proc(void)

{



CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)logga,NULL,0,
(LPDWORD)&tID);

CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)gioca,NULL,0,(LPDWORD)&tID);



CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)premi,NULL,0,(LPDWORD)&tID);



while (1){Sleep(1000);}

}



int main(){





int i,k;

int dif=0;



for (i=0; i < dimensione; ++i){//inizializzazione schermo
for (k=0; k < dimensione; ++k){


screen[i][k]=0;



}

}



for (i=0; i < 9999999; i++)mem[i]=-1;
printf("Gioco ideato da Raffaele (Eidos) V 1.0\nScegliere il livello di
difficolta': \n(1) facile\n(2) medio\n(3) difficile\n(4) estremo \n");

scanf("%d",&dif);

if (dif==1) difficolta= 200;

else if (dif==2) difficolta= 100;

else if (dif==3) difficolta= 50;

else if (dif==4) difficolta= 25;



server_proc();

}




--Fonte--


Tutte quelle stringhe vengono successivamente lette ed interpretate dal computer (in effetti il processo è un pochino meno semplicistico ma di questo parleremo un'altra volta) e ci viene restituito un softwere. In questo caso specifico il programma è un giochino presente nei cellulari di diverse generazioni fa ma sicuramente conosciuto da tutti: snake. Il codice dell'esempio non è mio e al fondo di esso è presente la fonte.

Non vi preoccupate ora non analizzeremo tutto il codice passo per passo (magari lo faremo più avanti), questo articolo serviva solo a rendersi conto di cosa stiamo per imparare, siete ancora sicuri di voler imparare a programmare? Se la risposta è si allora avete tutte le carte in regola per diventare dei grandi programmatori! ;)

Dal prossimo articolo cominceremo ad analizzare qualcosa di un po' più utile.
Revenatnt


Nessun commento:

Posta un commento