• ベストアンサー

パズルのバグ

 遊び感覚でパズルを作ったのですがバグがあるのです。 (作成する前に気がついたのですが、先に本体のPGをした) プログラム内容は imageが16個あります(4*4) 左上から1、2、3 とindex番号をつけています。 ある場所をクリックすると 縦と横の画像が別の画像に変わります(自分自身も) (すべてが同じ画面になると完成です) そんなPGです。 バグがある(と思われる)のはスタートです。 現在1枚1枚乱数で裏表を決めていますが、この方法だと出来ない(100%)パターンがあるかと思います。 (その代わり65536分の1の確率でいきなり完成します(笑)) このスタートに入れるPGがうまく出来ないのです。 --------- 乱数で数値を決める その数値によりあるPGを実行する(※1) それを*階繰り返す としたのですがうまく出来ません。 ちなみに ※1のPGはパズルで遊ぶときのPGをそのままコピーして変数(indexから別の変数に)を変えたのでバグはないと思います。(多分)

質問者が選んだベストアンサー

  • ベストアンサー
  • driverII
  • ベストアンサー率27% (248/913)
回答No.1

あんまり人に聞くようなことではないと思いますが、それはともかく。 (A)1枚1枚乱数で・・・という方式をやめて、 (B)---------- 乱数で数値を決める その数値によるPG・・・ それを・・・ という方式に変更したい。作ってみたがうまく動かないので、どこがおかしいのでしょうかという質問ですか? 該当部分のPGを見ないと誰も回答できないと思いますよ。

daisuke-123
質問者

補足

スタートのソース Randomize For i = 1 To 16 co = Int(Rnd * 2) + 1 If co = 1 Then Image1(i).Visible = True Else Image1(i).Visible = False End If Next i -------------------------------------------- If Index = 1 Or Index = 2 Or Index = 3 Or Index = 4 Then If Image1(1).Visible = True Then Image1(1).Visible = False Else Image1(1).Visible = True End If If Image1(2).Visible = True Then Image1(2).Visible = False Else Image1(2).Visible = True End If If Image1(3).Visible = True Then Image1(3).Visible = False Else Image1(3).Visible = True End If If Image1(4).Visible = True Then Image1(4).Visible = False Else Image1(4).Visible = True End If End If 以下省略

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (4)

  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.5

よくわかりまってませんが、推測の限りでのサンプルです。 Option Explicit Private Const pDEF_SQARE_SIDE_SIZE As Integer = 4 '一辺のサイズ Private Sub Form_Load()   Dim i  As Long   Randomize   For i = 1 To 16     Image1(i).Visible = (Int(Rnd * 2))   Next i End Sub Private Sub Image1_Click(Index As Integer)   Dim intRowIndex As Integer   Dim intColIndex As Integer      Dim intID1   As Integer   Dim intID2   As Integer      Dim i      As Integer      '対象行を取得   intRowIndex = (Index - 1) \ pDEF_SQARE_SIDE_SIZE   '対象列を取得   intColIndex = (Index - 1) Mod pDEF_SQARE_SIDE_SIZE      For i = 1 To pDEF_SQARE_SIDE_SIZE     '反転するオブジェクトIDを算出     intID1 = (intRowIndex * pDEF_SQARE_SIDE_SIZE) + i       '//行方向で算出     intID2 = ((i - 1) * pDEF_SQARE_SIDE_SIZE) + (intColIndex + 1) '//列方向で算出          '行方向による反転     Image1(intID1).Visible = Not (Image1(intID1).Visible)          '列方向は、行方向の反転とかぶらないようにチェック     '(かぶる = クリックしたIndex値を持つオブジェクト)     If Not (Index = intID2) Then       '列方向による反転       Image1(intID2).Visible = Not (Image1(intID2).Visible)     End If   Next i End Sub それともし、このサンプル通りの動きのプログラムであれば、、、 >バグがある(と思われる)のはスタートです。 >現在1枚1枚乱数で裏表を決めていますが、この方法だと出来ない(100%)パターンがあるかと思います。 >(その代わり65536分の1の確率でいきなり完成します(笑)) というのは、仕方がないように思えます。 Win付属のゲーム[ソリティア]に至っては、解消法がある出題の方が少ないですw。 [フリーセル]も確立は違いますが、やはり解くことができない出題もあります。 大学時代の教授でフリーセル狂がいたのですが、「フリーセルはどうやっても1問だけ解けない問題がある」と言ってました。わたしの個人的見解では、もっとあるように思うのですが・・・まぁそれはそれとして、、、 「The仕様」として切り抜けましょうw

daisuke-123
質問者

お礼

皆様 ご回答ありがとうございました。 解決しました(多分・・・) 後日デバック用のPG作ってみます。

全文を見る
すると、全ての回答が全文表示されます。
  • taknt
  • ベストアンサー率19% (1556/7783)
回答No.4

示されたプログラムは 強制に反転しているので、それだと解けないものが できてしまうのは 当たり前かと思います。 まず、クリックした処理の関数があると思いますが、それを呼んで処理するようにしたらいいですね。 乱数で 何回クリックするか決めて それから さらに乱数で 1から16の値を だし、その位置にクリックされたと処理してあげればいいのです。 こうすると どういう順番にクリックされたかわかるかもしれません。 その場合は、画面全体にイメージなどはり それで隠し、終わったら、 そのイメージを Visible = False してあげればいいかと思います。

全文を見る
すると、全ての回答が全文表示されます。
  • driverII
  • ベストアンサー率27% (248/913)
回答No.3

※1のプログラムとはあるindexを指定すると 自分自身と縦と横の画像が別の画像に変わるPGですね。 ということは Randomize For i = 1 to (繰り返し回数) co = Int(Rnd * 16) + 1 (※1のプログラムを(co)で呼ぶ) Next i というようなイメージでは? コピーしたということは、Index = co として・・・ Randomize For i = 1 to (繰り返し回数) Index = Int(Rnd * 16) + 1 (※1のプログラムのコピー) Next i ということかな?変数宣言は自分で調整してください。

全文を見る
すると、全ての回答が全文表示されます。
  • taknt
  • ベストアンサー率19% (1556/7783)
回答No.2

なんか プログラムが いまいち よくわからないのですが、 If Image1(1).Visible = True Then Image1(1).Visible = False Else Image1(1).Visible = True End If は If Image1(Index).Visible = True Then Image1(Index).Visible = False Else Image1(Index).Visible = True End If に変えられると思いますよ。 あと この Indexは、どこから取得するのでしょうか?

daisuke-123
質問者

補足

image1(1)~(16) です ※0番はありません(1からのほうが個人的には分かりやすいから) If Image1(Index).Visible = True Then Image1(Index).Visible = False Else Image1(Index).Visible = True End If すいません ↑はどこから出てきたのでしょうか? ※PGの関係上自分自身が元に戻ってしまいますので最後にはこのようなのが入っていますが・・。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 画像連結ソフトで

    画像連結ソフトのことで質問なのですが。 連結する際例えば同じ大きさの画像16枚を、縦4枚×横4枚で繋げ 一枚の画像を作成するとき、完成品(縦4枚×横4枚の画像)をプレ ビューで見ながら、一つ一つ当てはめていったり外したりするこ との出来るツールは無いでしょうか?パズルのようにといえばわ かりやすいでしょうか。 お勧めございましたらお願いします。

  • Excelで最大値を与える説明変数求める方法

    ソルバーを使うと結構な確率でエラーになります。 共役傾斜法とか準ニュートン法ってのが「最初にどこからスタートするか」に依存するからのような気がするのですが、そこで、 (1)適当に正規分布に従う乱数を100個発生させる。 (2)その乱数を説明変数にして目的変数を得る。これを100回繰り返す。 (3)100個の目的変数が得られたら、そのうち目的変数の値が大きい方から上位50個についての説明変数の標準偏差を求める(下位50個は捨てる) (4)上位50個の目的変数のうちでも最大値を与える説明変数1つを選らんで平均値とし、(3)で求めた上位50個の標準偏差を標準偏差として、この2つのパラメータにて正規分布に従う乱数を50個出す。 (5)先ほど(3)で使った上位50個の説明変数(下位50個は捨てる)と(4)の50個説明変数の計100個より100個の目的変数を得る (6)以後(3)~(5)を何度も何度も繰り返す。そのうちに上位50個の標準偏差がだんだん小さくなってくる。ある程度小さくなったところで、そのときの説明変数を「目的変数を最大にする説明変数」とする。 というVBAのマクロを組んでみたところ、時間はかなりかかるするものの(と言っても等間隔の目的変数をしらみつぶしにする方法よりははるかに速い)、エラーになりにくい(もちろん関数が収束するなら)し、結果を念のためソルバーに入れてやるとほぼそこから答えが動かない、と、結構いいような気がするのですが、悲しいことに基礎的な素養が無いからこれが数理的に正しいことなのかわかりません。 感覚的には正しい気がするのですが、いかがなものでしょうか。

  • Excel2000で計算結果から並べ替えたい

    Excel2000で、並び替えを行いたいのですがマクロもVBAを使用したことがなく、どうしたらいいのかさっぱりわかりません。 参考になるようなHPも見つけることもできず、そもそも可能な処理かどうかもわからない状態です。 A列が名称 B列が数値A(変数) C列が数値B(変数) D列がコスト(固定値) という表のデータを、 指定したコスト合計以内で、数値A、数値Bが、8点で最大値になる組み合わせを別の列に並べ替えて表示したいのです。 自分で計算した、こういう形にしたいというものを画像として添付いたしております。 画像の左上、緑とオレンジの部分を入力すると右半分の並べ替えた表を表示したいのです。 よろしくお願いいたします。

  • 保留大当たり乱数の振り分けについて

    こんにちは。 皆さんに教えて頂いた保留大当たり乱数について、数字でまとめて振り分けてみましたので、正しい理解かどうか判断して頂けますでしょうか。 エヴァ5:(確率=1/350 確変率=65%)ととします。 *入賞乱数総数=35000個 *大当たり乱数総数=100個(通状+確変、突確)(35+65) (通状モード時) A 通状大当たり乱数値=1~35 B 確変大当たり乱数値=36~100 (確変モード時) C 確変非限定 通状大当たり乱数値=1~10 D 確変限定  通状大当たり乱数値=11~35 E 確変非限定 確変大当たり乱数値=36~55 F 確変限定  確変大当たり乱数値=56~100 こんな感じでまとめてみました。 あくまで確変モード時の限定、非限定の振り分け割合はアバウトです。 非限定を20%位にしてみました。 こうして数字で表すと、多くの皆さんが回答しておられた確変中の大当たり保留が通状モードで消化されたとき(上のCやDの乱数)、はずれてしまう事が良く理解できると思い、数字でまとめてみました。 実機では、どう処理されているかは知りませんけどね。 細かな数値は別として、この考えって正しいでしょうか。

  • Word2010 別の枠が開いてしまう不具合

    Word2010を使用しております。 現在のPCを買った時から起きている不具合なので、おそらくWord2010のソフトに初めからあったバグだと思うのですが、文字を入力しようとすると、画面左上に別のボックスが開いて、直接入力することができません。大体7割ほどの確率で起こるため、とてもストレスがたまります。はっきり言って使い物になりません。 この不具合を解消する方法はあるのでしょうか? 調べてみましたが、2010への言及のある資料は見当たりません。

  • 自動ポップアップで画像を表示させるには?

    トップページに訪問者が来た時に、indexとは別に画面の右上か左上 に別ウィンドウで画像を自動的に表示(400×300くらいで)させたい のです。 ボタンにリンクを貼って開く事は何とかできたのですが 自動 (強制)でウィンドウサイズまで指定(画像の大きさに合わせて) 表示させる方法が分かりません。どなたか教えていただけませんか? できるだけ分かりやすく よろしくお願いします。

  • ロールオーバーを含む複数の動作について

    製作初心者ですが宜しくお願いします。 今回ホームページを作るにあたり、以下のJavaScriptを使用した動作を検討中です。内容に心当たりがありましたらご教授下さい。 先ず横590px縦300のメイン画像があり、その横に横180px縦50pxの画像を6個にしての設置を行います。 横の180px縦50px画像をロールオーバーにし、更にその画像にマウスを乗せた時に横590px縦300pxのメイン画像も同時に変えたいのですが、これらの動作は可能でしょうか? また、欲を言えば…ロールオーバーにした画像にリンクを貼り、目的のページへ移動をしたいとも考えております。 参考なサイトとしましては、セブンイレブンのトップページで使用しているフラッシュによる事ですが、あいにくフラッシュは未経験でソフトも無く行えませんので、JavaScriptで可能な限り動作的に行えればと考えております。 参考URL: http://www.sej.co.jp/index.html 自分でも色々探してみましたが、なかなか見つからずスクリプト同士を連結したりして試しても見ましたが動作にバグが生じ、上手くいきませんでした。 そこで、参考になるサイトがあれば教えてください。 宜しくお願いします。

  • 困っています! flash mcに読み込んだ外部ファイルのセンタリング

    はじまして、flashスクリプト初心者です。 頼まれて、フォトギャラリーを作っています。 写真を外部読み込みで、左にサムネイル、右に表示画像 というような設計になっています。 以下のサイトを参考に、ここまではできましたが、 http://www.webdesignworkshop.net/workshop/load_photo/index.html 表示画像が縦(600*400)のものと横(400*600)のものがあるため、 読み込みmcは600*600pxの正方形にしました。 すると読み込んだ画像がどうしても左上によってしまい、 mcに読み込んだ外部ファイルのセンタリングはできないものかと、悩んでおります。 いろいろ検索かけてみましたが見当たらず、どうか、宜しくお願い致します。

  • 見た目が華やかなプログラム

    変数、制御文、関数、構造体くらいまでの基礎を一通り終えたC言語初心者です このレベルの内容を使ってある程度見た目が華やかなプログラムを作りたいと思います。 以前、左上からスタート、右下がゴール、0なら進めて1のマスは進めないという迷路を作って、脱出するまでの最短距離を求めるプログラムを作ってみました。 しかし、入力に時間がかかる上に出力結果が「最短距離は=>X」と出るだけで地味です DOS画面動作なので限界はあるとは思いますが、それでももう少し華やかなものはないでしょうか? 出来れば完成品のソースコードなどがあるとベストです。 宜しくお願いいたします

  • JavaScriptを使って縦に画像がスクロールするページを作りたいの

    JavaScriptを使って縦に画像がスクロールするページを作りたいのですが、 (こんなかんじで動く)http://www.gmarwaha.com/jquery/jcarousellite/index.php 私はまだ勉強中で、テンプレートをダウンロードして少々いじって使う程度しかできません。 テンプレートで縦に動くものをみつけたのですが http://sorgalla.com/jcarousel/ 画像や全体の幅を広げようとまずCSSで調整したら、画像は大きくなったけど、 全部縦に画像がうまく並ばず、何枚も画像が表示されるはずなのに、1枚しか表示されなくなりました。 矢印ボタンを押してスクロールさせようとすると、 表示枠は長くしてあるのに、一番上の画像が別の画像に切り替わるという感じです。 言葉だけではうまく伝わらないとは思いますが。。 一番上に記載したURLのやつを縦バージョンにする方法など、 あったら教えていただけないでしょうか? 他にも、縦にスクロールするJavascriptをご存知の方いらっしゃいましたら、教えていただけると助かります。 他力本願で大変お恥ずかしいのですが、どなたかうまく作れる方法がありましたらご協力お願いします!!

このQ&Aのポイント
  • EPSON PHOTO+のテンプレートの更新ができません。何度やっても失敗、再試行と表示されます。
  • インターネット接続もパソコンにも問題はないのですが、EPSON PHOTO+のテンプレートの更新ができません。
  • EPSON PHOTO+のテンプレートの更新ができない問題が発生しています。何度やっても失敗し、再試行と表示されます。インターネット接続やパソコンには問題はありません。
回答を見る