Advertisement
Guest User

Untitled

a guest
Jan 29th, 2020
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 8.76 KB | None | 0 0
  1. function []= Astero()
  2. %sta≥e
  3. %ustawienia okna
  4. dt=0.1;
  5. %wyraøone w pikselach
  6. figureWidth=800;
  7. figureHeight=480;
  8. %osie
  9. figureColor=[0,0,0,];%t≥o na czarno
  10. axisColor=[0.15,0.15,0.15]; %czarny ale nie dokonca
  11.  
  12. %zmienne
  13. quitGame=false; %zabezpiecza g≥Ûwnπ pÍtlne, jesli true to program siÍ zamyka
  14. gamestarted=0;
  15. objects=cell(1);% zawiera wszytkie obiekty w grze
  16. objects{1}=spaceship(); %statek
  17. m=1; %liczba objektow w grze, wliczajac statek i laser i asteroidy
  18. lapse=0;
  19. score=0;
  20. h=[];
  21. C=[0,0];
  22. % funkcje wbudowane
  23. %uruchamia okno programu, na poczatku
  24.     function createFigure
  25.         scrsz=get(0,'ScreenSize');
  26.         fig=figure('Position',[(scrsz(3)-figureWidth)/2 (scrsz(4)-figureHeight)/2 ...
  27.             figureWidth, figureHeight],'CloseRequestFcn','quitGame=true','BackingStore','on');
  28.         %zainicjowanie klawiszÛw od silnika i ruchu myszka
  29.         set(fig,'KeyPressFcn',@keyDown, 'KeyReleaseFcn', @keyUp ,'WindowButtonMotionFcn', @mouseMove, ...
  30.             'WindowButtonDownFcn',  @mouseClick);
  31.         %zablokowanie  zmiany wielkosci okna
  32.         set(fig, 'Resize', 'off');
  33.         axis([-5 5 -5 5]);
  34.         axis manual;
  35.         %ukrycie znacznikow osi i ustalenie koloru
  36.         set(gca,'color', axisColor,'Ytick',[],'XTick',[]);
  37.         %kolor t≥a wykresu
  38.         set(fig,'color',figureColor);
  39.         hold on
  40.         %rysowanie tla %MarkerFaceColor, ustawienie koloru mazaka
  41.         plot(10*rand(50,1)-5,10*rand(50,1)-5,'ws','MarkerFaceColor','w');
  42.         %kreúlenie statku
  43.         objects{1}=draw(objects{1});
  44.         %wynik
  45.       h=title(sprintf('Wynik %06d  Øycia %d',score,objects{1}.life),'color',[1,1,1] );
  46.     end
  47. %odúwiez
  48. %funkcja do odswierzania pozycji objektow jezeli wyleca poza wykres
  49. %
  50.     function refreshPlot
  51.     for k=1:m
  52.         objects{k}=update(objects{k});
  53.         if objects{k}.x<-5
  54.             objects{k}.x=5;
  55.         end
  56.         if objects{k}.x>5
  57.             objects{k}.x=5;
  58.         end
  59.         if objects{k}.y<-5
  60.             objects{k}.y=5;
  61.         end
  62.         if objects{k}.y>5
  63.             objects{k}.y=-5;
  64.         end
  65.     end
  66.         set(h,'string',sprintf('Score %06d Lifes %d', score, objects{1}.life)); % konwersja stringa do char
  67.         pause(dt);  %pauza w grze jest rÛwnowπzna predkosci =0    
  68.     end
  69.     %update pozycji
  70.     % objektow
  71.     %usuwwa obiekty nie instniejace
  72.     %tworzy nowe orbity i niszczy trafione
  73.         function updateObjects
  74.             dist=0;
  75.             p=0;
  76.             n=0;
  77.           %wszytkie obiekty sπ odswierzane w odwrotnej kolejnosci zeby nie zgubic ich z listy  
  78.             for k=0:m-1
  79.                 objects{m-k}=physics(objects{m-k},dt);
  80.                  %sprawdzamy czy laser trafi≥
  81.                 if isa (objects{m-k},'laser')==1 %isa sprawdza czy wartosci sa takie same
  82.                     for j=2:m  %dla kazdego  lasera sprawdzamy czy trafi≥ objekt
  83.                         if isa(objects{j}, 'asteroid')==1
  84.                             dist=sqrt(objects{m-k}.x-objects{j}.x^2+(objects{m-k}.y-objects{j}.y^2));
  85.                             if objects{m-k}.life>0
  86.                                 if dist<1
  87.                                     objects{m-k}.life=objects{m-k}.life-1;                                
  88.                                     objects{end+1}=asteroid(objects{j}.x,objects{j}.y,objects{j}.life-1);
  89.                                     objects{end}=draw(objects{end});
  90.                                     objects{end}.vx=objects{end}.vx+0.001*score/100*objects{end}.vx;
  91.                                     objects{end}.vy=objects{end}.vy+0.001*score/100*objects{end}.vy;
  92.                                     objects{end+1}=asteroid(objects{j}.x,objects{j}.y,objects{j}.life-1);
  93.                                     objects{end}=draw(objects{end});
  94.                                     objects{end}.vx=objects{end}.vx+0.001*score/100*objects{end}.vx;
  95.                                     objects{end}.vy=objects{end}.vy+0.001*score/100*objects{end}.vy;
  96.                                     objects{j}.life=-1;
  97.                                     p=p+2;
  98.                                     score=score+100;
  99.                                     crash
  100.                                 end
  101.                             end
  102.                         end
  103.                     end
  104.                 end
  105.            % czy statek dosta≥ z asteoridy
  106.             if m-k==1
  107.             for j=2:m
  108.                if isa(objects{j},'asteroid')==1
  109.                    dist=sqrt((objects{m-k}.x-objects{j}.x)^2+(objects{m-k}.y-objects{j}.y)^2);
  110.                    if dist <0.5
  111.                        objects{m-k}.life=objects{m-k}.life -1;
  112.                        objects{j}.life=-1;
  113.                        score=score+100;
  114.                        crash;
  115.                       end
  116.                end
  117.                 end
  118.             end
  119.         end
  120.             m=m+p;
  121.             for k=0:m-2
  122.             if objects{m-k}.life<=0
  123.                 delete(objects{m-k});
  124.                 objects(m-k)=[];
  125.                 n=n+1;
  126.             end
  127.             end
  128.             m=m-n;
  129.             if objects{1}.life==0
  130.                 %gdy statek zostanie zniszczony
  131.                 for g=0:m-2
  132.                 delete(objects{m-g});
  133.                 objects(m-g)=[];
  134.                 end
  135.                 m=1;
  136.                 objects{1}.life=3;
  137.                 newGame
  138.             end
  139.            
  140.         end%koniec update'u
  141.         %ruch myszki
  142.         %zainicjowana w creatFigure
  143.         %rotuje statek w strone kursora
  144.         function mouseMove(src,event)
  145.             C=get(gca,'CurrentPoint');
  146.             if gamestarted==1;
  147.                 %jezeli uruchomi sie przed wczytaneim statka wyskoczy error
  148.                  v=[C(1,1),C(1,2)]-[ objects{1}.x ,objects{1}.y];
  149.                     theta=atan2(v(2),v(1)); %kat
  150.                     objects{1}.angle=theta-pi/2;
  151.             end
  152.         end
  153.         % przyciski myszki
  154.         %przycisk strzela laserkiem
  155.         function mouseClick(src,event)
  156.             %tworzenie lasera
  157.             if gamestarted==1;
  158.                 objects{end+1}=laser(objects{1}.x, objects{1}.y);
  159.                 objects{end}.angle=objects{1}.angle;
  160.                  objects{end}=draw(objects{end});
  161.                   objects{end}.vx=-4*sin(objects{end}.angle);
  162.                    objects{end}.vy=4*cos(objects{end}.angle);
  163.                 m=m+1;
  164.             end
  165.         end
  166.        
  167.         %nacisniecie = impuls sily
  168.         function keyDown(src,event)
  169.             switch event.Key
  170.                 case 'space'
  171.                     objects{1}.fire=1;
  172.                 case 'r' %nowa gra
  173.                 case 'q'
  174.                     quitGame=true;
  175.             end
  176.         end
  177.    
  178.         function keyUp(src,event)
  179.             switch event.Key
  180.                 case 'space'
  181.                     objects{1}.fire=0;
  182.             end
  183.         end
  184.         %nowa gra
  185.         %wyswietla ekran z napisami
  186.         function newGame
  187.             h1=text(-3.9,4.1,'Asteroidy','color','w','FontSize', 80);
  188.             h2= text(-4,4, 'Asteroidy','color',[0.4 0.4 0.4], 'FontSize', 80);
  189.             h3=text(-4,2,'Nacisnij dowolny klaiwsz by zagrac','color','w','FontSize',30);
  190.             h4=text(-4,1,'Spacja = silnik Myszka = obrÛt statku Q to wyjscie','color',[0.4,0.4, 0.4], 'FontSize', 10);
  191.             pause(5*dt);
  192.             waitforbuttonpress
  193.             score=0
  194.             delete(h1);
  195.             delete(h2);
  196.             delete(h3);
  197.             delete(h4);
  198.         end
  199.              function crash
  200.         %generuje dzwiek niszczonego stattku albo asteroid.
  201.         cf = 200;                  % czestotliwosc (Hz)
  202.         sf = 22050;                 % czestotliwosc probkowania(Hz)
  203.         n = sf * dt;                 % ilosc probek
  204.         s = (1:n) / sf;             % sound data preparation
  205.         s = sin(3 * pi * cf * s).*cos(cf*s)+0.01*rand(1,n).*cos(8*cf*s);  %Some strange noise
  206.         sound(s, sf);               % sygna≥ s jest wysy≥any do glosnikow z czestotiwoscia probkowania sf        
  207.     end
  208.         %main script
  209.         createFigure;
  210.         newGame;
  211.         gamestarted=1;
  212.         while ~quitGame %glowna petla
  213.             updateObjects;
  214.             refreshPlot;
  215.             lapse=lapse+dt;
  216.             if lapse>(2-0.01*score/100) % do tworzenia nowych asteroid
  217.           objects{end+1}=asteroid(objects{1}.x+1+5*rand(),objects{1}.y+1+5*rand(),floor(3*rand()));
  218.                 objects{end}=draw(objects{end});
  219.                 objects{end}.vx=objects{end}.vx+0.01*score/100*objects{end}.vx;
  220.                 objects{end}.vy=objects{end}.vy+0.01*score/100*objects{end}.vy;
  221.                 m=m+1;
  222.                 lapse=0;
  223.             end
  224.         end
  225.     delete(gcf)
  226.                
  227.        
  228.        
  229.    
  230. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement