| 4 | 9 | 2 |
| 3 | 5 | 7 |
| 8 | 1 | 6 |
魔方陣とは1~Nまでの数字を「縦、横、斜め、の合計がいずれも等しくなる」ように並べた行列です。
カードゲームのクラスファイル(card.js)を使って魔法陣ゲーム(3方陣~8方陣)を作成します。
カードゲームクラスは Card Game を参照して下さい。
<html>
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="javascript.css" type="text/css">
<title>Mahou</title>
</head>
<body>
<h3>魔法陣ゲーム(枠を表示)</h3>
<script>
function func(num)
{ window.alert(num);
}
mode = 3;
mode = Number(prompt("魔法陣の数(3~8)を入力して下さい","3"));
document.write('<table border="1">');
for(var y=0; y<mode; y++)
{ document.write('<tr>');
for(var x=0; x<mode; x++)
{ var id = '"B' + (y*mode+x) + '"';
var s = '<td width="40" height="25"> <div id=' + id + 'onclick=func(' + id + ')>??</div></td>';
window.alert(s);
document.write(s);
}
document.write('</tr>');
}
document.write('</table>');
</script>
</body>
</html>
|

<script src="card.js">
</script>
</head>
<body>
<h3>魔法陣ゲーム(数字を表示)</h3>
<script>
function func(num)
{ window.alert(num);
}
mode = 3;
mode = Number(prompt("魔法陣の数(3~8)を入力して下さい","3"));
document.write('<table border="1">');
for(var y=0; y<mode; y++)
{ document.write('<tr>');
for(var x=0; x<mode; x++)
{ var id = '"B' + (y*mode+x) + '"';
var s = '<td width="40" height="25"> <div id=' + id + 'onclick=func(' + id + ')>??</div></td>';
document.write(s);
}
document.write('</tr>');
}
document.write('</table>');
var card= new CARD("img/d48.gif", 30, 20, 300, 140);
card.View(64, 0, 280);
var num = mode * mode;
for(i=0; i<num; i++)
{ card.View(i, i%mode*30+20, Math.floor(i/mode)*20+280);
}
</script>
|
<script src="card.js"> </script> </head> |
var card= new CARD("img/d48.gif", 30, 20, 300, 140);
card.View(64, 0, 280);
var num = mode * mode;
for(i=0; i<num; i++)
{ card.View(i, i%mode*30+20, Math.floor(i/mode)*20+280);
}
|
<script src="card.js">
</script>
</head>
<body>
<h3>魔法陣ゲーム(セル&数字を選択)</h3>
<script>
function func(num)
{ window.alert(num);
}
mode = 3;
mode = Number(prompt("魔法陣の数(3~8)を入力して下さい","3"));
document.write('<table border="1">');
for(var y=0; y<mode; y++)
{ document.write('<tr>');
for(var x=0; x<mode; x++)
{ var id = '"B' + (y*mode+x) + '"';
var s = '<td width="40" height="25"> <div id=' + id + 'onclick=func(' + id + ')>??</div></td>';
window.alert(s);
document.write(s);
}
document.write('</tr>');
}
document.write('</table>');
var card= new CARD("img/d48.gif", 30, 20, 300, 140);
var num = mode * mode;
for(i=0; i<num; i++)
{ //card.View(i, i%mode*30+20, Math.floor(i/mode)*20+280);
card.Func(i, i%mode*30+20, Math.floor(i/mode)*20+280, i, "func");
}
</script>
|
<script>
function func(num)
{ window.alert(num);
if (num.charAt(0)!='B')
{ if (sel>63)
{ sel = Number(num);
var s1 = card.Clip(64, sel%mode*30+20, Math.floor(sel/mode)*20+280);
var s2 = card.Position(64, sel%mode*30+20, Math.floor(sel/mode)*20+280);
s = s1 + ' ' + s2;
document.images[sel].style= s;
}
else
{ var s1 = card.Clip(sel, sel%mode*30+20, Math.floor(sel/mode)*20+280);
var s2 = card.Position(sel, sel%mode*30+20, Math.floor(sel/mode)*20+280);
s = s1 + ' ' + s2;
document.images[sel].style= s;
sel = 64;
}
}
}
mode = 3;
sel = 64;
|
function func(num)
{ //window.alert(num);
if (num.charAt(0)!='B')
{ if (sel>63)
{ sel = Number(num);
var s1 = card.Clip(64, sel%mode*30+20, Math.floor(sel/mode)*20+280);
var s2 = card.Position(64, sel%mode*30+20, Math.floor(sel/mode)*20+280);
s = s1 + ' ' + s2;
document.images[sel].style= s;
}
else
{ var s1 = card.Clip(sel, sel%mode*30+20, Math.floor(sel/mode)*20+280);
var s2 = card.Position(sel, sel%mode*30+20, Math.floor(sel/mode)*20+280);
s = s1 + ' ' + s2;
document.images[sel].style= s;
sel = 64;
}
return;
}
if (sel>63) return;
document.getElementById(num).textContent= sel+1;
var s1 = card.Clip(65, sel%mode*30+20, Math.floor(sel/mode)*20+280);
var s2 = card.Position(65, sel%mode*30+20, Math.floor(sel/mode)*20+280);
s = s1 + ' ' + s2;
document.images[sel].style= s;
sel = 64;
}
mode = 3;
sel = 64;
|
function func(num)
{ //window.alert(num);
check();
if (num.charAt(0)!='B')
|
function check()
{ var n = new Array(0, 0, 0, 15, 34, 65, 111, 175, 260);
var t = new Array();
var s = new Array();
var num = mode * mode;
for(var i=0; i<num; i++)
{ var id= document.getElementById('B' + i).textContent;
if (id.charAt(0)=='?') return;
t[i]= Number(id);
}
// 完成チェック(縦・横・斜め)
var num = mode + mode + 2;
//var num = mode + mode;
for(var i=0; i<num; i++) s[i]= 0;
for(var i=0; i<mode; i++)
{ for(var j=0; j<mode; j++)
{ s[i]= s[i] + t[i*mode+j]; //s[012]= 0,1,2 3,4,5 6,7,8
s[i+mode]= s[i+mode] + t[j*mode+i]; //s[345]= 0,3,6 1,4,7 2,5,8
}
s[mode*2]= s[mode*2] + t[i*(mode+1)]; //s[6]= 0,4,8
s[mode*2+1]= s[mode*2+1] + t[(i+1)*(mode-1)]; //s[7]= 2,4,6
}
for(var i=0; i<num; i++)
{ if (s[i]!=n[mode])
{ window.alert("Error i:" + i + " s[i]:" + s[i] + " n[]:" + n[mode]);
return;
}
}
window.alert("☆完成しました");
}
|
{ var n = new Array(0, 0, 0, 15, 34, 65, 111, 175, 260);
var t = new Array();
var s = new Array();
|
var num = mode + mode + 2; |
| 魔法陣 | 合計値 |
|---|---|
| 3魔法陣 | 15 |
| 4魔法陣 | 34 |
| 5魔法陣 | 65 |
| 6魔法陣 | 111 |
| 7魔法陣 | 175 |
| 8魔法陣 | 260 |
| 12魔法陣 | 870 |
| 16魔法陣 | 2056 |
![]()