ご閲覧ありがとうございます。
実は大学で、「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.1
- 回答日時:
ためになるのか?たしょうわかりにくく。
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))){
↓
for(j=0;j<4;j++){
k = i+[-4,-1,1,4][j];
if(!(k/16|0)) {
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で質問しましょう!
似たような質問が見つかりました
- JavaScript javascript作成してます。ラジオボタンで判定するコードを書いてます。 1 2023/07/18 11:03
- JavaScript コードレビューをお願いします。 1 2022/07/16 05:38
- JavaScript 画像の表示位置 3 2022/12/23 08:25
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- JavaScript javascriptのちょっとした動作不良(原因は突き止めたのですが) 1 2023/06/15 19:58
- JavaScript HTMLでJavaScriptを使ってパスワードの強化判定のプログラムを作成しています。 一通り作っ 2 2022/10/19 01:41
- JavaScript プログラムがうまく動きませんレビューお願いします 1 2022/07/10 05:08
- JavaScript 以前の質問だと、どの条件でも配列が表示されてしまいます。 1 2022/07/09 11:40
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
google apps scriptの終了のさせ方
-
第3日曜日のみの日付を取得、...
-
javaScript textareaの一行あた...
-
択一形式のテストをつくりたいです
-
分岐処理(アルゴリズム)
-
特定のclassを表示、非表示にする
-
Javascript で可能でしょうか
-
APIを使って埋め込んだグーグル...
-
ASP.NETのコントロールの値をJa...
-
GoogleMap 住所から座標の取得
-
商品コードを入力で、商品名、...
-
javascriptにお詳しい方に質問...
-
アルファベットABCD…をスマート...
-
JavaScriptのindexedDBに格納し...
-
なぜmatchメソッドがエラーにな...
-
ホームページの最終更新日を他...
-
ページ最終行へジャンプする方法
-
GASでGoogleフォームの自動返信...
-
functionから別のfunctionを実...
-
javascriptで自動計算フォーム...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
google apps scriptの終了のさせ方
-
C#OpenCv V4にのエラーに関する...
-
メールフォームの日付入力フォ...
-
GASでundefinedエラーが出ます
-
ジェネレーターの作り方
-
GASでGoogleフォームの自動返信...
-
なぜmatchメソッドがエラーにな...
-
翌月を取得するGASが分かりません
-
ローカルにあるファイルを検索...
-
HTMLで作った時報アプリが動き...
-
ASP.NETのコントロールの値をJa...
-
C# 演算 奇数と偶数 表現の仕方
-
html javascript リンク先アド...
-
gas スプレッドシートがアクテ...
-
javascriptでテーブルに追加し...
-
VSCODE[Python]の設定について
-
JavaScriptで決まった「時刻」...
-
ASP.NET MVCでObjectをjsに渡す
-
イベントが初めの一回しか起き...
-
jqGridについて
おすすめ情報