ご閲覧ありがとうございます。
実は大学で、「15パズル」のプログラムを作れという課題が出たのですが、上手く動きません。プログラミングに関してはほぼ初心者で、どこがどうまちがっているのか、どのように直したらきちんと動くのかが全く分かりません・・・。!il||li(っω-`。)il||li
助けて下さい!お願いします(´;ω;`)
以下が私がいじっていたプログラムです
<html>
<head>
<title>15パズル</title>
<script type="text/javascript">
// 初期盤面を生成するプロシージャ
function gstart()
{
var checked=new Array(15); // 「使用済み」のチェック用
var i, j; // カウンタ
var n; // パネル番号
var p; // パリティ計算用
var parity = false; // 奇順列の状態
var flag; // その数が使用済みかどうか
while(parity==false){ // 奇順列の間は繰り返す
for(i=0;i<16;i++) checked[i]=false; // すべて未使用状態化
for(i=0;i<16;i++){ // パネル番号を順に決める
flag = false; // 最初はパネル番号未決定とする
while(flag==false){ // 未使用状態の間は繰り返す
n = Math.floor(Math.random()*16); // nに0~8の乱数を設定
if(checked[n]==false){ // nが未使用なら
pnum[i] = n; // i番目のパネルのパネル番号をn
checked[n] = true; // nを使用済みにする
flag = true; // パネル番号決定
}
}
}
p = 0; // 偶順列か奇順列かの計算
for(i=0;i<15;i++){
for(j=i+1;j<16;j++){
if(pnum[i]!=0 && pnum[j]!=0){
if(pnum[i]>pnum[j]) p++; // 互換の数を勘定
}
}
}
if((p%2)==0) parity=true; // 互換の数が偶数なら偶順列
}
for(i=0;i<16;i++){
if(pnum[i]==0)
document.forms[0].elements[i].value= "";
else
document.forms[0].elements[i].value= pnum[i];
}
}
function move(obj)
{
var i,j,k;
for(j=0;j<16;j++)
if(obj.value==pnum[j]) i=j; // objのパネル位置を調べる
for(j=-4;j<2;j=j+3){ // 上下左右の隣接パネルの調査
k = i+j;
if((k>=0&&k<16) && ((Math.floor(i/2)==Math.floor(k/2))||(i%2==k%2))){
if(pnum[k]==0){ // 隣が空なら入れ替え
pnum[k] = pnum[i];
document.forms[0].elements[k].value= pnum[k];
pnum[i] = 0;
document.forms[0].elements[i].value= "";
}
}
}
}
</script>
</head>
<body>
<h1>15パズル</h1>
[開始]ボタンクリックでスタート。
<form id="Form1">
<script type="text/javascript">
var i;
var s;
var pnum=new Array(16); // パネル番号記憶用
for(i=0;i<16;i++){
document.write("<input style='width:30px; height:30px;' type='button' value='"+(i+1)+"' onClick='move(this)'>");
if((i+1)%4==0) document.write("<br />");
}
document.forms[0].elements[15].value= "";
</script>
<br />
<input style="width:60px; height:30px;" type="button" value="開始" onClick="gstart()"><br />
</form>
</body>
</html>
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
課題は自分でやりましょう。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta ...
<title>15パズル</title>
<script type="text/javascript">
var flags = 0;
var w = 0;
function clickHandler( evt ) {
var target = evt.target || evt.srcElement;
if( /^btn(\d+)$/.test( target.name ) ) {
move( target.form.elements, RegExp.$1 );
} else if( target.name == 'start' ) {
gstart( target.form.elements );
}
}
function gstart( es ) {
var n = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, '' ];
var mask = 1;
flags = 0;
n.sort( function( a, b ) { return Math.random( ) - 0.5; } ); // Shuffle
for( var i=1; i<=16; i++ ) {
es[ 'btn' + i ].value = n[ i - 1 ];
if( n[ i - 1 ] == '' ) w = i;
if( i == n[ i - 1 ] ) flags |= mask;
mask <<= 1;
}
showFlags( es );
}
function move( es, n ) {
var mask = 1 << ( w - 1 );
var mask2 = 1 << ( n - 1 );
switch( n - w ) {
case -1 : case -4 : case 1 : case 4 :
if( es[ 'btn' + n ].value == w ) {
flags |= mask;
if( flags == 0x7FFF ) alert( 'Complete!!' );
} else if( es[ 'btn' + n ].value == n && flags & mask2 ) {
flags ^= mask2;
}
es[ 'btn' + w ].value = es[ 'btn' + n ].value;
es[ 'btn' + n ].value = '';
w = n;
}
showFlags( es );
}
function showFlags( es ) {
var b = '';
var mask = 1;
for( var i=1; i<=16; i++ ) {
b += ( flags & mask ? '1' : '0' ) + (i%4 == 0 ? ' ' : '');
mask <<= 1;
}
es[ 'flags' ].value = b;
}
</script>
<style type="text/css">
.fifteenPuzzle .panel input {
width : 2.3em;
height : 2.3em;
padding : 3px;
background-color: white;
}
</style>
</head>
<body>
<h1>15パズル</h1>
[開始]ボタンクリックでスタート。
<form action="#" onclick="clickHandler( event );" class="fifteenPuzzle">
<p class="panel">
<script type="text/javascript">
for( var i=1; i<=16; i++ ) {
document.write( '<input type="button" value="', i!=16 ? i : '' , '" name="btn', i , '">', i%4==0 ? '<br>' : '' );
}
</script>
</p>
<p>flags : <input type="text" name="flags" value="" size="25"></p>
<p><input type="button" value="開始" name="start"></p>
</form>
</body>
</html>
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C#OpenCv V4にのエラーに関する...
-
ジェネレーターの作り方
-
GASでGoogleフォームの自動返信...
-
シンプルなweb版スタンプラリー...
-
なぜmatchメソッドがエラーにな...
-
gas スプレッドシートがアクテ...
-
翌月を取得するGASが分かりません
-
1日1回だけ引けるjavascriptお...
-
ASP.NET MVCでObjectをjsに渡す
-
google apps scriptの終了のさせ方
-
Javascriptで二次元配列で高次...
-
html javascript リンク先アド...
-
jsによって検索プルダウン、都...
-
JsでDateオブジェクトの年月日...
-
javascriptでiframeのURL変更は?
-
C# 演算 奇数と偶数 表現の仕方
-
Java script エラー
-
javaScriptのコードの修正をお...
-
イラレでナンバリングする方法
-
同じIDで定義した要素の配列を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C#OpenCv V4にのエラーに関する...
-
食材の期限を管理するためにGAS...
-
google apps scriptの終了のさせ方
-
このプログラムに、王手をかけ...
-
このプログラムに王様の逃げ道...
-
この将棋プログラムに王様ゲッ...
-
ASP.NETのコントロールの値をJa...
-
ジェネレーターの作り方
-
GASでundefinedエラーが出ます
-
なぜmatchメソッドがエラーにな...
-
ASP.NET MVCでObjectをjsに渡す
-
C#で、ContextMenuStripに動的...
-
html javascript リンク先アド...
-
HTMLで作った時報アプリが動き...
-
翌月を取得するGASが分かりません
-
イラレでナンバリングする方法
-
HTMLにWSHを組み込む
-
gas スプレッドシートがアクテ...
-
getElementByIdでASP.NETのText...
-
APIを使って埋め込んだグーグル...
おすすめ情報