쫄병카드 코스트에 맞춰뽑기(덱에서 필드로)

cost 값 만큼 카드를 내서 상대 영웅을 공격하는 것 구현하기 위해서 필드에 나오는 카드를 관리하기 위한 데이터 배열을 만든다.

var 상대영웅 = document.getElementByID('rival-hero');
var 내영웅 = document.getElementByID('my-hero');
var 상대덱 = document.getElementByID('rival-deck');
var 내덱 = document.getElementByID('my-deck');
var 상대필드 = document.getElementByID('rival-cards');
var 내필드 = document.getElementByID('my-cards');
var 상대코스트 = document.getElementByID('rival-cost');
var 내코스트 = document.getElementByID('my-cost');
var 상대덱data = [];
var 내덱data = [];
var 상대영웅data;
var 내영웅data;
var 상대필드data = [];
var 내필드data = [];
var= true;

function 카드돔연결(데이터,,영웅){
    var 카드 = document.querySelector('.card-hidden .card').cloneNode(true);
    카드.querySelector('.card-cost').textContent = 데이터.cost;
    카드.querySelector('.card-att').textContent = 데이터.att;
    카드.querySelector('.card-hp').textContent = 데이터.hp;
    if(영웅) {
        카드.querySelector('.card-cost').style.display = true;
        var 이름 = document.createElement('div');
        이름.textContent = '영웅';
        카드.appendChild(이름);
    }
    카드.addEventListener('click',function(card){//카드를 클릭했을 때 옮기는 기능 구현, 카드를 선택할 때 내카드인지 상대카드인지
        if(턴) {//내턴
            if(!데이터.mine) {//상대카드를 누르면
                return;
            }
            var 현재코스트 = Number(내코스트.textContent);
            if(현재코스트 < 데이터.cost) {//카드의 코스트가 더 크면 못 뽑는다.
                return;
            }
            var idx = 내덱data.indexOf(데이터);
            내덱data.splice(idx,1);
            내필드data.push(데이터);
            내덱.innerHTML = '';//필드로 나간 카드는 없애준다
            내필드.innerHTML = '';
            내필드data.forEach(function(data){//보여지는 부분과 데이터 싱크를 맞추기 위한 것. 이러한 복잡한 작업 때문에 프론트엔드는 결국 리액트오 뷰,앵글러로 가게 되어 있다!
                카드돔연결(data,내필드);
            });
            내덱data.forEach(function(data){
                카드돔연결(data,내덱);
            });
            내코스트.textContent = 현재코스트 - 데이터.cost;
        } else {//상대턴인데
            if(데이터.mine) {//상대카드를 누르면
                return;
            }
            var 현재코스트 = Number(상대코스트.textContent);
            if(현재코스트 < 데이터.cost) {//카드의 코스트가 더 크면 못 뽑는다.
                return;
            }
            var idx = 내덱data.indexOf(데이터);
            상대덱data.splice(idx,1);
            상대필드data.push(데이터);
            상대덱.innerHTML = '';
            상대필드.innerHTML = '';
            상대필드data.forEach(function(data){
                카드돔연결(data,상대필드);
            });
            상대덱data.forEach(function(data){
                카드돔연결(data,상대덱);
            });
            내코스트.textContent = 현재코스트 - 데이터.cost;

        }
    });
.appendChild(카드);

}

function 상대덱생성(개수) {
    for(var i=0; i < 개수; i++) {
        상대덱data.push(카드공장());
    }
    상대덱data.forEach(function(data){ //데이터를 화면에 표시하기 위해 반영하는 부분
        카드돔연결(data,상대덱);
    });
}

function 내덱생성(개수) {
    for(var i=0; i < 개수; i++) {
        내덱data.push(카드공장(false,true));
    }
    내덱data.forEach(function(data){ //데이터를 화면에 표시하기 위해 반영하는 부분
        카드돔연결(data,내덱);
    });
}
function 내영웅생성() {
    내영웅data = 카드공장(true,true);
    카드돔연결(내영웅data,내영웅,true);
}
function 상대영웅생성() {
    상대영웅data = 카드공장(true);
    카드돔연결(상대영웅data,상대영웅,true);
}

function Card(영웅,내카드) {
    if(영웅) {
        this.att = Math.ceil(Math.random() * 5);
        this.hp = Math.ceil(Math.random() * 5);
        this.hero = true;
    } else {
        this.att = Math.ceil(Math.random() * 5);
        this.hp = Math.ceil(Math.random() * 5);
        this.cost = Math.floor((this.att + this.hp) / 2);
    }
    if(내카드) {
        this.mine = true;
    }
    
}
function 카드공장(영웅,내카드) {
    return new Card(영웅,내카드);
}

function 초기세팅() {
    내덱생성(5);
    상대덱생성(5);
    내영웅생성();
    상대영웅생성();
}

초기세팅();

Last updated