<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>illie_3.log</title>
        <link>https://velog.io/</link>
        <description>코딩과 씨름 한 판!</description>
        <lastBuildDate>Sun, 06 Feb 2022 10:41:24 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>illie_3.log</title>
            <url>https://images.velog.io/images/illie_3/profile/8e979e59-56d3-47ea-a1d6-7a077d1bf551/alexandra-luniel-86T5I7ZtjmM-unsplash.jpg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. illie_3.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/illie_3" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[방향 바꾸기(top)]]></title>
            <link>https://velog.io/@illie_3/tetris5</link>
            <guid>https://velog.io/@illie_3/tetris5</guid>
            <pubDate>Sun, 06 Feb 2022 10:41:24 GMT</pubDate>
            <description><![CDATA[<h1 id="테트리스-강좌--링크텍스트">테트리스 강좌 : <a href="https://youtu.be/1lNy2mhvLFk">링크텍스트</a></h1>
<h2 id="위-아래-방향-키를-눌렀을-때-이벤트가-발생하도록-하자">위 아래 방향 키를 눌렀을 때, 이벤트가 발생하도록 하자</h2>
<pre><code>
document.addEventListener(&quot;keydown&quot;, e =&gt; {
    switch (e.keyCode) {
        case 39:
            moveBlock(&quot;left&quot;, 1);
            break;
        case 37:
            moveBlock(&quot;left&quot;, -1)
            break;
        case 40:
            moveBlock(&quot;top&quot;, 1)
            break;
        case 38:
            changeDirection();
            break
        default:
            break;
    }
    // console.log(e)
})</code></pre><p>case 40: moveBlock(&quot;top&quot;, 1); 로 밑으로 눌렀을 때 밑으로 이동하도록 해주고,
case 38 : changeDirection(); 위로 눌렀을 때에는 changeDirection이라는 함수를 실행시켜 주자!</p>
<h2 id="changedirection-함수를-정의하자">changeDirection 함수를 정의하자!</h2>
<pre><code>function changeDirection(){
    const direction = tempMovingItem.direction;
    direction === 3 ? tempMovingItem.direction = 0 : tempMovingItem.direction += 1;
    renderBlocks();
}</code></pre><p>삼항연산자가 이토록 반가울 수가 없다.
진짜 기나 긴<del>~</del> if를 이렇게 짧게 해준다니...!</p>
<p>시계방향 혹은 반 시계방향으로 회전을 할 텐데, 그 방향은 4 방향이 되고,
3번을 누르게 되면 다시 원상태로 되돌려서 다시 실행하도록 하여
무한반복을 할 수 있게 해준다!</p>
<h4 id="아차차-이전에-생략했던-tree는-다시-빈-칸을-다음과-같이-채웠다">아차차, 이전에 생략했던 tree는 다시 빈 칸을 다음과 같이 채웠다.</h4>
<pre><code>const BLOCKS = {
    tree: [
        [[2, 1], [0, 1], [1, 0], [1, 1]],
        [[1, 2], [0, 1], [1, 0], [1, 1]],
        [[1, 2], [0, 1], [2, 1], [1, 1]],
        [[2, 1], [1, 2], [1, 0], [1, 1]]
    ]
}</code></pre><p>사실 배열 안의 배열은 순서가 중요한 게 아니라 어디에 색칠되느냐갸 중요해서 
첫 번째 배열을 기준으로 최소한으로 위치만 바꿔주었다!</p>
<hr>
<p>이상 위 아래 방향키였다</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[좌우 방향키 넣기]]></title>
            <link>https://velog.io/@illie_3/tetris4</link>
            <guid>https://velog.io/@illie_3/tetris4</guid>
            <pubDate>Sat, 29 Jan 2022 02:49:49 GMT</pubDate>
            <description><![CDATA[<h1 id="테트리스-강좌--링크텍스트">테트리스 강좌 : <a href="https://youtu.be/1lNy2mhvLFk">링크텍스트</a></h1>
<h3 id="자-지난-시간의-어려움은-잠시-뒤로-하고-방향키를-넣어보자">자, 지난 시간의 어려움은 잠시 뒤로 하고, 방향키를 넣어보자</h3>
<p>일단 셋팅을 먼저 하겠다
<img src="https://images.velog.io/images/illie_3/post/dd669b95-be35-4d03-ae8a-b6a89e34856c/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202022-01-29%20%E1%84%8B%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%AB%2011.17.39.png" alt=""></p>
<h3 id="블럭을-중간으로-옮긴건-일단-생략">블럭을 중간으로 옮긴건 일단 생략!</h3>
<p>(left + 3)</p>
<h3 id="여기서-검사를-누르고-키보드를-좌우위아래로-눌러보자">여기서 검사를 누르고, 키보드를 좌우위아래로 눌러보자</h3>
<p>그러면 keycode라는게 나오는 데, 그것이 방향 키가 가진 설정값이다</p>
<p>일단 우리가 필요한 것은 좌우방향키이기 때문에 그것을 잠시 노트에 적어놓자</p>
<p>그 다음...</p>
<h2 id="방향키를-눌렀을-때-이벤트가-발생하도록-해보자">방향키를 눌렀을 때, 이벤트가 발생하도록 해보자!</h2>
<pre><code>document.addEventListener(&quot;keydown&quot;, e =&gt; {
    switch (e.keyCode) {
        case 39:
            moveBlock(&quot;left&quot;, 1);
            break;
        case 37:
            moveBlock(&quot;left&quot;, -1)
        default:
            break;
    }
    console.log(e)
})</code></pre><p>자 일단 addEventListener을 하고 &quot;keydown&quot; 이벤트에 함수를 넣어주자!</p>
<p>왼쪽 방향으로 눌렀을 때 키코드는 39로, 블럭을 왼쪽으로 1칸 옮기고
오른쪽 방향으로 눌렀을 때 키코드는 37로, 블럭을 왼쪽으로 -1칸 옮기자!</p>
<p>이 다음, moveBlock함수를 만들어 주자.</p>
<h2 id="어떻게-블럭을-움직일꽈">어떻게 블럭을 움직일꽈?</h2>
<pre><code>function moveBlock(moveType, amount){
    tempMovingItem[moveType] += amount;
    renderBlocks()</code></pre><p>moveBlock이란 함수를 만들었다
여기서 moveType이란 tempMovingItem의 값들이고,
그걸 amount에 쌓는 것이다.</p>
<p>이걸 renderBlocks에 실행을 시키면...!</p>
<p><img src="https://images.velog.io/images/illie_3/post/c51044e5-3935-4259-be23-10eb85d72aac/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202022-01-29%20%E1%84%8B%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%AB%2011.10.04.png" alt=""></p>
<p>ㅋㅋㅋㅋㅋㅋ 색깔이 자꾸자꾸 번짐
위 아래는 아직 설정을 안해서 안움직이지만, 왼쪽 오른쪽으로 계속 움직인다</p>
<p>그리고 또, 트리모양 블럭이 li 밖으로 안나가는 거에 조금 뿌듯함 느끼는 중ㅋㅋ</p>
<p>하하 다음에는 어떻게 안버지는지 알아와야지!</p>
<h4 id="잠시-사담을하자면">잠시 사담을하자면...</h4>
<p>모르는 부분을 깊게 파는 것 보단, 다양하게 자주 접하는 거 좋을 것 같아 일계속 테트리스 만들기를 진행하겠습니다
오랜 시간 공무원 준비를 해본 결과, 저는 저 방법이 맞는 사람이고,
또 저 방법이 파지에 좋기 때문입니다 </p>
<h4 id="이상-여기까지">이상 여기까지~</h4>
]]></description>
        </item>
        <item>
            <title><![CDATA[테트리스 기본작업]]></title>
            <link>https://velog.io/@illie_3/tetris3</link>
            <guid>https://velog.io/@illie_3/tetris3</guid>
            <pubDate>Fri, 28 Jan 2022 14:14:16 GMT</pubDate>
            <description><![CDATA[<h1 id="테트리스-강좌--링크텍스트">테트리스 강좌 : <a href="https://youtu.be/1lNy2mhvLFk">링크텍스트</a></h1>
<h2 id="기초다지기가-가장-어렵다">기초다지기가 가장 어렵다</h2>
<h3 id="왜냐허면-기초를-다져야-그-위에-뭐든-쌓을-수-있기-때문이다">왜냐허면... 기초를 다져야 그 위에 뭐든 쌓을 수 있기 때문이다...</h3>
<p>허허허 그래서 내가 이렇게 어렵나 보다
이해하려고 세 번째 같은 영상을 보고 있다</p>
<h4 id="그러니까-아니-그니까">그러니까... 아니 그니까...</h4>
<p>선생님께서 설명을 잘해주시는데 이것들이 내 머리 속에 들어오질 않는다 ㅜㅠ</p>
<p>테트리스 블럭을 x,y좌표로 나타내고 또 자주 사용하게 될 변수 선언하고 뭐 이 정도만 했는데...</p>
<p>근데 막상 이해하려고 하니 어렵다... 선생님이 말씀하시는거 하나하나 적어놓고 봐도 아리까리 한걸...?</p>
<p>배움이 부족하기 때문이다 더 배우자 정진하자.</p>
<h3 id="분석을-해-보겠습니다">분석을 해 보겠습니다.</h3>
<h4 id="첫-번째-자주-사용하게-될-변수를-선언하겠습니다">첫 번째, 자주 사용하게 될 변수를 선언하겠습니다.</h4>
<pre><code>// variables
let score = 0;
let duration = 500;
let downInterval;
let tempMovingItem;</code></pre><p>점수, 블럭이 떨어지는 시간 등등이다</p>
<p>여기서 tempMovingItem은 movingItem을 하기 전에, 블럭을 잠시 담아두는 용도이다.</p>
<p>밑에 movingItem이 나올건데,
movingItem은 실질적으로 다음 블럭의 타입과 좌표의 정보를 가지고 있는 변수이다.</p>
<h4 id="두-번째-블럭을-하나-만들자">두 번째, 블럭을 하나 만들자</h4>
<pre><code>const BLOCKS = {
    tree: [
    [[2,1],[0,1],[1,0],[1,1]],
    [],
    [],
    [],
    []
}</code></pre><p>나중에 따로 뺄거긴 하지만, 일단 설명을 위해 하나 만드셨다고 한다!
(ㅠㅠ 감사합니다)</p>
<h4 id="세-번째-위에서-본-movingitem">세 번째, 위에서 본 movingItem</h4>
<pre><code>const movingItem = {
    type: &quot;tree&quot;,
    direction: 0,
    top: 0,
    left: 0,
}</code></pre><p>실질적으로 다음 블록의 타입과 좌표의 정보를 가지고 있는 변수이다
type : 다들 알거고,,
direction : 좌우로 돌리는 키
top : 어디까지 내려가는지,
left : 좌우 값</p>
<h4 id="네-번째-블럭을-잘-아주-잘-옮기자">네 번째, 블럭을 잘... 아주 잘 옮기자?</h4>
<pre><code>function renderBlocks(){
    const { type, direction, top, left } = tempMovingItem;
    BLOCKS[type][direction].forEach(block=&gt;{
        const x = block[0];
        const y = block[1];
        const target = playground.childNodes[y].childNodes[0].childNodes[x];
        target.classList.add(type)
    })
}</code></pre><p>내가 원하는 곳에 블럭이 이동할 수 있도록, 
x축, y축 좌표 값을 분리하고 childNodes로 ul,li 값 얻는다</p>
<p>... 그렇다고 한다</p>
<h4 id="추가-movingitem">추가, ...movingItem</h4>
<pre><code>//functions
function init(){
    tempMovingItem = {...movingItem};
    for (let i = 0; i &lt; GAME_ROWS; i++) {
        prependNewLine()
    }
    renderBlocks()
}</code></pre><p>여기서 중요한 게 펼침연산자인데,
그 movingItem의 값을 변경하지 않고 복사해서 가져와서 이리저리 이동 값에 따라 변경시킨다고 한다</p>
<p>... 그렇다고 한다</p>
<p>더 많이 배워오겠다</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[그리드를 코딩으로 짜다(2)]]></title>
            <link>https://velog.io/@illie_3/tetris2</link>
            <guid>https://velog.io/@illie_3/tetris2</guid>
            <pubDate>Wed, 26 Jan 2022 14:29:11 GMT</pubDate>
            <description><![CDATA[<h1 id="테트리스-강좌--링크텍스트">테트리스 강좌 : <a href="https://youtu.be/1lNy2mhvLFk">링크텍스트</a></h1>
<h2 id="그리드로-짠-걸-함수에-넣어준다구요">그리드로 짠 걸 함수에 넣어준다구요?</h2>
<p>와 그리드 짜는 것도 겨우겨우 이해하면서 했는데
이걸 함수에 다시 넣는 과정에서 3번이나 먹통이 되었다</p>
<p>첫번째와 두번째는 내가 적은 코드 뭐가 틀렸는지 비교하면서 꼭 해야지! 틀린 부분 적어놨다가 다음에 안틀려야지! 라고 생각했었는데,</p>
<p>세 번이나 그리드가 없어지는 마법을 부리니 테트리스를 만들 실력이 안되나 보다 생각했다</p>
<h4 id="그리고는-잠시-접었다가-다시-시도">그리고는 잠시 접었다가 다시 시도...!</h4>
<h3 id="짠-세-번-빠꾸-먹고-네번째에-성공했습니다">짠 세 번 빠꾸 먹고 네번째에 성공했습니다~</h3>
<p>하 그래... 따라만 하는 과정인데 내가 잘못 받아썼지 내 실력과는 무관하지...휴!</p>
<h4 id="이제-분석을-시작해-볼꽈">이제 분석을 시작해 볼꽈...</h4>
<pre><code>// DOM
const playground = document.querySelector(&quot;.playground &gt; ul&quot;);

// Setting
const GAME_ROWS = 20;
const GAME_COLS = 10;


init()

//functions
function init(){
    for (let i = 0; i &lt; GAME_ROWS; i++) {
        prependNewLine()
    }
}



function prependNewLine() {
    const li = document.createElement(&quot;li&quot;);
    const ul = document.createElement(&quot;ul&quot;);
    for (let j = 0; j &lt; GAME_COLS; j++) {
        const matrix = document.createElement(&quot;li&quot;);
        ul.prepend(matrix);
    }
    li.prepend(ul)
    playground.prepend(li)
}</code></pre><p>먼저, DOM 구조를 잡고, 20줄과 10칸을 알아보기 쉽게 선언을 한 다음
처음에 렌더링이 되면 init()이 호출되도록 한다!</p>
<p>하하하하 여기까지 오기도 힘들었지만 그럼에도 앞으로 나아가봐야지...</p>
<p>다음은 테트리스 모양을 잡아갈 듯 하다</p>
<h4 id="초보-코더인-저에게-충고-혹은-틀린-부분을-가르쳐-주시는-것-모두-환영입니다">초보 코더인 저에게 충고 혹은 틀린 부분을 가르쳐 주시는 것 모두 환영입니다!</h4>
]]></description>
        </item>
        <item>
            <title><![CDATA[그리드를 코딩으로 짜다(1)]]></title>
            <link>https://velog.io/@illie_3/tetris1</link>
            <guid>https://velog.io/@illie_3/tetris1</guid>
            <pubDate>Tue, 25 Jan 2022 13:30:53 GMT</pubDate>
            <description><![CDATA[<h1 id="테트리스-강좌--링크텍스트">테트리스 강좌 : <a href="https://youtu.be/1lNy2mhvLFk">링크텍스트</a></h1>
<h2 id="그리드를-ulli로-짠다구요">그리드를 ul,li로 짠다구요?</h2>
<p>벌써부터 눈물이 앞을 가린다 ㅠㅠㅠㅠ</p>
<p>얼마전에 테이블을 자바스크립트 for문으로 짰는데 
이젠 그리드를 목록(ul,li)로 짜라니 ㅠㅠㅠㅠㅠㅠ 
(사실 조금은 신기해서 눈물 흘리면서 웃는 중)</p>
<pre><code>const playground = document.querySelector(&quot;.playground &gt; ul&quot;);

console.log(playground);

for (let i = 0; i &lt; 20; i++){
    const li = document.createElement(&quot;li&quot;); 
    const ul  = document.createElement(&quot;ul&quot;); 
    for (let j = 0; j &lt; 10; j++){
        const matrix =  document.createElement(&quot;li&quot;); 
        ul.prepend(matrix)
    }
    li.prepend(ul)
    playground.prepend(li)
}</code></pre><h3 id="prepend">prepend?</h3>
<h4 id="부모의-자식-요소로-추가되지만-앞으로-추가가-된다고-한다">부모의 자식 요소로 추가되지만 앞으로 추가가 된다고 한다</h4>
<p>테트리스 만들면서 먼저 접해보는군...</p>
<h3 id="해석해봅시다">해석해봅시다</h3>
<h4 id="댓글-환영-틀렸으면-꼭-말해주세요">댓글 환영 (틀렸으면 꼭 말해주세요!)</h4>
<p>자... 일단 ul 하나 만들어 놓았고 코드를 하나씩 보자...!</p>
<ol>
<li>playground 선언 (ul) </li>
<li>li 선언 (li) </li>
<li>ul 선언 (ul) </li>
<li>matrix 선언 (li) </li>
<li>matrix 앞에 ul 추가 : <em>ul &gt; matrix 10개</em></li>
<li>ul 앞에 li 추가 : <em>li 20개 &gt; ul &gt; matrix 10개</em></li>
<li>li 앞에 playground : _playground &gt; li 20개 &gt; ul &gt; matrix 10개 _</li>
</ol>
<p>그래서 총 200개의 작은 네모가 만들어졌다<img src="https://images.velog.io/images/illie_3/post/58e00182-155a-4b09-bf1c-89c2948473a3/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202022-01-25%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%2010.01.54.png" alt=""></p>
<h4 id="그림-크기는-어떻게-줄이죠">그림 크기는 어떻게 줄이죠...?</h4>
]]></description>
        </item>
        <item>
            <title><![CDATA[노트북 구입]]></title>
            <link>https://velog.io/@illie_3/Macbook</link>
            <guid>https://velog.io/@illie_3/Macbook</guid>
            <pubDate>Sun, 23 Jan 2022 01:35:47 GMT</pubDate>
            <description><![CDATA[<p>오랜 시험 준비를 뒤로하고, 개발자의 길로 들어서기로 했다.</p>
<p>정말 미련없이 돌아서서 그런지 몰라도 준비하는 과정이 일사천리였다.
(물론, 가족을 설득하는 일은 아직도 진행 중이다)</p>
<p>학원을 등록하고, 참고 서적을 찾고, 많은 것을 준비하다보니</p>
<h3 id="내가-노트북이-없더라">내가 노트북이 없더라</h3>
<h2 id="그래서-샀습니다-에어m1-영롱">그래서 샀습니다. 에어M1 (<del>영롱</del>)</h2>
<p>이것 저것 서핑해보니 m1이 넘사벽이라고 하고 또 모두들 입이 마르도록 극찬하고 있으니 제가 안사고 배기겠습니까 허허허(먼산)</p>
<p>물론 깡통모델이긴 한데, 스펙을 높이고자 하면 한 없이 높아지고,</p>
<p>일단 나의 재정상황에선 이만한 스펙을 뽑을 수 없었다 정말...</p>
<p>ㅎㅎ..ㅎ.ㅎㅎㅎㅎㅎㅎㅎㅎㅎ</p>
<p>학원에 있다가도 얘 생각하면 웃음 남ㅋㅋㅋㅋㅋㅋ 너무 좋다 왜 이제 샀지?</p>
<h3 id="행복하다-행복허다-행복햐댜-캬-취한다">행복하다 행복허다 행복햐댜~ 캬~ 취한다<del>~</del></h3>
<p>아니 이럴게 아니지, 애칭을 붙여줘야겠다 애칭</p>
<p>정말정말 영롱하고 소중하니까... 뇽뇽이?(아무말)</p>
<h4 id="뇽뇽아-앞으로-잘-부탁해">뇽뇽아 앞으로 잘 부탁해!!!</h4>
<h4 id="내가-너-방전-되는-일-없도록-잘-관리할게-찡긋">내가 너 방전 되는 일 없도록 잘 관리할게 (찡긋)</h4>
]]></description>
        </item>
        <item>
            <title><![CDATA[모르겠고 JS로 테트리스 만들어보자]]></title>
            <link>https://velog.io/@illie_3/tetris0</link>
            <guid>https://velog.io/@illie_3/tetris0</guid>
            <pubDate>Sat, 22 Jan 2022 16:13:21 GMT</pubDate>
            <description><![CDATA[<h2 id="js는-배우고-있는데">JS는 배우고 있는데...</h2>
<h3 id="뭘-어떻게-해야할까">뭘 어떻게 해야할까...</h3>
<p>그래... 뭘 한 번 만들어보자</p>
<p>무슨 글을 읽든 프로젝트 한 번 하면 실력이 는다고 한다!</p>
<p>그리고 그걸 만드는 과정에서 몰랐던 걸 벨로그에 정리해보자</p>
<p>그리곤 나중엔 혼자서 구현할 수 있도록 해보자!</p>
<h3 id="그래서-시작합니다">그래서 시작합니다.</h3>
<p><a href="https://youtu.be/1lNy2mhvLFk">https://youtu.be/1lNy2mhvLFk</a></p>
<p>youtube - code Scalper 님의 영상을 따라해보며</p>
<p>모르는 부분을 벨로그에 정리해보겠습니다...!</p>
]]></description>
        </item>
    </channel>
</rss>