ho da poco iniziato la programmazione (manco un mese) in Pascal. Come prima programma un po più "elaborato" sto creando un gioco dove comandi una navicella con cui devi evitare tutti i "meteoriti" (viva la fantasia...) per cercare di fare il punteggio più alto. Il codice è il seguente (spero che ci capirete qualcosa ):
- Codice: Seleziona tutto
program space_run;
uses crt;
const
met1=chr(201)+chr(205)+chr(187)+chr(32);
met2=chr(186)+chr(177)+chr(186)+chr(32);
met3=chr(200)+chr(205)+chr(188)+chr(32);
var
score,ys,sm,xm1,ym1:integer;
key:char;
begin
cursoroff;
ys:=13;
xm1:=75;
ym1:=4;
textcolor(9);
writeln('*******************************************************************************');
writeln('* * : *');
writeln('*******************************************************************************');
writeln('* *');
writeln('* *');
writeln('* *');
writeln('* *');
writeln('* *');
writeln('* *');
writeln('* *');
writeln('* *');
writeln('* *');
writeln('* *');
writeln('* *');
writeln('* *');
writeln('* *');
writeln('* *');
writeln('* *');
writeln('* *');
writeln('* *');
writeln('* *');
writeln('* *');
writeln('*******************************************************************************');
writeln('* *');
write ('*******************************************************************************');
textcolor(11);
gotoxy(14,6);
write('***** ***** ***** ***** ***** ***** * * * *');
gotoxy(14,7);
write('* * * * * * * * * * * ** *');
gotoxy(14,8);
write('***** ***** ***** * *** **** * * * * *');
gotoxy(14,9);
write(' * * * * * * * * * * * **');
gotoxy(14,10);
write('***** * * * ***** ***** * * ***** * *');
textcolor(10);
gotoxy(3,2);
write('SPACE RUN');
gotoxy(15,2);
write('SCORE');
gotoxy(3,24);
write('GAME MADE BY CIOZUN (ciozun@gmail.com)');
textcolor(15);
gotoxy(23,2);
write('0');
textcolor(12);
gotoxy(25,14);
write('Press space to start the game');
gotoxy(30,15);
write('Use 1 and 2 to move');
sound(1);
delay(100);
sound(1);
repeat
key:=readkey;
until key=#32;
gotoxy(14,6);
write(' ');
gotoxy(14,7);
write(' ');
gotoxy(14,8);
write(' ');
gotoxy(14,9);
write(' ');
gotoxy(14,10);
write(' ');
gotoxy(25,14);
write(' ');
gotoxy(30,15);
write(' ');
gotoxy(37,11);
write('*****');
gotoxy(37,12);
write(' *');
gotoxy(37,13);
write(' ***');
gotoxy(37,14);
write(' *');
gotoxy(37,15);
write('*****');
delay(1000);
gotoxy(37,11);
write('*****');
gotoxy(37,12);
write(' *');
gotoxy(37,13);
write('*****');
gotoxy(37,14);
write('* ');
gotoxy(37,15);
write('*****');
delay(1000);
gotoxy(37,11);
write(' ** ');
gotoxy(37,12);
write(' * ');
gotoxy(37,13);
write(' * ');
gotoxy(37,14);
write(' * ');
gotoxy(37,15);
write(' * ');
delay(1000);
gotoxy(31,11);
write('***** ***** *');
gotoxy(31,12);
write('* * * *');
gotoxy(31,13);
write('* *** * * *');
gotoxy(31,14);
write('* * * * ');
gotoxy(31,15);
write('***** ***** *');
gotoxy(20,13);
write(chr(26));
textcolor(7);
write(chr(16));
sound(1);
delay(400);
gotoxy(31,11);
write(' ');
gotoxy(31,12);
write(' ');
gotoxy(31,13);
write(' ');
gotoxy(31,14);
write(' ');
gotoxy(31,15);
write(' ');
while true do
begin
sm:=sm+1;
if sm>30 then
begin
// if xm1>2 then
// begin
textcolor(8);
gotoxy(xm1,ym1);
write(met1);
gotoxy(xm1,(ym1+1));
write(met2);
gotoxy(xm1,(ym1)+2);
write(met3);
xm1:=xm1-1;
//end
//else
//begin
if xm1<=2 then
begin
gotoxy(xm1,ym1);
write(' ');
gotoxy(xm1,(ym1+1));
textcolor(9);
write(' ');
gotoxy(xm1,(ym1+2));
write(' ');
xm1:=75;
randomize;
ym1:=random(17)+4;
score:=score+1;
textcolor(15);
gotoxy(23,2);
write(score);
end;
end;
if keypressed then
begin
key:=readkey;
gotoxy(20,ys);
write(' ');
//case key of
// #48:if ys>4 then
// begin
// ys:=ys-1;
// gotoxy(20,(ys+1));
// end;
// #50:if ys<22 then
// begin
// ys:=ys+1;
// gotoxy(20,(ys-1));
// end;
//end;
if (key='1') and (ys>4) then
begin
ys:=ys-1;
end;
if (key='2') and (ys<22) then
begin
ys:=ys+1;
end;
textcolor(12);
gotoxy(20,ys);
write(chr(26));
textcolor(7);
write(chr(16));
delay(13);
end
else
begin
delay(17);
end;
end;
textcolor(14);
gotoxy(21,ys);
write('X');
textcolor(12);
gotoxy(35,11);
write('GAME OVER!');
textcolor(10);
gotoxy(34,13);
write('SCORE');
textcolor(9);
write(' : ');
textcolor(15);
write(score);
textcolor(12);
gotoxy(30,15);
write('Press space to exit');
repeat
key:=readkey;
until key=#32;
end. // ovviamente credo che abbiate capito che non è ancora finito
Ora io ho le seguenti domande:
1. All'inizio ho dichiarato delle constanti (met1, met2 e met3) composte da più caratteri concatenati che messe una sull'altra mi creano il meteorite (richiamate appena dopo l'inizio del ciclo while). E' più veloce creare delle constatnti e richiamarle (come ho fatto io) o ogni volta stampare direttamente il testo che mi serve? Questa domanda è applicabile un po' per tutto il programma.
2. Più veloce l'if o il case of in generale? Ed in questo caso?
3. Consigli generali su come velocizzare qualche passaggio?
Grazie a tutti in anticipo