Loryea (Normal User)
Pro
Messaggi: 165
Iscritto: 02/09/2011
|
Ho un problema, sto mettendo a punto un videogioco in pascal: un'astronave che deve sparare ai meteoriti e ai nemici che scendono dal cielo e sparano a loro volta verso il basso. Sto ancora al movimento dell'atronave protagonista che (siccome é un gioco in 2d), é solamente destra e sinistra (con il lanciarazzi puntato verso l'alto). Già ho un problema, comprendendo gli errori credo si tratti della parte in cui do una assegnazione astronave ad un ciclo for-to-do, che uso per far spostare l'astronave cerchio (é solo la prima volta che faccio un programma con modalità grafica). Eccolo:
Codice sorgente - presumibilmente Delphi |
Program game; uses crt,graph; var scheda,modo,punt,vite,astronave:integer; Truc1,Truc2,Truc3:string[10]; A:integr; Begin clrscr; Writeln; punt:=0; vite:=3; Truc1:='XXXXXXXXXX'; Truc2:=Truc1; Truc3:=Truc2; Writeln('Punteggio = ',punt); writeln; Writeln('Vite = ',vite); Writeln; Writeln('Trucchi ='); Writeln(truc1); writeln(truc2); Writeln(truc3); Scheda:=detect; initgraph(scheda,modo,'C:\FPC'); Astronave:=682; Circle(astronave,643,40); Read(a); astronave:=getX; Case A of 5: begin for astronave:=682 to 0 do begin astronave:=astronave-10; {Qui segnala errore} delay(100); end; end; 7: begin for astronave:=682 to 1365 do begin astronave:=astronave+10; {Qui segnala errore} delay(100); end; end; end; readln; end.
|
So quasi di certo che oltre ad errori di sintassi, ho fatto errori logici (cioé errori che non rientrano tra quelli riguardanti il linguaggio di programmazione, ma il programma in se).
Quindi avvertitemi se li ho fatti.
|
|
nessuno (Normal User)
Guru^2
Messaggi: 6379
Iscritto: 03/01/2010
|
{Qui segnala errore}
ma quale errore?
Devi *sempre* indicare il messaggio d'errore del compilatore!
P.S. Sugli "errori" logici non ci si può esprimere dato che non si conosce la "logica" che vuoi seguire ... ad esempio, i cicli for non hanno senso ma il fatto è che riscriverei tutto il programma non solo i cicli ...
Quindi il modo migliore di procedere è che tu possa compilare senza errori il programma e poi ne determini tu il senso logico ...
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità. |
|
Loryea (Normal User)
Pro
Messaggi: 165
Iscritto: 02/09/2011
|
Postato originariamente da nessuno:
{Qui segnala errore}
ma quale errore?
Devi *sempre* indicare il messaggio d'errore del compilatore!
P.S. Sugli "errori" logici non ci si può esprimere dato che non si conosce la "logica" che vuoi seguire ... ad esempio, i cicli for non hanno senso ma il fatto è che riscriverei tutto il programma non solo i cicli ...
Quindi il modo migliore di procedere è che tu possa compilare senza errori il programma e poi ne determini tu il senso logico ... |
1. Esattamente questi errori di sintassi:
Game.Pas(33,25) error: illegal assigniment to for-loop variabile "Astronave"
Game.Pas(41,24) Error: illegal assigniment to for-loop variabile "astronave"
Game.Pas(48) Fatal: There were 2 errors compiling module, stopping
Game.pas(0) Fatal: Compilation aborted
2.Esattamente questi presumibili errori logici:
L'astronave, cioé il cerchio, deve spostarsi nelle coordinate 0 premendo 5, e nelle cordinate 1365 premendo 7, lentamente, con 100 millisecondi di ritardo ogni 10 pixel, in modo da poter sparare mentre va a destra e a sinistra.
|
|
Il Totem (Admin)
Guru^2
Messaggi: 3635
Iscritto: 24/01/2006
|
Non puoi modificare il valore di una variabile contatore nel suo ciclo.
|
|
Loryea (Normal User)
Pro
Messaggi: 165
Iscritto: 02/09/2011
|
Aggiungendo le variabili DX e SX, e scrivendo:
Codice sorgente - presumibilmente Delphi |
{...} For Dx:=682 to 1365 do {provato anche con Dx := astronave, ma stesso risultato} begin Dx:=astronave+10; delay(100); end; {...} For Sx:=682 to 0 do begin SX:=astronave-10; delay(100); {...}
|
Ho ottenuto gli stessi errori ma con la segnalazione di variabile anomala diversa, al posto di astronave, Dx e SX.
|
|
nessuno (Normal User)
Guru^2
Messaggi: 6379
Iscritto: 03/01/2010
|
Hai cambiato variabile ma hai fatto lo stesso errore!
Non modificare la variabile del for !
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità. |
|
Loryea (Normal User)
Pro
Messaggi: 165
Iscritto: 02/09/2011
|
Aggiungendo le variabili B e C, e scrivendo:
Codice sorgente - presumibilmente Delphi |
{...} For astronave:=682 to 1365 do {provato anche con Dx := astronave, ma stesso risultato} begin B:=astronave; B:=astronave+10; delay(100); end; {...} For Sx:=682 to 0 do begin A:=astronave; A:=astronave-10; delay(100); {...}
|
Non ho ottenuto errori di simtassi, ma solo logici:
il cerchio non si muoveva, quando gli comandavo di andare a destra e a sinistra con 5 e 7.
|
|
nessuno (Normal User)
Guru^2
Messaggi: 6379
Iscritto: 03/01/2010
|
Sì ... ti ho detto ... dal punto di vista logico dovresti spiegare come hai pensato di organizzare il movimento dell'oggetto, perché dal codice non si capisce ...
Non si capisce quale sia il ciclo di
disegno
lettura tasti
ricalcolo
Quando si scrive un programma, si pensa *teoricamente* a quali saranno le parti e come queste dovranno interagire. Non si scrive subito il codice.
Ultima modifica effettuata da nessuno il 25/09/2011 alle 14:52
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità. |
|
gigisoft (Member)
Guru
Messaggi: 696
Iscritto: 11/10/2008
|
Postato originariamente da Loryea:
Non ho ottenuto errori di simtassi, ma solo logici:
|
Salve,
in realta' modificare manualmente la variabile del conteggio di un ciclo For e' sintatticamente consentita, anche se non andrebbe MAI fatto, perche' gli effetti sono imprevedibili;
l'errore di sintassi che ti dava il compilatore era dovuto all'istruzione:
for astronave:=682 to 0 do
in quanto nel Pascal il conteggio all'indietro va fatto usando la parola downto anziche' to
pero' consentimi di dirti che e' una banalita' che potevi tranquillamente risolvere da solo con una breve ricerca;
accetta un consiglio, prima di cimentarti in un programmone come un videogioco, studiati BENE le basi del linguaggio, fai tanti piccoli esperimenti, anche stupidi, non vergognarti di scrivere anche solo un Hello World o un programma che somma semplicemente i valori di un array, con il solo scopo di assimilare Tutte le peculiarita' del linguaggio, non devi per forza fare subito qualcosa di eclatante;
non andare di fretta, i programmoni verranno in seguito, ma solo DOPO che avrai acquisito la padronanza del linguaggio e del ragionamento da programmazione; se vai di fretta ogni tentativo si risolvera' solo in una Enorme perdita di tempo.
Saluti.
|
|