Notice
Recent Posts
Recent Comments
Link
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

Amarans

JavaScript 로 틱택토 만들기. 본문

카테고리 없음

JavaScript 로 틱택토 만들기.

Amarans 2020. 5. 7. 22:29

3목 이라고 생각하면 된다. 대각선을 포함한 모든 줄에 X나 O가 만들어진 사람이 승리.

밑에 사진은 구글에 틱택토 라고 검색시 나옴.

Html 코드

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <style>
        td{
            border: 2px solid black;
            height: 50px;
            width: 50px;
            text-align: center;
            font-weight: bold;
            font-size: 40px;
        }
    </style>
</head>
<body>
    <!-- <table>
    <tr>
        <td> </td>
        <td> </td>
        <td> </td>
    </tr>
    <tr>
        <td> </td>
        <td> </td>
        <td> </td>
    </tr>
    <tr>
        <td> </td>
        <td> </td>
        <td> </td>
    </tr>
   </table> -->
   <script src="틱택토.js"></script>
</body>
</html>

틱택토.js

var 바디 = document.body;
var 테이블 = document.createElement('table');
var 줄들 = [];
var 칸들 = [];
var 턴 = "X";
var 결과 = document.createElement("div");

 var 비동기콜백 = function(이벤트){
   var 몇줄 = 줄들.indexOf(이벤트.target.parentNode);
   console.log("몇줄",몇줄);
   var 몇칸 = 칸들[몇줄].indexOf(이벤트.target);
   console.log('몇칸',몇칸);
 
if(칸들[몇줄][몇칸].textContent != ''){
   console.log("빈칸아닙니다.");  
   }else{
    console.log("빈칸입니다.");
    칸들[몇줄][몇칸].textContent = 턴;
    // 세칸 다 채워졌나.
    var 다참 = false;
    //가로줄 검사
    if(
       칸들[몇줄][0].textContent === 턴 &&
       칸들[몇줄][1].textContent === 턴 && 
       칸들[몇줄][2].textContent === 턴
    )  {
      다참 = true;
    }
    //세로줄 검사
    if(
       칸들[0][몇칸].textContent === 턴 &&
       칸들[1][몇칸].textContent === 턴 &&
       칸들[2][몇칸].textContent === 턴
    )  {
        다참 = true;
    }
    // 대각선 검사
    if(몇줄 - 몇칸 === 0) { // 대각선 검사 필요한 경우
      if(
         칸들[0][0].textContent === 턴&&
         칸들[1][1].textContent === 턴&&
         칸들[2][2].textContent === 턴
         ) {
            다참 = true;
         }
      } 
    if(Math.abs(몇줄 - 몇칸) === 2) {
      if(
         칸들[0][2].textContent === 턴&&
         칸들[1][1].textContent === 턴&&
         칸들[2][0].textContent === 턴
         ) {
            다참 = true;
         }
      }
      
      // 다 찼으면
      if(다참){
         결과.textContent = 턴 + "님이 승리!";
         // 초기화
         턴 = "X";
         칸들.forEach(function (줄){
           줄.forEach(function (칸){
            칸.textContent = "";
           });
         });
    }else{
    if(턴==="X"){
       턴 = "O";
    }else{
       턴 = "X";
    }
  }
}
  //세칸 다 채워졌나?
};

for (var i=1; i<= 3; i +=1){
   var 줄 = document.createElement('tr');
     줄들.push(줄);
     칸들.push([]);
   for(var j =1; j<= 3; j+=1){
      var 칸 = document.createElement('td');
         칸.addEventListener('click',비동기콜백);
         칸들[i-1].push(칸);
      줄.appendChild(칸);
    }
     테이블.appendChild(줄);
 }
 바디.append(테이블);
 바디.append(결과);
 console.log('줄들',줄들,'칸들',칸들);

 

 

 

Comments