Hatena::Groupnadesiko

雪乃☆雫のなでしこ日和

2009-04-30

マウスが乗った選択肢の色を変えるよ!

| 00:13

 マウスが選択肢に乗ったら、色が変わるようにしたいですよね!

 内容には直接かかわりませんが、見た目には大きく影響しますよね。

 これあると、ぐっとそれっぽくなるっていうか?

 ゲームに限らず、いろんなものでフツーに行われていますけど、実際のところどうやってんの?

 objにマウス乗った時~みたいなイベントがあるかと思いきや無かったので、マウス動かした時~を使うしかないね(たぶん)

 と言うわけで、とりあえずやっつけで作ったのがこんな感じ。

#------------------------------------------------------------
*マウス判定
  もし、マウス待ち=「オンならば
    母艦マウス移動した時は
      数を0から3まで繰り返す
        もし、(母艦のマウスX>選択板x)かつ
        (母艦のマウスY>選択板y+(選択板高さ+選択板隔)*数)かつ
        (母艦のマウスX<選択板x+選択板幅)かつ
        (母艦のマウスY<選択板y+選択板高さ+(選択板高さ+選択板隔)*数)ならば
#          もし、前マウス位置=数でなければ

            数で条件分岐
              0ならば
                番号色=$FFAAAA
              1ならば
                番号色=$AAAAFF
              2ならば
                番号色=$FFDDAA
              3ならば
                番号色=$AAFFAA
    
            塗り色は番号色。線太さは2
            母艦の選択板x,選択板y+(選択板高さ+選択板隔)*数から選択板x+40,選択板y+選択板高さ+(選択板高さ+選択板隔)*数へ 
            文字サイズは24。文字色白色。
            母艦の26,選択板y+4+(選択板高さ+選択板隔)*数へ数+1を文字描画。
            前マウス位置=数
            抜ける


        違えば
          もし、数=3ならば
            前マウス位置で条件分岐
              0ならば
                番号色=$BB0000
              1ならば
                番号色=$0000AA
              2ならば
                番号色=$EE8800
              3ならば
                番号色=$00AA00
   
            塗り色は番号色。線太さは2                
            母艦の選択板x,選択板y+(選択板高さ+選択板隔)*前マウス位置から選択板x+40,選択板y+選択板高さ+(選択板高さ+選択板隔)*前マウス位置へ 
            文字サイズは24。文字色白色。
            母艦の26,選択板y+4+(選択板高さ+選択板隔)*前マウス位置へ前マウス位置+1を文字描画。
#-------------------------------------------------------------

 なんだか分からんが、動作がおかしい~。

 とりあえず、マウスが乗ったときに色が変わるほうは、それらしく動いていますが・・・

 何で、直前で文字色やサイズを指定してるのに、違う色やサイズで数字が入りますか;

 あと、マウス押す前に、マウスが乗ってるだけで、あたりとか外れになっちゃうときもあるみたいだ。


 それと、本当は入ったときと出たときだけ判ればいいんだけど、これだとマウスが動きってるの全てイベント発生してしまうから、すっごく無駄に頑張っているんじゃないかな?

 選択肢の内部でマウスがちょっと動いたときも、きっと同じ色にわざわざ塗りなおしているんだよね?

 できれば必要ないときは何もしないようにしたいよね。。。


 汎用性のある関数を、作りたいトコですが・・・

 最初に考えていたように、イメージ部品などを配置してそれぞれのイベントをとるのがいいか、みたく母艦に全てコピーして母艦の座標で判断するのがいいのかも、考え中・・・

 

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

2009-04-29

問題集を一つにまとめるよ!

| 19:12

【せんせい】

 現在は、問題集を科目別に分け、ファイル名を科目名にすることで、複数科目の問題を出せるようにしてますが、これをひとつのファイルにまとめられるように改造していきますよ!

【でし】

 確かに、科目が増えたら問題のcsvファイルも増えてしまって、管理しづらいですもんね。

【せんせい】

 近頃、二次元配列についてもひらめいてきましたからね!

 まず、日本史.csvと古典文学.csvを「問題集.csv」にひとまとめにします。

【でし】

 ある意味、最初の状態です(笑)

【せんせい】

 次に、5番目の要素に、科目名を入れていきます。科目名は当然、科目配列の0番目の要素と一致させなきゃだめですよ。

 こんな感じになりました。

 エクセルみたいな表計算ソフトで作ればきっと楽なんですけど、入ってないんで、なでしこエディタで作ってます;

#------------------------------------------------------------
古典『源氏物語』の作者は?,紫式部,清少納言,光源氏,紫の上,古典文学
鎌倉幕府を開いたのは?,源頼朝,織田信長,弁慶,源義経,日本史
平安京が作られたのは何年?,794年,1192年,710年,1333年,日本史
清少納言が書いたのはどれ?,枕草子,古事記,更級日記,竹取物語,古典文学
関が原の戦いは何年?,1600年,1700年,1500年,1800年,日本史
古典『徒然草』の作者は?,吉田兼好,紀貫之,紫式部,在原業平,古典文学
紀貫之が書いたのはどれ?,土佐日記,和泉式部日記,更級日記,蜻蛉日記,古典文学
ペリー来航は何年?,1853年,1583年,1543年,1854年,日本史
江戸幕府を開いたのは?,徳川家康,徳川吉宗,豊臣秀吉,織田信長,日本史
古典『方丈記』の作者は?,鴨長明,吉田兼好,僧正遍照,清少納言,古典文学
大化の改新は何年?,645年,465年,654年,546年,日本史
#------------------------------------------------------------

【せんせい】

 して、コードはこんな感じ。意外と簡単です。

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

「問題集.csv」を開く。
問題集はそれ。
データセット

#-----クイズデータセット-------------------------------------
*データセット
  問題集の5から(科目¥時限,0)を表完全一致ピックアップ。
  データはそれ。
  データを配列シャッフル。
  問題数はデータの要素数。
  もし、問題数>10ならば
    問題数=10
  ノルマ=INT(科目¥時限,1)
#------------------------------------------------------------

【せんせい】

 先ほど設定した問題集の5番目の要素、科目名で「表完全一致ピックアップ」です。

 何かで重複したらいやなので、完全一致のほうにしてみました。

 あと、○×の正誤表示の副作用(?)で、1科目10問以上にすると表示がおかしくなってしまうため、問題集の問題が何問あっても、10問しか出題しないようにします。

 配列シャッフルしていますから、無駄な問題にはなりません。

 むしろ、100問くらい問題を用意しておいたら、毎違う問題が出るみたいな感じになって良いと思いますが・・・

【でし】

 きゃ~、やめてえぇ~~(>_<)

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

2009-04-28

追試を受けるよ!

| 18:14

【せんせい】

 赤点取ったら問答無用で落第と言うのではあまりにも酷いので(笑)赤点取ったら追試を受けられるようにしたいと思います。

【でし】

 平たく言えば、コンティニューです。

【せんせい】

 もちろん、追試は何度でも受けられるわけではありません。仏の顔も三度とか言いますです。

【でし】

 多くのゲームでも、コンティニュー回数には制限があるのが普通ですね!

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

追試とは整数。追試=3。

#------------------------------------------------------------
*終了判定
  もし、正解数≧科目¥時限,1ならば
    「ノルマクリア!」と言う。
    もし、時限+1=科目数ならば
      終わり。
    違えば
      時限=時限+1
      番号=0
      正解数=0
      得点=0
      データセット。
      情報描画。
      消去で正誤表示。
      得点描画。
      問題設定。

  違えば
    もし、追試≦0ならば
      「ゲームオーバー」と言う。
      終わり。
      
    違えば
      「コンティニューする? …{追試}」で二択
        もしそれはいならば
          総合得点=総合得点-得点。
          番号=0
          正解数=0
          得点=0
          追試=追試-1
          ノルマ=科目¥時限,1
          消去で正誤表示。
          得点描画。
          問題設定。
        違えばもしそれいいえならば
          終わり。
#-------------------------------------------------------------

【せんせい】

 まず、追試という変数に、追試可能数をセット。現在は3です。

 ノルマ未達成だったら、追試の値を参照して0になっていなければ、コンティニューするかどうか2択で聞いて、はいだったら追試の値をひとつ減らしてもう一度。

 総合得点から、までのの科目の得点をマイナスするのを忘れずに。追試を受けるほど高得点てのはおかしいですからね!

【でし】

 ちなみに、得点を0にしてからマイナスして、うまくいかない!とか騒いでいたのは内緒なんですよね?(笑)

【せんせい】

 しくしくしく(;_;)

 いろいろなフラグをリセットしたり画面をクリアする処理も、どこかにまとめたい感じですねえ。

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

2009-04-27

成績発表するよ!

| 22:33

【せんせい】

 成績発表です。

 いつもの、「言う」ではない方法で表示させて見ましたよ~。

 予告どおり、科目別と、総合とで集計を取ってみました。

 成績に応じて、もっと何かいろいろ違ったコメントがあると面白いと思いますが、それを考えるのが面倒なために保留としています;

【でし】

 は2科目だけなので、余白が多いですが、学校らしく5~6科目にして、下のほうに何か書くと、それっぽくなりそうですね!

【せんせい】

 そうなのですが・・・

 ぶっちゃけもうクイズは飽きたのですぅ~(汗)

 だって、動作テストのたびに自分が作った同じ問題解くんですよ~?

 やっぱり作るならパズルゲームだよねー。

 15パズルは、(んなには)飽きなかった。

#------------------------------------------------------------
*成績発表
  塗り色は$804000。線色は$000000。線太さは3。
  成績表の0,0から400,400へ四角。
  塗り色は$FFFFFF。線色は$000000。線太さは3。
  成績表の10,10から390,390へ四角。

  文字書体は「MS Pゴシック」。文字サイズは20。文字色は$000000。
  成績表の0,20,400,30へ中央,中央で「成績表」を枠内文字描画。
  文字書体は「MS Pゴシック」。文字サイズは18。文字色は$000000。
  成績表の50,65,150,30へ左,中央で「科目」を枠内文字描画。
  成績表の200,65,100,30へ左,中央で「正解率」を枠内文字描画。
  成績表の300,65,100,30へ左,中央で「得点」を枠内文字描画。

  文字書体は「MS Pゴシック」。文字サイズは16。文字色は$000000。
  数を0から科目数-1まで繰り返す
    成績表の50,100+30*数,150,30へ左,中央で(科目¥数,0)を枠内文字描画。
    成績表の200,100+30*数,100,30へ左,中央で「{(成績¥数,2)}%」を枠内文字描画。
    成績表の300,100+30*数,100,30へ左,中央で「{(成績¥数,1)}点」を枠内文字描画。
    正解率=正解率+成績¥数,2

  成績表の50,100+30*科目数から380,100+30*科目数へ
  成績表の50,100+30*科目数+5,150,30へ左,中央で「総合」を枠内文字描画。
  成績表の200,100+30*科目数+5,100,30へ左,中央で「{正解率/科目数}%」を枠内文字描画。
  成績表の300,100+30*科目数+5,100,30へ左,中央で「{総合得点}点」を枠内文字描画。

  成績表の可視はオン。
#-------------------------------------------------------------

【せんせい】

 内容的には、情報を表示をするだけなので、たいしたことはやっていませんね。

 昨日作った枠内文字描画をうれしがって使いまくっていますけど、結局ほとんど左詰にしたのでまったく意味なし(汗)

 しかも、何気に無駄っぽいコードだし;

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

2009-04-26

命令をつくってみたよ!

| 14:44

 関数の使い方についてひらめいてきたので、ちょっと(個人的に)便利な命令を作ってみましたよ!

 どういうわけかしょっちゅう、四角い枠の中に情報を表示しているわけですが、普通に左詰で書く場合は特に問題ないですが、右詰にしたかったり、中央寄せにしたかったりといろいろあります

 文字幅取得を使えば、わりと簡単にできるのですが、ラベルのときみたいに左|中央|右と指定できたら、すっきり書けるし楽かも~、みたいな?

#-------------------------------------------------------------
●枠内文字描画({グループ=?}OBJのX,Y,W,HへSをA,Vで)
#Aは水平方向の位置。Vは垂直方向の位置。
  xxとは整数。yyとは整数。
  もし、A=左ならば
    xx=X
  違えばもし、A=中央ならば
    xx=X+(W-(Sの文字幅取得))/2
  違えばもし、A=右ならば
    xx=(X+W)-(Sの文字幅取得)
  もし、V=上ならば
    yy=Y
  違えばもし、V=中央ならば
    yy=Y+(H-(Sの文字高さ取得))/2
  違えばもし、V=下ならば
    yy=(Y+H)-(Sの文字高さ取得)
  OBJのxx,yyへSを文字描画。
#-------------------------------------------------------------

 これを使えば、

表画面の435+((615-435)-(「クリア!」の文字幅取得))/2,275-(「クリア!」の文字高さ取得)へ「クリア!」を文字描画

 とゆーふうに書いていたものが、

表画面の435,240,180,40へ中央,中央で「クリア!」を枠内文字描画

 と書けるようになるわけです。

 すばらしい!(自画自賛;)

 U D U D 2009/04/26 15:11もうここまで到達しましたか!
いや、自画自賛でなく、素晴らしいですよ!
まさに理想的な関数の使用例だと思います^^

雪乃☆雫雪乃☆雫2009/04/26 19:22UDさま、ありがとうございます!
そんな風に言っていただけて、うれし~\(^O^)/
ますます頑張りますです☆

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

2009-04-25

○×を表示するよ!

| 21:07

【せんせい】

 昨日、さりげなくスルーした、まで何問正解して何問不正解なのかを表示する部分です。

 同じ書式で「正解何問、不正解何問」と文字表示するのはたやすいのですが、ちょっと趣向を変えて○×で表示していくことにしてみましょう。

#------------------------------------------------------------
*マウス判定
  もし、マウス待ち=「オンならば
    母艦のマウス押した時は
      数を0から3まで繰り返す
        もし、(母艦のマウスX>選択板x)かつ
        (母艦のマウスY>選択板y+(選択板高さ+選択板隔)*数)かつ
        (母艦のマウスX<選択板x+選択板幅)かつ
        (母艦のマウスY<選択板y+選択板高さ+(選択板高さ+選択板隔)*数)ならば
          もし、選択肢¥数が答えならば
            得点=得点+残り。
            総合得点=総合得点+残り。
            タイマー停止。
            ノルマ=ノルマ-1
            得点描画
            正解数=正解数+1
            当たりで正誤表示。
            「当たり」と言う。
            問題設定
          違えば
            タイマー停止。
            外れで正誤表示。
            「ハズレ。答えは{答え}」と言う。
            問題設定

  違えば
    母艦のマウス押した時は
      戻る
#-----正誤表示-----------------------------------------------
*正誤表示(sで)
  x=440+35*((番号-1)%5)。y=135+35*((番号-1)/5を切り下げ)
  もし、s=当たりならば
    文字書体は「MS ゴシック」。文字サイズは18。文字色は$FF0000。
    表画面のx,yへ「○」を文字描画。
  違えばもし、s=外れならば
    文字書体は「MS ゴシック」。文字サイズは24。文字色は$0000FF。
    表画面のx-5,y-5へ「×」を文字描画。
  違えばもし、s=消去ならば
    塗り色は$FFFFEE。線色は$FFFFEE。線太さは0。
    表画面の435,130から615,130+35*(問題数/5を切り下げ)へ四角。
  表画面の435,130,180,70を母艦の435,130へ画像部分コピー。
  描画処理反映

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

【でし】

 おぉ~、ぱちぱちぱち~。

 しかし、これで1科目10問以内という縛りが出来てしまいました(笑)

【せんせい】

 そうなんです;

 でもどうせ、んな山ほど問題考えるつもりもないし。

 さて、関数引数についてのおさらいです。

 以前、文字遅延描画の対策用の命令を作ったときには、さりげなく文字遅延描画引数をコピペして対応する変数を合わせたら動いたので、大体は分かった気でいたわけですが、最近ようやく引数ってものについてひらめいた気がするので、早速使ってみましたよ!

【でし】

 引数とは(sで)てヤツですね。

【せんせい】

 正確には「s」が引数で、「で」は引数関数に指定してやるための助詞ですね。関数の後ろに()で括って指定してやります。・・・なんてあたりはまあ、大体分かっていたのですが、実際自分で使ってみると、おぉ!っていう感じですね(笑)

 別にフラグを立てても大ないような内容ですが、ちょっとレベルアップした気分~♪

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

2009-04-24

科目別にノルマを設定するよ!

| 19:22

せんせい】

 ではでは、まずは、右側の表示に関して解決していきましょう。

 これらは、基本的には変数の値を参照すればいいだけのことなので、表示に反映すること自体はそう難しくありません。

【でし】

 それにしても、初期の描画は座標をいろいろ変数にしていたのに、こりゃまた見事に数字で決め打ちですね(汗)

【せんせい】

 すいません;

 同じサイズのを縦に並べているだけなので、いくらでもきちんとできると思うんですが、ついついこーなってしまいます;;

 それはさておき、表示自体はそう難しくないので、2次元配列についてもう一度おさらいしてみたいと思います。

#------------------------------------------------------------
ノルマとは整数。
時限とは整数。時限=0。
科目とは配列。  #0科目、1ノルマ
科目=「古典文学,2
日本史,3」
科目数とは整数。科目数=科目の要素数。

#-----得点描画-----------------------------------------------
*得点描画
  塗り色は$FFFFEE。線色は$FFFFEE。線太さは0。
  表画面の435,240から615,280へ四角。
  表画面の435,320から615,360へ四角。
  表画面の435,400から615,440へ四角。

  #ノルマ
  もし、ノルマ≦0ならば
    文字書体は「MS Pゴシック」。文字サイズは20。文字色は$FF0000。
    表画面の435+((615-435)-(「クリア!」の文字幅取得))/2,275-(「クリア!」の文字高さ取得)へ「クリア!」を文字描画。
    表画面の435,240,180,40を母艦の435,240へ画像部分コピー。
  違えば
    文字書体は「MS Pゴシック」。文字サイズは20。文字色は$555500。
    表画面の435+((615-435)-(「残り {ノルマ} 問」の文字幅取得))/2,275-(「残り {ノルマ} 問」の文字高さ取得)へ「残り {ノルマ} 問」を文字描画。
    表画面の435,240,180,40を母艦の435,240へ画像部分コピー。

  #科目得点
  文字書体は「MS Pゴシック」。文字サイズは24。文字色は$555500。
  表画面の610-(得点の文字幅取得),358-(得点の文字高さ取得)へ得点を文字描画。
  表画面の435,320,180,40を母艦の435,320へ画像部分コピー。

  #総合得点
  表画面の610-(総合得点の文字幅取得),438-(総合得点の文字高さ取得)へ総合得点を文字描画。
  表画面の435,400,180,40を母艦の435,400へ画像部分コピー。
  描画処理反映。
#------------------------------------------------------------

#-----情報描画-----------------------------------------------
*情報描画
  塗り色は$FFFFEE。線色は$000000。線太さは2。
  表画面の435,20から615,120へ四角。
  文字書体は「MS Pゴシック」。文字サイズは20。文字色は$555500。
  表画面の450,30へ「{時限+1}時目」を文字描画。
  文字書体は「MS Pゴシック」。文字サイズは24。文字色は$555500。
  表画面の450,70へ(科目¥時限,0)を文字描画。

  #ノルマ設定
  塗り色は$FFFFAA。線色は$FFFFAA。線太さは0。
  表画面の430,210から630,240へ四角。
  文字書体は「MS Pゴシック」。文字サイズは18。文字色は$AA0000。
  表画面の430,210へ「ノルマは {科目¥時限,1} 問です」を文字描画。

    #得点表示
  塗り色は$FFFFAA。線色は$FFFFAA。線太さは0。
  表画面の430,290から630,320へ四角文字書体は「MS Pゴシック」。文字サイズは18。文字色は$AA0000。
    表画面の430,290へ「{科目¥時限,0}の得点」を文字描画。
    表画面の430,370へ「総合得点」を文字描画。

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

#-----クイズデータセット-------------------------------------
*データセット
  「{科目¥時限,0}.csv」を開く。
  データはそれ。
  
  データを配列シャッフル。
  問題数はデータの要素数。
  ノルマ=科目¥時限,1
#------------------------------------------------------------

【せんせい】

 前は、ノルマを3で決め打ちしましたが、普通面が進むごとにハードルが高くなっていくのが普通ですよね?

 もちろん、1面クリアするごとにプラスしていくという方法でもいいのですが、科目ごとのノルマをあらかじめ個別に設定しておけるようにしてみます。

【でし】

 ますますテストみたくなったかも?(>_<)

【せんせい】

 まで、科目配列は一次配列でしたが、これを二次配列にしちゃいます。

 科目名の後ろに「,」をつけて、任意のノルマ数を入れるだけです。

 これに伴い、まで「科目¥時限」で表示していた科目名は「科目¥時限,0」となります。

【でし】

 して、の科目のノルマが「科目¥時限,1」となる。

 分かってみたら、実に簡単です!

【せんせい】

 までも、さりげなく問題で二次配列をずっと使っていたわけですが、やっぱり自分で一からやってみると、理解した!って気になりますですね☆

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

2009-04-23

ノルマを加えて面クリア制にするよ!

| 18:35

【せんせい】

 今日からは、ノルマ制を導入していきますよ!

 ノルマをクリアした時点で、次の面に進んでくと言うものと、問題は全部解いてもらって、ノルマがクリアできていなければゲームオーバーとなるものとありますけど、は後者を採用です。折角得点をつけるんですからね!

【でし】

 赤点取ったら落第なんですね;

【せんせい】

 まだ全体的に、てきとーなんですけど、とりあえずこんな感じです。

#------------------------------------------------------------
ノルマとは整数。ノルマ=3。
時限とは整数。時限=0。
科目とは配列。
科目=「古典文学
日本史」
科目数とは整数。科目数=科目の要素数。

#-----ノルマ描画---------------------------------------------
*ノルマ描画
    塗り色は$FFFFEE。線色は$000000。線太さは2。
    表画面の435,20から615,120へ四角文字書体は「MS Pゴシック」。文字サイズは20。文字色は$555500。
    表画面の450,30へ「{時限+1}時目」を文字描画文字書体は「MS Pゴシック」。文字サイズは24。文字色は$555500。
    表画面の450,70へ(科目¥(時限))を文字描画。

    #ノルマ設定
    文字書体は「MS Pゴシック」。文字サイズは18。文字色は$AA0000。
    表画面の430,150へ「ノルマは {ノルマ} 問です」を文字描画。
#------------------------------------------------------------

#-----クイズデータセット-------------------------------------
*データセット
    「{科目¥(時限)}.csv」を開く。
    データはそれ。
    
    データを配列シャッフル。
    問題数はデータの要素数。
#------------------------------------------------------------

*終了判定
  もし、正解数≧ノルマならば
    「ノルマクリア!」と言う。
    もし、時限+1=科目数ならば
      終わり。
    違えば
      時限=時限+1
      番号=0
      ノルマ描画。
      データセット。
      問題設定。
  違えば
    「ゲームオーバー」と言う。
    終わり。

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

【でし】

 なんか、終了が唐突になっちゃいましたよ~?

【せんせい】

 それは、後ほど直しますよ~。

 とりあえずこれで、1科目目問題が全部終わったら、ノルマを達成しているかどうかを判定し、達成していたら次の科目に進む。未達成ならゲームオーバーいう流れまでです。

【でし】

 ここに、さらにいろいろ機能を追加していくんですね!

【せんせい】

 のとーり。概要は出来ましたから、どういうふうにしていくのか、詳細を詰めていきましょう。

【でし】

 やはり、ノルマは正解したらあと何問って減っていって欲しいところです。あと、まで何問正解して何問不正解なのか、リアルタイムで分かったほうがいいかも・・・

 得点も、は総合得点だけですが、課目別の得点も見たいです。

【せんせい】

 右側の表示項目としては、んなところでしょうか。

 あとは成績発表ですけれど、折角なので科目別に集計して出したいですね!

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

2009-04-22

得点を表示するよ!

| 21:56

【せんせい】

 正解数とは別に、得点の要素を盛り込んでみますよ。

 昨日時制限の機能をつけましたから、早く答すれば得点が高くなるようにします。

 ちょっと安易ですが、残り時(1/10秒)をのまま得点とします。

 制限時から経過を引いていったものが「残り」ですから、これを加算していけばOKですね。

#------------------------------------------------------------
#得点表示
文字書体は「MS Pゴシック」。文字サイズは18。文字色は$AA0000。
表画面の430,370へ「得点」を文字描画。
得点描画。
#------------------------------------------------------------

#------------------------------------------------------------
*マウス判定
  もし、マウス待ち=「オンならば
    母艦のマウス押した時は
      数を0から3まで繰り返す
        もし、(母艦のマウスX>選択板x)かつ
        (母艦のマウスY>選択板y+(選択板高さ+選択板隔)*数)かつ
        (母艦のマウスX<選択板x+選択板幅)かつ
        (母艦のマウスY<選択板y+選択板高さ+(選択板高さ+選択板隔)*数)ならば
          もし、選択肢¥数が答えならば
                  得点=得点+残り
            タイマー停止。
            得点描画
                  正解数=正解数+1。
            「当たり」と言う。
            問題設定
          違えば
            タイマー停止。
            「ハズレ。答えは{答え}」と言う。
            問題設定

  違えば
    母艦のマウス押した時は
      戻る
#------------------------------------------------------------

#-----得点描画-----------------------------------------------
*得点描画
    塗り色は$FFFFEE。線色は$FFFFEE。線太さは0。
    表画面の435,400から615,440へ四角文字書体は「MS Pゴシック」。文字サイズは24。文字色は$555500。
    表画面の610-(得点の文字幅取得),438-(得点の文字高さ取得)へ得点を文字描画。
    表画面の435,400,180,40を母艦の435,400へ画像部分コピー描画処理反映。
#------------------------------------------------------------

【でし】

 なるほど。

 ほぼ、表示のためのプログラムで、難しいことは何もないですねー。

 唯一引っかかったというと、タイマー停止の前に得点計算をしないとダメってことくらいでしたか。

【せんせい】

 あ、見た目はほとんど同じになっていますが、15パズルの時は、表示部分をラベルで作りましたが、は普通に描画しています。

 もともと気にはなっていたけどスルーしていましたが、画面が書き換わるときにラベルがチラッとちらつくんですよね。それと、Vistaでは、ラベルの文字にアンチエイリアスかからないです(XPはかかってたり)

 は、タイマーで制限時アニメーションをさせているため、それはもうチラチラしてさすがにひどいので。

 描画のたびに、表示位置に四角を書いて前の表示を消しています(笑)

 

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

2009-04-21

回答に時間制限をつけるよ!

| 19:03

【せんせい】

 やっぱり、ゲームといえばタイマー!!

 しかし、実際のところは、なでしこがって言うよりWinタイマー部品の精度がイマイチなんで、この考え方は正しくないようなんですが(汗)

【でし】

 しかし、所詮タイマーの精度が必要そうなアクションゲームだの、シューティングなど作れません。なでしこがって言うより、先生の腕がイマイチで・・・プレイできないんですよ(笑)

【せんせい】

 それはいいから!

 えーえー、どーせワタシはオンラインゲームのMMOも、トロくて人様にめーわくかけるばかりなので、パーティなんて組めない人ですとも!

【でし】

 まーまー先生、落ち着いて;

【せんせい】

 まあ、ここ言うのはいうコトではなく、時の要素が加わるとゲームは面白くなるって言うお話。早く解くとポイントアップ!とか、制限時内に解かないとアウトとかですね。

 15パズルの時は、何秒で解けるかを普通にカウントするタイマーでしたが、は、何秒以内で解答してくださいという制限のタイマーにしてみたいと思います。


 さてさて、更と言うかなんというか、elseifをおぼえた!

 なんだー、できたんだ~(笑)

#------------------------------------------------------------
制限時タイマーとはタイマーの値は100。
制限時とは整数。制限時=100
経過とは整数。経過=0
残りとは整数。残り=制限時

#-----制限時-----------------------------------------------
*制限時測定
    制限時タイマーの時満ちた時は
    残り=制限時-経過
    経過=経過+1
    もし、残り=0ならば
      タイマー停止。
      「時切れ!」と言う。
      問題設定。
      
    違えばもし、残り>0ならば
      線太さは0。塗り色は$FF0000。x=経過/制限時*黒板幅
      母艦の黒板x,黒板高さから黒板x+x,黒板高さ+黒板yへ四角。

*タイマー停止
  制限時タイマー停止。
  経過=0
  残り=制限時
#------------------------------------------------------------

【でし】

 おぉ~、ぱちぱちぱち~。

 ・・・でも、アニメーションがちょっと荒いですねー。

【せんせい】

 仕方ありません。最初に述べたタイマー部品の精度がしょぼいせいです。値を10くらいにすると、アニメーションがスムーズになりますが、なんか遅くない?と思って図ってみたところ、15~6秒もかかっていました(汗)100にすると、誤は1秒程度です。

【でし】

 それでも1秒も誤あるんですか? 使えませんねー。

【せんせい】

 ま、実際に10秒になる時を測って制限時の値を決めればいい話なんですけれど、環境によってが出たりしないのかどうかとかも気になるところですね。または、別に制限時何秒とか表示しなければ、特に問題なしです(笑)

【でし】

 んなテキトーな(汗)

【せんせい】

 だってだって、WindowsAPIなんてしらないやい!



 ちなみに、携帯片手にストップウォッチ機能で時を計りまくっていたのは内緒(汗)

 あーあ、バカ過ぎる;

 タイマー開始時と、停止時に「」を表示してもらえば、よほど正確なところが判ったんですよね。いうコトって、やってる最中には全然思いつかないんですよねー・・・

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

2009-04-20

バグを修正するよ!

| 19:33

【せんせい】

 と言うわけで、突然ですがサイコロです。

 熱に浮かされてるに、突然天啓がひらめいたのです!

【でし】

 知恵熱だったわけですね;

【せんせい】

 まずは、前のコードです。

 「賭ける」と「答える」、両方の修正箇所に問題があるように書いていますが、実際に問題があったのは、「答える」のほうだけでした。

#-------------------------------------------------------------
#数当てゲーム
所持金とは整数。所持金=5
賭け金とは整数。賭け金=0
配当とは整数。配当=2
所持金>0の
  R=6の乱数+1
  賭ける


*賭ける
  「いくら賭ける?(1~{所持金})」と尋ねる。
  賭け金=それ
  もし、(それ<1)または(それ)または(それ>所持金)ならば
    賭ける。                    #←ここと
  違えば
    答える
*答える
    「1~6のど~れだ?」と尋ねるもし、(それ<1)または(それ)または(それ>6)ならば
      答える                    #←ここが問題!
    もし(R=それならば
      所持金=所持金+賭け金*配当
    「当たり!{改行}所持金が{所持金}に増えました」と言う
    違えば
      所持金=所持金-賭け金
    「ハズレ。答えは{R}でした。{改行}所持金が{所持金}に減りました」と言う
  ここまで
「破産しました」と言う。
終わり。
#-------------------------------------------------------------

 「賭ける」のほうは、もし違えばの構文が完結していますから、もしで自分を呼び出しても、の後戻ってくることはありません。(もしかしたら戻ってくるのかもしないけど、処理する命令はもうないからリターンされるっていうか?)

 「答える」のほうは、もしの文が2つ並列されている為、最初のもしで自分を読んでしまうと、一連の処理が終わった後に、次のもし違えばを実行してしまうのでした。

 というわけで、こうなりました。

#-------------------------------------------------------------
#数当てゲーム
所持金とは整数。所持金=5
賭け金とは整数。賭け金=0
配当とは整数。配当=2
所持金>0の
  R=6の乱数+1
  賭ける


*賭ける
  「いくら賭ける?(1~{所持金})」と尋ねる。
  賭け金=それ
  もし、(それ<1)または(それ)または(それ>所持金)ならば
    賭ける。
  違えば
    答える

*答える
    「1~6のど~れだ?」と尋ねるもし、(それ<1)または(それ)または(それ>6)ならば
      答える
    違えば    #はじめのもしに対応する違えばの中に入れただけなのさ;
        もし(R=それならば
          所持金=所持金+賭け金*配当
      「当たり!{改行}所持金が{所持金}に増えました」と言う
        違えば
          所持金=所持金-賭け金
      「ハズレ。答えは{R}でした。{改行}所持金が{所持金}に減りました」と言う

「破産しました」と言う。
終わり。
#-------------------------------------------------------------

 これであれば、「賭ける」のほうと同じく完結するんで、大丈夫でした。

 分かってみたら、穴に入りたいよーなイージーミスでした(汗)

 ゲームなんかだと特に、関数から関数へ飛びまくってぐるぐるるよーなプログラムになりがちだから、よくよく気をつけないとダメだねえ・・・っていうか、いうプログラム自体が問題?!

【せんせい】

 明日は、クイズに戻りますよ~。

 答の、時制限をつけようとおもいます!

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

2009-04-19

復活だよ?!

18:33

【でし】

 いやー、先日は大変でしたねー(笑)

【せんせい】

 誰のせいですか、誰の!

 あやうくワタシは、検死されるところでした(哀)

【でし】

 私も危うく、重要参考人として引っ張られるところでした(笑)

【せんせい】

 それは、自業自得!

【でし】

 まーまー、これも来たるべきアドベンチャーゲームのシナリオへの序章ってコトで☆

【せんせい】

 イヤです。んなシナリオ(涙)



 とゆーわけで、復帰です。

 週末を無駄に過ごしてしまった・・・orz

mr-80bmr-80b2009/04/19 20:07復活おめでとうございます~^^

雪乃☆雫 雪乃☆雫 2009/04/19 22:13mr-80bさま、ありがとうございます~☆

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

2009-04-16

風邪でダウン!

19:23

【せんせい】

 したため、本日の更新はありません。

 ・・・ガクり。

【でし】

 せ、先生ぇっっ! しっかりしてください先生ぃぃっ!!!

 大変だ、110番!!!!



 (え;)

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

2009-04-15

基本の画面ができたよ!

| 21:33

【せんせい】

 今日は、一昨日作った画面に問題を表示。さらには、画像をクリックして答できるようになりましたよ。

 一昨々日の「問題集.csv」があるフォルダに保存してから実行しないとエラーが出ちゃいますので気をつけてください。

【でし】

 ぱちぱちぱち~。

 前の基本形が、しょぼいグラフィックに置き換わっただけですが、こんな画像でもゲームらしさはかなりアップしますね!

【せんせい】

 しょぼいとか、こんな画像とか、余計です!

 懸案の文字遅延描画ですが、結局画像を全部母艦コピーして、座標指定でクリック位置を判別するようにしました。

 15パズルのように、こちらがクリックしない限り、先には進めないゲームと違い、繰り返しのループで勝手に次々先へ進んでいくので困りました(汗)

 マウス押された時~は、別にマウスが押されるまで待っていてくれるわけじゃないんで。

 結局、繰り返しはやめて、マウスのクリックがあって正答か誤答の判定が出た後に、問題表示のサブルーチンを呼び出すようにしました。

 しかしまだ問題もあって、ふつうクイズゲームだと、問題を表示している途中でも、答することが出来ると思うんですが、それを可能にしようとすると、次の問題が最後まで表示された後、前の問題のキャンセルされた部分が表示されてしまうのです。

【でし】

 早押し問題には出来ないんですね。

【せんせい】

 ーなんです。

 戻るとか抜けるとか使っても、どうもうまく行かないようなんですよねー。

【でし】

 要修行ですね。

【せんせい】

 はいぃ~・・・って、どーしていつもいつも弟子のほうがエラーなんですか?!

【でし】

 ♪~~(逃亡)

#-----母艦設計------------------------------------------------
!母艦設計=「母艦の可視はオフ母艦のタイトルは「クイズ」
母艦の幅は640。母艦の高さは480。
母艦を$FFFFAAで画面クリア母艦のスタイルは「枠固定」
母艦オフに最大化ボタン有効変更。
母艦中央移動
母艦の可視はオン。
#-------------------------------------------------------------

#-----宣言----------------------------------------------------
黒板xとは整数。黒板x=15。
黒板yとは整数。黒板y=15。
黒板幅とは整数。黒板幅=400。
黒板高さとは整数。黒板高さ=220。

選択板xとは整数。選択板x=15。
選択板yとは整数。選択板y=250。
選択板幅とは整数。選択板幅=400。
選択板高さとは整数。選択板高さ=40。
選択板隔とは整数。選択板隔=10。

裏画面とはイメージの可視はオフ。
裏画面の幅は黒板幅。
裏画面の高さは黒板高さ+選択板高さ*2。
裏画面を$000000で画面クリア。

表画面とはイメージの可視はオフ。
表画面の幅は母艦の幅。
表画面の高さは母艦の高さ。
表画面を$FFFFAAで画面クリア。

処理用とはイメージの可視はオフ。
マスク画像とはイメージの可視はオフ。

データとは配列。
問題とは文字列。
答えとは文字列。
選択肢とは配列。
正解数とは整数。正解数=0。
番号とは整数。番号=0。
#-------------------------------------------------------------

#-----クイズデータセット--------------------------------------
「問題集.csv」を開く。
データはそれ。

データを配列シャッフル。
問題数はデータの要素数。

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

#-----メインルーチン------------------------------------------
画面準備
問題設定

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

#-------------------------------------------------------------
*問題設定
  マウス待ち=「オフ」    #問題表示し終えるまでマウス判定しない
  マウス判定

  もし、番号=問題数ならば  #最後の問題まで終わっていたら終了
    終了判定

  問題はデータ¥番号,0
  答えはデータ¥番号,1
  選択肢は「{データ¥番号,1}{改行}{データ¥番号,2}{改行}{データ¥番号,3}{改行}{データ¥番号,4}」
  選択肢を配列シャッフル。
  番号=番号+1
  出題

*出題
  クリア
    文字サイズは18。文字色黒色。
    数を0から3まで繰り返す
    母艦の選択板x+50,選択板y+5+(選択板高さ+選択板隔)*数へ選択肢¥数を文字描画。
    0.1秒待つ。
    描画処理反映。

    0.5秒待つ文字サイズは18。文字色白色母艦の黒板x+30,黒板y+30へ問題を100で文字遅延描画。
    マウス待ち=「オン」     #マウス入力待ち
    マウス判定。
#-------------------------------------------------------------

*マウス判定
  もし、マウス待ち=「オンならば
    母艦のマウス押した時は
      数を0から3まで繰り返す
        もし、(母艦のマウスX>選択板x)かつ
        (母艦のマウスY>選択板y+(選択板高さ+選択板隔)*数)かつ
        (母艦のマウスX<選択板x+選択板幅)かつ
        (母艦のマウスY<選択板y+選択板高さ+(選択板高さ+選択板隔)*数)ならば
          もし、選択肢¥数が答えならば
                  正解数=正解数+1。
            「当たり」と言う
            問題設定
          違えば
            「ハズレ。答えは{答え}」と言う
            問題設定

  違えば
    母艦のマウス押した時は
      戻る終了判定
    正解数で条件分岐
    問題数ならば
      ダイアログタイトルは「パーフェクト!」
    0ならば
      ダイアログタイトルは「もっとがんばりましょう」
    違えば
      ダイアログタイトルは「よくできました」

    「正解数{正解数}問
誤答数{問題数-正解数}問
正解率は{正解数/問題数*100を四捨五入}%です」と言う。

    終わり

#-------------------------------------------------------------
*画面準備
  塗り色は$008800。
  裏画面の0,0から黒板幅,黒板高さへ四角。

  塗り色は$DD9900。線色は$000001。
  裏画面の20,黒板高さから選択板幅,黒板高さ+選択板高さへ四角。
  塗り色は$FFFFFF。線太さは2
  裏画面の0,黒板高さから40,黒板高さ+選択板高さへ 


  裏画面の0,0,黒板幅,黒板高さを表画面の黒板x,黒板yへ画像部分コピー。

  処理用の幅は選択板幅。処理用の高さは選択板高さ。
  裏画面の0,黒板高さ,選択板幅,選択板高さを処理用の0,0へ画像部分コピー。

  マスク画像の画像は「処理用」
  マスク画像を$000000で画像マスク作成。

  数を0から3まで繰り返す。

    マスク画像を表画面の選択板x,選択板y+(選択板高さ+選択板隔)*数へ画像ANDコピー。
    処理用を表画面の選択板x,選択板y+(選択板高さ+選択板隔)*数へ画像ORコピー。

    数で条件分岐
      0ならば
        番号色=$BB0000
      1ならば
        番号色=$0000AA
      2ならば
        番号色=$EE8800
      3ならば
        番号色=$00AA00

    表画面の選択板x+20,選択板y+20+(選択板高さ+選択板隔)*数を番号色で塗る。
    文字サイズは24。文字色白色。
    表画面の26,選択板y+4+(選択板高さ+選択板隔)*数へ数+1を文字描画。

*クリア
  表画面を母艦の0,0へ画像コピー。

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

2009-04-14

画像合成のナゾにせまるよ?!

| 21:53

 と言うわけで、今日は、昨日やられた画像合成の不具合について検証して行きたいと思います。

 まずは、画面とイメージの準備。

#-----------------------------------------------------------
母艦のタイトルは「画像合成のナゾ」
母艦の幅は640。母艦の高さは480。
母艦を$999999で画面クリア。

裏画面とはイメージの可視はオン。
裏画面の幅は50。
裏画面の高さは50。
裏画面のXは0
裏画面のYは0
#裏画面を$00FF00で画面クリア。
裏画面を$000000で画面クリア。

表画面とはイメージの可視はオン。
表画面の幅は400。
表画面の高さは200。
表画面のXは0
表画面のYは250
表画面を$999999で画面クリア。

マスク画像とはイメージの可視はオン。
マスク画像のXは0
マスク画像のYは50

塗り色は$FFFFFF。線色は$000001
裏画面の0,0から50,50へ
#裏画面の5,5から45,45へ
#裏画面の10,10から40,40へ四角
#-----------------------------------------------------------

 の下にこれをくっつけて実行。

#-----------------------------------------------------------
# 画像合成による不具合
#-----------------------------------------------------------

数を0から3まで繰り返す
  裏画面を表画面の0,50*数へ画像合成。

  数で条件分岐
    0ならば
      番号色=$BB0000
    1ならば
      番号色=$0000AA
    2ならば
      番号色=$EE8800
    3ならば
      番号色=$00AA00

#  表画面の25,25+50*数を番号色で線色まで塗る。
  表画面の25,25+50*数を番号色で塗る。
#  文字サイズは24。文字色白色。
#  表画面の15,10+50*数へ数+1を文字描画。

#---画像合成による不具合(ここまで)--------------------------

 なんで、○の中の白いところだけ塗ったはずなのに、しかも塗った後に合成したはずの次の○のフチが塗られていますかっ?!

 次に、下の二行のコメントを外す。

 昨日の現象が再現です。

 文字を描画しただけなのに、度はが透過されてフチが黒くなっちゃうって、どういう現象ですか?!

 画像の処理に詳しくないから、理解できん(--;



 このようにすると、あっさり解決。

 こないだの、黒以外では透過できないいう問題とは明らかに異なる怪現象に思われます。

#-----------------------------------------------------------
# キャラ合成-正統による避
#-----------------------------------------------------------

マスク画像の画像は「裏画面」
マスク画像を$000000で画像マスク作成
#マスク画像を$00FF00で画像マスク作成

#---透過色を黒以外にしたい場合は以下の3行が必要---
#マスク画像を画像ネガポジ
#マスク画像を裏画面の0,0へ画像ANDコピー
#マスク画像を画像ネガポジ

数を0から3まで繰り返す
  マスク画像を表画面の0,50*数へ画像ANDコピー。
  裏画面を表画面の0,50*数へ画像ORコピー。

  数で条件分岐
    0ならば
      番号色=$BB0000
    1ならば
      番号色=$0000AA
    2ならば
      番号色=$EE8800
    3ならば
      番号色=$00AA00

#  表画面の25,25+50*数を番号色で線色まで塗る。
  表画面の25,25+50*数を番号色で塗る。
  文字サイズは24。文字色白色。
  表画面の15,10+50*数へ数+1を文字描画。

#--キャラ合成-正統による避(ここまで)----------------------

 さらに、もっとナゾなことも発見。

 こうしたら、大丈夫だったのです。

#-----------------------------------------------------------
# 繰り返さないことで避できる?!
#-----------------------------------------------------------

裏画面を表画面の0,50*0へ画像合成。
裏画面を表画面の0,50*1へ画像合成。
裏画面を表画面の0,50*2へ画像合成。
裏画面を表画面の0,50*3へ画像合成。
表画面の25,25+50*0を線色まで$BB0000で塗る。
表画面の25,25+50*1を線色まで$0000AAで塗る。
表画面の25,25+50*2を線色まで$EE8800で塗る。
表画面の25,25+50*3を線色まで$00AA00で塗る。

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

 しかし、よく考えたら、繰り返しの順番はこうだったはず。

 やっぱ、発生する~;

#-----------------------------------------------------------
# この順番だと発生するらしい。
#-----------------------------------------------------------

裏画面を表画面の0,50*0へ画像合成。
表画面の25,25+50*0を線色まで$BB0000で塗る。
裏画面を表画面の0,50*1へ画像合成。
表画面の25,25+50*1を線色まで$0000AAで塗る。
裏画面を表画面の0,50*2へ画像合成。
表画面の25,25+50*2を線色まで$EE8800で塗る。
裏画面を表画面の0,50*3へ画像合成。
表画面の25,25+50*3を線色まで$00AA00で塗る。

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

 つまり、画像合成の繰り返しと、塗る繰り返しを分ければ、避できるみたいです。

 て、意味わかんないよ!

 とりあえず、塗るの後に画像合成が行われると、バグるってことなのかな?


 結局、ナゾは解明できてませんが、バグ報告だけはしてみましょう。

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

2009-04-13

画像合成は落とし穴だよ、再び!!

| 21:11

【せんせい】

 さてさて、それではそれほどかっこいいわけじゃないけど、クイズゲームらしい画面をなでしこで描いてみましょ~☆ こーいう作業には苦手意識がありましたが、だんだん慣れてきました。習うより慣れろってやつですね!

【でし】

 しかし先生、表示がおかしいんですが?

【せんせい】

 ガーン・・・

#-----母艦設計------------------------------------------------
!母艦設計=「母艦の可視はオフ母艦のタイトルは「クイズ」
母艦の幅は640。母艦の高さは480。
母艦を$FFFFAAで画面クリア母艦のスタイルは「枠固定」
母艦オフに最大化ボタン有効変更。
母艦中央移動
母艦の可視はオン。
#-------------------------------------------------------------

#-----宣言----------------------------------------------------
黒板xとは整数。黒板x=15。
黒板yとは整数。黒板y=15。
黒板幅とは整数。黒板幅=400。
黒板高さとは整数。黒板高さ=220。

選択板xとは整数。選択板x=15。
選択板yとは整数。選択板y=250。
選択板幅とは整数。選択板幅=400。
選択板高さとは整数。選択板高さ=40。
選択板隔とは整数。選択板隔=10。

裏画面とはイメージの可視はオフ。
裏画面の幅は黒板幅。
裏画面の高さは黒板高さ+選択板高さ*2。
裏画面を$000000で画面クリア。

表画面とはイメージの可視はオフ。
表画面の幅は母艦の幅。
表画面の高さは母艦の高さ。
表画面を$FFFFAAで画面クリア。

処理用とはイメージの可視はオフ。

#-------------------------------------------------------------
画面準備
クリア

*画面準備
  塗り色は$008800。
  裏画面の0,0から黒板幅,黒板高さへ四角。

  塗り色は$DD9900。線色は$000001。
  裏画面の20,黒板高さから選択板幅,黒板高さ+選択板高さへ四角。
  塗り色は$FFFFFF。線太さは2
  裏画面の0,黒板高さから40,黒板高さ+選択板高さへ 


  裏画面の0,0,黒板幅,黒板高さを表画面の黒板x,黒板yへ画像部分コピー。

#ここ以下のどこかに問題が!
  処理用の幅は選択板幅。処理用の高さは選択板高さ。
  裏画面の0,黒板高さ,選択板幅,選択板高さを処理用の0,0へ画像部分コピー。
  数を0から3まで繰り返す。

    処理用を表画面の選択板x,選択板y+(選択板高さ+選択板隔)*数へ画像合成。
    数で条件分岐
      0ならば
        番号色=$BB0000
      1ならば
        番号色=$0000AA
      2ならば
        番号色=$EE8800
      3ならば
        番号色=$00AA00

#    表画面の選択板x+20,選択板y+20+(選択板高さ+選択板隔)*数を番号色で線色まで塗る。
    表画面の選択板x+20,選択板y+20+(選択板高さ+選択板隔)*数を番号色で塗る。
    文字サイズは24。文字色白色。
    表画面の26,選択板y+4+(選択板高さ+選択板隔)*数へ数+1を文字描画。

*クリア
  表画面を母艦の0,0へ画像コピー。
#-------------------------------------------------------------

 というわけで、またまたはまりました(涙)

 画像合成まではうまく行っているようなのですが、のあと色を塗る段階で、明らかに挙動がおかしいです。

 座標の指定がミスっているのかとも思いましたが、塗らずに点描画してみると、どうもんなことは無いらしい。

 「塗る」の挙動がおかしいのかと考えていろいろ試しましたが、もしかするとこれも「画像合成」の不具合かもしれません。

 「画像合成」を使わず、サンプルにあった「キャラ合成-正統」のやりかたで、画像合成を行ったところ、あっさり解決したからです。

 同じものを繰り返しで合成していってるだけなのに、何ゆえこんなことが?!

 しかも、合成は一見成功していて、合成したあとのやつを塗ってるだけなのに、なんで?

 どういう要因による問題なのかもよくわからないんですけど、とりあえず「画像合成」は封印して、「正統」のやり方で合成を行うか、SWinXさま作成の「画像合成改」を素直に使わせてもらうのがいいかもしないです。

http://www.himanavi.net/cgi/nade-1st/cbbs.cgi?mode=one&number=4114&type=4111&space=15&no=0


 とりあえず、解決編は以下のとおり。

 キャラ合成正統のやり方で合成。それ以外は同じ(はず)

 あとで、もっと単純化したプログラムで、ためしてみます・・・

#-----母艦設計------------------------------------------------
!母艦設計=「母艦の可視はオフ母艦のタイトルは「クイズ」
母艦の幅は640。母艦の高さは480。
母艦を$FFFFAAで画面クリア母艦のスタイルは「枠固定」
母艦オフに最大化ボタン有効変更。
母艦中央移動
母艦の可視はオン。
#-------------------------------------------------------------

#-----宣言----------------------------------------------------
黒板xとは整数。黒板x=15。
黒板yとは整数。黒板y=15。
黒板幅とは整数。黒板幅=400。
黒板高さとは整数。黒板高さ=220。

選択板xとは整数。選択板x=15。
選択板yとは整数。選択板y=250。
選択板幅とは整数。選択板幅=400。
選択板高さとは整数。選択板高さ=40。
選択板隔とは整数。選択板隔=10。

裏画面とはイメージの可視はオフ。
裏画面の幅は黒板幅。
裏画面の高さは黒板高さ+選択板高さ*2。
裏画面を$000000で画面クリア。

表画面とはイメージの可視はオフ。
表画面の幅は母艦の幅。
表画面の高さは母艦の高さ。
表画面を$FFFFAAで画面クリア。

処理用とはイメージの可視はオフ。
マスク画像とはイメージの可視はオフ。
#-------------------------------------------------------------
画面準備
クリア

*画面準備
  塗り色は$008800。
  裏画面の0,0から黒板幅,黒板高さへ四角。

  塗り色は$DD9900。線色は$000001。
  裏画面の20,黒板高さから選択板幅,黒板高さ+選択板高さへ四角。
  塗り色は$FFFFFF。線太さは2
  裏画面の0,黒板高さから40,黒板高さ+選択板高さへ 


  裏画面の0,0,黒板幅,黒板高さを表画面の黒板x,黒板yへ画像部分コピー。

  処理用の幅は選択板幅。処理用の高さは選択板高さ。
  裏画面の0,黒板高さ,選択板幅,選択板高さを処理用の0,0へ画像部分コピー。

  マスク画像の画像は「処理用」
  マスク画像を$000000で画像マスク作成。
  
  数を0から3まで繰り返す。

#    処理用を表画面の選択板x,選択板y+(選択板高さ+選択板隔)*数へ画像合成。
    マスク画像を表画面の選択板x,選択板y+(選択板高さ+選択板隔)*数へ画像ANDコピー。
    処理用を表画面の選択板x,選択板y+(選択板高さ+選択板隔)*数へ画像ORコピー。

    数で条件分岐
      0ならば
        番号色=$BB0000
      1ならば
        番号色=$0000AA
      2ならば
        番号色=$EE8800
      3ならば
        番号色=$00AA00

    表画面の選択板x+20,選択板y+20+(選択板高さ+選択板隔)*数を番号色で線色まで塗る。
    文字サイズは24。文字色白色。
    表画面の26,選択板y+4+(選択板高さ+選択板隔)*数へ数+1を文字描画。

*クリア
  表画面を母艦の0,0へ画像コピー。
#-------------------------------------------------------------

【でし】

 なんとか表示まではこぎつけましたね!

【せんせい】

 明日こは、文字を書きますよ!

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

2009-04-12

ようやくクイズだよ!

| 13:45

【せんせい】

 さあさあさあ! よーやくクイズですよ!!

【でし】

 苦労されてましたね(汗)

【せんせい】

 現在進行形です(哀) 毎日更新は、ろ厳しくなってきました(涙)

 それはさておき、まずは以下のデータを「問題集.csv」って名前で保存してください。

 本家公式マニュアルのクイズを踏襲して、古典日本史な内容ですよ。

#-------------------------------------------------------------
古典『源氏物語』の作者は?,紫式部,清少納言,光源氏,紫の上
鎌倉幕府を開いたのは?,源頼朝,織田信長,弁慶,源義経
平安京が作られたのは何年?,794年,1192年,710年,1333年
清少納言が書いたのはどれ?,枕草子,古事記,更級日記,竹取物語
関が原の戦いは何年?,1600年,1700年,1500年,1800年
古典『徒然草』の作者は?,吉田兼好,紀貫之,紫式部,在原業平
紀貫之が書いたのはどれ?,土佐日記,和泉式部日記,更級日記,蜻蛉日記
ペリー来航は何年?,1853年,1583年,1543年,1793年
江戸幕府を開いたのは?,徳川家康,徳川吉宗,豊臣秀吉,織田信長
#-------------------------------------------------------------

【でし】

 うわっ、問題数が増えてる。なでしこのコード見るより頭が痛くなりそうです。

 ところで、書式が少し変わってる?

【せんせい】

 4択にしました(笑)

 それから、答えのための欄は廃止して、正答は「データ¥番号,1」に固定。問題の次の選択肢が答えってことです。

 選択肢もシャッフルして、毎違う並びで出題されるように改造したから、これでOKなわけです。

【でし】

 それに成績発表も付いて、最初言ってた基本部分の課題はクリアですね!

#-----母艦設計------------------------------------------------
!母艦設計=「母艦の可視はオフ母艦のタイトルは「クイズ」
母艦のWは640。母艦のHは480。
母艦を$FFFFAAで画面クリア母艦のスタイルは「枠固定」
母艦オフに最大化ボタン有効変更。
母艦中央移動
母艦の可視はオン。
#-------------------------------------------------------------

#-----宣言----------------------------------------------------
データとは配列。
問題とは文字列。
答えとは文字列。
選択肢とは配列。
正解数とは整数。正解数=0。
#-------------------------------------------------------------

「問題集.csv」を開く。
データはそれ。

データを配列シャッフル。
問題数はデータの要素数。

番号を0から問題数-1まで繰り返す

  問題はデータ¥番号,0
  答えはデータ¥番号,1
  選択肢は「{データ¥番号,1}{改行}{データ¥番号,2}{改行}{データ¥番号,3}{改行}{データ¥番号,4}」
  選択肢を配列シャッフル。

  問題を「{選択肢¥0}{改行}{選択肢¥1}{改行}{選択肢¥2}{改行}{選択肢¥3}」でボタン選択。
  もしそれならば
    終わる。
  もしそれが答えならば
      正解数=正解数+1。
    「当たり」と言う
  違えば
    「ハズレ。答えは{答え}」と言う

正解数で条件分岐
  問題数ならば
    ダイアログタイトルは「パーフェクト!」
  0ならば
    ダイアログタイトルは「もっとがんばりましょう」
  違えば
    ダイアログタイトルは「よくできました」

「正解数{正解数}問
誤答数{問題数-正解数}問
正解率は{正解数/問題数*100を四捨五入}%です」と言う終わる。
#-------------------------------------------------------------

【せんせい】

 クイズとしての基本的な機能は、この程度なんですよねー。

 ところが、画像を用いてなんかかんかしようとすると、途端にコードは長くなっていくし、なぜか希望通りの表示にならないしで、見た目がゲームっぽいゲームへの道のりは、高く険しいのです!(>_<)/

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

2009-04-11

 とりあえず、課題の解決だよ!?

| 21:10

 カッコの中をコピペして変数を合わせたらさくっと動きました♪

 ちなみに、文字遅延描画が正常に行われている状況でも、画像コピーは反映されないとかあって、条件は同じじゃないみたいなので、やっぱりナゾは解明されていません;

 しかし、クジラ飛行机様よりコメントを頂き、Vista対応によって発生した不具合らしいとのこと。

 どうしても、イメージに文字を遅延描画したいときにはこれを使うことにしましょう。

#-------------------------------------------------------------
●文字遅延描画改({グループ=?}OBJのX,YへSを{数値=200}Aで)
  XX=X
  (Sの文字数
    Sの回数から1文字抜き出す。
   
    もしそれ=「{CHR(10)}」ならば
      X=XX
      Y=Y+(それ文字高さ取得)
      続ける
   
    OBJのX,Yへそれ文字描画。
    描画処理反映
    (A/1000)秒待つ。
   
    X=X+(それ文字幅取得)
#-------------------------------------------------------------

 改行も出来るようになったので、大体文字遅延描画と同等の動きをしてくれていると思います。

 ちゃんと命令らしく作った関数の頭は●にして、ただのサブルーチンのラベルみたいな関数とは区別してみよーっと♪


 次に、サイコロのバグの件ですが、初の最後に修正した内容に問題があったようです。

#-------------------------------------------------------------
#数当てゲーム
所持金とは整数。所持金=5
賭け金とは整数。賭け金=0
配当とは整数。配当=2
所持金>0の
  R=6の乱数+1
  賭ける


*賭ける
  「いくら賭ける?(1~{所持金})」と尋ねる。
  賭け金=それ
  もし、(それ<1)または(それ)または(それ>所持金)ならば
    賭ける。                    #←ここと
  違えば
    答える
*答える
    「1~6のど~れだ?」と尋ねるもし、(それ<1)または(それ)または(それ>6)ならば
      答える                    #←ここが問題!
    もし(R=それならば
      所持金=所持金+賭け金*配当
    「当たり!{改行}所持金が{所持金}に増えました」と言う
    違えば
      所持金=所持金-賭け金
    「ハズレ。答えは{R}でした。{改行}所持金が{所持金}に減りました」と言う
  ここまで
「破産しました」と言う。
終わり。
#-------------------------------------------------------------

 意図しない内容が入力されたときに先に進めないようにしようと、安易にラベルに飛ばしましたが、さすがは関数! もっかい戻ってきてしまうのですよ。

 って、冷静に考えれば当然でしたが(汗)

 というわけで・・・

 ・・・というわけで・・・・

 ・・・・・・・・

 どしたらいいんだ~。思いつかん(--;

 すごく簡単で、普通っぽいことのような気がするのに・・・

 ひらめかないので、やはりサイコロは保留となりましたw


 解決してないじゃん!(--;

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

2009-04-10

文字遅延描画も落とし穴だったよ!

| 18:31

 というわけで、とりあえずちょっと見た目から・・・と思ったところがいきなりハマったので、、先生と弟子モードはお休みです;

 ちょっと文字遅延描画を使ってみようと思っただけなのにぃ~。め

 これは、正常に動作しますが・・・

#-------------------------------------------------------------
塗り色は$008800
母艦の15,15から15+440,15+330へ四角
母艦の可視はオン

文字色白色文字サイズは24
母艦の30,30へ「問題」を文字描画文字サイズは18
母艦の50,80へ「江戸幕府を開いたのは?」を200で文字遅延描画
#-------------------------------------------------------------

 イメージの上に文字遅延描画しようとすると、最初の一文字が表示された後、ずっとたってから、他の文字が一気に表示されてしまうという事態になります。

#-------------------------------------------------------------
問題表示とはイメージの可視はオンのXは15。のYは15。のWは440。のHは330
問題表示を$008800で画面クリア

文字色白色文字サイズは24
問題表示の30,30へ「問題」を文字描画文字サイズは18
問題表示の50,80へ「江戸幕府を開いたのは?」を200で文字遅延描画
#-------------------------------------------------------------

 うえぇ、なんでだ~;

 これって、もしかして15パズルのギブアップ機能のところではまったのと同じ現象?

 あの時は、何でか分からないけど、直後に描画処理反映を入れることによって解決したのでした。

 この命令の内部ではおらく、文字列sをばらばらにして、一文字描画してウェイトをかけ、また一文字描画して・・というのを文字数分繰り返してるはず。

 一文字描画するたびに、描画処理反映必要って話なんじゃ?

 でも、それにしちゃ、最初の一文字だけは出るってどーいうことだ?

 それにギブアップのときは、別にイメージの上にコピーしたというわけじゃない

 意味わかんな~い(汗)


 わかんないけど、以下のようにしたら動きました。

 やっぱ、描画処理反映なの?

 ここを、コメントにすると、やっぱり上の通常の文字遅延描画を使った時と全く同様の動きをすることが分かった。

#-------------------------------------------------------------
問題表示とはイメージの可視はオンのXは15。のYは15。のWは440。のHは330
問題表示を$008800で画面クリア

文字色白色文字サイズは24
問題表示の30,30へ「問題」を文字描画文字サイズは18

xは50。yは80。
sとは文字列。sは「江戸幕府を開いたのは?」
Aとは整数。Aは200/1000   #ウェイト。ミリ秒
文字遅延描画改

*文字遅延描画改
 (sの文字数
   sの回数から1文字抜き出す。
   問題表示のx,yへそれ文字描画。
   描画処理反映
   (A)秒待つ。
   
   x=x+(それ文字幅取得)
#-------------------------------------------------------------

 これは、仕様?(汗)

 母艦に描画するのが前提で、イメージ部品の上に書くことは想定されてないってことなのかな? 確かに一文字ごとに描画処理反映の負荷をかけるのはどうなのっていうのはありますですね。

 やはり、イメージの可視をオンにするのではなく、全部母艦に一度コピーしてやるべきなのでしょうか。

 それとも、OSのバージョンとか何か環境に問題が?


 とりあえず、このサブルーチンの外で別途指定してる変数引数にすれば、命令として使えるんだよね?

 ()の中のまじないの意味がよく分からないけど・・・同じようにすれば出来そうな気もするし、例によっててきとーにやっつけてみますか・・・

kujirahandkujirahand2009/04/11 12:31クジラ飛行机です。Vista対応によって、なでしこの描画まわりは不具合が多くなってます。ご不便をかけてすみません。これは!と思ったら、バグ報告をお願いします。

雪乃☆雫雪乃☆雫2009/04/11 21:04クジラ飛行机さま、ありがとうございます!!!
うわ~っ、コメントなんていただけて、なんかとってもうれし~ぃ♪
まだ超初心者過ぎて、バグなのか自分の問題なのか良く分からずまごまごしてる状態ですが、気づいたことがあればUPしていくようにしますね。

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

2009-04-09

クイズで遊ぶよ!

| 21:32

【せんせい】

 と言うわけで、次からはクイズです!

【でし】

 えらく唐突ですねー; サイコロはどーなったんですか?

 まさか、あれで完成と言うわけでは・・・(汗)

【せんせい】

 そうではありませんが、一応目的である画像の扱いの基本(裏画面についてと、重ねあわせ処理について)は解決させたので、先に進もうと思います。


 ちなみに、サイコロの後の抱負としては・・・

①まず第一に、若干バグっていることが判明しました。

続ける?」の二択のとき、稀に表示が変になっちゃうというか、透過したはずのサイコロの4隅が表示されたり、所持金が1文減ったものが重なって表示されたりするみたいな?

終了確認の前後がなにかおかしいんでしょうが、発生頻度が低いので、どういうタイミングで発生するのかも、つかめていません;

②あとは、もっとゲームっぽさを目指して、実際のちょぼいちは、一~六の数が書かれた板の上にお金を賭けるらしいので、んな感じにしたいなと思っています。主に、見た目や操作性の追求ですね。

【でし】

 そういう部分をあれこれ考えるのも、楽しいですよね!

【せんせい】

 して、クイズのほうですが、最後、唐突に終わらないで、成績発表くらいはして欲しいなあ。

 あと、選択肢は毎順番を違えて出るようにしたい。でないと答えではなくだんだん体で場所を覚えて解答できるようになっちゃうからね。

 とりあえず二次元配列はよく分からないので、これから勉強するのです(笑)

 このままの見た目で最後に成績発表するとか、ノルマを設定してクリア制にするとかは、わりと簡単に出来そうな気がしますが、これから進むアドベンチャーゲームを視野に入れた見た目のいいクイズゲームを目指しますよ!


【でし】

 楽しみです!

 ・・・って、は前口上だけなんですか?!

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

2009-04-08

画像合成は落とし穴だったよ!

| 21:57

【せんせい】

 のお題は、背景との重ね合わせです。

 前のサイコロは、背景も白いままでしたから問題ありませんでしたが、サイコロの角を丸めているため、このままでは背景に色をつけるとサイコロの四隅に白い地がついたままで表示されてしまいます。

 のため、不要な部分を透過して、背景と重ね合わせるという処理が必要になります。これは、ゲームのプログラムの基本中の基本ってところです。

 ちなみになでしこには、標準で画像合成の命令が入っていますから、それを使えば簡単です。


【でし】

 でも、うまくいかなかったんですよね?

【せんせい】

 ぶっちゃけ、のとおりです(哀)

 うまく透過しないので、またどこか文法が違っているかといろいろ試したんですがダメで、埒が明かないので背景がべたの場合のみ使えるチート(つまり透過したい部分を背景色で塗りつぶす)でお茶を濁そうかとも思ったのですが、の矢先に黒で透過が成功! もちろん、サイコロの目も一緒に透過されてしまったわけですが(汗)

【でし】

 文法は合っていたことが分かったんですね?

【せんせい】

 ーなんです。

 わかったのは、左上の1ドットが黒であった場合にのみ、画像合成の機能が発動するということです。

 というわけで、こうなりましたよ。

#-----母艦設計------------------------------------------------
!母艦設計=「母艦の可視はオフ母艦のタイトルは「ちょぼいち」
母艦のWは640。母艦のHは480。
母艦のスタイルは「枠固定」
母艦オフに最大化ボタン有効変更。
母艦中央移動
母艦の可視はオン。
#-------------------------------------------------------------

#-----宣言----------------------------------------------------
ダイスサイズとは整数。ダイスサイズ=100
半径とは整数。半径=10

元手とは整数。元手=100
所持金とは整数。所持金=元手
賭け金とは整数。賭け金=0
配当とは整数。配当=4

裏画面とはイメージの可視はオフのWはダイスサイズ*6。のHはダイスサイズ。

処理用とはイメージの可視はオフのWはダイスサイズ。のHはダイスサイズ。

表画面とはイメージの可視はオンのWは母艦のW。のHは母艦のH。
のXは0。のYは0。
#-------------------------------------------------------------

#-----メインルーチン------------------------------------------
もし、「サイコロ.png」が存在するならば
  裏画面の画像は「サイコロ.png違えば
  サイコロ準備
所持金>0の
  サイコロ振る
  賭ける

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

#-----サイコロを振る------------------------------------------
*サイコロ振る
    r=6の乱数
    x=r*ダイスサイズ。y=0。
    x2=母艦のW/4-ダイスサイズ/2。y2=母艦のH/2-ダイスサイズ/2-30。
  裏画面のx,y,ダイスサイズ,ダイスサイズを処理用の0,0へ画像部分コピー。
  表画面を$008800で画面クリア。
#-------------------------------------------------------------

#-----数当て--------------------------------------------------
*賭ける
  「いくら賭ける?(1~{所持金})」と尋ねる。
  賭け金=それ
  もし、(それ<1)または(それ)または(それ>所持金)ならば
    賭ける。
  違えば
    答える
*答える
    「1~6のど~れだ?」と尋ねるもし、(それ<1)または(それ)または(それ>6)ならば
      答える
    もし(r+1=それならば
      所持金=所持金+賭け金*配当
      処理用を表画面のx2,y2へ画像合成。
      文字色白色文字サイズは48。
      表画面の302,103へ「当たり!」を文字描画。
      文字色赤色文字サイズは48。
      表画面の300,100へ「当たり!」を文字描画。
    終了確認。

    違えば
      所持金=所持金-賭け金
      処理用を表画面のx2,y2へ画像合成。
      文字色白色文字サイズは48。
    表画面の302,103へ「ハズレ!」を文字描画。
      文字色青色文字サイズは48。
    表画面の300,100へ「ハズレ!」を文字描画。
    終了確認。

*終了確認
    文字色黒色文字サイズは26。
    表画面の330,250へ「残金は{所持金}文」を文字描画描画処理反映。
    1秒待つもし、所持金=0ならば
    「破産しました」と言う。
     終わり。
  違えば
      「続ける?」と二択。
          もしそれはいならば
            戻る
          もしそれいいえならば
            m=所持金-元手
            もし、m>0ならば
            「{所持金-元手}文儲かった!」と言う。
          もし、m<0ならば
            「{元手-所持金}文すっちゃった;」と言う。
          もし、m=0ならば
            「トントンか・・・」と言う。
            終わり。

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


#-----サイコロ画像の準備--------------------------------------
*サイコロ準備
  裏画面を$000000で画面クリア。
    数を0から5まで繰り返す。
    もし、数=0ならば                #1のサイコロ
      線色は$000001。塗り色は$FFFFFF        #地の色は白
      外枠。                    #ダイスの外枠
      線色は$FF0000。塗り色は$FF0000        #目の色は赤
      半径=15。                 #大き目
      中点。
    
    もし、数=1ならば                #2のサイコロ
      線色は$000001。塗り色は$FFFFFF
      外枠。
      線色は$000001。塗り色は$000001
      半径=10。
      左上点。右下点。
    
    もし、数=2ならば                #3のサイコロ
      線色は$000001。塗り色は$FFFFFF
      外枠。
      線色は$000001。塗り色は$000001
      半径=10。
      中点。左上点。右下点。
    
    もし、数=3ならば                #4のサイコロ
      線色は$000001。塗り色は$FFFFFF
      外枠。
      線色は$000001。塗り色は$000001
      半径=10。
      左上点。左下点。右上点。右下点。
    
    もし、数=4ならば                #5のサイコロ
      線色は$000001。塗り色は$FFFFFF
      外枠。
      線色は$000001。塗り色は$000001
      半径=10。
      中点。左上点。左下点。右上点。右下点。
    
    もし、数=5ならば                #6のサイコロ
      線色は$000001。塗り色は$FFFFFF
      外枠。
      線色は$000001。塗り色は$000001
      半径=9。
      左上点。左下点。右上点。右下点。左中点。右中点。

*外枠
  x=数*ダイスサイズ。y=0。
  x2=x+ダイスサイズ。y2=ダイスサイズ。
  裏画面のx,yからx2,y2へ30,30で角丸四角。

*中点
  xx=(x+ダイスサイズ/2)-半径。yy=ダイスサイズ/2-半径
  xx2=(x+ダイスサイズ/2)+半径。yy2=ダイスサイズ/2+半径。
  裏画面のxx,yyからxx2,yy2へ。

*左上点
  xx=(x+ダイスサイズ/4)-半径。yy=ダイスサイズ/4-半径
  xx2=(x+ダイスサイズ/4)+半径。yy2=ダイスサイズ/4+半径。
  裏画面のxx,yyからxx2,yy2へ。

*左下点
  xx=(x+ダイスサイズ/4)-半径。yy=(ダイスサイズ/4)*3-半径
  xx2=(x+ダイスサイズ/4)+半径。yy2=(ダイスサイズ/4)*3+半径。
  裏画面のxx,yyからxx2,yy2へ。

*右上点
  xx=(x+ダイスサイズ/4*3)-半径。yy=ダイスサイズ/4-半径
  xx2=(x+ダイスサイズ/4*3)+半径。yy2=ダイスサイズ/4+半径。
  裏画面のxx,yyからxx2,yy2へ。

*右下点
  xx=(x+ダイスサイズ/4*3)-半径。yy=(ダイスサイズ/4)*3-半径
  xx2=(x+ダイスサイズ/4*3)+半径。yy2=(ダイスサイズ/4)*3+半径。
  裏画面のxx,yyからxx2,yy2へ。

*左中点
  xx=(x+ダイスサイズ/4)-半径。yy=ダイスサイズ/2-半径
  xx2=(x+ダイスサイズ/4)+半径。yy2=ダイスサイズ/2+半径。
  裏画面のxx,yyからxx2,yy2へ。

*右中点
  xx=(x+ダイスサイズ/4*3)-半径。yy=ダイスサイズ/2-半径
  xx2=(x+ダイスサイズ/4*3)+半径。yy2=ダイスサイズ/2+半径。
  裏画面のxx,yyからxx2,yy2へ。

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

【せんせい】

 あ、あとまで画像はみんな母艦コピーして表示してましたけど、母艦じゃダメみたいです。というわけで、表画面というイメージ部品を用意して、こへ画像合成を行いました。

【でし】

 $000001って(汗) これも思いっきりチート臭いですよ?

【せんせい】

 人の目には黒に見えますから問題なし!

【でし】

 でも、黒って髪とか目とか文字とかで多用するから、不便ですよね?

【せんせい】

 普通は、固定値を透過色とする場合も、あんまり使いそうも無い$00FF00とか$FF00FFを使うんですけれどね・・・と思ったら、これはどうやらなでしこの不具合のようです。

ここの情報と、正しい避方法が載っていました。すばらしい。

http://www.himanavi.net/cgi/nade-1st/cbbs.cgi?mode=one&number=4114&type=4111&space=15&no=0

 っていうか、この命令の意味が、まだ理解できない(汗)

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

2009-04-07

サイコロを振るよ!

| 18:23

【せんせい】

 ではでは、今日はサイコロを振ってみましょう~。

 600*100のサイコロ.pngを用意するか、昨日の「サイコロ画像の準備」のコードを「サイコロ準備」てサブルーチンにして下にくっつけてください。あのままコピペではだめです。すみません。

#-----宣言---------------------------------------------------
ダイスサイズとは整数。ダイスサイズ=100
半径とは整数。半径=10
裏画面とはイメージの可視はオフ。
裏画面のWはダイスサイズ*6。裏画面のHはダイスサイズ。

所持金とは整数。所持金=5
賭け金とは整数。賭け金=0
配当とは整数。配当=2
#------------------------------------------------------------

#-----メインルーチン-----------------------------------------
もし、「サイコロ.png」が存在するならば
  裏画面の画像は「サイコロ.png違えば
  サイコロ準備
サイコロ振る
#------------------------------------------------------------

#-----サイコロを振る-----------------------------------------
*サイコロ振る
    r=6の乱数
    x=r*ダイスサイズ。y=0。
    x2=母艦のW/2-ダイスサイズ/2。y2=母艦のH/2-ダイスサイズ/2-30。
    裏画面のx,y,ダイスサイズ,ダイスサイズを母艦のx2,y2へ画像部分コピー。
#------------------------------------------------------------

【でし】

 なるほど、ちゃんとサイコロが振れました!

 コロコロ転がらないのが残念ですけれど。

【せんせい】

 無茶言わないでください(汗)

 とにかくこれでようやく、一番簡単なサイコロのプログラムを、画像で表示するところまでたどり着ました。

 次は、初に作った「ちょぼいち」に、これを合体させますよ。

【でし】

 ネタ切れしてるだけあって、えらく引っ張りますねー。


【せんせい】

 違います。若干の問題が・・・(汗)

 しかも、どんどん先へ進んだら、いきなり行き詰りそうな予感も・・・(涙)

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

2009-04-06

なでしこでサイコロを描くよ!

| 20:56

【せんせい】

 は、画像ファイルを使わずにサイコロの画像を表示させてみたいと思います。

【でし】

 えぇっ、んなことが・・・?!

【せんせい】

 サイコロの構成要素は四角と丸だけですから、何とかなるはず!

 本当は、こういうの苦手ですし、グラフィック色々使ってゲームらしい画面を作りたい希望もあるんですが・・・

【でし】

 でも、絵を描く方も、苦手だったんですね。

【せんせい】

 それはいいから!

 ていうか、ソースをコピペしたらさくっと動くほうが、ありがたい気がするのと、私的にもずいぶん勉強になるからです。

 では、早速やってみましょう。

#-----宣言----------------------------------------------------
ダイスサイズとは整数。ダイスサイズ=100
半径とは整数。半径=10
裏画面とはイメージの可視はオン。
裏画面のWはダイスサイズ*6。裏画面のHはダイスサイズ。
#-------------------------------------------------------------

#-----サイコロ画像の準備--------------------------------------
数を0から5まで繰り返す。
  もし、数=0ならば                #1のサイコロ
    線色は$000000。塗り色は$FFFFFF        #地の色は白
    外枠。                    #ダイスの外枠
    線色は$FF0000。塗り色は$FF0000        #目の色は赤
    半径=15。                 #大き目
    中点。

  もし、数=1ならば                #2のサイコロ
    線色は$000000。塗り色は$FFFFFF
    外枠。
    線色は$000000。塗り色は$000000
    半径=10。
    左上点。右下点。

  もし、数=2ならば                #3のサイコロ
    線色は$000000。塗り色は$FFFFFF
    外枠。
    線色は$000000。塗り色は$000000
    半径=10。
    中点。左上点。右下点。

  もし、数=3ならば                #4のサイコロ
    線色は$000000。塗り色は$FFFFFF
    外枠。
    線色は$000000。塗り色は$000000
    半径=10。
    左上点。左下点。右上点。右下点。

  もし、数=4ならば                #5のサイコロ
    線色は$000000。塗り色は$FFFFFF
    外枠。
    線色は$000000。塗り色は$000000
    半径=10。
    中点。左上点。左下点。右上点。右下点。

  もし、数=5ならば                #6のサイコロ
    線色は$000000。塗り色は$FFFFFF
    外枠。
    線色は$000000。塗り色は$000000
    半径=9。
    左上点。左下点。右上点。右下点。左中点。右中点。

*外枠
  x=数*ダイスサイズ。y=0。
  x2=x+ダイスサイズ。y2=ダイスサイズ。
  裏画面のx,yからx2,y2へ30,30で角丸四角。

*中点
  xx=(x+ダイスサイズ/2)-半径。yy=ダイスサイズ/2-半径
  xx2=(x+ダイスサイズ/2)+半径。yy2=ダイスサイズ/2+半径。
  裏画面のxx,yyからxx2,yy2へ。

*左上点
  xx=(x+ダイスサイズ/4)-半径。yy=ダイスサイズ/4-半径
  xx2=(x+ダイスサイズ/4)+半径。yy2=ダイスサイズ/4+半径。
  裏画面のxx,yyからxx2,yy2へ。

*左下点
  xx=(x+ダイスサイズ/4)-半径。yy=(ダイスサイズ/4)*3-半径
  xx2=(x+ダイスサイズ/4)+半径。yy2=(ダイスサイズ/4)*3+半径。
  裏画面のxx,yyからxx2,yy2へ。

*右上点
  xx=(x+ダイスサイズ/4*3)-半径。yy=ダイスサイズ/4-半径
  xx2=(x+ダイスサイズ/4*3)+半径。yy2=ダイスサイズ/4+半径。
  裏画面のxx,yyからxx2,yy2へ。

*右下点
  xx=(x+ダイスサイズ/4*3)-半径。yy=(ダイスサイズ/4)*3-半径
  xx2=(x+ダイスサイズ/4*3)+半径。yy2=(ダイスサイズ/4)*3+半径。
  裏画面のxx,yyからxx2,yy2へ。

*左中点
  xx=(x+ダイスサイズ/4)-半径。yy=ダイスサイズ/2-半径
  xx2=(x+ダイスサイズ/4)+半径。yy2=ダイスサイズ/2+半径。
  裏画面のxx,yyからxx2,yy2へ。

*右中点
  xx=(x+ダイスサイズ/4*3)-半径。yy=ダイスサイズ/2-半径
  xx2=(x+ダイスサイズ/4*3)+半径。yy2=ダイスサイズ/2+半径。
  裏画面のxx,yyからxx2,yy2へ。

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

【でし】

 おぉ、どどんと来ましたね。

【せんせい】

 しかし、内容は割と単純です。もっと、効率よい書き方もあるかも知れませんが・・・

 繰り返しの命令で、地を角丸四角で描き、所定の位置に丸を描いていくだけです。たとえば、1の出目なら中心に1個ですね。

 べつにかっこよくはありませんけど、サイコロの地の色や目の大きさや色は、出目ごとに自由に変えられますので、カラフルなサイコロも作れます。

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

2009-04-05

裏画面はびっくりなんだよ!

| 20:48

 というわけで、画像表示。ぱちぱちぱち~。

 弟子は、まんまワタシです。

 裏画面が、こんな風になっているとは! ってびっくりしたもんです;


【せんせい】

 なでしこは、JPGBMPPNGなどのファイルをイメージ部品として扱うことが出来るので、他のグラフィックツールなどでさいころの画像を用意しておけば、簡単にの画像を表示させることが出来るんですよ。こんなふうにね。

#-------------------------------------------------------------
裏画面とはイメージの可視はオフ。
裏画面の画像は「サイコロ.png」
#-------------------------------------------------------------

【でし】

 ? 何も見えない

 裏画面とは?

【せんせい】

 ゲーム中画像が変わるたびにファイルにアクセスして開いていては無駄ですし、処理も重くなってしまうので、あらかじめメモリ上に画像を呼び出しておくんです。可視を不可にしているので、実行しても何も見えませんが、実際には存在していて、必要時に表の画面へ転送するんです。

 この見えない画面のことを一般に裏画面と呼ぶので、イメージ部品の名前にしましたが、別に好きな名前で構いません。

【でし】

 じゃあ、サイコロ1、サイコロ2・・・

【せんせい】

 えっ?!

【でし】

 さいころの1~6の出目をそれぞれ絵にして保存すれば良いんですよね? それを、それぞれ裏画面に呼び出すから・・・

【せんせい】

 なるほど。ついそう思っちゃいますよね? もちろんそれでも一応可能なんですが、でもそれだと、もしトランプやマージャンだったら?

【でし】

 えーっと・・・トランプで52枚・・・(汗)

【せんせい】

 んな沢山のGUI部品を使いまくって大丈夫なのかどうかよく分かりませんけど(汗) 普通は一枚の画像にさいころの1~6の出目を並べて描いたものを用意するんですよ。して、必要な部分を「画像部分コピー」してやればOK。こんなふうにね。

 わかりやすいよう、裏画面もちょっと表示させて見ましょう。

#-------------------------------------------------------------
裏画面とはイメージの可視はオン。
裏画面の画像は「サイコロ.png」
裏画面の300,0,100,100を母艦の0,150へ画像部分コピー。
#-------------------------------------------------------------

【でし】

 ・・・フォトショで苦心してた割には、あまりかっこいい画像じゃありませんね。

【せんせい】

 ほっといて!

 とにかく、この画像部分コピーの座標と、乱数で得られる0~5の数とを連動させれば、画像でサイコロを振ることが可能になりますね。

mr-80bmr-80b2009/04/05 23:40なるほど!
画像の扱い方について、参考になりました。

雪乃☆雫雪乃☆雫2009/04/06 20:49mr-80bさま、ありがとうございます☆
参考にだなんて、恐れ多いです!!

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

2009-04-04

サイコロといえばギャンブルだよ?!

| 14:44

 昨日はとうとう日付が変わってしまって、に合わなかった・・・

 って思っていたら、なんとはてなは日付変更時刻が自分で設定できて、の初期値はAM6:00になってたらしい。すばらしい!

 というわけで、毎日連載継続中~。


 さて、サイコロです。

 とりあえず、マニュアルの文体模写風味で。

 自分が行き詰ってきたら、たちどころに崩れると思いますが;


【せんせい】

 当たり外れの判定だけじゃ、ちょっとつまらないよね?

 以下のように改良してみましたよ。

 どこが変わったか、分かるかな?

#-------------------------------------------------------------
#数当てゲーム
所持金とは整数。所持金=5
賭け金とは整数。賭け金=0
配当とは整数。配当=2
所持金>0の
  R=6の乱数+1
  「いくら賭ける?(1~{所持金})」と尋ねる。
    賭け金=それ
    「1~6のど~れだ?」と尋ねるもし(R=それならば
      所持金=所持金+賭け金*配当
    「当たり!{改行}所持金が{所持金}に増えました」と言う
    違えば
      所持金=所持金-賭け金
    「ハズレ。答えは{R}でした。{改行}所持金が{所持金}に減りました」と言う
    ここまで
「破産しました」と言う。
終わり。
#-------------------------------------------------------------

【でし】

 えっと・・・掛け金とか、配当とか、めちゃくちゃギャンブルっぽいんですけど。

【せんせい】

 のとおり! これは『ちょぼいち』という古典的なサイコロ賭博の基本形です。もちろん、実際にお金をやり取りするわけじゃないから、つかまる心配はありませんよ。

 「」命令で、所持金が残っている中ゲームを続け、当たれば賭けたお金が二に! もちろん外れれば没収です。賭け事となると、燃えてきませんか?

【でし】

 所持金が0になったら破産してゲームオーバーなんですね。ていうか、ゲームオーバーするまでこのゲーム、やめられないんですけど。

【せんせい】

 それは、仕様ですので、スルーしてください(汗)

 のために、所持金も配当も低くしてあります(笑)

 所持金全額をかけ続ければ、わりとすぐに終われると思いますが、どうしてもという場合はエディタから強制終了して。

 実はこのゲーム、ゲーム的にもっと大きな問題がありました。

 実は、所持金外の金額も賭けることができちゃうんですよ。

 たとえば、いくら賭ける?に100と答えて当てれば、なんとあっというに所持金が205に!

【でし】

 おぉ!

【せんせい】

 もちろん外せば、借金95ですけど、借金があってもなくても破産して終了に変わりないですからね。

 というわけで、以下のようにさらに改良してみましたよ。

#-------------------------------------------------------------
#数当てゲーム
所持金とは整数。所持金=5
賭け金とは整数。賭け金=0
配当とは整数。配当=2
所持金>0の
  R=6の乱数+1
  賭ける


*賭ける
  「いくら賭ける?(1~{所持金})」と尋ねる。
  賭け金=それ
  もし、(それ<1)または(それ)または(それ>所持金)ならば
    賭ける。
  違えば
    答える
*答える
    「1~6のど~れだ?」と尋ねるもし、(それ<1)または(それ)または(それ>6)ならば
      答える
    もし(R=それならば
      所持金=所持金+賭け金*配当
    「当たり!{改行}所持金が{所持金}に増えました」と言う
    違えば
      所持金=所持金-賭け金
    「ハズレ。答えは{R}でした。{改行}所持金が{所持金}に減りました」と言う
  ここまで
「破産しました」と言う。
終わり。
#-------------------------------------------------------------

【でし】

 ユーザー定義関数ですね!

【せんせい】

 サブルーチンのラベルとしてしか使ったことが無いですけれどね(汗)

 とにかくこれで、賭け金は1~所持金の範囲内、当てるときもサイコロの1~6の範囲内しか受け付けなくなりました。よかったよかった。

【でし】でも、やっぱり文字だけじゃ物足りない。ゲームであるからには、かっこいい絵を表示しなくては!!(笑)


【せんせい】

 というわけで次は、サイコロを画面に表示させることに挑戦です。

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

2009-04-03

サイコロで遊ぶよ!

| 00:45

 マニュアルのゲーム製作編は、書きかけです。

 どんなかっこいい画像をご用意中なのか、非常に気になるところです(笑)

 それはさておき、ゲームをつくりたいワタシは、とっても残念!

 ってわけで、このコーナーを勝手に拡張していく計画だよ!


 講座のとおり、サイコロ→クイズ→アドベンチャーと進んでいきますですよ。

 ADVは、ストーリーはあんまり作れないけど、ちょっとやってみたかったことのひとつです。

 ちなみに、急につくりたいものが思いついたら、休んでっちにシフトします(汗)


 でもとりあえず、楽そうなサイコロから遊び始めますですよ☆

 講座にも書いてますけど、乱数はゲームの基本。

 ワタシなんて、乱数って聞いただけでワクワクしちゃいます!(バカ;)

 といっても、乱数について学ぶことっていったら、あのとおりで、あとはそれをうまく使っていくだけのことなんですけどね。

 でも、昔TRGPとかやってたワタシは、実はダイスがだいすきなんですよ~♪

 ただ転がしてるだけで、何か楽しい(笑)


 さて、講座に記載の、意外と何度も遊んでしまう数当てゲームは、当たりはずれを判定してくれるだけなので、これを改造して、もっと燃えるゲームにする予定(萌えじゃないです、念のためw)

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

2009-04-02

さてさて、次は・・・

| 23:55

 何を作りましょうかね~。

 いままで、毎日更新してきたのにくと悔しいから書き込みしてるだけで、はあまり内容が無かったりします(汗)


 とにかくまあ、ゲームメインでやっていきますです。

 まだまだ、すごいものは全然作れそうな気がしないので、こつこつと簡単なテーブルゲームを、考え考え作っていこうとは思ってる。

 しかも、思考ルーチン? なんてどーやるのかまったくわかんないから、一人遊びのですねー。


 んなの、昔と違ってケータイでDLし放題だけど、気にしないで!

 プログラム作って動かす過程のものが遊びなんだよ☆


 でわでわ、明日までに次の構想をまとめますです。

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

2009-04-01

『15パズル』 Ver.2 完成だよ!!

| 21:10

 15パズルでやりたいこと、出来ることといったら、このくらいかなあ?

 あと思いつくのは、駒の数を増やしてみるくらいですけど、大体のやり方が見えているので、学習としては効果が薄そうなのに加えて、それを解きたい気持ちが湧き上がってこない(汗)しかも、当初は全然んなつもりじゃなかったから、の辺りの数値は全部数字で決め打ちしてるから、直すのがえらくめんどー(--; などの問題により、パス!(だから何でも変数にしておいたほうがいいよ、っていう好例?;)


 ・・・ってわけで、バージョン2の完成! としました☆

 に合いそうだったので、うれしがってコンテストにも応募してみました! 参加賞って何かな? かな?(それがめあてか;)

 NAKOちゃんストラップとか?(笑)

#-------------------------------------------------------------
#  15パズル   ver.2.00
#-------------------------------------------------------------

#-----母艦設計------------------------------------------------
!母艦設計=「母艦の可視はオフ母艦のタイトルは「15パズル」
母艦のWは640。母艦のHは480。
母艦を$FFBBBBで画面クリア母艦のスタイルは「枠固定」
母艦オフに最大化ボタン有効変更。
母艦中央移動

#--メニュー設定----
『#親部品名,部品名,テキスト,ショートカット,オプション,イベント
なし,ファイルメニュー,ファイル(&F),,,
 -,新規メニュー,新しいゲーム(&N),Ctrl+N,,新規ゲーム
 -,やり直しメニュー,このゲームをやり直す(&R),Ctrl+R,,やり直し
 -,-,,,,
 -,画像変更メニュー,画像変更(&C),Ctrl+C,,画像変更
 -,-,,,,
 -,成績表メニュー,成績表(&S),Ctrl+S,,成績表表示
 -,成績リセットメニュー,成績リセット(&D),Ctrl+D,,成績リセット
 -,-,,,,
 -,閉じるメニュー,閉じる(&X),Ctrl+X,,終わる

なし,ヘルプメニュー,ヘルプ(&H),,,
 -,リードミーメニュー,よんでね(&R),Ctrl+R,,りーどみー
 -,-,,,,
 -,ヒントメニュー,ヒントを見る(&H),F1,,ヒント表示
 -,ギブアップメニュー,ギブアップする(&G),F5,,ギブアップ
 -,-,,,,
 -,バージョンメニュー,バージョン情報(&A),Ctrl+A,,バージョン
』をメニュー一括作成。

#手数カウント機能用
文字書体は「MSPゴシック」。文字サイズは18。文字色は$AA0000。
母艦の440,33へ「手数」を文字描画。

手数ラベルとはラベルのテキストは「0」
のXは500。のYは30。のWは100。のHは35。
文字書体は「MSPゴシック」。文字サイズは24。の文字位置は右。文字色は$550000。
の背景色は$FFDDDD。の透明はオフ。

#タイムトライアル用
トライアルタイマーとはタイマー隔は1。

母艦の440,110へ「タイムトライアル!」を文字描画。

タイムラベルとはラベルのテキストは「00:00」
のXは440。のYは140。のWは180。のHは50。の文字位置は中央。
文字書体は「MSPゴシック」。文字サイズは36。文字色は$550000。
の背景色は$FFDDDD。の透明はオフ。

#ヒント表示用
ヒントメニューチェックオフ母艦の可視はオン。
#-------------------------------------------------------------

#-----宣言----------------------------------------------------
パズル画像は「15パズル.jpg」。
裏画面とはイメージの可視はオフ。
アキとは整数。
駒とは配列。
新規ゲーム待ち文字位置とは文字列。
問題作成中とは文字列。
手数順位とは整数。手数順位=0
タイム順位とは整数。タイム順位=0
表示順位数とは整数表示順位数=5

記憶とは配列。
アキ記憶とは整数。

成績とは配列。
作業用とはイメージの可視はオフ。

#--定数----
盤サイズとは整数。盤サイズは400。
駒サイズとは整数。駒サイズは100。
左マージンとは整数。左マージンは15。
上マージンとは整数。上マージンは15。
裏画面のWは盤サイズ。裏画面のHは盤サイズ。
#-------------------------------------------------------------

#-----データ読み込み------------------------------------------
もし、「成績表.txt」が存在するならば
  「成績表.txt」を毎行読んで反復
    成績¥回数対象違えば
  「成績表.txt」に保存。												#成績表が無かったら作成する

もし、パズル画像の存在が1ならば
  作業用の画像はパズル画像。
  もし、作業用のW=盤サイズ かつ 作業用のH=盤サイズでなければ     #画像ファイルがデフォルトの物と違う場合
    リサイズし変更
  違えば
    作業用を裏画面の0,0へ画像コピー違えば
  十五																	#画像ファイルが無かった場合	
#-------------------------------------------------------------

#-----メインルーチン------------------------------------------
新規ゲーム。
マウス判定。
#-------------------------------------------------------------


#-----初期化処理----------------------------------------------
*初期化
  トライアルタイマー停止。
  手数は0。手数ラベルのテキストは「0」。のXは500。のYは30。のWは100。のHは35。		#手数も0に初期化。
  経過は0。タイムラベルのテキストは「00:00」。のXは440。のYは140。のWは180。のHは50。	#タイムも初期化。
#-------------------------------------------------------------

#-----新規ゲーム----------------------------------------------
*新規ゲーム
  #---初期化------
  アキは15。															#アキ位置を初期化。
  数を0から15まで繰り返す。											#駒位置を初期化
    駒¥数は数。
  初期化。

  #---問題作成------
  問題作成中は「オン」
  乱数初期化。
  1000
    rは4の乱数
    もし、rが0ならば
      駒入れ替え_上。

    もし、rが1ならば	
      駒入れ替え_下。

    もし、rが2ならば
      駒入れ替え_左。

    もし、rが3ならば
      駒入れ替え_右。

  ゲーム画面描画。

#-----ゲーム画面描画------------------------------------------
*ゲーム画面描画
  線色は$AAAAAA。線太さは5。塗り色は$DDDDDD。		#画面のクリア
  母艦の10,10から420,420へ四角。
  アキ記憶=アキ。											 			#アキの初期値を記憶

  数を0から15まで繰り返す。
    記憶¥数=駒¥数													#現在の配列を記憶

    x=駒¥数%4。y=駒¥数/4。y=yを切り下げ。
    x=x*駒サイズ。y=y*駒サイズ。

    x2=数%4。y2=数/4。y2=y2を切り下げ。
    x2=左マージン+x2*駒サイズ。y2=上マージン+y2*駒サイズ

    もし、駒¥数<15ならば
      裏画面のx,y,駒サイズ,駒サイズを母艦のx2,y2へ画像部分コピー。	#ゲーム画面描画

  新規ゲーム待ちは「オフ」
  問題作成中は「オフ」
#-------------------------------------------------------------

#-----マウス判定----------------------------------------------
*マウス判定
  母艦のマウス押した時は
    もし、(新規ゲーム待ち=「オフ」)かつ
    (母艦のマウスX>左マージン)かつ									#マウスが盤の中で
    (母艦のマウスY>上マージン)かつ									#押されたか確認
    (母艦のマウスX<左マージン+盤サイズ)かつ
    (母艦のマウスY<上マージン+盤サイズ)ならば
    
      もし、手数=0ならば											#はじめに盤をクリックした時から
        トライアルタイマーを開始。									#タイマーを動かす
        タイムトライアル。
        
      mx=(母艦のマウスX-左マージン)/駒サイズ。my=(母艦のマウスY-上マージン)/駒サイズ。
      mx=mxを切り下げ。my=myを切り下げ。
      m=mx+my*4。											#どの駒を押したか?

      x=駒¥m%4。y=駒¥m/4。y=yを切り下げ。
      x=x*駒サイズ。y=y*駒サイズ。							#クリックした駒が裏画面に実際にある位置
      
      x2=アキ%4。y2=アキ/4。y2=y2を切り下げ。
      x2=左マージン+x2*駒サイズ。y2=上マージン+y2*駒サイズ		#のときのアキの座標→クリックした駒と入れ替わる
      
      mx=左マージン+mx*駒サイズ。my=上マージン+my*駒サイズ。	#マウスで押した駒の座標→アキに入れ替わる。

      もし、駒¥m<15ならば
        もし、m+4=アキならば
          駒入れ替え_上。

        もし、m-4=アキならば
          駒入れ替え_下。

        もし、m+1=アキならば
          駒入れ替え_左。

        もし、m-1=アキならば
          駒入れ替え_右。

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

#-----駒入れ替え----------------------------------------------
*駒入れ替え_上
  もし、(アキ/4≧1)ならば										#アキが一番上でなければ
    駒のアキと(アキ-4)を配列入れ替え。							#上の駒と入れ替え
    アキ=アキ-4。駒入れ替え_描画。

*駒入れ替え_下
  もし、(アキ/4<3)ならば										#アキが一番下でなければ
    駒のアキと(アキ+4)を配列入れ替え。							#下の駒と入れ替え
    アキ=アキ+4。駒入れ替え_描画。

*駒入れ替え_左
  もし、(アキ%4>0)ならば									#アキが左端でなければ
    駒のアキと(アキ-1)を配列入れ替え。							#左の駒と入れ替え
    アキ=アキ-1。駒入れ替え_描画。

*駒入れ替え_右
  もし、(アキ%4<3)ならば									#アキが右端でなければ
    駒のアキと(アキ+1)を配列入れ替え。							#右の駒と入れ替え
    アキ=アキ+1。駒入れ替え_描画。

*駒入れ替え_描画
  もし、問題作成中が「オフならば								#問題作成はいちいち描画しない
    裏画面のx,y,駒サイズ,駒サイズを母艦のx2,y2へ画像部分コピー。
    線色は$DDDDDD。線太さは0。塗り色は$DDDDDD。
    母艦のmx,myから(mx)+駒サイズ,(my)+駒サイズへ四角。
    完成判定。
#-------------------------------------------------------------

#-----完成判定------------------------------------------------
*完成判定
  #---手数表示------
  手数=手数+1。手数ラベルのテキストは手数。のXは500。のYは30。のWは100。のHは35。

  完成は整数。完成は0。
  数を0から15まで繰り返す。
    もし、駒¥数が数ならば
      完成は完成+1
  もし、完成=16ならば
    トライアルタイマー停止。												#タイマー停止

    成績表記録。
    
    #表示させる文字の設定
    もし、手数順位=0ならば
      手数成績=「{改行} 手数{手数}手です」
    違えば
      手数成績=「{改行} 手数{手数}手は{改行}   歴代{手数順位}位の成績です」
    
    もし、タイム順位=0ならば
      タイム成績=「{改行} タイム{分}分{秒}秒です」
    違えば
      タイム順位=タイム順位-表示順位数
      タイム成績=「{改行} タイム{分}分{秒}秒は{改行}   歴代{タイム順位}位の成績です」    

    #表示させる
    もし、(手数順位=0 かつ タイム順位=0)ならば
      ダイアログタイトルは「完成!」
      「おめでとう。完成です!{改行}{手数成績}{タイム成績}」と言う。
    違えば
      ダイアログタイトルは「ハイスコアが出ました!」
      「おめでとう。新記録です!!{改行}{手数成績}{タイム成績}」と言う。
      成績表表示。

    裏画面を母艦の左マージン,上マージンへ画像コピー。						#16コマ目表示

    新記録は0
    新規ゲーム待ちは「オン」												#完成したら新規ゲーム開始までマウスで駒を動かさない。
#-------------------------------------------------------------

#-----バージョン表示------------------------------------------
*バージョン
  ダイアログタイトルは「バージョン情報」
  「{二重カッコ}15パズル{二重カッコ閉じ}{改行} Version 2.00{改行}{改行} by 雪乃☆雫」と言う。

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

#-----このゲームをやりなおす----------------------------------
*やり直し
  初期化。
  数を0から15まで繰り返す。
    駒¥数=記憶¥数。
  アキはアキ記憶。															#アキ位置を初期化。
  ゲーム画面描画。
  マウス判定。
#-------------------------------------------------------------

#-----タイムトライアル----------------------------------------
*タイムトライアル
  トライアルタイマーの時満ちた時は~
    経過=経過+1。
    分=経過/60を切り下げ。
    秒=経過%60。
    分=分を2でゼロ埋め。秒=秒を2でゼロ埋め。							#時を00:00で表示させる。
    タイムラベルのテキストは「{分}:{秒}」。のXは440。のYは140。のWは180。のHは50。
#-------------------------------------------------------------

#-----成績表表示----------------------------------------------
*成績表表示
  s=「★☆★成績表★☆★{改行}{改行}◎手数のハイスコア{改行}」
  数を1から表示順位数まで繰り返す
    もし、成績¥数がならば
      s=「{s} {数}位  ---手{改行}」
    違えば
      s=「{s} {数}位  {成績¥数}手{改行}」
  s=「{s}{改行}◎タイムのハイスコア{改行}」
  数を(表示順位数+1)から(表示順位数*2)まで繰り返す
    分=成績¥数/60を切り下げ。
    秒=成績¥数%60。
    分=分を2でゼロ埋め。秒=秒を2でゼロ埋め
    もし、成績¥数がならば
      s=「{s} {数-表示順位数}位  --分--秒{改行}」
    違えば
      s=「{s} {数-表示順位数}位  {分}分{秒}秒{改行}」
  ダイアログタイトルは「成績表」
  sを言う。

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

#-----成績表記録----------------------------------------------
*成績表記録
  #手数のハイスコア
  手数順位=0
  数を表示順位数から1まで繰り返す。
    もし、(成績¥数>手数 または 成績¥数=ならば
      手数順位=数
  数を表示順位数から1まで繰り返す。
    もし、手数順位=0でなければ
      もし、手数順位=数ならば
        成績¥数=手数
      もし、手数順位<数ならば
        成績¥数=成績¥(数-1)

      
  #タイムのハイスコア
  タイム順位=0
  数を(表示順位数*2)から(表示順位数+1)まで繰り返す。
    もし、(成績¥数>経過 または 成績¥数=ならば
      タイム順位=数
  数を(表示順位数*2)から(表示順位数+1)まで繰り返す。
    もし、タイム順位=0でなければ
      もし、タイム順位=数ならば
        成績¥数=経過
      もし、タイム順位<数ならば
        成績¥数=成績¥(数-1)

  s=「」
  数を1から表示順位数まで繰り返す
    s=「{s}{成績¥数}{改行}」
  数を(表示順位数+1)から(表示順位数*2)まで繰り返す
    s=「{s}{成績¥数}{改行}」

  sを「{母艦パス}成績表.txt」へ保存。
#-------------------------------------------------------------

#-----画像変更------------------------------------------------
*画像変更
  マイピクチャー作業フォルダ変更。
  「*.jpg;*.jpeg;*.png;*.bmp」のファイル選択。
  もしそれでなければ												#キャンセルした時は処理しない
    作業用の画像はそれ。
    リサイズし変更

*リサイズし変更
  もし、作業用のW>作業用のHならば									#横長の画像
    x=(作業用のW-作業用のH)/2。y=0。
    x2=作業用のH+x。y2=作業用のH。
    裏画面をy2,y2で画像リサイズ。								#短いほうの辺に長さあわせて正方形
  違えば
    x=0。y=(作業用のH-作業用のW)/2。
    x2=作業用のW。y2=作業用のW+y
    裏画面をx2,x2で画像リサイズ。

  作業用のx,y,x2,y2を裏画面の0,0へ画像部分コピー。
  裏画面を盤サイズ,盤サイズで画像リサイズ。
  裏画面を母艦の左マージン,上マージンへ画像コピー。
  ヒントメニューチェックオン。ヒント表示。            #画像を変更したら、ヒントはいったん消す
  新規ゲーム
#-------------------------------------------------------------

#-----ヒント表示----------------------------------------------
*ヒント表示
  もし、(ヒントメニューチェックオフ)ならば
    ヒントメニューチェックオン。
    作業用を盤サイズ,盤サイズで画像リサイズ。
    裏画面を作業用の0,0へ画像コピー。
    作業用を150,150で画像リサイズ。
    作業用を母艦の455,260へ画像コピー。
    文字サイズは18。文字色は$AA0000。
    母艦の478,230へ「☆ヒント☆」を文字描画。
    描画処理反映。
  違えば
    ヒントメニューチェックオフ。
    線色は$FFBBBB。塗り色は$FFBBBB。
    母艦の455,230から610,410へ四角。
    ラベル3の可視はオフ。
    描画処理反映。
#-------------------------------------------------------------

#-----ぎぶあっぷ----------------------------------------------
*ギブアップ
  ダイアログタイトルは「ギブアップする?」
  「本当に?」と二択。
    もしそれはいならば
      裏画面を母艦の左マージン,上マージンへ画像コピー。
      描画処理反映。
      新規ゲーム待ちは「オン」
      初期化。
#-------------------------------------------------------------

#-----しょぼい15パズル画面作成------------------------------
*十五
  裏画面のWは盤サイズ。裏画面のHは盤サイズ。
  裏画面を$FFFFAAで画面クリア
  線色は$AAAAAA。線太さは0。
  数を0から15まで繰り返す
    x=数%4。
    y=数/4を切り下げ。
    yで条件分岐
      0ならば
        塗り色は$AAAAFF
      1ならば
        塗り色は$FFAAAA
      2ならば
        塗り色は$FFDDAA
      3ならば
        塗り色は$AAFFAA

    裏画面のx*駒サイズ,y*駒サイズからx*駒サイズ+駒サイズ,y*駒サイズ+駒サイズへ四角。
    文字サイズは42。文字色は$006600
    もし、(数>8)ならば
      x=20+(数%4)*駒サイズ。
    違えば
      x=35+(数%4)*駒サイズ。
    y=数/4を切り下げ。y=20+y*駒サイズ。
    もし、数=15ならば
      裏画面のx,yへ「★」を文字描画
    違えば
      裏画面のx,yへ(数+1)を文字描画
  
  裏画面を母艦の左マージン,上マージンへ画像コピー。
#-------------------------------------------------------------

#-----成績リセット--------------------------------------------
*成績リセット
  ダイアログタイトルは「成績表リセット」
  「リセットしてもいい?」と二択。
    もしそれはいならば
      (表示順位数*2)
      成績¥回数
      を「{母艦パス}成績表.txt」へ保存。
#-------------------------------------------------------------

#-----よんでね------------------------------------------------
*りーどみー
  もし、「よんでね.txt」が存在するならば
    「よんでね.txt」を起動。
  違えば
    ダイアログタイトルは「よんでね」
    「【15パズルのルール】
  知らない人はあまりいないと思いますが…
  16枚ある駒の16番目の駒を抜いてばらばらにしたものを動かしていって、
 1から15まで数字を連続させて並べたらクリアです(画像の場合はもちろん
 右下の一マスを除いて、の画像を完成させればクリアです)
  いているマス目の上下左右の駒ををクリックすると、の駒を動かす
 ことができます。
  当然のことながら、きマスに隣接していない駒は(斜めも不可)動か
 すことが出来ません」を言う。
#-------------------------------------------------------------

 違う画像を選択で別のフォルダの画像を選んだとき、のフォルダに成績表が記録されてしまうことがわかったので、成績表.txtの保存先を母艦パスにするように変更しました。

mr-80bmr-80b2009/04/01 23:08プレイしてみました。
楽しいです!

雪乃☆雫雪乃☆雫2009/04/02 19:44mr-80bさま
ありがとうございます!!
遊んでいただけたんですね!うれしー♪
おかげさまでここまでこぎつけました。
これからも、頑張ります☆

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