Hatena::Groupnadesiko

雪乃☆雫のなでしこ日和

2009-05-27

点滅カーソルを出すよ!

| 23:08

【せんせい】

 前で、文字が表示できるようになりましたが、これだけではありません。

 通常、1ページ分の表示が終わったあと、右下や中央下辺りに▼などのマークが点滅して、お知らせしてくれるのが普通です。

 これは、アニメ部品を使ってみることにしますよ。そうすれば、無味乾燥な三角だけじゃなく、かわいい画像を点滅させたり、くるくるしたりもできそうです。

#-----点滅カーソル表示---------------------------------------
カーソル画像とはイメージの可視はオフの幅は24*2。の高さは24。

カーソル画像を$000001で画面クリア文字書体は「MS ゴシック|20|太字」。文字色黒色。
カーソル画像の1,1,23,23へ「▼」を中央,中央で枠内文字描画文字色白色。
カーソル画像の0,0,22,22へ「▼」を中央,中央で枠内文字描画。

処理用1とはイメージの可視はオフ
の幅は24。の高さは24。

セル1とはイメージの可視はオフの幅は24。の高さは24。
表画面の640-35,480-35,24,24をセル1の0,0へ画像部分コピー。
カーソル画像の0,0,24,24を処理用1の0,0へ画像部分コピー。
処理用1をセル1の0,0へ画像合成改。  

セル2とはイメージの可視はオフの幅は24。の高さは24。
表画面の640-35,480-35,24,24をセル2の0,0へ画像部分コピー。
カーソル画像の24,0,24,24を処理用1の0,0へ画像部分コピー。
処理用1をセル2の0,0へ画像合成改。 

ブリンクとはアニメ
のX=640-35。のY=480-35。
ブリンクの画像は「セル1
セル2」
表示隔は500。
#------------------------------------------------------------

【でし】

 しかし、結局絵が描けないので無味乾燥な▼を使っています(笑)

【せんせい】

 問題は、こではなく!

 またちょっと、汚いソースとなっていますが・・・

 アニメ部品を他のイメージと合成というのはできないようなので、カーソルを表示したい位置の表画面をカーソルサイズで切り取ったものを、カーソル画像とを合成してアニメ用のセルを作っています。

【でし】

 点滅カーソル、出ましたね!

 ですが、くるくるしたりするためには、もっとセル数が必要になりますよね。

【せんせい】

 ーなんですね。セル1とかセル2とか、アニメパターンが増えたら、大変だよね。

 これは、動的作成ってやつを使うべきなのかな?

 ・・・と思い、やってみましたが・・・

#-----点滅カーソル表示---------------------------------------
2
    セル[回数]をイメージとして作成。
    セル[回数]→可視はオフ。
    セル[回数]→幅は24。
    セル[回数]→高さは24。

    表画面の640-35,480-35,24,24をセル[回数]の0,0へ画像部分コピー。
    カーソル画像の(回数-1)*24,0,24,24を処理用1の0,0へ画像部分コピー。
    処理用1をセル[回数]の0,0へ画像合成改。
#  セル[回数]→可視はオン

ブリンクとはアニメ
のX=640-35。のY=480-35。
ブリンクの画像は「セル[1]
セル[2]」
表示隔は500。
#------------------------------------------------------------

 セルを動的に作成はできましたが、アニメの画像に設定できなひ~(泣)

 {}で括ったり、→使ったり、@やらなんじゃらかんじゃら試しても、だめっぽい。

 しかも、なんだかファイルを開こうとして、ありませんと言われてる気が;

 アニメのほうは静的に作成してるのがだめなのかな?

 先に、セル1、セル2を設定しようとして、まだ作成されてないから、ファイルを探しに行ってるとか?

 うーん、またまた、課題ができてしまった・・・

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

2009-05-26

テキストを表示するよ!

| 20:41

【せんせい】

 前でテキストウィンドウの準備ができたので、早速文字を表示してみましょう。

 こういうゲームのテキストは、ウェイトをかけて表示されるのが普通です。

 イメージ部品に対する文字遅延描画は、エラーが出てもできなくなっちゃいました; というわけで、ここはやはり自作の文字遅延描画改で対応しましょう。

 実際に表示してみたらちょっと見栄えがさびしい感じだったので、影付きにしてみました。

 というわけで、こんな感じに~。

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

#-----宣言---------------------------------------------------
裏_背景とはイメージの可視はオフ。
裏_背景の幅は640。裏_背景の高さは480。

裏_立ち絵とはイメージの可視はオフ。

裏_テキストウィンドウとはイメージの可視はオフ。
テキストウィンドウXとは整数=0
テキストウィンドウYとは整数=360
テキストウィンドウ幅とは整数=640
テキストウィンドウ高さとは整数=120

表画面とはイメージの可視はオン。
表画面の幅は母艦のクライアント幅。表画面の高さは母艦のクライアント高さ。
表画面のXは0。表画面のYは0。
#------------------------------------------------------------

#-----背景を表示---------------------------------------------
裏_背景の画像は「背景1.jpg」
裏_背景を表画面の0,0へ画像コピー。
#------------------------------------------------------------

#-----立ち絵を表示-------------------------------------------
裏_立ち絵の画像は「NAKO.bmp」
裏_立ち絵を表画面の0,0へ画像合成改。
#------------------------------------------------------------

#-----テキストウィンドウを表示-------------------------------
裏_テキストウィンドウの画像は「TXTWIN.bmp」
裏_テキストウィンドウの5,5,630,110を表画面のテキストウィンドウX,テキストウィンドウYへ50で画像部分透過コピー。
#------------------------------------------------------------

#-----テキストを表示-----------------------------------------
#文字書体は「MS ゴシック|24|太字」。文字色白色。
表画面のテキストウィンドウX+10,テキストウィンドウY+10へ「我輩はNAKOである。  {改行}名前はまだない。{改行}             (え;)」を100でノベルテキスト描画。
#------------------------------------------------------------

#------------------------------------------------------------
# 関数
#------------------------------------------------------------
●ノベルテキスト描画({グループ=?}OBJのX,YへSを{数値=200}Aで)
  XX=X
  (Sの文字数
    Sの回数から1文字抜き出す。
   
    もしそれ=「{CHR(10)}」ならば
      X=XX
      Y=Y+(それ文字高さ取得)
      続ける

    文字書体は「MS ゴシック|24|太字」。文字色黒色。
    OBJのX+2,Y+2へそれ文字描画。
    文字書体は「MS ゴシック|24|太字」。文字色白色。
    OBJのX,Yへそれ文字描画。
    描画処理反映
    (A/1000)秒待つ。
   
    X=X+(それ文字幅取得)
#------------------------------------------------------------
●画像部分透過コピー({グループ=?}コピー元のX,Y,W,Hを{数値=$00FF00}透過色で{グループ=?}コピー先のX2,Y2へ{数値=50}透明度で)
  処理用をイメージとして作成。処理用の可視はオフ。
  処理用の幅はW。処理用の高さはH。

  #半透明にしたい部分を処理用に移す
  コピー元のX,Y,W,Hを処理用の0,0へ画像部分コピー

  #コピー元の半透明にしたい部分以外をコピー先へ合成
  塗り色は透過色。線色は透過色。線太さは0。
  コピー元のX,YからX+W,Y+Hへ四角。
  コピー元をX,Yでコピー先のX2,Y2へ画像合成改。
  
  #半透明にしたい部分を透過コピー
  処理用をコピー先のX+X2,Y+Y2へ透明度で画像半透明コピー
  
  処理用→壊す。
#------------------------------------------------------------
●画像合成改({グループ=?}Sを{数値=0}X,{数値=0}Yで{グループ=?}DのX2,Y2へ)
 Cとは整数
//マスク画像はSの透過色を黒色それ以外を白色にしたもの
 マスク画像をイメージとして作成
 マスク画像→可視はオフ
 マスク画像→画像はS→名前
 マスク画像のX,Yを画像色取得してCに代入
 マスク画像をCで画像マスク作成
//ソース画像はSの透明色を黒色に変換したもの
 ソース画像をイメージとして作成
 ソース画像→可視はオフ
 ソース画像→画像はS→名前
 マスク画像を画像ネガポジ
 マスク画像をソース画像の0,0へ画像ANDコピー
 マスク画像を画像ネガポジ
//合成実行
 マスク画像をDのX2,Y2へ画像ANDコピー
 ソース画像をDのX2,Y2へ画像ORコピー
 マスク画像→壊す
 ソース画像→壊す
#------------------------------------------------------------

【せんせい】

 文字サイズや、文字色、影色は決め打ちですが、別途指定できるようにしたいとおもいます。


【でし】

 あれれ?! 、出番が…(涙)

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

2009-05-25

テキストウィンドウを表示するよ!

| 20:48

【せんせい】

 今日は、文章を表示するためのテキストウィンドウを表示します。

 昔だと、黒く塗りつぶされているのが普通でしたが、時の流行は半透明で、後ろの画像が透けて見えるのが普通みたいです。

 なでしこには、画像半透明コピーあるので、カンタンですね!

【でし】

 できました! 透けてます。

 しかし、先生。ウィンドウの枠の部分も一緒に透けてるんですが…

【せんせい】

 たしかに、枠のあるテキストウィンドウを表示する場合に、これはよろしくありません。

 というわけで、また命令を作ってみましたよ!

 これは、あらかじめ透過色で塗りつぶしておいた部分は普通に透過し、矩形指定した範囲は半透明にし、それ以外のところは普通に合成するものです。

 ちょっと関数名がいけてないかなあ(汗)

 ともかくも、こんな感じ!

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

#-----宣言---------------------------------------------------
裏_背景とはイメージの可視はオフ。
裏_背景の幅は640。裏_背景の高さは480。

裏_立ち絵とはイメージの可視はオフ。

裏_テキストウィンドウとはイメージの可視はオフ。
テキストウィンドウXとは整数=0
テキストウィンドウYとは整数=360
テキストウィンドウ幅とは整数=640
テキストウィンドウ高さとは整数=120

表画面とはイメージの可視はオン。
表画面の幅は母艦のクライアント幅。表画面の高さは母艦のクライアント高さ。
表画面のXは0。表画面のYは0。
#------------------------------------------------------------

#-----背景を表示---------------------------------------------
裏_背景の画像は「背景1.jpg」
裏_背景を表画面の0,0へ画像コピー。
#------------------------------------------------------------

#-----立ち絵を表示-------------------------------------------
裏_立ち絵の画像は「NAKO.bmp」
裏_立ち絵を表画面の0,0へ画像合成改。
#------------------------------------------------------------

#-----テキストウィンドウを表示-------------------------------
裏_テキストウィンドウの画像は「TXTWIN2.bmp」
裏_テキストウィンドウの15,13,608,95を表画面のテキストウィンドウX,テキストウィンドウYへ50で画像部分透過コピー。

#裏_テキストウィンドウの画像は「TXTWIN.bmp」
#裏_テキストウィンドウの5,5,630,110を表画面のテキストウィンドウX,テキストウィンドウYへ50で画像部分透過コピー。

#裏_テキストウィンドウを表画面のテキストウィンドウX,テキストウィンドウYへ80で画像半透明コピー。
#------------------------------------------------------------


#------------------------------------------------------------
# 関数
#------------------------------------------------------------
●画像部分透過コピー({グループ=?}コピー元のX,Y,W,Hを{数値=$00FF00}透過色で{グループ=?}コピー先のX2,Y2へ{数値=50}透明度で)
  処理用をイメージとして作成。処理用の可視はオフ。
  処理用の幅はW。処理用の高さはH。

  #半透明にしたい部分を処理用に移す
  コピー元のX,Y,W,Hを処理用の0,0へ画像部分コピー

  #コピー元の半透明にしたい部分以外をコピー先へ合成
  塗り色は透過色。線色は透過色。線太さは0。
  コピー元のX,YからX+W,Y+Hへ四角。
  コピー元をX,Yでコピー先のX2,Y2へ画像合成改。
  
  #半透明にしたい部分を透過コピー
  処理用をコピー先のX+X2,Y+Y2へ透明度で画像半透明コピー
  
  処理用→壊す。
#------------------------------------------------------------
●画像合成改({グループ=?}Sを{数値=0}X,{数値=0}Yで{グループ=?}DのX2,Y2へ)
 Cとは整数
//マスク画像はSの透過色を黒色それ以外を白色にしたもの
 マスク画像をイメージとして作成
 マスク画像→可視はオフ
 マスク画像→画像はS→名前
 マスク画像のX,Yを画像色取得してCに代入
 マスク画像をCで画像マスク作成
//ソース画像はSの透明色を黒色に変換したもの
 ソース画像をイメージとして作成
 ソース画像→可視はオフ
 ソース画像→画像はS→名前
 マスク画像を画像ネガポジ
 マスク画像をソース画像の0,0へ画像ANDコピー
 マスク画像を画像ネガポジ
//合成実行
 マスク画像をDのX2,Y2へ画像ANDコピー
 ソース画像をDのX2,Y2へ画像ORコピー
 マスク画像→壊す
 ソース画像→壊す
#------------------------------------------------------------

【でし】

 なるほど、これでちょっと複雑な形のウィンドウも表示できるようになりましたね!

 あと、ウィンドウ内に柄が入っていてもOKなんですね。

【せんせい】

 はい

 ただし、コードを見てもらえばわかりますが、半透明にする部分は、四角くしか指定できず、半透明を指定した範囲内は透過色があっても透過されません(の色が半透明で表示されちゃいます)

 これはまあ、とりあえず仕様ということで;

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

2009-05-24

なでしこの苗を買ったよ!

| 22:14

 あかりちゃんと、かほりちゃんです★

 矮性で横に株が広がるタイプなので、グラウンドカバーによさそうです♪

 さて、サイコロは、もう少し作りこむつもりですが、一通り動くようになったのでUPしておきます。

#------------------------------------------------------------
#   ちょぼいち
#さいころ1個を振り、出た目に賭ける賭博。賭け者は1から6の好きな目に賭け、
#当たれば4~5の配当が払われ、負けると全額没収される。
#------------------------------------------------------------


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

『#親部品名,部品名,テキスト,ショートカット,オプション,イベント
なし,ファイルメニュー,ファイル(&F),,,
 -,開くメニュー,開く(&O),Ctrl+O,,
 -,-,,,,
 -,閉じるメニュー,閉じる(&X),Ctrl+X,,終わる
』をメニュー一括作成。

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

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

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

賭場サイズとは整数=300
板サイズとは整数=70
左マージンとは整数=15
上マージンとは整数=15

マウス待ちとは整数オン
出目とは整数。

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

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


#---サイコロ振るところ----
賭場とはイメージの可視はオフのWは賭場サイズ。のHは賭場サイズ。
賭場を$775533で画面クリア。

#---胴元がしゃべるところ----
テキストウィンドウとはイメージの可視はオフのWは600。のHは100。
テキストウィンドウを$222222で画面クリア。

#---所持金表示----
文字書体は「MS 明朝|24|」。
母艦の左マージン+賭場サイズ+50,上マージン+20へ「所持金:」を文字描画母艦の左マージン+賭場サイズ+170,上マージン+20,50,33へ「{所持金}」を右,下で枠内文字描画母艦の左マージン+賭場サイズ+230,上マージン+20へ「文」を文字描画。

#---勝負ボタン----
勝負ボタンとはボタンのテキストは「勝負!」
のXは左マージン+賭場サイズ+60。のYは上マージン+板サイズ*2+120。
のWは80。のHは30。
文字書体は「MS 明朝|18|」。
の有効はオフ。
勝負ボタンのクリックした時は~
  マウス待ち=オフ。
  勝負ボタンの有効はオフ。
  待ったボタンの有効はオフ。
  サイコロ振る。
  勝ち負け判定。

#---待ったボタン----
待ったボタンとはボタンのテキストは「待った」
のXは左マージン+賭場サイズ+170。のYは上マージン+板サイズ*2+120。
のWは80。のHは30。
文字書体は「MS 明朝|18|」。
の有効はオフ。
待ったボタンのクリックした時は~
  所持金=所持金+掛け金。
  掛け金=0。
  所持金表示。
  勝負ボタンの有効はオフ。
  待ったボタンの有効はオフ。
  「1」で胴元セリフ。


#---お金を賭けるところ----
賭け板とはイメージの可視はオフのWは板サイズ*2。のHは板サイズ*6

賭け板設定とは配列。 #0ボタン表示位置X、1ボタン表示位置Y、2ボタン幅、ボタン高さ
6
  賭け板設定¥回数,0は左マージン+賭場サイズ+50+(板サイズ*((回数-1)%3))。
  賭け板設定¥回数,1は上マージン+80+(板サイズ*((回数-1)/3を切り下げ))
  賭け板設定¥回数,2は板サイズ
  賭け板設定¥回数,3は板サイズ

#---お金を賭ける窓----
賭け窓とはフォーム。賭け窓をウィンドウ背景色画面クリア。
賭け窓の幅は240。賭け窓の高さは180。
賭け窓のXは母艦のX+(母艦の幅-賭け窓の幅)/2。賭け窓のYは母艦のY+(母艦の高さ-賭け窓の高さ)/2。
賭け窓はオフにシステムメニューボタン有効変更。
賭け窓のスタイルは「枠固定」

金額スピンとはスピンエディタ。金額スピンの親部品は賭け窓。
金額スピンのXは50。金額スピンのYは60。
金額スピンの文字サイズは22。
金額スピンの幅は120。金額スピンの高さは30。
金額スピンの最小値は1。

OKボタンとはボタン。OKボタンの親部品は賭け窓。
OKボタンのXは30。OKボタンのYは120
OKボタン文字書体は「MS 明朝|10|」。
OKボタンのテキストは「OK」
OKボタンのクリックした時は~
  掛け金=金額スピンのテキスト。
  所持金=所持金-掛け金。
  塗り色は$FFDDAA。線色は$FFDDAA。線太さは0。
  賭け窓をウィンドウ背景色画面クリア。
  賭け窓の可視はオフ。賭け窓を閉じる。
  所持金表示。
  「2」で胴元セリフ。

キャンセルボタンとはボタンキャンセルボタンの親部品は賭け窓。
キャンセルボタンのXは130。キャンセルボタンのYは120
キャンセルボタン文字書体は「MS 明朝|10|」。
キャンセルボタンのテキストは「キャンセルキャンセルボタンのクリックした時は~
  賭け窓をウィンドウ背景色画面クリア。
  賭け窓を閉じる
  「0」で胴元セリフ。

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


#-----メインルーチン-------------------------------------------
母艦の可視はオン。

サイコロ準備
ゲーム画面準備

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

#-----マウス入力待ち-------------------------------------------
母艦マウス移動した時は~
  もし、マウス待ち=オンならば
    賭け板の賭け板設定を母艦へマウスインアウト反映。
  違えば
    戻る母艦のマウス押した時は~
  もし、マウス待ち=オンならば
    もし母艦の押されたボタン=左ならば
      もし、前選択ボタン=0でなければ
        もし、前選択ボタン=1ならば
          予想=3
        違えばもし、前選択ボタン=3ならば
          予想=1
        違えば、
          予想=前選択ボタン
        賭ける
    違えば
      戻る
  違えば
    戻る
#------------------------------------------------------------

#------------------------------------------------------------
*賭ける
  金額スピンの最大値は所持金。
  金額スピンのテキストは所持金。
  文字色ウィンドウ文字色文字書体は「MS 明朝|16|」
  賭け窓の30,20へ「{予想} 番に賭けるよ!」を文字描画。
  賭け窓をモーダル表示。
#------------------------------------------------------------
*所持金表示
  文字書体は「MS 明朝|24|」。文字色は黒。
  母艦の左マージン+賭場サイズ+170,上マージン+20から左マージン+賭場サイズ+170+50,上マージン+20+33へ四角。
  母艦の左マージン+賭場サイズ+170,上マージン+20,50,33へ「{所持金}」を右,下で枠内文字描画。
#------------------------------------------------------------

#-----サイコロを振る-------------------------------------------
*サイコロ振る
    r=6の乱数。出目=r+1。
    x=r*ダイスサイズ。y=0。
    
    処理用をダイスサイズ,ダイスサイズへ画像高速リサイズ。
    裏画面のx,y,ダイスサイズ,ダイスサイズを処理用の0,0へ画像部分コピー。
    処理用を母艦の左マージン+(賭場サイズ/2-ダイスサイズ/2),上マージン+(賭場サイズ/2-ダイスサイズ/2)へ画像合成改。
#------------------------------------------------------------

#-----勝ち負け判定-------------------------------------------
*勝ち負け判定
  もし、出目=予想ならば
    「当たり」と言う。
    所持金=所持金+掛け金*配当。
    所持金表示。
  違えば
    「外れ」と言う。

  もし、所持金≦0ならば
    「破産しました」と言う。
    終わり。
  違えば
    賭場を母艦の左マージン,上マージンへ画像コピー。
    「1」で胴元セリフ。
#------------------------------------------------------------

#-----ゲーム画面準備-------------------------------------------
*ゲーム画面準備

  #---お金を賭けるところ----
  処理用を板サイズ,板サイズ*6へ画像高速リサイズ。
  数を0から5まで繰り返す
    塗り色は$DDAA00。線太さは0。
    x=0
    y=数*板サイズ
    処理用のx,yからx+板サイズ,y+板サイズへ四角
    数で条件分岐
      0ならば
        板数=「三」
      1ならば
        板数=「二」
      2ならば
        板数=「一」
      3ならば
        板数=「四」
      4ならば
        板数=「五」
      5ならば
        板数=「六」
    文字サイズは42。文字色は$000000。文字書体は「MS 明朝」
    処理用のx+5,y+5へ板数を文字描画。

  処理用を賭け板の0,0へ画像コピー。
  処理用を画像ネガポジ。
  処理用を賭け板の板サイズ,0へ画像コピー。
  
  賭場を母艦の左マージン,上マージンへ画像コピー。
  テキストウィンドウを母艦の左マージン,上マージン+賭場サイズ+10へ画像コピー。
  賭け板の0,0を賭け板設定で母艦へマウスオーバーボタン表示。
  「1」で胴元セリフ
#------------------------------------------------------------

#-----胴元のセリフ-------------------------------------------
*胴元セリフ(Sで)
  テキストウィンドウを母艦の左マージン,上マージン+賭場サイズ+10へ画像コピー。
  文字色白色文字書体は「MS 明朝|16|」。
  母艦の左マージン+10,上マージン+賭場サイズ+20へ「【胴元】」を文字描画。
  もし、S=「0」ならば
    母艦の左マージン+30,上マージン+賭場サイズ+50へ「さあ、張った張った!」を100で文字遅延描画

  もし、S=「1」ならば
    母艦の左マージン+30,上マージン+賭場サイズ+50へ「どの目にいくら張るんだい?」を100で文字遅延描画
    マウス待ち=オン。

  もし、S=「2」ならば
    母艦の左マージン+30,上マージン+賭場サイズ+50へ「{予想}に{掛け金}文だな?」を100で文字遅延描画
    母艦の左マージン+30,上マージン+賭場サイズ+75へ「良ければ勝負だ!」を100で文字遅延描画
    勝負ボタンの有効はオン。
    待ったボタンの有効はオン。
    マウス待ち=オフ。
#------------------------------------------------------------


#-----サイコロ画像の準備---------------------------------------
*サイコロ準備
  裏画面を$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へ。

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

#------------------------------------------------------------
●枠内文字描画({グループ=?}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を文字描画。
#------------------------------------------------------------
●画像合成改({グループ}Sを{グループ}DのX,Yへ)
 Cとは整数
//マスク画像はSの透過色を黒色それ以外を白色にしたもの
 マスク画像をイメージとして作成
 マスク画像→可視はオフ
 マスク画像→画像はS→名前
 マスク画像の0,0を画像色取得してCに代入
 マスク画像をCで画像マスク作成
//ソース画像はSの透明色を黒色に変換したもの
 ソース画像をイメージとして作成
 ソース画像→可視はオフ
 ソース画像→画像はS→名前
 マスク画像を画像ネガポジ
 マスク画像をソース画像の0,0へ画像ANDコピー
 マスク画像を画像ネガポジ
//合成実行
 マスク画像をDのX,Yへ画像ANDコピー
 ソース画像をDのX,Yへ画像ORコピー
 マスク画像→壊す
 ソース画像→壊す
#------------------------------------------------------------

●マウスオーバーボタン表示({グループ=?}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)へ画像部分コピー。


●マウスインアウト反映({グループ=?}OBJ1のAを{グループ=?}OBJ2へ)
  (Aの要素数-1)
    もし、((OBJ2→マウスX)>(A¥回数,0))かつ
      ((OBJ2→マウスX)<(A¥回数,0)+(A¥回数,2))かつ
      ((OBJ2→マウスY)>(A¥回数,1))かつ
      ((OBJ2→マウスY)<(A¥回数,1)+(A¥回数,3))ならば
        選択ボタン回数。
    違えばもし、(回数=Aの要素数)かつ(選択ボタン=0)ならば
      選択ボタンは0。
    ここまで

  もし、前選択ボタン<>選択ボタンならば
    もし、前選択ボタン>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
  描画処理反映

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

 あと、またまた新発見!

 太字とか斜体とかの文字スタイルの指定の仕方がわかりました。

文字書体は「フォント名|サイズ|スタイル」

 のように、「|」で区切って指定できるようです。

 文字書体文字サイズも一緒に指定できるなんて、便利じゃないですか~♪

 スタイルは「太字斜体」みたいに続けて書くことで、複数指定できるようです。

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

2009-05-23

立ち絵を表示するよ!

| 21:58

【せんせい】

 今日は人物を表示してみます。

 この、背景に重ねて表示する人物画像のことを、立ち絵とか言いますです。

 今日は、めんどーが無いよう、背景と同じサイズの画像に、一人だけ人物を表示する立ち絵を用意しました。

【でし】

 人物っていうかNAKOじゃないですか。いいんですか?(汗)

 でも、わかってきましたよ。

 昨日背景を表示した表画面の上に、さらにこの立ち絵を重ねるんですね?

【せんせい】

 のとーりです。もちろん重ねるときには、人物以外の部分を透過するのを忘れずに。

【でし】

 以前やられまくった画像合成ですね!

【せんせい】

 画像合成改を使います(きっぱり)

 ちなみに少々改造しました。といっても、透過色を0,0以外のところからも取得できるように、引数追加しただけですが。

 立ち絵だと、んなことあまりないでしょうが、たとえば窓枠の中を抜きたいとか、あるでしょ?

 もちろん省略すれば、0,0になるので、までどおりに使えます。

 

 

 というわけで、こんな感じ。

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

#-----宣言---------------------------------------------------
裏_背景とはイメージの可視はオフ。
裏_背景の幅は640。裏_背景の高さは480。

裏_立ち絵とはイメージの可視はオフ。

表画面とはイメージの可視はオン。
表画面の幅は母艦のクライアント幅。表画面の高さは母艦のクライアント高さ。
表画面のXは0。表画面のYは0。
#------------------------------------------------------------

#-----背景を表示---------------------------------------------
裏_背景の画像は「背景1.jpg」
裏_背景を表画面の0,0へ画像コピー。
#------------------------------------------------------------

#-----立ち絵を表示-------------------------------------------
裏_立ち絵の画像は「NAKO.bmp」
裏_立ち絵を表画面の0,0へ画像合成改。
#------------------------------------------------------------

#------------------------------------------------------------
# 関数
#------------------------------------------------------------
●画像合成改({グループ=?}Sを{数値=0}X,{数値=0}Yで{グループ=?}DのX2,Y2へ)
 Cとは整数
//マスク画像はSの透過色を黒色それ以外を白色にしたもの
 マスク画像をイメージとして作成
 マスク画像→可視はオフ
 マスク画像→画像はS→名前
 マスク画像のX,Yを画像色取得してCに代入
 マスク画像をCで画像マスク作成
//ソース画像はSの透明色を黒色に変換したもの
 ソース画像をイメージとして作成
 ソース画像→可視はオフ
 ソース画像→画像はS→名前
 マスク画像を画像ネガポジ
 マスク画像をソース画像の0,0へ画像ANDコピー
 マスク画像を画像ネガポジ
//合成実行
 マスク画像をDのX2,Y2へ画像ANDコピー
 ソース画像をDのX2,Y2へ画像ORコピー
 マスク画像→壊す
 ソース画像→壊す
#------------------------------------------------------------
トラックバック - http://nadesiko.g.hatena.ne.jp/snowdrops89/20090523

2009-05-21

背景を表示するよ!

| 22:13

【せんせい】

 ではさっく背景を表示してみましょう。

 画像ファイルを表示する方法と、裏画面の使い方についてはサイコロでやりましたから、カンタンですね!

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

#-----宣言---------------------------------------------------
裏_背景とはイメージの可視はオフ。
裏_背景の幅は640。裏_背景の高さは480。

表画面とはイメージの可視はオン。
表画面の幅は母艦のクライアント幅。表画面の高さは母艦のクライアント高さ。
表画面のXは0。表画面のYは0。
#------------------------------------------------------------

#-----背景を表示---------------------------------------------
裏_背景の画像は「背景1.jpg」
裏_背景を表画面の0,0へ画像コピー。
#------------------------------------------------------------

【でし】

 背景出ました!

 ここで、死体が発見されるんですね!

【せんせい】

 度はっちの路ですか(汗)

 まだ、ストーリーの概要は決まっていませんが、新発見のことがあるので、まずは母艦の設計から見ていきましょう。

 いままでのプログラムでは、母艦の幅と高さを指定していたわけですが、別に困らないのでスルーしていましたが、なんか変だなーと思っていました。

 そう、実際に使えるスペースが指定より少なかったのです。

【でし】

 、クライアント幅とクライアント高さに記載が変更されていますね。

【せんせい】

 母艦の幅と高さというのは、母艦の枠やタイトルバーや何かをすべて加えた、母艦のものの大きさでした。

 だから、たとえば枠なしとかにすると、の分使えるスペースが増えちゃったり;

【でし】

 Windowsのテーマなどによって、使えるスペースにが出てしまうかも知れず、問題ですね。

【せんせい】

 の、実際に使えるスペースの幅と高さを指定するのが、クライアント幅、クライアント高さというわけです。

 さて、肝心の背景表示部分ですが、何の難しいこともありません。

 640*480の画像1枚を、裏画面にファイルから読み込んで、表画面に転送しているだけです。

 は、母艦には転送せず、表画面の可視をオンにして表示しています。

 もちろん、背景を表示するだけだったら、裏画面の可視をオンにすればいいだけなんですけれども、これからこの表画面にいろいろ重ねて合成していくんです。

 というわけで、次ここに人物を表示してみます。

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

2009-05-20

ADVについて考えるよ!

| 20:09

【せんせい】

 と言うわけで、今日からはアドベンチャーゲームです。

【でし】

 待ってました!

【せんせい】

 アドベンチャーゲームというのもいろいろあります

 昔風のADVだと、画像を表示する窓と、文章を表示する窓と、コマンドを選ぶところがあるみたいな感じだったと思います。

 はやりのビジュアルノベルは、画面全体に画像を表示して、の上にメッセージウィンドウを重ねて文字表示をします。選択肢に関しては、メッセージウィンドウに出るタイプと別窓が開くタイプがあるみたいです。

 サウンドノベルみたいに、画面全体に絵を表示して、の上に画面全体に文字を表示していくものもあります

 基本的な、絵を表示文字表示→選択肢→場面転換・・・という流れには変わりないと思うので、いろいろ共通するのだと思いますが、とりあえずビジュアルノベル形式で行ってみましょう。

【でし】

 萌え萌えなノベルゲームは大体このタイプですよね!

【せんせい】

 萌え萌えな絵は描けませんけどね(汗)

 さて、さっき、絵を表示文字表示→選択肢と言う風に書きましたが、実際には、背景を表示→立ち絵を表示→テキストウィンドウを表示→文字を表示いうふうに、いろいろ重ねてありますよ。

【でし】

 そうですよねー。

 全部を一枚絵で用意してたら膨大な画像が必要になっちゃいますもんね。

【せんせい】

 まで学んだ知識で、とりあえずそれっぽい画面を表示するところまでは出来そうな気がしますが・・・ここで悩ましいのが、最終的に合成を完了して見せる画面は母艦にするのか、イメージ部品にするのかってことです。

 クイズのときは全部母艦にしていました。

 イメージ文字遅延描画が出来なかったりとかあったため、なんでも母艦ベースに考えたほうが無難かなーなんて思ったためですが、一方画像合成などはイメージに対してしか働かない様子。表画面に合成後、母艦コピー言う一手は無駄に感じたりも・・・

【でし】

 あれ? でも文字をクリアするのに使ってませんでした?

【せんせい】

 そうなんですが、ノベルゲームならテキストウィンドウだけクリアすればいい話ですから、画面全体を毎コピーする必要ないような気が。

 ま、言う難しいことは後々考えることにして、次は早速背景を表示してみますよ!

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

2009-05-18

アスターの種をまいたよ!

| 23:56

 副賞(参加賞?)の種を早速まきました。

 水仙、チューリップが終わるので、の隙に。

 楽しみですね♪

 てなわけで、これから庭仕事も忙しくなるし、夏は意外と野外派なので、更新はぼちぼちになると思いますけど引き続きよろしくです。

【せんせい】

 さてさて、前は懸案のクイズに一応の片をつけたので、どうしようかなと、考えていましたが、一応違うことをしたいなーと思って、アドベンチャーゲームについて考え中だったのですが、突然ひらめいたので、サイコロ(ちょぼいち)は、こんな風な画面にしようかなーというのを作ってみました。

#------------------------------------------------------------
#   ちょぼいち
#さいころ1個を振り、出た目に賭ける賭博。賭け者は1から6の好きな目に賭け、
#当たれば4~5の配当が払われ、負けると全額没収される。
#------------------------------------------------------------


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

『#親部品名,部品名,テキスト,ショートカット,オプション,イベント
なし,ファイルメニュー,ファイル(&F),,,
 -,開くメニュー,開く(&O),Ctrl+O,,
 -,-,,,,
 -,閉じるメニュー,閉じる(&X),Ctrl+X,,終わる
』をメニュー一括作成。

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

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

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

賭場サイズとは整数=300
板サイズとは整数=70
左マージンとは整数=15
上マージンとは整数=15

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

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


#---サイコロ振るところ----
賭場とはイメージの可視はオフのWは賭場サイズ。のHは賭場サイズ。
賭場を$775533で画面クリア。

#---胴元がしゃべるところ----
テキストウィンドウとはイメージの可視はオフのWは600。のHは100。
テキストウィンドウを$222222で画面クリア。

#---お金を賭けるところ----
賭け板とはイメージの可視はオフのWは板サイズ*2。のHは板サイズ*6

賭け板設定とは配列。 #0ボタン表示位置X、1ボタン表示位置Y、2ボタン幅、ボタン高さ
6
  賭け板設定¥回数,0は左マージン+賭場サイズ+50+(板サイズ*((回数-1)%3))。
  賭け板設定¥回数,1は上マージン+80+(板サイズ*((回数-1)/3を切り下げ))
  賭け板設定¥回数,2は板サイズ
  賭け板設定¥回数,3は板サイズ


#---所持金表示----
所持金ラベルとはラベルのテキストは「所持金:{所持金}文」
のXは左マージン+賭場サイズ+50。のYは上マージン+20。
のWは250。のHは50。
文字サイズは24。文字書体は「MS 明朝」。

#---勝負ボタン----
勝負ボタンとはボタンのテキストは「勝負!」
のXは左マージン+賭場サイズ+100。のYは上マージン+板サイズ*2+120。
のWは100。のHは30。
文字サイズは18。文字書体は「MS 明朝」。
#------------------------------------------------------------


#-----メインルーチン-------------------------------------------
母艦の可視はオン。

サイコロ準備
ゲーム画面準備

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

#-----マウス入力待ち-------------------------------------------
母艦マウス移動した時は~
  賭け板の賭け板設定を母艦へマウスインアウト反映。
母艦のマウス押した時は~
  もし母艦の押されたボタン=左ならば
    もし、前選択ボタン=0でなければ
      もし、前選択ボタン=1ならば
        予想=3
      違えばもし、前選択ボタン=3ならば
        予想=1
      違えば、
        予想=前選択ボタン
      予想を言う
勝負ボタンのマウス押した時は~
  サイコロ振る
#------------------------------------------------------------

#-----ゲーム画面準備-------------------------------------------
*ゲーム画面準備

  #---お金を賭けるところ----
  処理用を板サイズ,板サイズ*6へ画像高速リサイズ。
  数を0から5まで繰り返す
    塗り色は$DDAA00。線太さは0。
    x=0
    y=数*板サイズ
    処理用のx,yからx+板サイズ,y+板サイズへ四角
    数で条件分岐
      0ならば
        板数=「三」
      1ならば
        板数=「二」
      2ならば
        板数=「一」
      3ならば
        板数=「四」
      4ならば
        板数=「五」
      5ならば
        板数=「六」
    文字サイズは42。文字色は$000000。文字書体は「MS 明朝」
    処理用のx+5,y+5へ板数を文字描画。

  処理用を賭け板の0,0へ画像コピー。
  処理用を画像ネガポジ。
  処理用を賭け板の板サイズ,0へ画像コピー。
  
  賭場を母艦の左マージン,上マージンへ画像コピー。
  テキストウィンドウを母艦の左マージン,上マージン+賭場サイズ+10へ画像コピー。
  賭け板の0,0を賭け板設定で母艦へマウスオーバーボタン表示。
#------------------------------------------------------------
  文字色白色文字サイズは14。
  母艦の左マージン+10,上マージン+賭場サイズ+20へ「【胴元】」を文字描画。
  母艦の左マージン+30,上マージン+賭場サイズ+50へ「いくら賭けるんだい?」を100で文字遅延描画
#------------------------------------------------------------

#-----サイコロを振る-------------------------------------------
*サイコロ振る
    r=6の乱数
    x=r*ダイスサイズ。y=0。
    
    処理用をダイスサイズ,ダイスサイズへ画像高速リサイズ。
    裏画面のx,y,ダイスサイズ,ダイスサイズを処理用の0,0へ画像部分コピー。
    処理用を母艦の左マージン+(賭場サイズ/2-ダイスサイズ/2),上マージン+(賭場サイズ/2-ダイスサイズ/2)へ画像合成改。
#------------------------------------------------------------


#-----サイコロ画像の準備---------------------------------------
*サイコロ準備
  裏画面を$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へ。

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


●画像合成改({グループ}Sを{グループ}DのX,Yへ)
 Cとは整数
//マスク画像はSの透過色を黒色それ以外を白色にしたもの
 マスク画像をイメージとして作成
 マスク画像→可視はオフ
 マスク画像→画像はS→名前
 マスク画像の0,0を画像色取得してCに代入
 マスク画像をCで画像マスク作成
//ソース画像はSの透明色を黒色に変換したもの
 ソース画像をイメージとして作成
 ソース画像→可視はオフ
 ソース画像→画像はS→名前
 マスク画像を画像ネガポジ
 マスク画像をソース画像の0,0へ画像ANDコピー
 マスク画像を画像ネガポジ
//合成実行
 マスク画像をDのX,Yへ画像ANDコピー
 ソース画像をDのX,Yへ画像ORコピー
 マスク画像→壊す
 ソース画像→壊す
#------------------------------------------------------------

●マウスオーバーボタン表示({グループ=?}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)へ画像部分コピー。


●マウスインアウト反映({グループ=?}OBJ1のAを{グループ=?}OBJ2へ)
  (Aの要素数-1)
    もし、((OBJ2→マウスX)>(A¥回数,0))かつ
      ((OBJ2→マウスX)<(A¥回数,0)+(A¥回数,2))かつ
      ((OBJ2→マウスY)>(A¥回数,1))かつ
      ((OBJ2→マウスY)<(A¥回数,1)+(A¥回数,3))ならば
        選択ボタン回数。
    違えばもし、(回数=Aの要素数)かつ(選択ボタン=0)ならば
      選択ボタンは0。
    ここまで

  もし、前選択ボタン<>選択ボタンならば
    もし、前選択ボタン>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
  描画処理反映

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

【せんせい】

 の学習内容としては、まで変数の宣言は、宣言時に値を与える場合、

ダイスサイズとは整数。ダイスサイズ=100

 と書いていましたが、

ダイスサイズとは整数=100

 と書けることがわかりましたです(汗)

【でし】

 ちょっとしたことですけど、変数が多くなればなるほど、だいぶ楽ですよね。

【せんせい】

 まだゲームとしては動作しませんけど、お金を賭ける部分の動作を決めたら、以前作った基本動作の応用でさくっと作れそうな気も…

【でし】

 ところで、相変わらずラベルはチラチラしますねー。

【せんせい】

 ーでした。思わず忘れて、癖でラベルにしちゃいましたが直しましょう。

 それにしても、描画処理の伴わない、マウス判定とかだけでもチラッとするのはなぜなんでしょう。それともやっぱどこかで無駄に動いているかな…?

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

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

2009-05-13

問題点をまとめるよ!

| 22:44

【せんせい】

 行き詰ったときには、まず何が問題なのかを明確にすることが必要です。

【でし】

 それはやはり、先生の能力値の低さじゃないですか?

【せんせい】

 ゲシっ(--メ

【でし】

 ぴぅ~~(飛んでった;)

【せんせい】

 さてさて、気を取り直して・・・

 まず第一にクイズでは、選択板を裏画面に一個しか描いておらず、それを表画面にコピーした後から色を塗り分けて表示していました。

 これは、画面準備のところを書き換えることで簡単に対処できます。

 できるはず・・・

 と思ったらできなかったのは、第二の問題。

 クイズの選択板は、透過処理が必要な部分があって表画面と合成しているんですよ。

 画像合成は、OBJ1をっくり合成するので、部分コピー部分を単純に置き換えるってわけにはいないのです。解決策としては、

1、選択板のデザインを透過処理の不要なものに変更する。

2、背景色を合わせるチートを使う。

 などが考えられます(笑)

【でし】

 ひ、ひどいなあ(よろよろ)

 だんだん扱いが乱暴になりますねー。

 暴力はんたーい!

 っていうか、まじめに関数画像合成に対応させるという選択肢はないんですか?

【せんせい】

 ないです(きっぱり)

 、クイズに対する愛情が薄れているんで(同じ問題解き飽きた;)、さっさと完成させたいのですよ~(笑)

 

 さらにさらに3つ目の問題があります

 クイズは、不可視にした表画面にすべてを描画した後、っくり母艦コピーした上で、母艦に文字を描画しています。して再び表画面を母艦コピーすることで、文字を消しています。母艦以外の裏画面とかの選択板には文字がないのです。

 裏画面にも、同時に文字を描いたり消したりするのは、面倒だなあ・・・

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

2009-05-12

賞品が届いたよ!

| 01:10

 意外と立派な(失礼;)メダルを頂戴しましたよ!

 実は、ウチの実家の居には、有能な我が妹達の、さまざまなメダルや賞状が飾られているのですが、無能なワタシのものは一つもないのですよ。

 フフフ、こいつを並べて飾ってやろう~。これで姉の権威も復活だね♪

 それにしても、なぜアスターの種なの?!ナデシコの種にすればいいのにw


 さて、UDさまのアドバイスにより引数を指定して、母艦でも表画面でも好きなところに関数を書き換えることなくマウスオーバーボタンが使えるようになりました☆

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

#-----ボタン準備----------------------------------------------
裏画面とはイメージの可視はオフの幅は200。の高さは160。

表画面とはイメージの可視はオンの幅は母艦のクライアント幅。
の高さは母艦のクライアント高さ。
のXは0。のYは0。


ボタン幅とは整数=100。
ボタン高さとは整数=40。
ボタン位置Xとは整数=50。
ボタン位置Yとは整数=50。
ボタン隔とは整数=10。
選択ボタンとは整数=0。
前選択ボタンとは整数=0。


4
  塗り色は$888888
  裏画面の0,(回数-1)*ボタン高さからボタン幅,回数*ボタン高さへ四角。
  裏画面の25,(回数-1)*ボタン高さ+10へ「ボタン{回数}」を文字描画。

4
  回数条件分岐
    1ならば
      塗り色は$FFAAAA
    2ならば
      塗り色は$AAFFAA
    3ならば
      塗り色は$AAAAFF
    4ならば
      塗り色は$FFFFAA
  裏画面のボタン幅,(回数-1)*ボタン高さからボタン幅*2,回数*ボタン高さへ四角。
  裏画面のボタン幅+25,(回数-1)*ボタン高さ+10へ「ボタン{回数}」を文字描画。
#------------------------------------------------------------

#-----ボタンを設定--------------------------------------------
選択肢とは配列。 #0ボタン表示位置X、1ボタン表示位置Y、2ボタン幅、ボタン高さ
4
  選択肢¥回数,0はボタン位置X
  選択肢¥回数,1はボタン位置Y+(回数-1)*(ボタン高さ+ボタン隔)
  選択肢¥回数,2はボタン幅
  選択肢¥回数,3はボタン高さ
#------------------------------------------------------------

#-----ボタンを描画--------------------------------------------
#裏画面の0,0を選択肢で母艦へマウスオーバーボタン表示
裏画面の0,0を選択肢で表画面へマウスオーバーボタン表示
#------------------------------------------------------------

#----マウス入力待ち--------------------------------------------
表画面のマウス移動した時は~
#  裏画面の選択肢を母艦へマウスインアウト反映。
  裏画面の選択肢を表画面へマウスインアウト反映。

表画面のマウス押した時は~
  もし、前選択ボタン=0でなければ
    「ボタン{前選択ボタン}をクリック」と言う
#------------------------------------------------------------

●マウスオーバーボタン表示({グループ=?}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)<(A¥回数,0)+(A¥回数,2))かつ
      ((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
  描画処理反映
#------------------------------------------------------------
トラックバック - http://nadesiko.g.hatena.ne.jp/snowdrops89/20090512

2009-05-11

GW明けでボケボケだよ~

| 19:04

 GWは、途中でびっくりな出来事があったりもしましたが、予定通り遊び呆けました;

 といっても、新型インフルのせいで海外旅行というわけにもいかず(っていうそれ以前に先立つものがないよ!)白熊の赤ちゃんを見に行ったり、アルパカの子っこちゃんをもふもふしたりしたりしただけですが(汗)


 それにしても、しばらく離れていると忘れますね~;

 フツーに書けていた命令をいちいち命令一覧で調べる羽目になってたり(--;

 というわけで、課題の解決もなんとなく難航中。

 本当は、4月中にクイズを完成させてしまいたかったんですけどね~・・・


 っていうか、バージョンUPで、4/30の記事に無いと書いた、マウス入った時~と、マウス出た時~が追加されました。

 多分、記事書いたころには既にUPされてたんだね~(ToT)

 しかし、しようがないので、ないものとしてマウス移動したとき~を使って作り始めたサンプルを、とりあえず動くようにしましたよ!

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

#-----ボタン準備------------------------------------------------
裏画面とはイメージの可視はオフの幅は200。の高さは160。

ボタン幅とは整数=100。
ボタン高さとは整数=40。
ボタン位置Xとは整数=50。
ボタン位置Yとは整数=50。
ボタン隔とは整数=10。
選択ボタンとは整数=0。
前選択ボタンとは整数=0。


4
  塗り色は$888888
  裏画面の0,(回数-1)*ボタン高さからボタン幅,回数*ボタン高さへ四角。
  裏画面の25,(回数-1)*ボタン高さ+10へ「ボタン{回数}」を文字描画。

4
  回数条件分岐
    1ならば
      塗り色は$FFAAAA
    2ならば
      塗り色は$AAFFAA
    3ならば
      塗り色は$AAAAFF
    4ならば
      塗り色は$FFFFAA
  裏画面のボタン幅,(回数-1)*ボタン高さからボタン幅*2,回数*ボタン高さへ四角。
  裏画面のボタン幅+25,(回数-1)*ボタン高さ+10へ「ボタン{回数}」を文字描画。
#--------------------------------------------------------------


#-----ボタンを設定----------------------------------------------
選択肢とは配列。 #0ボタン表示位置X、1ボタン表示位置Y、2ボタン幅、ボタン高さ
4
  選択肢¥回数,0はボタン位置X
  選択肢¥回数,1はボタン位置Y+(回数-1)*(ボタン高さ+ボタン隔)
  選択肢¥回数,2はボタン幅
  選択肢¥回数,3はボタン高さ
#--------------------------------------------------------------

#-----ボタンを描画------------------------------------------------------
裏画面の0,0を選択肢でマウスオーバーボタン表示
#-----------------------------------------------------------------------

#----マウス入力待ち----------------------------------------------
母艦マウス移動した時は~
  裏画面の選択肢をマウスインアウト反映。

母艦のマウス押した時は~
  もし、前選択ボタン=0でなければ
    「ボタン{前選択ボタン}をクリック」と言う
#--------------------------------------------------------------

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

●マウス位置判定(Aの)
  (Aの要素数-1)
    もし、((母艦のマウスX)>(A¥回数,0))かつ
      ((母艦のマウスX)<(A¥回数,0)+(A¥回数,2))かつ
      ((母艦のマウスY)>(A¥回数,1))かつ
      ((母艦のマウスY)<(A¥回数,1)+(A¥回数,3))ならば
        選択ボタン回数。
    違えばもし、(回数=Aの要素数)かつ(選択ボタン=0)ならば
      選択ボタンは0。
    ここまで

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

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

 母艦以外のところにも引数で指定してできるようにしたいと思ったんですが、表示は問題ないのですが、母艦のマウスXをobj2のマウスXとか書こうとすると、エラーになっちゃう(--;

 もちろん全部手動で「表画面のマウスX」とかに書き換えればちゃんと動くんですが、引数にはできない感じ?

 GUI部品名も変数にはできないのかなー。むむむ。

 とりあえず希望通りの動作はするようになったので、これをクイズに組み込んでみよう!と思ったらまたまた問題が!(>_<)

 U D U D 2009/05/11 21:51これってFAQに書いたっけな・・・ 引っかかりやすいポイントですね。

「AのB」記法でグループを使えるのは、母艦(→フォーム)や、自分で定義した裏画面(→イメージ)など、種類が明らか(静的)な場合だけです。

引数にグループを取った場合、その引数がどんな種類のグループなのか「自明でない」(動的)ので、通常の「AのB」記法は使えません(Bとして何が使えるかなでしこには分からないので)。「作成」命令で動的生成したグループ変数も同様です。

そこで静的な記法を使えない変数では、代わりに、「A→B」もしくは「A@『B』」という記法を用います。OBJ→マウスXなど。分かりにくいですがねf(^^;

雪乃☆雫雪乃☆雫2009/05/12 23:22UDさま、ありがとうございます!
やはり、その辺なのですか~。
グループとか、→とか@とかとかって難し(>_<)
他の人のコードに登場しても、意味わかんない~と今まで華麗にスルーしておりましたが、ようやく学んでみはじめたのですが、私の足りてない頭脳では理解するのにまだまだ時間がかかるもようですorz
しかし、おかげさまで「OBJ→マウスX」記法を使って、母艦も表画面もできるようになりました☆

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

2009-05-04

大事件だよ!

| 01:11

 GWで遊び呆けているに、大変なことが!!!

 ノリで(参加賞目当てで;)応募した、なでしこコミュニティーコンテストの発表が、5/1だったわけで。

 んなことも忘れ去り、GWを満喫し、遊び歩いていたわけで(汗)

 ふと、久々にパソコンを起動してみたら、メールが届いていたわけで。(しかも、さりげなく迷惑メールフォルダに落ちていたりして、大ぴんち!(滝汗))


 とにかく!

 なぜか、最優秀賞のところに、ワタシのつくった15パズルがさりげなく載っているのであった。

 なんで?! Why?!

 あんなので、良かったのデスか~~?!?!?!

 何かの違いじゃないかと、こはかとなく不安だ・・(爆)

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