Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function []= Astero()
- %sta≥e
- %ustawienia okna
- dt=0.1;
- %wyraøone w pikselach
- figureWidth=800;
- figureHeight=480;
- %osie
- figureColor=[0,0,0,];%t≥o na czarno
- axisColor=[0.15,0.15,0.15]; %czarny ale nie dokonca
- %zmienne
- quitGame=false; %zabezpiecza g≥Ûwnπ pÍtlne, jesli true to program siÍ zamyka
- gamestarted=0;
- objects=cell(1);% zawiera wszytkie obiekty w grze
- objects{1}=spaceship(); %statek
- m=1; %liczba objektow w grze, wliczajac statek i laser i asteroidy
- lapse=0;
- score=0;
- h=[];
- C=[0,0];
- % funkcje wbudowane
- %uruchamia okno programu, na poczatku
- function createFigure
- scrsz=get(0,'ScreenSize');
- fig=figure('Position',[(scrsz(3)-figureWidth)/2 (scrsz(4)-figureHeight)/2 ...
- figureWidth, figureHeight],'CloseRequestFcn','quitGame=true','BackingStore','on');
- %zainicjowanie klawiszÛw od silnika i ruchu myszka
- set(fig,'KeyPressFcn',@keyDown, 'KeyReleaseFcn', @keyUp ,'WindowButtonMotionFcn', @mouseMove, ...
- 'WindowButtonDownFcn', @mouseClick);
- %zablokowanie zmiany wielkosci okna
- set(fig, 'Resize', 'off');
- axis([-5 5 -5 5]);
- axis manual;
- %ukrycie znacznikow osi i ustalenie koloru
- set(gca,'color', axisColor,'Ytick',[],'XTick',[]);
- %kolor t≥a wykresu
- set(fig,'color',figureColor);
- hold on
- %rysowanie tla %MarkerFaceColor, ustawienie koloru mazaka
- plot(10*rand(50,1)-5,10*rand(50,1)-5,'ws','MarkerFaceColor','w');
- %kreúlenie statku
- objects{1}=draw(objects{1});
- %wynik
- h=title(sprintf('Wynik %06d Øycia %d',score,objects{1}.life),'color',[1,1,1] );
- end
- %odúwiez
- %funkcja do odswierzania pozycji objektow jezeli wyleca poza wykres
- %
- function refreshPlot
- for k=1:m
- objects{k}=update(objects{k});
- if objects{k}.x<-5
- objects{k}.x=5;
- end
- if objects{k}.x>5
- objects{k}.x=5;
- end
- if objects{k}.y<-5
- objects{k}.y=5;
- end
- if objects{k}.y>5
- objects{k}.y=-5;
- end
- end
- set(h,'string',sprintf('Score %06d Lifes %d', score, objects{1}.life)); % konwersja stringa do char
- pause(dt); %pauza w grze jest rÛwnowπzna predkosci =0
- end
- %update pozycji
- % objektow
- %usuwwa obiekty nie instniejace
- %tworzy nowe orbity i niszczy trafione
- function updateObjects
- dist=0;
- p=0;
- n=0;
- %wszytkie obiekty sπ odswierzane w odwrotnej kolejnosci zeby nie zgubic ich z listy
- for k=0:m-1
- objects{m-k}=physics(objects{m-k},dt);
- %sprawdzamy czy laser trafi≥
- if isa (objects{m-k},'laser')==1 %isa sprawdza czy wartosci sa takie same
- for j=2:m %dla kazdego lasera sprawdzamy czy trafi≥ objekt
- if isa(objects{j}, 'asteroid')==1
- dist=sqrt(objects{m-k}.x-objects{j}.x^2+(objects{m-k}.y-objects{j}.y^2));
- if objects{m-k}.life>0
- if dist<1
- objects{m-k}.life=objects{m-k}.life-1;
- objects{end+1}=asteroid(objects{j}.x,objects{j}.y,objects{j}.life-1);
- objects{end}=draw(objects{end});
- objects{end}.vx=objects{end}.vx+0.001*score/100*objects{end}.vx;
- objects{end}.vy=objects{end}.vy+0.001*score/100*objects{end}.vy;
- objects{end+1}=asteroid(objects{j}.x,objects{j}.y,objects{j}.life-1);
- objects{end}=draw(objects{end});
- objects{end}.vx=objects{end}.vx+0.001*score/100*objects{end}.vx;
- objects{end}.vy=objects{end}.vy+0.001*score/100*objects{end}.vy;
- objects{j}.life=-1;
- p=p+2;
- score=score+100;
- crash
- end
- end
- end
- end
- end
- % czy statek dosta≥ z asteoridy
- if m-k==1
- for j=2:m
- if isa(objects{j},'asteroid')==1
- dist=sqrt((objects{m-k}.x-objects{j}.x)^2+(objects{m-k}.y-objects{j}.y)^2);
- if dist <0.5
- objects{m-k}.life=objects{m-k}.life -1;
- objects{j}.life=-1;
- score=score+100;
- crash;
- end
- end
- end
- end
- end
- m=m+p;
- for k=0:m-2
- if objects{m-k}.life<=0
- delete(objects{m-k});
- objects(m-k)=[];
- n=n+1;
- end
- end
- m=m-n;
- if objects{1}.life==0
- %gdy statek zostanie zniszczony
- for g=0:m-2
- delete(objects{m-g});
- objects(m-g)=[];
- end
- m=1;
- objects{1}.life=3;
- newGame
- end
- end%koniec update'u
- %ruch myszki
- %zainicjowana w creatFigure
- %rotuje statek w strone kursora
- function mouseMove(src,event)
- C=get(gca,'CurrentPoint');
- if gamestarted==1;
- %jezeli uruchomi sie przed wczytaneim statka wyskoczy error
- v=[C(1,1),C(1,2)]-[ objects{1}.x ,objects{1}.y];
- theta=atan2(v(2),v(1)); %kat
- objects{1}.angle=theta-pi/2;
- end
- end
- % przyciski myszki
- %przycisk strzela laserkiem
- function mouseClick(src,event)
- %tworzenie lasera
- if gamestarted==1;
- objects{end+1}=laser(objects{1}.x, objects{1}.y);
- objects{end}.angle=objects{1}.angle;
- objects{end}=draw(objects{end});
- objects{end}.vx=-4*sin(objects{end}.angle);
- objects{end}.vy=4*cos(objects{end}.angle);
- m=m+1;
- end
- end
- %nacisniecie = impuls sily
- function keyDown(src,event)
- switch event.Key
- case 'space'
- objects{1}.fire=1;
- case 'r' %nowa gra
- case 'q'
- quitGame=true;
- end
- end
- function keyUp(src,event)
- switch event.Key
- case 'space'
- objects{1}.fire=0;
- end
- end
- %nowa gra
- %wyswietla ekran z napisami
- function newGame
- h1=text(-3.9,4.1,'Asteroidy','color','w','FontSize', 80);
- h2= text(-4,4, 'Asteroidy','color',[0.4 0.4 0.4], 'FontSize', 80);
- h3=text(-4,2,'Nacisnij dowolny klaiwsz by zagrac','color','w','FontSize',30);
- h4=text(-4,1,'Spacja = silnik Myszka = obrÛt statku Q to wyjscie','color',[0.4,0.4, 0.4], 'FontSize', 10);
- pause(5*dt);
- waitforbuttonpress
- score=0
- delete(h1);
- delete(h2);
- delete(h3);
- delete(h4);
- end
- function crash
- %generuje dzwiek niszczonego stattku albo asteroid.
- cf = 200; % czestotliwosc (Hz)
- sf = 22050; % czestotliwosc probkowania(Hz)
- n = sf * dt; % ilosc probek
- s = (1:n) / sf; % sound data preparation
- s = sin(3 * pi * cf * s).*cos(cf*s)+0.01*rand(1,n).*cos(8*cf*s); %Some strange noise
- sound(s, sf); % sygna≥ s jest wysy≥any do glosnikow z czestotiwoscia probkowania sf
- end
- %main script
- createFigure;
- newGame;
- gamestarted=1;
- while ~quitGame %glowna petla
- updateObjects;
- refreshPlot;
- lapse=lapse+dt;
- if lapse>(2-0.01*score/100) % do tworzenia nowych asteroid
- objects{end+1}=asteroid(objects{1}.x+1+5*rand(),objects{1}.y+1+5*rand(),floor(3*rand()));
- objects{end}=draw(objects{end});
- objects{end}.vx=objects{end}.vx+0.01*score/100*objects{end}.vx;
- objects{end}.vy=objects{end}.vy+0.01*score/100*objects{end}.vy;
- m=m+1;
- lapse=0;
- end
- end
- delete(gcf)
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement