Condividi:        

Ottimizzare in Pascal

Problemi di HTML? Di PHP, ASP, .NET, JSP, Perl, SQL, JavaScript, Visual Basic..?
Vuoi realizzare programmi in C, C++, Java, Ruby o Smalltalk, e non sai da che parte cominciare?
Entra qui e troverai le risposte!

Moderatori: Anthony47, Triumph Of Steel, archimede

Ottimizzare in Pascal

Postdi Ciozun » 11/10/14 21:03

Salve a tutti, :)

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 :D
Ciozun
Utente Junior
 
Post: 12
Iscritto il: 11/10/14 20:44

Sponsor
 

Re: Ottimizzare in Pascal

Postdi Ciozun » 11/10/14 21:05

Non so perché ma c'è stato uno sterminio di spazi...
Ciozun
Utente Junior
 
Post: 12
Iscritto il: 11/10/14 20:44

Re: Ottimizzare in Pascal

Postdi hydra » 15/10/14 07:19

Ciao e benvenuto. Visto che sei nuovo solo due cose: quando inserisci del codice usa il tag CODE (ho modificato il tuo post, vista la differenza?), inoltre cerca di postare nella sezione giusta in modo da avere più risposte.
Sono secoli che non programmo in pascal ma ti voglio dare un altro consiglio: usa i commenti (e non perchè stai programmando in pascal). Nel caso specifico mi è passata la voglia di leggere il codice perchè oltre che metterci del tempo per leggerlo, serve il doppio del tempo per capire cosa fa; se ci fossero dei commenti sarebbe più semplice.
Per quanto riguarda le costanti, solitamente si utilizzano quando ci sono dei valori dipetitivi che devi utilizzare più volte, in questo modo se devi fare una modifica basta che modifichi il valore delle costanti invece di scorrere tutto il codice per cercare i punti da modificare. Per l'if o il case, non ti so dire in termini di velocità quale sia migliore, ma puoi farti un'idea con una ricerca tipo questa.
Sposto comunque il post nella sezione corretta, in futuro fai più attenzione ;)
Avatar utente
hydra
Moderatore
 
Post: 7007
Iscritto il: 19/07/04 08:06
Località: Vallis Duplavis


Torna a Programmazione


Topic correlati a "Ottimizzare in Pascal":

Ottimizzare sito WORDPRESS
Autore: nikita75
Forum: Discussioni
Risposte: 0

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite