라라리라

2023.10.30~2023.11.01 / Step 8 [DOM_canvas] - 코딩 79~81 일차 본문

코딩/2023 JavaScript DOM

2023.10.30~2023.11.01 / Step 8 [DOM_canvas] - 코딩 79~81 일차

헤실 2023. 11. 1. 18:57

grid.html

 

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
   
</head>
<body>
    <canvas id="myCanvas" width="650" height="650" style="border: 1px solid black;"></canvas>
   <script src="grid.js"></script>
</body>
</html>

 


grid.js

 

/*
    오목판(그리드) 만들기(10 * 10)
*/

function drawGrid(){
    ctx.beginPath();
   
    let originX = 100;  // 시작위치
    let originY = 100;  // 시작위치
    let lineGap = 50;   // 그리드 간격
    let lineCount = 10; // 선 개수 조절

    // 세로 그리기
    for(let i = 0; i < lineCount; i++){ // for(i = 0; i < 10; i++)
        let startX = originX + lineGap * i; //100 + 50 *  i //=> 100 / 150/ 200/ 250......
        let startY = originY; //100;
        let endX = startX; //100 + 50 * i;
        let endY = lineGap * (lineCount - 1) + originY; // 50 * 9 + 100 ==> endY = 550;
        ctx.moveTo(startX, startY); //ctx.moveTo(100 + 50 * i , 100)
        ctx.lineTo(endX, endY);  // ctx.lineTo(100 + 50 * i, 50 * 9 + 100)
        ctx.stroke();        
    } //세로그리기에서 x 값은 변하지않음(startX와 endX는 동일해야함.)
    //세로그리기에서 Y값은

    // 가로 그리기
    for(let i = 0; i < lineCount;  i++){
        let startY = originY + lineGap * i;
        let startX = originX;
        let endY = startY;
        let endX = lineGap * (lineCount - 1) + originX;
        ctx.moveTo(startX, startY);
        ctx.lineTo(endX, endY);
        ctx.stroke();        
    }
   
    ctx.closePath();
}

//-------------------------------------------------
let canvas = document.getElementById("myCanvas");
let ctx = canvas.getContext("2d");
drawGrid();

 


grid테스트.html

 

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <canvas id="myCanvas"  width="1000px" height="1000px" style="border: 1px solid black;"></canvas>
    <script src="grid테스트.js"></script>
</body>
</html>

 


grid테스트.js

 


function gridtest(){
    let originX = 100;
    let originY = 100;
    let lineCount = 10;
    let linegap = 50;

    ctx.beginPath();
   
    for(let i = 0; i < lineCount; i++){ //세로그리기
        ctx.moveTo(originX + linegap * i, originY);
        ctx.lineTo(originX + linegap * i, originY + (lineCount - 1) * linegap );
        ctx.stroke();
    }
   
    for(let i = 0; i < lineCount; i++){ //가로그리기
        ctx.moveTo(originX, originY + linegap * i);
        ctx.lineTo(originX + (lineCount - 1) * linegap ,originY + linegap * i);
        ctx.stroke();
    }

    for(let i = 1; i < lineCount; i++){ //대각선그리기
        ctx.moveTo(originX + linegap * i , originY)
        ctx.lineTo(originX, originY + linegap * i);
        ctx.stroke();
        ctx.moveTo((originX + (lineCount - 1) * linegap) - i * linegap , originY + (lineCount - 1) * linegap )
        ctx.lineTo((originX + (lineCount - 1) * linegap), originY + (lineCount - 1) * linegap  - i * linegap)
        ctx.stroke();
    }
    for(let i = 1; i < lineCount; i++){ //대각선그리기2
        ctx.moveTo((originX + (lineCount - 1) * linegap) - i * linegap, originY);
        ctx.lineTo(originX + (lineCount - 1) * linegap , originY + linegap * i);
        ctx.stroke();
        ctx.moveTo(originX + linegap * i , originY + (lineCount - 1) * linegap);
        ctx.lineTo(originX, originY + (lineCount - 1) * linegap - i * linegap);
        ctx.stroke();
    }


    ctx.closePath();
}
//======================================================

let myCanvas = document.querySelector(`#myCanvas`);
let ctx = myCanvas.getContext("2d");
gridtest();

 


rect_test.html

 

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <canvas id="myCanvas" width="600px" height="600px" style="border: 1px solid black;"></canvas>
    <script src="rect_text.js"></script>
</body>
</html>

 


rect_text.js

 

function drawrect(){
    ctx.beginPath();
    ctx.rect(80,80,80,80);
    ctx.stroke();
    ctx.closePath();

    ctx.beginPath();
    ctx.rect(180,180,100,100);
    ctx.fillStyle = "red";
    ctx.fill();

    ctx.closePath();
}

//=============================
let rect = document.querySelector(`#myCanvas`);
let ctx = rect.getContext("2d");
drawrect();

 


rect.html

 

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <canvas id="myCanvas" width="800" height="600" style="border: 1px solid black;">
    </canvas>
    <script src="rect.js"></script>
</body>
</html>

 


rect.js

 

function drawRect(){
    /*
        네모그리기
        ctx.rect(시작x , 시작y , 가로크기 , 세로크기)
       
        색상 저장
        ctx.fillStyle = "컬러"

        색상채워넣기
        ctx.fill();      
    */
   
    ctx.beginPath();

    ctx.rect(30, 30, 70, 50);
    ctx.stroke();

    ctx.closePath();

    //----------------------------------

    ctx.beginPath();

    ctx.rect(200, 200, 100, 100);
    ctx.fillStyle = "red";
    ctx.fill();

    ctx.closePath();
}

//-------------------------------------------------
let canvas = document.getElementById("myCanvas");
let ctx = canvas.getContext("2d");
drawRect();

 


rect과제.html

 

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <canvas id="myCanvas" width="600px" height="600px" style="border: 1px solid black;"></canvas>
    <script src="rect과제.js"></script>
</body>
</html>

 


rect과제.js

 

function drawrect(){
    let curY = 100;
    let curX = 100;
    let size = 40;
    cnt.beginPath();
    for(let i = 0; i < size * 10; i = i + size){
        for(let j = 0; j < size * 10; j = j + size){
            cnt.rect(curX + j, curY + i, size, size);
            cnt.fillStyle = "red";
            cnt.fill();
            cnt.stroke();
        }
    }
    cnt.closePath();
}
//================]
let rect = document.querySelector(`#myCanvas`);
let cnt = rect.getContext("2d");
drawrect();

 


arc_test.html

 

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <canvas id="myCanvas" width="700px" height="700px" style="border: 1px solid black;"></canvas>
    <script src="arc_test.js"></script>
</body>
</html>

 


arc_test.js

 

function drawarc(){
    cnt.beginPath();
    cnt.arc(100, 100, 50, 0, Math.PI/2, false);
    cnt.stroke();
    cnt.closePath();
   
    cnt.beginPath();
    cnt.arc(200, 100, 50, 0, Math.PI);
    cnt.stroke();
    cnt.closePath();

    cnt.beginPath();
    cnt.arc(300, 100, 50,  Math.PI/2,  Math.PI,true);
    cnt.stroke();
    cnt.closePath();
   
    cnt.beginPath();
    cnt.arc(400, 100, 50,  0,  2*Math.PI,true);
    cnt.stroke();
    cnt.closePath();

    cnt.beginPath();
    cnt.arc(300,300, 80, 1.5707963268, 2* Math.PI);
    cnt.fillStyle = "lightGreen";
    cnt.fill();
    cnt.stroke();
    cnt.closePath();
}

//====================================================

let arc = document.querySelector(`#myCanvas`);
let cnt = arc.getContext(`2d`);
drawarc();

 


arc.html

 

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <canvas id="myCanvas" width="800" height="600" style="border: 1px solid black;">
    </canvas>
    <script src="arc.js"></script>
</body>
</html>

 


arc.js

 

function drawArc(){

    /*
        ctx.arc(x, y, 반지름, 시작각도, 마지막각도)
    */
    console.log(Math.PI);
    ctx.beginPath();
    ctx.arc(100, 100, 50, 0, 2*Math.PI);
    ctx.stroke();
    ctx.closePath();

    ctx.beginPath();
    ctx.arc(300, 300, 30, 0 , Math.PI);
    ctx.fillStyle="red"
    ctx.fill();
    ctx.closePath();
}

//-------------------------------------------------
let canvas = document.getElementById("myCanvas");
let ctx = canvas.getContext("2d");
drawArc();

 


text_test.html

 

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <canvas id="myCanvas" width="600px" height="600px" style="border: 1px solid black;"></canvas>
    <script src="text_test.js"></script>
</body>
</html>

 

 


text_test.js

 

function drawText(){
    cnt.font = "48px serif"
    cnt.fillStyle = "blue"
    cnt.fillText("Hello World!", 10, 50)

    cnt.font = "48px serif"
    cnt.strokeText("Hello World!", 10, 150)

    cnt.font = "48px pira"
    cnt.fillStyle = "red"
    cnt.fillText("Hellow World!", 10 , 250)
    cnt.strokeText("Hellow World!", 10 , 250)
}
//===========================================================
let testtext = document.querySelector(`#myCanvas`);
let cnt = testtext.getContext(`2d`);
drawText();

 


text.html

 

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <canvas id="myCanvas" width="800" height="600" style="border: 1px solid black;">
    </canvas>
    <script src="text.js"></script>
</body>
</html>

<!--
-->

 


text.js

 

function drawText(){

    ctx.font = '48px serif';
    ctx.fillStyle = "blue";                     // 텍스트 색상
    ctx.fillText('Hello world', 10, 50);        // 외곽선X    숫자 = x Y 값

    ctx.font = '48px serif';
    ctx.strokeText('Hello world', 10, 150);     // 외곽선O

    ctx.font ="40px Fira";
    ctx.strokeText('Hello world', 10, 250);
    ctx.fillStyle = "rgb(250, 100, 100)";       // 텍스트 내부에 색칠
    ctx.fillText('Hello world', 10, 250);
}

//-------------------------------------------------
let canvas = document.getElementById("myCanvas");
let ctx = canvas.getContext("2d");
drawText();