Hatena::Groupnadesiko

雪乃☆雫のなでしこ日和

2016-03-15

2Dを振るよ!

| 08:56

 さて、行き詰まった時は・・・サイコロだよ!(なんだそれ;)

 昔、TRPGをやっていたワタシは、ダイスが大好き☆

 べっ、べつに駄洒落じゃありません、念のため;;;

 いや~、転がしてるだけで、何か癒やされる~www

 と言うわけで、ちょぼいちは1Dでしたが、ちょっと2Dを振ってみます。

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

#-----宣言---------------------------------------------------
ダイスサイズとは整数=80

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

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

#---サイコロ振るボタン----
ボタンAとはボタンの可視はオンの幅は100。の高さは35。
のXは母艦のクライアント幅/2-ボタンAの幅/2。のYは母艦の高さ-100。
のテキストは「2Dを振る」

ボタンAをクリックした時は~
  サイコロ振る。
#------------------------------------------------------------

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

ダイスサイズでサイコロ準備。
乱数初期化。
サイコロ振る。
#------------------------------------------------------------

#-----2Dを振る---------------------------------------------
*サイコロ振る
  処理用をダイスサイズ,ダイスサイズへ画像高速リサイズ。
  2
    r=6の乱数。出目¥(回数-1)=r+1。
    x=r*ダイスサイズ。y=0。
    裏画面のx,y,ダイスサイズ,ダイスサイズを処理用の0,0へ画像部分コピー。
    処理用を母艦の((母艦のクライアント幅/4)*(回数))-(ダイスサイズ/2)+(母艦のクライアント幅/8),(母艦のクライアント高さ/2)-(ダイスサイズ/2)へ画像合成通。
#------------------------------------------------------------
*サイコロ準備(Sで)
  裏画面を$00FF00で画面クリア。    #透過色
  目サイズ=S/10。
  数を0から5まで繰り返す。
    もし、数=0ならば                #1のサイコロ
      線色黒色塗り色白色。          #地の色は白
      外枠(S)。                   #ダイスの外枠
      線色赤色塗り色赤色。          #目の色は赤
      半径=目サイズ+S/20。            #大き目
      中点(S)。
  
    もし、数=1ならば                #2のサイコロ
      線色黒色塗り色白色。
      外枠(S)。
      線色黒色塗り色黒色。
      半径=目サイズ。
      左上点(S)。右下点(S)。
  
    もし、数=2ならば                #3のサイコロ
      線色黒色塗り色白色。
      外枠(S)。
      線色黒色塗り色黒色。
      半径=目サイズ。
      中点(S)。左上点(S)。右下点(S)。
  
    もし、数=3ならば                #4のサイコロ
      線色黒色塗り色白色。
      外枠(S)。
      線色黒色塗り色黒色。
      半径=目サイズ。
      左上点(S)。左下点(S)。右上点(S)。右下点(S)。
  
    もし、数=4ならば                #5のサイコロ
      線色黒色塗り色白色。
      外枠(S)。
      線色黒色塗り色黒色。
      半径=目サイズ。
      中点(S)。左上点(S)。左下点(S)。右上点(S)。右下点(S)。
  
    もし、数=5ならば                #6のサイコロ
      線色黒色塗り色白色。
      外枠(S)。
      線色黒色塗り色黒色。
      半径=目サイズ-S/100。
      左上点(S)。左下点(S)。右上点(S)。右下点(S)。左中点(S)。右中点(S)。

*外枠(S)
  x=数*S。y=0。
  x2=x+S。y2=S。
  裏画面のx,yからx2,y2へS/3,S/3で角丸四角。

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

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

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

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

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

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

*右中点(S)
  xx=(x+S/4*3)-半径。yy=S/2-半径
  xx2=(x+S/4*3)+半径。yy2=S/2+半径。
  裏画面のxx,yyからxx2,yy2へ。
#------------------------------------------------------------
●画像合成通({グループ}コピー元を{数値=$00FF00}透過色で{グループ}コピー先のX,Yへ)
  # マスクの作成(キャラの透過部分が白、表示部分が黒の画像)
  マスク画像をイメージとして作成。マスク画像の可視はオフ。
  マスク画像→画像はコピー元→名前
  マスク画像を透過色で画像マスク作成

  # キャラの透過色部分を黒に変換
  # はじめからキャラの透過色を黒にすると髪や目や文字に黒が使用出来なくなる
  キャラ画像をイメージとして作成。キャラ画像の可視はオフ
  キャラ画像→画像はコピー元→名前
  マスク画像を画像ネガポジ
  マスク画像をキャラ画像の0,0へ画像ANDコピー
  マスク画像を画像ネガポジ

  # 合成実行
  マスク画像をコピー先のX,Yへ画像ANDコピー
  キャラ画像をコピー先のX,Yへ画像ORコピー
 
  VCL_FREE(マスク画像)
  VCL_FREE(キャラ画像)
#------------------------------------------------------------

 別に何一つ、目新しいことも学んだことも無いんだけど、1Dと違って2Dはこれだけで、「6ゾロ出たっ!」とか「ぎゃー、1ゾロだ><」とか言って、盛り上がることが出来ますね(バカw)

 一応、「サイコロ準備」は、無駄っぽいコードはのままに、ちょこっとだけ変えて、サイズの違うサイコロが作り易いようにしました。

 それから画像合成ですが、なでしこの画像合成も、それがどうもイマイチでやられまくり、ちょぼいちでは使わせてもらっていた画像合成改も、左上のドットを取得して透過色とする仕様なんですけど、透過色を指定して合成するように変更して「画像合成通」(笑)とした。

 いちいちカラーを指定しなくてもいいようにとゆう配慮なんだろうけど、四角い枠の内側だけを抜きたいとか、あるでしょ?

 単に、ノベルのキャラ合成から、半透明で合成する処理の部分を抜いたものなんで、キャラ合成をのまま使っても良かったんだけど、やはりなんか無駄に長くなる気がして。

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