ビルボ・ベギンズの迷宮





ロシア語には、ユダヤ人の名前にふさわしくない一般的な名詞はありません。

また、HabréにはiPad用のおもちゃになれない記事はありません。



この声明を証明するために、私は出会った最初の出版物( link )を取り出し、それから申請書を作成しました。

製品がApp Storeにアップロードされ、承認されました。

私は自分の仕事の結果を公開することにしました。 もちろん、Habr-Habr裁判所は最も人道的ではありませんが、祖国ではさらにひどいことで知られています。



Ellerのアルゴリズムは、 deadkrolik出版社の著者のおかげで、詳細かつ明確に説明されています。

不注意な人間なので、私は考えずにそれをプログラムし忘れました。

しかし、無駄に。





デザインとして、M。Belomlinskyによるホビットのイラストのテーマを選びました。

これまでのところ、Rakhmanovaの翻訳で私のお気に入りの本。



迷路のすべてのセルをランダムに混合するという古いトリックは、ゲームのアイデアとして採用されました。

次のラウンドの開始前に、迷路の各セルはランダムに90、180、または270度回転します。

プレーヤーのタスクは、Ellerアルゴリズムによって生成された元の迷路を考えて復元することです。



以下は関数テキストです。色[]配列は7 x 7迷路の停滞です。

大きなボックスは、iPhoneのゲームには適していません。



initBoard関数テキスト
-(int) initBoard:(int) num { int row1_numb[16]; int row1_edge[16]; int row1_down[16]; int rw_e[256]; int rw_d[256]; num_x = 7; num_y = 7; num_xy = num_x*num_y; for (int i=0; i<num_x; i++) { row1_numb[i] = 0; row1_edge[i] = 0; row1_down[i] = 0; } for (int j=0; j<num_y; j++) { for (int i=0; i<num_x; i++) { rw_e[i+j*num_x] = 0; rw_d[i+j*num_x] = 0; } } for (int j=0; j<num_y; j++) { for (int i=0; i<num_x; i++) { if (row1_numb[i]==0) row1_numb[i] = i + 1; } for (int i=0; i<num_x-1; i++) { // int mm = arc4random()%10; int mm = [self microsoft_rand:10]; int k = (mm<7) ? 0 : 1; if (row1_numb[i]==row1_numb[i+1]) k = 1; if (k>0) { row1_edge[i] = 1; row1_numb[i+1] = row1_numb[i]; } } row1_edge[num_x-1] = 1; for (int i=0; i<num_x; i++) { // int mm = arc4random()%10; int mm = [self microsoft_rand:10]; int k = (mm<7) ? 0 : 1; row1_down[i] = (k>0) ? 1 : 0; } int r_open = 0; int i_start = 0; for (int i=0; i<num_x; i++) { int r1 = row1_edge[i]; i_start++; if (row1_down[i] == 0) r_open = 1; if(r1) { if (r_open==0) row1_down[i-i_start+1] = 0; r_open=0; i_start = 0; } } for (int i=0; i<num_x; i++) { rw_e[i+j*num_x] = row1_edge[i]; rw_d[i+j*num_x] = row1_down[i]; } for (int i=0; i<num_x; i++) { row1_edge[i] = 0; if ( row1_down[i] == 1) row1_numb[i] = 0; row1_down[i] = 0; } } int j = num_y-1; for (int i=0; i<num_x; i++) { rw_e[i+j*num_x] = (i==num_x-1) ? 1 : 0; rw_d[i+j*num_x] = 1; } for (int j=0; j<num_y; j++) { for (int i=0; i<num_x; i++) { int r1 = rw_e[i+j*num_x]; int r2 = rw_d[i+j*num_x]; int r3 = (i) ? rw_e[i - 1 +j*num_x] : 1; int r4 = (j) ? rw_d[i+(j-1)*num_x] : 1; int r = (1-r1) + (1-r2)*2 + (1-r3)*4 + (1-r4)*8; color[i+j*num_x] = r; } } }
      
      











アプリケーションはすぐに判明しました。 デザインは、それほど厄介ではないことを願っています。



理解できないことを尋ねることをNeverしないでください



この記事の準備中に、Ellerアルゴリズムに関する出版物を読み直し、私のテキストに2つのエラーを発見したのはひどいです。

第一に、どうやら翻訳を最後まで終わらせなかった(または著者が後で変更を追加した)ので、迷路の最後の行を独自の方法で作成し、すべてのセルに水平ドリフトを描きました。

私はコメントでこれについて不満を言いたかったのですが、恥ずかしがり屋でした。

しかし、無駄に。 理解できないことを尋ねるのを恥ずかしがらないでください。



2番目の間違い-私の迷路にはループがあります。 次のバージョンのアプリケーションでバグを見つけたり、コードをより美しく書き直したりする人は誰でも尊重します。



これは、混合され、ほとんど(最後の間違ったセルを見つける)組み立てられた迷路の例です。 悲しいかな、間違いは明らかです。



それにもかかわらず、特にNetWalkゲームを覚えている人にとって、プレーは非常に興味深いものです。



企業ブログで広告を掲載できます。



アプリは無料です。

ここにリンクします

プレイヤーの現在の評価はこちらで確認できます

プレイするのは難しく、このゲームは成功をもたらさないので、アメリカ人がいるのは驚くべきことです。 広告の数百ドルに加えて。



おわりに



アルゴリズムの公開は非常に便利です。

多くの場合、彼らはあなたがあなた自身の間違いを見つけるのを助けます。

より頻繁に書き込みます。 もっと頻繁に読み直してください。 あまり頻繁に公開しません。



All Articles