Hatena::Groupnadesiko

雪乃☆雫のなでしこ日和

2009-05-14

とりあえず解決、だよ!

| 22:00

【せんせい】

 かなり無理やり、見た目を合わせてとりあえず動くようにした感がありますが、なんとか完成させましたよ。

 結局、透過したい部分を母艦の背景色に合わせるチートを採用(笑)

 また、関数のほうもちょっと書き換えて、マウス判定は選択板全体で行いますが、反映は文字の乗っていない○の数字の部分だけをコピーすることにしました。

 あと、タイムアウトしたときに正誤表示で外れの×を表示させるのを忘れていたので直しました。

 八割方は完成・・・というわけで、バージョン0.8としています。

【でし】

 問題集.csvも忘れずに!

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

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


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

選択板xとは整数。選択板x=15。
選択板yとは整数。選択板y=250。
選択板幅とは整数。選択板幅=400。
選択板高さとは整数。選択板高さ=40。
選択板隔とは整数。選択板隔=10。
選択板位置とは配列。
4
  選択板位置¥回数,0は選択板x
  選択板位置¥回数,1は選択板y+(選択板高さ+選択板隔)*(回数-1)
  選択板位置¥回数,2は40
  選択板位置¥回数,3は選択板高さ

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

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

成績表とはイメージの可視はオフ
成績表の幅は400
成績表の高さは400
成績表のXは(母艦の幅-成績表の幅)/2
成績表のYは(母艦の高さ-成績表の高さ)/2
成績表を$FFFFFFで画面クリア。

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

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

問題集とは配列。
データとは配列。
問題数とは整数。

問題とは文字列。
答えとは文字列。
選択肢とは配列。
正解数とは整数。正解数=0。
得点とは整数。得点=0。
総合得点とは整数。総合得点=0。
番号とは整数。番号=0。

ノルマとは整数。
追試とは整数。追試=3。
時限とは整数。時限=0。
科目とは配列。  #0科目、1ノルマ
科目=「古典文学,2
日本史,3」
科目数とは整数。科目数=科目の要素数。
成績とは配列。  #0正解数、1得点、2正解率

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


#-----メインルーチン-------------------------------------------
画面準備
「問題集.csv」を開く。
問題集はそれ。
データセット
消去で正誤表示
情報描画
得点描画
問題設定
#------------------------------------------------------------


#------------------------------------------------------------
*問題設定
  マウス待ち=「オフ」
  マウス判定

  もし、番号=問題数ならば
    終了判定
  違えば
    問題はデータ¥番号,0
    答えはデータ¥番号,1
    選択肢は「{データ¥番号,1}{改行}{データ¥番号,2}{改行}{データ¥番号,3}{改行}{データ¥番号,4}」
    選択肢を配列シャッフル。
    番号=番号+1
    出題

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

  0.5秒待つ。
  文字サイズは18。文字色白色。
  母艦の黒板x+30,黒板y+20へ「第{番号}問」を文字描画。
  描画処理反映。0.5秒待つ。
  母艦の黒板x+50,黒板y+70へ問題を100で文字遅延描画。
  制限時タイマーを開始
  制限時測定。
  マウス待ち=「オン」
  マウス判定。
#------------------------------------------------------------


*マウス判定
  もし、マウス待ち=「オンならば
    母艦マウス移動した時は
      裏画面の選択板位置を母艦へマウスインアウト反映

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

  違えば
    母艦マウス移動した時は
      戻る

    母艦のマウス押した時は
      戻る終了判定
  もし、正解数≧INT(科目¥時限,1)ならば
    「ノルマクリア!」と言う。
    成績¥時限,0=正解数。
    成績¥時限,1=得点。
    成績¥時限,2=正解数/問題数*100を四捨五入。
    もし、時限+1=科目数ならば
      成績発表。
    違えば
      時限=時限+1
      番号=0
      正解数=0
      得点=0
      データセット。
      情報描画。
      消去で正誤表示。
      得点描画。
      問題設定。

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

*成績発表
  塗り色は$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へ左,中央で「{総合得点}点」を枠内文字描画。

  成績表を母艦の(母艦の幅-成績表の幅)/2,(母艦の高さ-成績表の高さ)/2へ画像コピー。
#------------------------------------------------------------
*画面準備
  #黒板の描画
  線太さは3。塗り色は$008800。線色は$000000。
  裏画面の0,0から黒板幅,黒板高さへ四角。
  線太さは0。塗り色は$804000
  裏画面の0,黒板高さ-15から黒板幅,黒板高さへ四角。
  裏画面の0,0,黒板幅,黒板高さを表画面の黒板x,黒板yへ画像部分コピー。

  #選択板の描画
  数を0から3まで繰り返す。
    線太さは2。塗り色は$DD9900。線色は$000001。
    裏画面の20,黒板高さ+1+選択板高さ*数から45,黒板高さ+1+選択板高さ+選択板高さ*数へ四角。
    裏画面の60,黒板高さ+1+選択板高さ*数から選択板幅+40,黒板高さ+1+選択板高さ+選択板高さ*数へ四角。
    塗り色は$FFFFAA。線色は$FFFFAA。
    裏画面の41,黒板高さ+1+選択板高さ*数から60,黒板高さ+1+選択板高さ+選択板高さ*数へ四角。


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

    線太さは2。線色は$000001。塗り色は番号色
    裏画面の0,黒板高さ+1+選択板高さ*数から40,黒板高さ+1+選択板高さ+選択板高さ*数へ 
        文字サイズは24。文字色白色。
        裏画面の11,黒板高さ+5+選択板高さ*数へ数+1を文字描画。

    塗り色は番号色2。
    裏画面の40,黒板高さ+1+選択板高さ*数から80,黒板高さ+1+選択板高さ+選択板高さ*数へ 
        文字サイズは24。文字色白色。
        裏画面の51,黒板高さ+5+選択板高さ*数へ数+1を文字描画。

    裏画面の80,黒板高さ+1+選択板高さ*数,選択板幅-40,黒板高さ+1+選択板高さ+選択板高さ*数を表画面の選択板x+40,選択板y+(選択板高さ+選択板隔)*数へ画像部分コピー。

  裏画面の0,黒板高さ+1を選択板位置で表画面へマウスオーバーボタン表示

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

#-----制限時------------------------------------------------
*制限時測定
  制限時タイマーの時満ちた時は
    残り=制限時-経過
    経過=経過+1
    もし、残り=0ならば
      タイマー停止。
      外れで正誤表示。
      「時切れ!」と言う。
      問題設定。

    違えばもし、残り>0ならば
      線太さは0。塗り色は$FF0000。線色は$000000。
      x=経過/制限時*黒板幅。
      母艦の黒板x,黒板高さから黒板x+x,黒板高さ+黒板yへ四角。

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


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

  #ノルマ
  もし、ノルマ≦0ならば
    文字書体は「MS Pゴシック」。文字サイズは20。文字色は$FF0000。
    表画面の435,240,180,40へ中央,中央で「クリア!」を枠内文字描画。
    表画面の435,240,180,40を母艦の435,240へ画像部分コピー。
  違えば
    文字書体は「MS Pゴシック」。文字サイズは20。文字色は$555500。
    表画面の435,240,180,40へ中央,中央で「残り {ノルマ} 問」を枠内文字描画。

    表画面の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へ「総合得点」を文字描画。

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


#-----正誤表示------------------------------------------------
*正誤表示(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へ画像部分コピー。
  描画処理反映

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


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


#------------------------------------------------------------
●枠内文字描画({グループ=?}OBJのX,Y,W,HへSを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を文字描画。

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


●マウスオーバーボタン表示({グループ=?}OBJ1のX,YをAで{グループ=?}OBJ2へ)
  A¥0,0=X。A¥0,1=Y
  (Aの要素数-1)
    OBJ1のX,Y+(回数-1)*(A¥回数,3),(A¥回数,2),(A¥回数,3)をOBJ2の(A¥回数,0),(A¥回数,1)へ画像部分コピー。

●マウス位置判定({グループ=?}OBJでAの)
  (Aの要素数-1)
    もし、((OBJ→マウスX)>(A¥回数,0))かつ
      ((OBJ→マウスX)<選択板幅)かつ
      ((OBJ→マウスY)>(A¥回数,1))かつ
      ((OBJ→マウスY)<(A¥回数,1)+(A¥回数,3))ならば
        選択ボタン回数。
    違えばもし、(回数=Aの要素数)かつ(選択ボタン=0)ならば
      選択ボタンは0。
    ここまで

●マウスインアウト反映({グループ=?}OBJ1のAを{グループ=?}OBJ2へ)
  OBJ2でAのマウス位置判定

  もし、前選択ボタン<>選択ボタンならば
    もし、前選択ボタン>0ならば
      OBJ1の(A¥0,0),(A¥0,1)+(前選択ボタン-1)*(A¥(前選択ボタン),3),(A¥(前選択ボタン),2),(A¥(前選択ボタン),3)をOBJ2の(A¥(前選択ボタン),0),(A¥(前選択ボタン),1)へ画像部分コピー。
    もし、選択ボタン>0ならば
      OBJ1の(A¥0,0)+(A¥(選択ボタン),2),(A¥0,1)+(選択ボタン-1)*(A¥(選択ボタン),3),(A¥(選択ボタン),2),(A¥(選択ボタン),3)をOBJ2の(A¥(選択ボタン),0),(A¥(選択ボタン),1)へ画像部分コピー。
    前選択ボタン=選択ボタン
  選択ボタン=0
  描画処理反映

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

【せんせい】

 一応できたかのように見えますが、重大なバグとして、たまになぜかマウスクリックしてないのに、マウスがある場所で勝手に正解とか外れとか判定されてしまうことがあります。なんでそうなっているのか不明です。これは直さないと、クイズゲームとしては致命的(--;

 あと、やっぱりもう少し作りこみたいですよねー。

 15パズルのときみたいに、成績表を保存してランキングとか。名前の登録とか?

 現状は最後までいったら終了ボタンすらなかったりして(汗)

 ソースも、もうちょっとちゃんとしたいところですね。

 次着手するときは、書き直しつつ思い出すとこから始めよう(笑)

【でし】

 あれっ、クイズは開発終了なんですか?

【せんせい】

 いろいろ直したいところや盛り込みたいコトもあるので、気が向いたりネタが尽きたらやりますですよ。

 とりあえずもう、紫式部とか枕草子とか見飽きたのですよ~(>_<)

 誰か楽しい問題考えて~~~;

【でし】

 して、問題解くのに夢中になって、結局プログラムは完成しないいうオチ?

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