Hatena::Groupnadesiko

雪乃☆雫のなでしこ日和

2009/03/18 (水)

今度こそプログラムだよ!

| 21:18 | 今度こそプログラムだよ! - 雪乃☆雫のなでしこ日和 を含むブックマーク はてなブックマーク - 今度こそプログラムだよ! - 雪乃☆雫のなでしこ日和 今度こそプログラムだよ! - 雪乃☆雫のなでしこ日和 のブックマークコメント

 とりあえず、こんな感じです。

 起動時に、駒を分解してランダムに入れ替えて、表示するところまで。

 まだ不十分かもしれませんが、昨日の3行と組み合わせて、とりあえず見た目上は、希望通りの動作をしています。

#---問題作成------------------------------------------------------------

乱数初期化

1000

  rは4の乱数

  もし、rが0ならば

    もし、(き/4≧1)ならば         #きが一番上でなければ

      駒のきと(き-4)を配列入れ替え。   #上の駒と入れ替え

      き=き-4。

  もし、rが1ならば

    もし、(き/4<3)ならば         #きが一番下でなければ

      駒のきと(き+4)を配列入れ替え。   #下の駒と入れ替え

      き=き+4。

  もし、rが2ならば

    もし、(き%4>0)ならば        #きが左端でなければ

      駒のきと(き-1)を配列入れ替え。   #左の駒と入れ替え

      き=き-1。

  もし、rが3ならば

    もし、(き%4<3)ならば        #きが右端でなければ

      駒のきと(き+1)を配列入れ替え。   #右の駒と入れ替え

      き=き+1。

#---画面描画------

線色は$AAAAAA。線太さは5。塗り色は$DDDDDD。     #画面のクリア

母艦の10,10から420,420へ四角

数を0から15まで繰り返す。            #ゲーム画面描画

  x=駒¥数%4。y=駒¥数/4。y=yを切り下げ

  x2=数%4。y2=数/4。y2=y2を切り下げ

  もし、駒¥数<15ならば               #きの部分はコピーない

    裏画面のx*100,y*100,100,100を母艦の15+x2*100,15+y2*100へ画像部分コピー

#-----------------------------------------------------------------------

 とうとう乱数

 乱数を使うと、ゲームって感じがしてうれしくなるよね♪

 ふだんは、ランダムじゃ困ることのほうが多いけど、ゲームはランダムが無いとつまらないですもんね。

 ところで、まえにVBで作ったときに学んだ、重要なこと。

『駒をただランダムに入れ替えると、解けないゲームが出来ることがある

 たしかに、アナログの15パズル、どうしても解けないことがあったような気がする。

 なので、ばらばらにしたピースを盤においていくのではなく、駒を逆順にいっぱいいっぱい動かすようにするといいんですと。

 というのを思い出して書いた、問題作成のコード。

 さくっと書けたつもりが、途中で何かを勘違いしたために変になってしまって少し苦労した。15パズルの実物が欲しかった(汗)



 ランダムに「き」を上下左右のどっちにうごかすかを決めます。

 「き/4」は、縦の列のどこにきがあるのかを、「き%4」は、横の列のどこにきがあるのかを調べています。端にあったらそれ以上っちには行けないですからね。

 行けることが分かったら、きと隣の駒を入れ替えます。



 これだけだと、まだ画面が変わるわけじゃないので、駒の配列表示してうまく入れ替わったか何度も確認しました。

 よさそうなので、これを画面に反映します。

 まず、母艦設計のところに入れてあった、盤面の下塗りの部分をここにつれてきました。

 本当は、の部分だけこの色で塗ればいいんですけど、とりあえず楽を;


 x、yは、実際の駒に書いてる数(配列の中身)を、完成した画像から切り取ってくるための位置。

 x2、y2は、単に母艦の盤面に、左上から順番に駒を置くための位置。

 たったこれだけのことが、こんがらかって泥沼に!(--;

 わかっても、やっぱりうまく説明書けないし・・・


 画像部分コピーの座標は、何気に数字を直接ぶっ込んでますけど、本当は定数を宣言したほうが良かったですね。って言うかむしろこの計算も終えて、x、y、x2、y2にすればよかったですね。あとでなおしましょう。

トラックバック - http://nadesiko.g.hatena.ne.jp/snowdrops89/20090318