Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Pascal - Problema assegnazione var, con ciclo for-to-do
Forum - Pascal - Problema assegnazione var, con ciclo for-to-do

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
Loryea (Normal User)
Pro


Messaggi: 165
Iscritto: 02/09/2011

Segnala al moderatore
Postato alle 23:26
Sabato, 24/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

  1. Program game;
  2. uses crt,graph;
  3. var scheda,modo,punt,vite,astronave:integer;
  4. Truc1,Truc2,Truc3:string[10];
  5. A:integr;
  6. Begin
  7. clrscr;
  8. Writeln;
  9. punt:=0;
  10. vite:=3;
  11. Truc1:='XXXXXXXXXX';
  12. Truc2:=Truc1;
  13. Truc3:=Truc2;
  14. Writeln('Punteggio = ',punt);
  15. writeln;
  16. Writeln('Vite = ',vite);
  17. Writeln;
  18. Writeln('Trucchi =');
  19. Writeln(truc1);
  20. writeln(truc2);
  21. Writeln(truc3);
  22. Scheda:=detect;
  23. initgraph(scheda,modo,'C:\FPC');
  24. Astronave:=682;
  25. Circle(astronave,643,40);
  26. Read(a);
  27. astronave:=getX;
  28. Case A of
  29. 5:
  30. begin
  31. for astronave:=682 to 0 do
  32. begin
  33. astronave:=astronave-10; {Qui segnala errore}
  34. delay(100);
  35. end;
  36. end;
  37. 7:
  38. begin
  39. for astronave:=682 to 1365 do
  40. begin
  41. astronave:=astronave+10; {Qui segnala errore}
  42. delay(100);
  43. end;
  44. end;
  45. end;
  46. readln;
  47. 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.

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6379
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 10:54
Domenica, 25/09/2011
{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à.
PM Quote
Avatar
Loryea (Normal User)
Pro


Messaggi: 165
Iscritto: 02/09/2011

Segnala al moderatore
Postato alle 11:39
Domenica, 25/09/2011
Testo quotato

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.

PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 12:05
Domenica, 25/09/2011
Non puoi modificare il valore di una variabile contatore nel suo ciclo.

PM Quote
Avatar
Loryea (Normal User)
Pro


Messaggi: 165
Iscritto: 02/09/2011

Segnala al moderatore
Postato alle 12:17
Domenica, 25/09/2011
Aggiungendo le variabili DX e SX, e scrivendo:
Codice sorgente - presumibilmente Delphi

  1. {...}
  2. For Dx:=682 to 1365 do {provato anche con Dx := astronave, ma stesso risultato}
  3. begin
  4. Dx:=astronave+10;
  5. delay(100);
  6. end;
  7. {...}
  8. For Sx:=682 to 0 do
  9. begin
  10. SX:=astronave-10;
  11. delay(100);
  12. {...}


Ho ottenuto gli stessi errori ma con la segnalazione di variabile anomala diversa, al posto di astronave, Dx e SX.

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6379
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 14:14
Domenica, 25/09/2011
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à.
PM Quote
Avatar
Loryea (Normal User)
Pro


Messaggi: 165
Iscritto: 02/09/2011

Segnala al moderatore
Postato alle 14:33
Domenica, 25/09/2011
Aggiungendo le variabili B e C, e scrivendo:
Codice sorgente - presumibilmente Delphi

  1. {...}
  2. For astronave:=682 to 1365 do {provato anche con Dx := astronave, ma stesso risultato}
  3. begin
  4. B:=astronave;
  5. B:=astronave+10;
  6. delay(100);
  7. end;
  8. {...}
  9. For Sx:=682 to 0 do
  10. begin
  11. A:=astronave;
  12. A:=astronave-10;
  13. delay(100);
  14. {...}


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. :yup:

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6379
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 14:50
Domenica, 25/09/2011
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à.
PM Quote
Avatar
gigisoft (Member)
Guru


Messaggi: 696
Iscritto: 11/10/2008

Segnala al moderatore
Postato alle 10:37
Lunedì, 26/09/2011
Testo quotato

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.


PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo