0

私は Javascript/HTML5 の初心者で、単純なブラックジャック ゲームと思われるものを構築しています。私は本から学んでおり、自分のコードは問題ないと思います (何度もチェックしました)。また、画像ファイルの名前が正しいこともわかっています。簡単にするために、これらすべてを 1 つの html ファイルに含めました。これがキャンバスにロードされない特定の理由。Chrome と Firefox の両方が、deal と newGame 機能で特定の問題を抱えているようです。アドバイスをいただければ幸いです。(また、stackoverflow ツールにとってまだ新しい醜いインデントも無視してください。)

ありがとう

var cwidth = 800;
    var cheight = 600;
    var cardw = 75;
    var cardh = 107;
    var playerxp = 100;
    var playeryp = 300;
    var housexp = 500;
    var houseyp = 100;
    var housetotal;
    var playertotal;
    var pi = 0;
    var hi = 0;
    var deck = [];
    var playerhand = [];
    var househand = [];
    var back = new Image();
    
    function init () {
        ctx = document.getElementById('canvas').getContext('2d');
    	ctx.font = "italic 20pt Georgia";
    	ctx.fillstyle = 'blue';
    	builddeck();
    	back.src = 'cardback.png';
    		canvas1 = document.getElementById('canvas');
    		window.addEventListener('keydown', getkey, false);
    	shuffle();
    	dealstart();	
    }
    
    function getkey(event) {
    	var keyCode;
    	if (event == null)
    	{
    		keyCode = window.event.keyCode;
    
    		window.event.preventDefault();
    	}
    	else {
    		keyCode = event.keyCode;
    		event.preventDefault();
    	}
        
        switch(keyCode) {
    
        	case 68:
        	deal();
        	break;
    
        	case 72:
        	playerdone();
        	break;
    
        	case 78:
        	newgame();
        	break;
    
        	default:
        	alert("press d, h or n please.");
    
    
        }	
    }
    
    function dealstart() {
    	playerhand[pi] = dealfromdeck(1);
    
    	ctx.drawImage(playerhand[pi].picture, playerxp, playeryp, cardw, cardh);
    	playerxp = playerxp+30;
    	pi++;
    
    	househand[hi] = dealfromdeck(2);
    	ctx.drawImage(back, housexp, houseyp, cardw, cardh);
    	housexp = housexp+20;
    	hi++;
    
    	playerhand[pi] = dealfromdeck(1);
    	ctx.drawImage(playerhand[pi].picture, playerxp, playeryp, cardw, cardh);
    	playerxp = playerxp+30;
    	pi++;
    
    	househand[hi] = dealfromdeck(2);
    	ctx.drawImage(househand[hi].picture, housexp, houseyp, cardw, cardh);
    	housexp = housexp+20;
    	hi++;
    }
    
    function deal() {
    
    	playerhand[pi] = dealfromdeck(1);
    	ctx.drawImage(playerhand[pi].picture, playerxp, playeryp, cardw, cardh);
    	playerxp = playerxp+30;
    	pi++;
    
    	if (more_to_house()) {
    		househand[hi] = dealfromdeck(2);
    		ctx.drawImage(househand[hi].picture, housexp, houseyp, cardw, cardh);
    		housexp = housexp+20;
    		hi++;
    	}
    }
    
    function more_to_house() {
    	var ac = 0;
    	var i;
    	var sumup = 0;
    
    	for(i = 0; i < hi; i++) {
    		sumup += househand[i].value;
    
    		if (househand[i].value==1){ac++;}
    	}
    
    		if (ac>0) {
    			if ((sumup+10)<=21){
    
    				sumup+=10;
    			}
    		} 
    
    		housetotal = sumup;
    
    		if (sumup<17){
    			return true;
    		}
    
    		else{
    			return false;
    		}
    
    }
    
    function dealfromdeck(who){
    	var card;
    	var ch = 0;
    
    	while ((deck[ch].dealt>0)&&(ch<51)){
    		ch++;
    	}
    
    	if (ch>=51) {
    		ctx.fillText("NO MORE CARDS IN DECK. Reload.", 200, 250);
    		ch = 51;
    	}
    
    	deck[ch].dealt = who;
    
    	card = deck[ch];
    	return card;
    }
    
    function builddeck() {
    	var n;
    	var si;
    	var suitname = ["clubs", "hearts", "spades", "diamonds"];
    	var i;
    	i=0;
    	var picname;
    	var nums = ["a", "2", "3", "4", "5", "6", "7", "8", "9", "10", "j", "q", "k"];
    
    	for (si=0; si<4; si++) {
    		for(n=0; n<13; n++) {
    			picname = suitname[si]+"-"+nums[n]+"-75.png";
    			deck[i] = new MCard(n+1, suitname[si], picname);
    			i++;
    		}
    	}
    }
    
    function MCard(n, s, picname){
    
    	this.num = n;
    	if (n>10) n = 10;
    	this.value = n;
    	this.suit = s;
    	this.picture = new Image();
    	this.picture.src = picname;
    	this.dealt = 0;
    }
    
    function add_up_player (){
    	var ac = 0;
    	var i;
    	var sumup = 0;
    		for(i=0; i<pi; i++){
    			sumup += playerhand[i].value;
    
    			if (playerhand[i].value==1)
    			{
    				ac++;
    			}
    		}
    
    		if (ac>0) {
    			if((sumup+10)<=21){
    				sumup+=10;
    			}
    		}
    
    		return sumup;
    }
    
    function playerdone() {
    	while (more_to_house()) {
    		househand[hi] = dealfromdeck(2);
    		ctx.drawImage(back, housexp, houseyp, cardw, cardh);
    		housexp = housexp+20;
    		hi++;
    	}
    	showhouse();
    		playertotal = add_up_player();
    		if (playertotal > 21) {
    
    			if (housetotal > 21) {
    				ctx.fillText("You and the house both went bust.", 30, 100);
    			}
    			else{
    				ctx.fillText("You went over and lost.", 30 , 100);
    			}
    
    		}
    				else
    				if (housetotal > 21) {
    					ctx.fillText("You Won.  The house went bust.", 30, 100);
    				}
    
    			else
    			  if (playertotal >= housetotal) {
    			  	if (playertotal > housetotal) {
    			  		ctx.fillText("You won.", 30, 100);
    			  	}
    			  	else {
    			  		ctx.fillText("You draw.", 30 , 100);
    			  	}
    
    			  }	
    
    			  else
    			  	if(housetotal <= 21) {
    			  		ctx.fillText("You Lost.", 30, 100);
    			  	}
    			  else {
    			  	ctx.fillText("You won because the house went over.");
    			  }
    			}
    
    function newgame() {
    	ctx.clearRect(0, 0, cwidth, cheight);
    	pi = 0;
    	hi = 0;
    	playerxp = 100;
    	housexp = 500;
    	dealstart();
    }
    
    function showhouse() {
    	var i;
    	housexp = 500;
    	for (i=0; i<hi; i++){
    		ctx.drawImage(househand[i].picture, housexp, houseyp, cardw, cardh);
    		housexp = housexp+20;
    	}
    }
    
    function shuffle() {
    	var i = deck.length - 1;
    	var s;
    	while (i>0) {
    		s = Math.floor(Math.random()*(i+1));
    		swapindeck(s,i);
    		i--;
    	}
    }
    
    function swapindeck(j, k) {
    	var hold = new MCard(deck[j].num, deck[j].suit, deck[j].picture.src);
    	deck[j] = deck[k];
    	deck[k] = hold;
    }
body {
    background-color: white;
    color: black;
    font-size: 18px;
    font-family: Verdana, Geneva, sans-serif;
}

footer {
    display: block;
    font-family: Tahoma, Geneva, sans-serif;
    text-align: center;
    font-style: oblique;
}

header {
  width: 100%;
}
<html>
       <head>
       <title>BlackJack</title>
    
    </head>
    
    <body onLoad = "init();">
    <header>Press d for deal or 1 more card, h for hold, n for new game.</header>
    <canvas id="canvas" width="800" height = "500">
    Your Browser doesn't support the Html5 element canvas.
    </canvas>
    <footer>
    </footer>
    </body>
</html>

4

1 に答える 1