JAVASCRIPT   7

gravity.js

Guest on 30th May 2021 09:48:38 PM

  1.             int leftArrow = 37;
  2.             int rightArrow = 39; //39;
  3.             int upArrow = 38;
  4.             int downArrow = 40;
  5.             int ctrlKey = 17;
  6.             int keyCode = 0;
  7.             int noKey=0;
  8.             var MAXY=320;
  9.             var MINY=0;
  10.             var MINX=0;
  11.             var MAXX=440;
  12.             double drawScale=1;
  13.             var windowHeight;
  14.             var windowWidth;
  15.             var gameYPos;          
  16.             var xMargin, yMargin;        
  17.             var xSize,ySize; 
  18.             var leftButtonPressed=false;
  19.             var rightButtonPressed=false;
  20.             var screenPressed=false;
  21.             var screenX, screenY;
  22.             var aiming=false;
  23.             var flying=false;
  24.             var xPos, yPos, vx, vy, m;
  25.             var maxSpeed=1;
  26.             var deltaT=0.3;
  27.             var planetArray = [];
  28.             var gravity=100;
  29.             var showHit=false;
  30.             var showHitCounter;
  31.             var pl1Home=true;
  32.             var pl2x=430;
  33.             var pl2y=MAXY/2;
  34.             var pl1Point=0;
  35.             var targetHit=false;
  36.             var aimX, aimY;
  37.             var touchAiming=false;
  38.             var mouseAiming=false;
  39.             var pl1x=10;
  40.             var pl1y=MAXY/2;
  41.             var pl2Home=false;
  42.             var pl2Flying=false;
  43.             var pl2ShowHit=false;
  44.             var pl2TargetHit=false;
  45.             var pl2Point=0;
  46.             var missileCounter=0;
  47.             var oldAimX1=0;
  48.             var oldAimY1=0;
  49.             var oldAimX2=0;
  50.             var oldAimY2=0;
  51.             var launchButtonPressed=false;
  52.             var playerPressed=false;
  53.             var pressedX=0;
  54.             var pressedY=0;
  55.             PImage backgroundImage;
  56.             PImage plusButton;
  57.             PImage minusButton;
  58.             PImage launchButton;
  59.            
  60.            
  61.  
  62. function setupWindow(){
  63.       windowWidth=window.innerWidth*0.9;        //90% av fƶnstret anvƤnder vi till vĆ�r "Canvas"
  64. anvas"
  65.       windowHeight=window.innerHeight*0.9;
  66.       size(windowWidth, windowHeight);
  67.  
  68.       gameYPos = windowHeigh//Understa 20% av Canvas reserveras fƶr annat.
  69. r annat.
  70.      
  71.       drawScale=windowWidth// drawScale=windowHeight/ySize;       //SƤtter skalan (drawScale) antal pixlar per enhet enligt skƤrmens hƶjd.
  72. rmens hƶjd.
  73.       xSize=windowWi//Spara undan hur mĆ�nga enheter man fĆ�r i X-led.
  74. man f�r i X-led.
  75.       ySize=win//Spara undan hur mĆ�nga enheter man fĆ�r i X-led.
  76. heter man f�r i X-l//NƤr man Ƥr <20% fr�n kanten s� rullar bakgrunden
  77. �n kanten s� rull//NƤr man Ƥr <20% fr�n kanten s� rullar bakgrunden
  78.  <20% frĆ�n kanten //      ySize=60*1.5*1.5*1.5*1.25;                // BestƤmmer att det alltid Ƥr 500 enheter hƶg skƤrm!
  79. mmer att det alltid Ƥr 500 enheter hƶg skƤrm!
  80.      
  81.       setupWindow();
  82.       imageMode(CENTER);
  83.      
  84.       strokeWeight( 1 );
  85.       frameRate( 60 );
  86.      
  87.      
  88.       xPos=10;
  89.       yPos=MAXY/2;     
  90.      
  91.       xPosLevel=MINX;
  92.       yPosLevel=yPos-ySize/2;
  93.            
  94.      
  95.       newPlanets (4);
  96.      
  97.       oldAimX1=toX(pl1x);
  98.       oldAimY1=toY(pl1y);
  99.       oldAimX2=toX(pl2x);
  100.       o/* @pjs preload="bilder/EmptySky2.png"; */=o/* @pjs preload="bilder/PlusButton.png"; */2./* @pjs preload="bilder/MinusButton.png"; */.png"; */
  101.       /* @pjs preload="bilder/MinusButton.png"; */
  102.       backgroundImage = loadImage("bilder/EmptySky2.png");
  103.       plusButton=loadImage("bilder/PlusButton.png");
  104.       minusButton=loadImage("bilder/MinusButton.png");
  105.       launchButton=loadImage("bilder/Launchbutton.png");
  106. }
  107.      
  108. void draw()
  109. {
  110.       if (keyCode == 109) {
  111.             ySize=ySize*1.5;
  112.             keyCode=noKey;
  113.       }
  114.      
  115.       if (keyCode == 107) {
  116.             ySize=ySize/1.5;
  117.             keyCode=noKey;
  118.       }
  119.  
  120.       setupWindow();
  121.  
  122.       if ((leftButtonPressed==true) && ((pl1Home==true)||(pl2Home==true))) {
  123.             playerPressed=true
  124.             pressedX=mouseX;
  125.             pressedY=mouseY;
  126.       }    
  127.            
  128.       if ((screenPressed==true) && ((pl1Home==true)||(pl2Home==true))) {
  129.             playerPressed=true
  130.             pressedX=screenX;
  131.             pressedY=screenY;
  132.       }
  133.      
  134.       if (playerPressed==true){
  135.             playerPressed=false;
  136.             var isAButtonPressed=false;
  137.             if (pressedButton(windowWidth-422*drawScale,windowHeight-20*drawScale,40*drawScale,40*drawScale)==true){
  138.                   changeSpeed (pl1x,pl1y,-1);
  139.                   isAButtonPressed=true;
  140.             }    
  141.             if (pressedButton(windowWidth-220*drawScale,windowHeight-20*drawScale,80*drawScale,40*drawScale)==true){
  142.                   launchButtonPressed=true;
  143.                   isAButtonPressed=true;
  144.             }
  145.             if (pressedButton(windowWidth-20*drawScale,windowHeight-20*drawScale,40*drawScale,40*drawScale)==true){
  146.                   changeAngle (pl1x,pl1y,+0.005);
  147.                   isAButtonPressed=true;
  148.             }
  149.             if (pressedButton(windowWidth-110*drawScale,windowHeight-20*drawScale,40*drawScale,40*drawScale)==true){
  150.                   changeAngle (pl1x,pl1y,-0.005);
  151.                   isAButtonPressed=true;
  152.             }
  153.             if (pressedButton(windowWidth-332*drawScale,windowHeight-20*drawScale,40*drawScale,40*drawScale)==true){
  154.                   changeSpeed (pl1x,pl1y,+1);
  155.                   isAButtonPressed=true;
  156.             }
  157.             if (isAButtonPressed==false) {
  158.                   aimX=pressedX;
  159.                   aimY=pressedY;
  160.                   mouseAiming=true;
  161.             }
  162.             aiming=true;
  163.       }
  164.      
  165.      
  166.       if ((pl1Home==true) && (aiming==true) && (launchButtonPressed==true)){
  167.             flying=true;
  168.             pl1Home=false;
  169.             aiming=false;
  170.             touchAiming=false;
  171.             mouseAiming=false;
  172.             xPos=pl1x;
  173.             yPos=pl1y;
  174.             fire ();
  175.             oldAimX1=aimX;
  176.             oldAimY1=aimY;
  177.             launchButtonPressed=false;
  178.       }
  179.  
  180.       if (pl1Home==true) {
  181.             xPosLevel=0;
  182.             yPosLevel=pl1y-ySize/2;
  183.       }
  184.      
  185.       if ((pl2Home==true) && (aiming==true) && (launchButtonPressed==true)){
  186.             pl2Flying=true;
  187.             pl2Home=false;
  188.             aiming=false;
  189.             touchAiming=false;
  190.             mouseAiming=false;
  191.             xPos=pl2x;
  192.             yPos=pl2y;
  193.             fire ();
  194.             oldAimX2=aimX;
  195.             oldAimY2=aimY;
  196.             launchButtonPressed=false;
  197.       }
  198.  
  199.       if (pl2Home==true) {
  200.             xPosLevel=pl2x-xSize+10;
  201.             yPosLevel=pl2y-ySize/2;
  202.       }
  203.      
  204.      
  205.       if (flying==true) {
  206.            
  207.             updateMissile();
  208.            
  209.             if  (missileFail()==true) {
  210.                   flying=false;    
  211.                   showHit=true;
  212.                   showHitCounter=120;
  213.             }
  214.            
  215.             targetHit=false;
  216.             pl2TargetHit=false;
  217.            
  218.             if (distance(pl2x,pl2y,xPos,yPos)<7) {
  219.                   flying=false;    
  220.                   showHit=true;
  221.                   showHitCounter=120;
  222.                   pl1Point++;
  223.                   targetHit=true;
  224.             }
  225.       }
  226.       if (pl2Flying==true) {
  227.            
  228.             updateMissile();
  229.  
  230.             if (missileFail()==true) {
  231.                   pl2Flying=false; 
  232.                   pl2ShowHit=true;
  233.                   showHitCounter=120;
  234.             }
  235.            
  236.             pl2TargetHit=false;
  237.             targetHit=false;
  238.            
  239.             if (distance(pl1x,pl1y,xPos,yPos)<7) {
  240.                   pl2Flying=false; 
  241.                   pl2ShowHit=true;
  242.                   showHitCounter=120;
  243.                   pl2Point++;
  244.                   pl2TargetHit=true;
  245.             }
  246.       }
  247.      
  248.  
  249.      
  250.       if (showHit==true) {
  251.             showHitCounter=showHitCounter-1;
  252.             if (showHitCounter==0) {
  253.                   xPos=pl2x;
  254.                   yPos=pl2y;
  255.                   pl2Home=true;
  256.                   showHit=false;
  257.                   missileCounter++;
  258.                   aimX=oldAimX2;
  259.                   aimY=oldAimY2;
  260.             }
  261.       }
  262.      
  263.       if (pl2ShowHit==true) {
  264.             showHitCounter=showHitCounter-1;
  265.             if (showHitCounter==0) {
  266.                   xPos=pl1x;
  267.                   yPos=pl1y;
  268.                   pl1Home=true;
  269.                   pl2ShowHit=false;
  270.                   missileCounter++;
  271.                   aimX=oldAimX1;
  272.                   aimY=oldAimY1;
  273.             }
  274.            
  275.       }
  276.      
  277.       if (missileCounter=// Rita bilden
  278. nets(4);
  279.             missileCounter=0;
  280.       }
  281.      
  282.      
  283.      
  284.      
  285. // Rita bilden
  286.      
  287.       xPosLevel=xPos-xSize/2;
  288.       yPosLevel=yPos-ySize/2;
  289.            
  290.       if (xPosLevel<MINX){
  291.             xPosLevel=MINX;
  292.       }
  293.      
  294.       if (yPosLevel<MINY){
  295.             yPosLevel=MINY;
  296.       }
  297.            
  298.       if (xPosLevel>MAXX-xSize){
  299.             xPosLevel=MAXX-xSize;
  300.       }
  301.            
  302.       i// Tƶm skƤrmen
  303. -ySize){
  304.             yPosLevel=MAXY-ySize;
  305.       }
  306.  
  307.       // Tƶm skƤrmen
  308.      
  309.       background (0,0,30);
  310.       image(backgroundImag//Rita bas
  311. 2),toY(MAXY/2),440*drawScale,320*drawScale);
  312.      
  313.       //Rita bas
  314.       fill (0,255,0);
  315.       ellipse (toX(pl1x),toY(pl1y),10*drawScale,5*drawScale);
  316.  
  317.       fill (51,255,255);
  318.       //Rita projektil
  319. ),toY(pl2y),10*drawScale,5*drawScale);
  320.      
  321.       //Rita projektil
  322.       if ((showHit==true)||(pl2ShowHit==true)) {
  323.             fill (90,90,90);
  324.             if ((targetHit==true)||(pl2TargetHit==true)){
  325.                   fill (255,171,0);
  326.             }
  327.       } else {
  328.             fill (255,0,0);
  329.       }
  330.       ellip//Rita sikte
  331. ,toY(yPos),5*drawScale,5*drawScale);
  332.      
  333.            
  334.            
  335.       //Rita sikte
  336.      
  337.       if ((pl1Home==true)||(pl2Home==true)) {
  338.             strokeWeight(5);
  339.             stroke (200,0,0);
  340.             if (pl1Home==true) {
  341.                   line (toX(pl1x),toY(pl1y),aimX,aimY);
  342.             } else {
  343.                   line (toX(pl2x),toY(pl2y),aimX,aimY);
  344.             }
  345.             stroke (0,0,0);
  346.             strokeWeight(1);
  347.       }
  348.      
  349.       for (var index=0; index<planetArray.length; index++) {
  350.             fill (planetArray[index].red,planetArray[index].green,planetArray[index].blue);
  351.             ellipse (toX(planetArray[index].xPos),toY(planetArray[index].yPos),planetArray[index].r*drawScale*2,planetArray[index].r*drawScale*2);
  352.       }
  353.      
  354.       fill (255,255,255);
  355.       textSize (20);
  356.       text ("Pl1: "+pl1Point,10,40);
  357.      
  358.       fill (255,255,255);
  359.       textSize (20);
  360.       text ("Pl2: "+pl2Point,0.9*windowWidth,40);
  361.      
  362.       fill (255,255,255);
  363.       textSize (20);
  364.       text ("Skott kvar: "+(10-missileCounter),0.45*windowWidth,30);
  365.      
  366.       if ((pl1Home==true)) {
  367.             fill (255,255,255);
  368.             textSize (drawScale*10);           
  369.             if ((fromX(aimX)-pl1x)>0) {
  370.                   text (""+int(atan((fromY(aimY)-pl1y)/(fromX(aimX)-pl1x))*180/3.14),windowWidth*0.833,windowHeight*0.94);
  371.             } else {
  372.                   text ("-",windowWidth*0.833,windowHeight*0.94);
  373.             }
  374.      
  375.             fill (255,255,255);
  376.             textSize (drawScale*10);
  377.             text (""+int(distance(pl1x,pl1y,fromX(aimX),fromY(aimY))),windowWidth*0.130,windowHeight*0.94);
  378.      
  379.       }
  380.      
  381.       if (pl2Home==true) {
  382.             fill (255,255,255);
  383.             textSize (drawScale*10);
  384.             text (""+int(atan((fromY(aimY)-pl2y)/(fromX(aimX)-pl2x))*180/3.14),windowWidth*0.833,windowHeight*0.94);
  385.            
  386.             fill (255,255,255);
  387.             textSize (drawScale*10);
  388.             text (""+int(distance(pl2x,pl2y,fromX(aimX),fromY(aimY))),windowWidth*0.130,windowHeight*0.94);
  389.       }
  390.  
  391.      
  392.       if ((pl1Home==true)||(pl2Home==true)){
  393.             image(launchButton,windowWidth-220*drawScale,windowHeight-20*drawScale,80*drawScale,40*drawScale);
  394.             image(plusButton,windowWidth-20*drawScale,windowHeight-20*drawScale,40*drawScale,40*drawScale);
  395.             image(minusButton,windowWidth-110*drawScale,windowHeight-20*drawScale,40*drawScale,40*drawScale);
  396.             image(plusButton,windowWidth-332*drawScale,windowHeight-20*drawScale,40*drawScale,40*drawScale);
  397.             image(minusButton,windowWidth-422*drawScale,windowHeight-20*drawScale,40*drawScale,40*drawScale);
  398.       }
  399. }
  400.  
  401.  
  402. function toX(x){
  403.                  
  404.       return (x-xPosLevel)*drawScale;
  405. }
  406.  
  407.  
  408. function fromX(xPixel){
  409.       return xPixel/drawScale + xPosLevel;
  410. }
  411.  
  412. function fromY(yPixel){
  413.      
  414.       return windowHeight/drawScale - yPixel / drawScale + yPosLevel;
  415. }
  416.  
  417. function changeAngle (x,y,dv){
  418.       var dX;
  419.       var dY;
  420.       var v;
  421.       var l;
  422.       dX=aimX-x;
  423.       dY=aimY-y;
  424.       l=sqrt(dX*dX+dY*dY);
  425.       v=atan(dY/dX);
  426.       v=v+dv;
  427.       aimY=y+l*sin(v);
  428.       aimX=x+l*cos(v);
  429. }
  430.  
  431. function changeSpeed (x,y,ds){
  432.       var dX;
  433.       var dY;
  434.       var v;
  435.       var l;
  436.       dX=aimX-x;
  437.       dY=aimY-y;
  438.       l=sqrt(dX*dX+dY*dY);
  439.       v=ata//HjƤlpfunktion: Ć–versƤtt Y koordinat i spelet till Y koordinat pĆ� skƤrmen
  440. –versƤtt Y koordinat i spelet till Y koordinat pĆ� skƤrmen
  441. function toY(y)
  442. {
  443.       return windowHeight - ((y-yPosLevel)*drawScale);
  444. }
  445.  
  446. function pressedButton(centerX,centerY,width,height)
  447. {
  448.       if ((pressedX<centerX+width/2)&&(pressedX>centerX-width/2)&&(pressedY<centerY+height/2)&&(pressedY>centerY-height/2)) {
  449.             return true;
  450.       } else {
  451.             return false;
  452.       }
  453. }    
  454.      
  455.  
  456. function distance2(xb,yb,x1,y1){
  457.         return (x1-xb)*(x1-xb)+(y1-yb)*(y1-yb);
  458. }
  459.  
  460. function distance(xb,yb,x1,y1){
  461.         return sqrt((x1-xb)*(x1-xb)+(y1-yb)*(y1-yb));
  462. }
  463.  
  464. function fire (){
  465.       var aimDX=fromX(aimX)-xPos;
  466.       var aimDY=fromY(aimY)-yPos;
  467.       var aimD=sqrt(aimDX*aimDX+aimDY*aimDY);
  468.       if (aimD>2) {
  469.             aimD=2;
  470.       }
  471.       var k=maxSpeed*aimD/100;
  472.       vx=aimDX*k;
  473.       vy=aimDY*k;
  474. }
  475.  
  476. function updateMissile () {
  477.       var ax=0;
  478.       var ay=0;
  479.       for (var index=0; index<planetArray.length; index++) {
  480.             var a=gravity*planetArray[index].m/distance2(xPos,yPos,planetArray[index].xPos,planetArray[index].yPos);
  481.             var k=a/distance(xPos,yPos,planetArray[index].xPos,planetArray[index].yPos);
  482.             ax=ax+(planetArray[index].xPos-xPos)*k;
  483.             ay=ay+(planetArray[index].yPos-yPos)*k;
  484.       }
  485.            
  486.       vx=vx+ax*deltaT;
  487.       vy=vy+ay*deltaT;
  488.       xPos//returns true if missile fails
  489. eltaT;
  490. }
  491.  
  492. function missileFail () {                       //returns true if missile fails
  493.       if ((xPos>MAXX)||(xPos<MINX)) {
  494.             return true;
  495.       }
  496.      
  497.       if ((yPos>MAXY)||(yPos<MINY)) {
  498.             return true;
  499.       }
  500.      
  501.       for (var index=0; index<planetArray.length; index++) {
  502.             if (distance(planetArray[index].xPos,planetArray[index].yPos,xPos,yPos)<planetArray[index].r) {
  503.                   return true;
  504.             }
  505.       }
  506.       return false;
  507. }
  508.  
  509. function newPlanets (numberOfPlanets) {
  510.       while (planetArray.length>0) {
  511.             planetArray.pop();
  512.       }
  513.      
  514.       for (var index=0; index<numberOfPlanets; index++) {
  515.             planetArray.push({xPos:random(0.2*MAXX,0.8*MAXX),yPos:random(0.2*MAXY,0.8*MAXY),r:random(5,30),m:random(0.5,5),red:random(0,255),green:random(0,255),blue:random(0,255)});
  516.             var planetOk=false;
  517.             while (planetOk==false) {
  518.                   planetOk=true;
  519.                   for (var i2=0; i2<index; i2++) {
  520.                         if (planetCollide (i2,index)==true) {
  521.                               planetOk=false;
  522.                         }
  523.                   }
  524.                   if (planetOk==false) {
  525.                         planetArray[index].xPos=random(0.2*MAXX,0.8*MAXX);
  526.                         planetArray[index].yPos=random(0.2*MAXY,0.8*MAXY);
  527.                         planetArray[index].r=r//returns true if planets overlap. Planet1=Ett index i planetArray.
  528.  {    //returns true if planets overlap. Planet1=Ett index i planetArray.
  529.       if (distance(planetArray[planet1].xPos,planetArray[planet1].yPos,planetArray[planet2].xPos,planetArray[planet2].yPos)<(planetArray[planet1].r+planetA//------------------------//
  530. tr//Lyssna p� tangentbordet:
  531. ;
  532. //------------------------//
  533. //Tangent tryckt:
  534. na p� tangentbordet:
  535.             //------------------------//
  536. //Tangent tryckt:
  537. document.addE//Tangent slƤppt:
  538. wn', function(event) {
  539.       keyCode = event.keyCode;
  540. });  
  541.  
  542. //Tangent slƤppt:
  543. doc//------------------------//
  544. ',//Lyssna p� musen:
  545. ke//------------------------//
  546. --------------------//
  547.             //Lyssna pĆ� musen:
  548.             //------------------------//
  549.            
  550. void mousePressed()
  551. {
  552.       if (mouseButton==LEFT) {
  553.             leftButtonPressed=true;
  554.       }
  555.       if (mouseButton==RIGHT) {
  556.             rightButtonPressed=true;
  557.       }
  558. }
  559.  
  560. v//------------------------//
  561. tt//Mobilen: Lyssna p� skƤrmen:
  562. ss//------------------------//
  563. -//SlƤpper skƤrmen
  564. ilen: Lyssna p� skƤrmen:
  565.             //------------------------//
  566.  
  567. //SlƤpper skƤrmen
  568. document.addEventListener('touc//Kƶrs om det inte finns n�got finger kvar som trycker
  569. {
  570.             screenPressed=false;                                        ///Trycker pĆ� skƤrmen
  571. nns n�got finger kvar som trycker
  572.       }    
  573.       e.preventDefault();
  574. });  
  575.  
  576. //Trycker p� skƤrmen
  577. document.addEventListener('touchstart', function(event) {
  578.       var x=parseInt(event.changedTouches[0].clientX);
  579.       var y=parseInt(event.changed//Flyttar finger
  580. Y);
  581.  
  582.       screenX = x;
  583.       screenY = y;
  584.       screenPressed=true;
  585.       e.preventDefault();
  586.  
  587. });  
  588. //Flyttar finger
  589. document.addEventListener('touchmove', function(event) {
  590.       var x=parseInt(event.changedTouches[0].clientX);
  591.       var y

Raw Paste


Login or Register to edit or fork this paste. It's free.