Oppure

Loading
24/09/11 21:26
Loryea
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:
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.
aaa
25/09/11 8:54
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 ...
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à.
25/09/11 9:39
Loryea
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.
aaa
25/09/11 10:05
Il Totem
Non puoi modificare il valore di una variabile contatore nel suo ciclo.
aaa
25/09/11 10:17
Loryea
Aggiungendo le variabili DX e SX, e scrivendo:
{...}
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.
aaa
25/09/11 12:14
nessuno
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à.
25/09/11 12:33
Loryea
Aggiungendo le variabili B e C, e scrivendo:
{...}
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. :yup:
aaa
25/09/11 12:50
nessuno
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 25/09/11 12: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à.