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