TIL-no16. Javascript로 벽돌깨기 게임 만들기(1)

sanghun Lee·2020년 6월 28일
0

Today I Learned

목록 보기
14/66

포스팅에 앞서 오늘 충격적인 영상을 발견하여 공유링크 남기고 시작합니다.
자바스크립트 공부를 시작할때 이것만한게 없을 것 같습니다 ..
https://youtu.be/Ukg_U3CnJWI

벽돌깨기 게임은 전적으로MDN 의 힘을 빌렸습니다.(총 10편입니다)

완성본:https://sanghunlee-711.github.io/wecode1stweek/PROJECTS.html

1. 초기 그리기

우선 html 에 캔버스를 불러와 간단한 id 지정 뒤 js에서 Selector를 통하여 불러주며 변수를 지정했습니다.

var canvas = document.getElementById("myCanvas");//캔버스 불러옴
var ctx = canvas.getContext("2d");// 캔버스 2d로 선언

*참고

ctx.beginPath(); // 시작을 알리는것.
ctx.rect(20, 40, 50, 50); // 직사각형 정의. 앞의 두개는 좌상단 부터의 좌표,, 나머지 두개는 각각 너비와 높이
ctx.fillStyle ="#FF0000"; //얘는 아래의 fill method에 칠해질 색을 말해줌.
ctx.fill();
ctx.closePath();// 끝을 알림

그리고 css 로 간단한 색 설정 뒤 공을 그렸습니다.
오늘 배운것중 가장 기억에 남는것이(다른건 어려우니까) 해당 부분이었는데 캔버스 요소를 js 로 어떻게 사용하는지 알게된 것 같습니다.

2. 공그리기

공도 유사한 방식으로 rect가 아닌 arc를 이용했습니다.

function drawBall() { 
  ctx.beginPath();
  ctx.arc(x, y, ballRadius, 0, Math.PI*2); 
  ctx.fillStyle = "red";
  ctx.fill();
  ctx.closePath();
}

PI 는 파이값(3.14xxx)이며 Math object를 이용하여 기입되었습니다.

3. 벽돌그리기

var brickColumnCount = 3;
var bricks = [];
for(var c=0; c<brickColumnCount; c++) {
  bricks[c] = [];
  for(var r=0; r<brickRowCount; r++) {
    bricks[c][r] = { x: 0, y: 0, status: 1 };
  }
}  

brick 이라는 변수로 array를 만들고
for 문을 통하여 벽돌의 갯수를 3*5로 만들었습니다. status는 추후 벽돌의 깨짐현상을 만들기 위해 사용되었습니다.

4. 키조작

document.addEventListener("keydown", keyDownHandler, false);
document.addEventListener("keyup", keyUpHandler, false);
document.addEventListener("mousemove", mouseMoveHandler, false);
 
function mouseMoveHandler(e){
    var relativeX = e.clientX - canvas.offsetLeft;
    if(relativeX > 0 && relativeX < canvas.width){
        paddleX = relativeX - paddleWidth/2;
    }
}


function keyDownHandler(e) {
    if(e.key == "Right" || e.key == "ArrowRight") {
        rightPressed = true;
    }
    else if(e.key == "Left" || e.key == "ArrowLeft") {
        leftPressed = true;
    }
}  //e 변수로 표시된 이벤트 파라미터를 이용 키를 누르면 true 놓으면 false로 표시!

function keyUpHandler(e) {
    if(e.key == "Right" || e.key == "ArrowRight") {
        rightPressed = false;
    }
    else if(e.key == "Left" || e.key == "ArrowLeft") {
        leftPressed = false;
    } //keyCode == 37은 왼쪽 방향키 39는 오른쪽 방향키, 
}

addeventlistener를 통하여 각 움직임마다 이벤트를 localstorage로 옮겨주는 작업을 했으며 function설정시 변수 e를통해 각 key값을 설정받았습니다. 이부분에서 우측좌측 자유롭게 조절이 되지않고 한번 paddle이 오른쪽으로 간뒤로 왼쪽으로 오지 않는 오류가 났었는데 문제는 괄호하나 잘못친걸 찾으며 해결되었습니다.

profile
알고리즘 풀이를 담은 블로그입니다.

0개의 댓글