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 |