Stavo tentando di leggiucchiare la guida on line di C# e XNA ( questa:
http://www.wilez.it/tutorials/XNA/ scritta da un certo Wilez che è sicuramente preparato, ha metodo e tantissima pazienza!) e penso però di aver capito alcune cose che vorrei sottoporre a voi esperti se vi va.
la guida non spiega a quanto pare a programmare sul serio (a 360 gradi) ma piuttosto indica come utilizzare delle procedure afferenti al linguaggio C# che servono per creare la "struttura", il "flow-chart" del gioco voluto, un suo scheletro. Infatti le procedure descritte (almeno fino alle prime 30 lezioni) ancorchè interessantie basilari, afferiscono tutte non tanto al "come fare una cosa" ma al "come strutturare un insieme di cose già preconfezionate che si trovano poi in XNA".
Quindi il tutto si riduce (eufemismo, perchè già così fare propria una lingua nuova non è affatto immediato, anzi!) a dover imparare una serie di comandi che consentano di creare un'ossatura in cui far vivere il nostro gioco i cui contenuti comunque possono essere scelti da un magico cilindro che già contiene moltissime cose interessanti (XNA appunto).
Certo, queste "cose interessanti" già bell'e pronte in XNA costituiscono una vastissima pletora di funzionalità ed oggetti (da classi già definite, ad oggetti con dati parametri stabiliti a - soprattutto - metodi (ovvero declinazione dinamica di parametri di date classi che attengono alle relazioni tra oggetti del gioco e tra oggetti e ambiente e forse, astraendo, tra classi e classi in detemrinate circostanze previste...).
Ma til utto mi suona un po' di artifatto e quindi di intrinsecamente limitato: l'insieme da cui poter scegliere può anche essere vasto, ma l'immaginazione lo può sempre travalicare, no? E un gioco deve per lo meno implementare, soprattutto nella sua ossatura essenziale (gameplay e quindi interazione e strutturazione degli oggetti programmati), delle novità che non siano banalmente e soltanto relative allo stile grafico o all'esotismo della trama.
Detto questo vi domando :
- Nel caso si volessero implementare funzioni che non si trovano già impacchettate col fiocchetto regalo in XNA e senza ovviamente saper programmare in C# più di quanto i rudimenti della guida citata richiedono (ripeto che la guida da come mi sembra pare descrivere come confezionare un video gioco a partire da tante belle cosette già pronte all'uso), l'eventualità di "miscelare" ad hoc componenti già previsti e già pronti al fine di creare ex novo altri oggetti voluti è un'attività utile e abbastanza fattibile o conviene davvero partire da zero ed imparare un linguaggio di programmazione (magari boh anche lo stesso C# ? ) totalmente e a fondo? In tal caso la cosa la si deve lasciare a chi ha le compentenze formative per farlo (leggasi programmatori)
- Nel concreto, tanto per capirsi, con C# unito a XNA si può per esempio costruire un "gioco" basilare e generale in cui:
1. generare un ambiente 3d (stanza composta da pareti su ogni versante) con topologia variabile (superfici a cubo e colline/depressioni del pavimento);
2. implementare la gravità scegliendo di porla su una ipotetica linea di terra ovvero distribuirla su tutte le pareti in base magari a densità volute;
3. fare in modo che l'ambiente non interno alla superficie delimitantene la topologia sia fatto da "aria" e che quindi i movimenti in esso (es. volo e salto) siano viscosi in base alle leggi classiche sulla resistenza al moto di una data massa con una data superficie;
4. creare un "omino" semplicissimo in 3d che cammini in ogni dove e possa saltare/volare nel vuoto della stanza;
Se si può fare questo - ovvero creare l'ambiente, e gli oggetti essenziali di un gioco nonchè le loro relazioni basilari - allora ci sarebbero già tutti comunque gli ingredienti per poter "cucinare" un gioco qualsiasi, ancorchè molto grezzo.
La problematica successiva invece è l'aspetto grafico da dare ai "modelli" costruiti. In questo caso xna potrebbe aiutare o occorre sempre rivolgersi ad un grafico?
Stessa domanda sul versante delle animazioni specifiche di determinati "oggetti" ad es. se si volesse rendere realistico l'incedere di un pg occorrerebbe rivolgersi ad un grafico ed apportare modifiche marginali al codice o occorrerebbe riscrivere tutta o gran parte del codice dedicato alla descrizione dei parametri del personaggio e di alcune sue classi (se il pg è composto da più oggetti coordinati)?
Un'ultima questione questa volta più generale sulla programmazione:
Si dice sempre che per programmare occorra sapere molta matematica... ma nella sostanza serve (da come ho capito) una base di algebra per poter modellizzare le funzioni utili alle trasformazioni di un insieme di solidi o di figure piane nello spazio. Poi ovviamente occorre saper impostare delle equazioni di stato e di equilibrio che sappiano modellizzare dati eventi dinamici, prevedendo variabili essenziali e parametri (ad. es. per modellizzare l'esplosione di un oggetto stante l'ambiente circostante, la compattezza e pesantezza dell'oggetto e delle sue schegge, la forza dell'esplosione e la gravità).
Ma nel concreto il programmatore deve saper utilizzare questi modelli a mena dito (a colpo d'occhio) un pò come lo studente della seconda superiore capisce al volo l'inclinazione di una retta sul piano convenzionale dato il segno del suo coefficiente angolare, oppure può permettersi di utilizzare modelli matematici preconfezionati e stereotipati e fare come il buon ragioniere che applica le formule anche senza sviscerne l'intimo significato? Perchè un conto è vedere a colpo sicuro come si comporta la pendenza di una retta un altro invece è capire al volo il determinante di una matrice dai suoi elementi, la natura dinamica del sistema lineare associato (autovalori ecc..) o ancora più astratto il saper riconoscere a prima vista il significato che si porta appresso una data matrice (ad es. se la trasformazione sul piano o sullo spazio porti ad una traslazione a 45° nord-est dello spazio).
Se è così allora un programmatore è alla fine un buon matematico (anche se non tratta teoria dei numeri o topologia astratta da ricerca universitaria di frontiera) che deve solo fare lo sforzo mnemonico di imparare un'altra lingua (il codice) per dire cose che già sa e sa ormai talmente bene che sono diventate una sua seconda natura quasi.
Questo mi spaventerebbe! xd