Horace Admin
Numarul mesajelor : 298 Varsta : 30 Muzica : psihedelica Reputatie : 10 Data de inscriere : 12/05/2007
| Subiect: proiect nou: space shooter 6th Ianuarie 2010, 8:38 am | |
| am o idee noua de joc in pascal space shooter modelul clasic, o nava jos care poate sa traga si multe nave mici slabe inamice in partea de sus, care se misca incet si le poti nimici destul de usor. va fi un joc cu niveluri prestabilite cel mai probabil desi poate voi pune si un mod haotic in care apar ciudatenii. oricum aici va voi tine la curent cu progresul proiectului. in acelasi timp, aici voi pune codul sursa sa nu uit cumva de el. si sa il pot accesa mai usor cand sunt la scoala si vreau sa lucrez la joc. - Cod:
-
program joc_space; { autor: Horatiu Roman. versiune: 0.0 } uses crt,dos; type enemy=record typ:byte; posx,posy:byte; end; player=record pos:byte; power:byte; end;
const screen_vsize=50; screen_hsize=80; menu_hsize=20;
var k:char; keystep,exit,exit3:boolean; ship:player; btest:enemy; i:word; score:longint; scores:array [1..10] of integer; scoresn:array [1..10] of string; initpos,maxpos,minpos:byte; speed:word;{cate sec/100 sta pe step}
procedure writescores; var f:text; i:byte; begin assign(f,'space.res'); rewrite(f); for i:=1 to 10 do begin writeln(f,scores[i]); writeln(f,scoresn[i]); end; close(f); end;
procedure readscores(var rst:boolean); var f:text; i:byte; err:integer; begin assign(f,'space.res'); {$I-} reset(f); {$I+} err:=IOResult; if err<>0 then begin clrscr; writeln('Error ',err,' occured. Ask adult for help.'); delay(2500); end; if err=2 then begin rewrite(f); close(f); reset(f); writescores; rst:=true; end else rst:=false; for i:=1 to 10 do begin readln(f,scores[i]); readln(f,scoresn[i]); end; close(f); end;
procedure initenemy(e:enemy; x,y:byte; t:byte); begin e.posx:=x; e.posy:=y; e.typ:=t; end;
procedure init; var rst:boolean; begin rst:=false; repeat textmode(CO80+Font8x8); textcolor(white); exit:=false; exit3:=false; score:=0; minpos:=3; maxpos:=screen_hsize-menu_hsize-3; initpos:=(maxpos+minpos) div 2; speed:=50; readscores(rst);
initenemy(btest,initpos,20,1); ship.pos:=initpos; until rst=false; end;
procedure clrscr2(x1,y1,x2,y2:byte); var i,j:byte; begin for i:=x1 to x2 do for j:=y1 to y2 do begin gotoxy(i,j); write(' '); end; end;
procedure showscores; var i:byte; begin clrscr2(2,2,screen_hsize-menu_hsize-2,screen_vsize-2); gotoxy((screen_hsize-menu_hsize) div 2 - 7,5); write('Highscores list'); for i:=1 to 10 do begin gotoxy(trunc((screen_hsize-menu_hsize)/7),10+i); write(scoresn[i]); gotoxy(trunc((screen_hsize-menu_hsize)*6/7),10+i); write(scores[i]); end; end;
procedure gameover; var str: string[10]; i,j:byte; weak:boolean; begin clrscr2(2,2,screen_hsize-menu_hsize-1,screen_vsize-1); gotoxy(trunc((screen_hsize-menu_hsize)/7),screen_vsize div 2); textcolor(red); write('Game is over, you are dead'); gotoxy(trunc((screen_hsize-menu_hsize)/7),screen_vsize div 2+1); write('Please enter name: ');textcolor(white); readln(str); gotoxy(trunc((screen_hsize-menu_hsize)/7),screen_vsize div 2+2); textcolor(red); weak:=true; for i:=1 to 10 do begin if score>scores[i] then begin for j:=10 downto i+1 do begin scores[j]:=scores[j-1]; scoresn[j]:=scoresn[j-1]; end; scores[i]:=score; scoresn[i]:=str; weak:=false; break; end; end; if weak then i:=11; case i of 1: write(str,' is the new champion!!!'); 2..3: write(str,' is in the top 3!!'); 4..9: write(str,' is in the highscores!'); 10: write(str,' was quite lucky.'); 11: if screen_hsize-menu_hsize>30 then write('My grandma plays better than ',str) else write(str,' sucks'); end; sound(340);delay(100);nosound; sound(380);delay(100);nosound; sound(420);delay(100);nosound; sound(445);delay(160);nosound; delay(700);
writescores; exit:=true; showscores; gotoxy(trunc((screen_hsize-menu_hsize)*2/7),screen_vsize-2);write('Exit? (esc)'); if readkey=#27 then exit3:=true; end;
procedure keys; begin k:=readkey; case k of #27: begin exit:=true; exit3:=true; gotoxy(20,20); textcolor(red); writeln('Exiting'); end; {ad} 'd': if ship.pos<maxpos then inc(ship.pos); 'a': if ship.pos>minpos then dec(ship.pos); {numpad} '6': if ship.pos<maxpos then inc(ship.pos); '4': if ship.pos>minpos then dec(ship.pos); end; keystep:=false; end;
procedure drawmenu; var i:byte; begin clrscr; for i:=2 to screen_vsize do begin gotoxy(screen_hsize-menu_hsize,i);write(char(ord(186))); { mijloc vertical } end; for i:=2 to screen_hsize-1 do begin gotoxy(i,1);write(char(ord(205))); { linia sus } gotoxy(i,screen_vsize);write(char(ord(205))); { linia jos } end; gotoxy(screen_hsize-menu_hsize,1);write(char(ord(203))); {mijloc sus} gotoxy(1,1);write(char(ord(201))); { sus stg } for i:=2 to screen_vsize-1 do begin gotoxy(1,i);write(char(ord(186))); {linia stg } gotoxy(screen_hsize-1,i);write(char(ord(186))); { linia dr } end; gotoxy(1,screen_vsize);write(char(ord(200))); { stg jos } gotoxy(screen_hsize-1,screen_vsize);write(char(ord(188))); { dr jos } gotoxy(screen_hsize-1,1);write(char(ord(187))); { dr sus } gotoxy(screen_hsize-menu_hsize,screen_vsize);write(char(ord(202))); {mijloc jos}
gotoxy(screen_hsize-menu_hsize+menu_hsize div 2-3,7);write('SPACE'); {titlu}
gotoxy(screen_hsize-menu_hsize+menu_hsize div 2-4,9);write('Speed:'); {69,9 - viteza } gotoxy(screen_hsize-menu_hsize+menu_hsize div 2-4,10);write('Length:'); {70,10 - lungimea } gotoxy(screen_hsize-menu_hsize+menu_hsize div 2-4,11);write('Score:'); {69,11 - scor } gotoxy(screen_hsize-menu_hsize+menu_hsize div 2-5,13);write('Alt+Enter'); gotoxy(screen_hsize-menu_hsize+menu_hsize div 2-5,14);write('Fullscreen'); textcolor(darkgray); if screen_vsize>=40 then begin gotoxy(screen_hsize-menu_hsize+1,30);write(' controls: '); gotoxy(screen_hsize-menu_hsize+1,31);write(' (numlock on) '); gotoxy(screen_hsize-menu_hsize+1,32);write(' '); gotoxy(screen_hsize-menu_hsize+1,33);write(' 4, a = stg '); gotoxy(screen_hsize-menu_hsize+1,34);write(' 6, d = dr. '); gotoxy(screen_hsize-menu_hsize+1,35);write(' '); gotoxy(screen_hsize-menu_hsize+1,36);write(' '); gotoxy(screen_hsize-menu_hsize+1,37);write(' '); gotoxy(screen_hsize-menu_hsize+1,38);write(' '); gotoxy(screen_hsize-menu_hsize+1,39);write(' '); end; gotoxy(20,20); end;
procedure drawship(x,y:byte);
begin gotoxy(x,y); case ship.power of 1: write(char('H')); else write(char('H')); end; end;
procedure drawenemy(e:enemy); begin gotoxy(e.posx,e.posy); case e.typ of 1: write(char(1));
end;
procedure draw; var i:word; begin drawship(ship.pos,screen_vsize-3); {score} gotoxy(screen_hsize-menu_hsize+menu_hsize div 2+3,11);write(score,' ');
gotoxy(screen_hsize-3,screen_vsize-2); end;
procedure step; var i:word; hour,min,sec,s,s2:word; begin gettime(hour,min,sec,s); repeat if keypressed then keys; gettime(hour,min,sec,s2); until (s2>s+speed) or exit3; draw; end;
begin randomize; repeat init; drawmenu; repeat step; until exit;
until exit3; end.
codul a pornit de la scheletul tip de la jocul snake. din nou insist, am facut tot codul singur, nu am copiat de nicaieri asa ca va rog, daca copiati ceva de aici sa nu ziceti ca ati pus coada la pruna ca nu-i adevarat si nu-i corect. eu am pus-o de data asta. succese. | |
|