• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Kod do oceny

0 głosów
398 wizyt
pytanie zadane 4 sierpnia 2017 w JavaScript przez turtelian Obywatel (1,760 p.)

Witam skonczyłem prostą gierke w canvas, postanowilem podzielic sie kodem zeby zapytac co mozna tutaj ulepszyć.
 

<!DOCTYPE html>
<html lang="">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="style.css" rel="stylesheet">
    <title>beniz gra w JS</title>
</head>

<body>
    <canvas>
     </canvas>
    <script>
    const canvas= document.querySelector('canvas');
    const ctx= canvas.getContext('2d');
        canvas.width=1000;
        canvas.height=500;
        const cw = canvas.width;
        const ch = canvas.height;
        const ballSize=20;
        let ballY=ch/2-ballSize/2;
        let ballX=cw/2-ballSize/2;
        const rocketHeight=100;
        const rocketWidth=20;
        const playerX=70;
        const aiX=910;
        let playerY=200;
        let aiY=200;
        const lineWidth=6;
        const lineHeight=16;
        let ballSpeedX=7;
        let ballSpeedY=3;
        function ai(){
             if(aiY>=ch-rocketHeight){
                aiY=ch-rocketHeight;
            }
            if(aiY<=0){
                aiY=0;
            }//if zeby paletka nie wychodzila za boisko
        
            ctx.fillStyle='green';
            ctx.fillRect(aiX,aiY,rocketWidth,rocketHeight);
           
        }
        function aiCrash(){
            aiY=ballY-150;
            //nie dziala bo ball() jest wczesniej itrzeba zrobic crash balla(juz zrobione)
             if(aiY>=ch-rocketHeight){
                aiY=ch-rocketHeight;
            }
            if(aiY<=0){
                aiY=0;
            }//if zeby paletka nie wychodzila za boisko
        
            ctx.fillStyle='green';
            ctx.fillRect(aiX,aiY,rocketWidth,rocketHeight);
           
        }
        function player(){
            ctx.fillStyle='yellow';
            ctx.fillRect(playerX,playerY,rocketWidth,rocketHeight);
            
            
        }
         function ball(){
             ctx.fillStyle ='white';
        ctx.fillRect(ballX,ballY,ballSize,ballSize);
             ballX+=ballSpeedX;
             ballY+=ballSpeedY;
             aiY=ballY;// dla niepokonanego ai
             if(ballY<=0||ballY+ballSize>=ch){
                ballSpeedY=-ballSpeedY;
                }
             if(ballX<=0){
                 
                ballSpeedX=-ballSpeedX;
                 alert("przegrales");
                }
             if(ballX+ballSize>=cw){
                ballSpeedX=-ballSpeedX;
                 alert("wygrales");
                 
                }
             if(ballX<=playerX+rocketWidth && ballY>playerY && ballY<playerY+rocketHeight){
                ballSpeedX=-ballSpeedX;// odbicie od paletki playera
                }
             if(ballX>=aiX-rocketWidth && ballY>=aiY && ballY<=aiY+rocketHeight){
                ballSpeedX=-ballSpeedX; // odbicie od plaetki ai 
                }
            
         }
        
           function ballCrash(){
             ctx.fillStyle ='white';
        ctx.fillRect(ballX,ballY,ballSize,ballSize);
             ballX+=ballSpeedX;
             ballY+=ballSpeedY;
             if(ballY<=0||ballY+ballSize>=ch){
                ballSpeedY=-ballSpeedY;
                }
             if(ballX<=0){
                ballSpeedX=-ballSpeedX;
                 alert("przegrales");
                 location.reload(true);
                }
             if(ballX+ballSize>=cw){
                ballSpeedX=-ballSpeedX;
                 alert("wygrales");
                 location.reload(true);
                }
             if(ballX<=playerX+rocketWidth && ballY>playerY && ballY<playerY+rocketHeight){
                ballSpeedX=-ballSpeedX;// odbicie od paletki playera
                }
             if(ballX>=aiX-rocketWidth && ballY>=aiY && ballY<=aiY+rocketHeight){
                ballSpeedX=-ballSpeedX; // odbicie od plaetki ai 
                }
            
         }
        function table(){
            ctx.fillStyle= 'black';
            ctx.fillRect(0,0,cw,ch);
            for(let linePosition =20; linePosition<ch; linePosition +=30)
            {
                ctx.fillStyle='gray';
                ctx.fillRect(cw/2-lineWidth/2,linePosition,lineWidth,lineHeight);
            }
        }
        
         topCanvas= canvas.offsetTop;
        function playerPosition(event){
          playerY= event.clientY-topCanvas-rocketHeight/2;  
            if(playerY>=ch-rocketHeight){
                playerY=ch-rocketHeight;
            }
            if(playerY<=0){
                playerY=0;
            }
        }
        addEventListener("mousemove",playerPosition)
        var czasZmianyFunkcji= 1200;
        function game(){
            table()
            ball()
            player()
            ai() 
            if (counter===czasZmianyFunkcji){
                clearInterval(setIntervalID);
                }
           counter++;
            if(counter>czasZmianyFunkcji) {
                setInterval(game1,1000/60)
                } 
        }
         
        function game1(){
            table()
            ballCrash()
            player()
            aiCrash() 
        }
        var counter=0;
       var setIntervalID = setInterval(game,1000/60);
       
        
        
    </script>
</body>
</html>

 

1 odpowiedź

0 głosów
odpowiedź 4 sierpnia 2017 przez damianeqe Gaduła (4,380 p.)
Myślę że uczciwiej by było gdybyś dodał że pisałeś tą gierkę z tutoriala.
1
komentarz 4 sierpnia 2017 przez czujek22 Dyskutant (7,670 p.)
Ważne, że skończył sam bo tutorial zatrzymał się na 5/8 odcinku :D
komentarz 4 sierpnia 2017 przez turtelian Obywatel (1,760 p.)
edycja 4 sierpnia 2017 przez turtelian
tak tutorial obejmowal narysowanie tła i kolizje piłki  z sciankami

ja sam zrobilem  sterowanie ai, to że ai może przegrać( a to zajeło dluzej niz reszta kodu), wyświetlanie informacji win/lose, oraz powrót do poczatku po wygranej/przegranej, a i jeszcze kolizje piłki z paletkami.
Czyli większość gry, bo tło jak cie to boli moge zmienić kolor tak samo paletek, bo podejrzewam że gra pong nie jest opatentowana przez nikogo ;)

https://www.youtube.com/watch?v=JNf9dOXiDuA
Jak widać w tutorialu nie ma wiekszosci elementó które u mnie są zrobione(brak podstaw jak odbijanei od paletki czy wygrana po dotknieciu prawej scianki itp)

W skrocie wymiary wziete z tutoriala, ruch pilki tez reszte robielm sam.
Więc uczciwiej by było jakbyś napisał że tylko podstawa była pisana z tutorialem.

Podobne pytania

0 głosów
3 odpowiedzi 436 wizyt
pytanie zadane 23 lipca 2017 w Rozwój zawodowy, nauka, praca przez rafal1997 Gaduła (3,180 p.)
0 głosów
0 odpowiedzi 502 wizyt
pytanie zadane 23 lutego 2017 w C# przez marcin99b Szeryf (86,310 p.)
0 głosów
1 odpowiedź 443 wizyt

93,729 zapytań

142,668 odpowiedzi

323,283 komentarzy

63,288 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...