×

[PR]この広告は3ヶ月以上更新がないため表示されています。
ホームページを更新後24時間以内に表示されなくなります。

ゲームを作ろう! 脱出ゲームその2 キーを押して読み進める


今回は表紙と2ページ目を作ってみます。
スペースキーを押してページ送りをするのだから、

(表紙を表示)
page = 1

GraphicsWindow.KeyDown = StartKey

Sub StartKey
  If GraphicsWindow.LastKey = "Space" And page = 1 Then  
  (1ページ目表示)
  page = page + 1
  Timer.Tick = yajirusi
  EndIf
  If GraphicsWindow.LastKey = "Space" And page = 2 Then  
  (2ページ目表示)
  page = page + 1
  Timer.Tick = yajirusi
  EndIf
EndSub

Sub yajirusi
  (矢印アニメーション用)
EndSub

こうすれば表紙から1ページ目に移動できそうです。
「page」は隠しパラメータのページ数として設定します。
1ページを表示し終えたらpageを+1して2に設定、そして次にスペースキーが押された時に2ページ目が表示される、という流れです……

……と思ったのですが、これだと1ページ目を表示後に、自動的に2ページ目が表示されてしまうのです。
あれ? スペースキーをもう一度押さないと、2ページ目は出ないと思って書いたのに?

GraphicsWindow.LastKey = "Space"」で獲得しているのは「最後に押したのがスペースキー」。
同じサブルーチン内では、pageが2になった途端に、「GraphicsWindow.LastKey = "Space" And page = 2」の条件を満たしてしまうのです。
これはアカン。
サブルーチンを分けないと駄目なんですね。

(表紙を表示)
page = 1

GraphicsWindow.KeyDown = StartKey

Sub StartKey
  If GraphicsWindow.LastKey = "Space" And page = 1 Then  
  (1ページ目表示)
  page = page + 1
  GraphicsWindow.KeyDown = StartKey2
  Timer.Tick = yajirusi
  EndIf
EndSub

Sub StartKey2
  If GraphicsWindow.LastKey = "Space" And page = 2 Then
  Timer.Pause()
  (2ページ目表示)
  page = page + 1
  Timer.Tick = yajirusi
  EndIf
EndSub

Sub yajirusi
  (矢印アニメーション用)
EndSub

正解はこれ。
密かに、2ページ目表示前に「Timer.Pause()」も加えています。
これがないと、2ページ目を表示してもタイマーが毎秒動いてしまいます。
2ページ目が表示し終わったら、再びタイマーを動かします。

これで作ってみて、とりあえず動きはしたのですが、新たに問題が出てきました。
というのは……プログラムを動かすと、Shapeで作った文字が、Shapes.Moveで動かす直前にウィンドウ左上にちらちらと見えてしまうんですね。
処理スピードの問題なんでしょうけど……。
それならばウィンドウ左上を、文字色で塗りつぶして誤魔化せばいいんじゃね?

ノベル

ノベル

誤魔化した結果。なんかお洒落な気もするしいいんじゃね?w

ということで、表紙〜1ページ〜2ページはこうなりました。

GraphicsWindow.Width = 800
GraphicsWindow.Height = 600
GraphicsWindow.Title = "novel"

windowX = 15
windowY = 15

backsky = Shapes.AddImage("D:\sora.jpg")

GraphicsWindow.BrushColor = "WhiteSmoke"
GraphicsWindow.PenColor = "DimGray"

window = Shapes.AddRectangle(GraphicsWindow.Width - windowX * 2, GraphicsWindow.Height - windowY * 2 )
Shapes.SetOpacity(window, 70)
Shapes.Move(window, windowX, windowY)

GraphicsWindow.PenColor = "Black"
GraphicsWindow.BrushColor = "Black"
sikaku1 = Shapes.AddRectangle(30, 30)
sikaku2 = Shapes.AddRectangle(30, 30)
sikaku3 = Shapes.AddRectangle(30, 30)
sikaku4 = Shapes.AddRectangle(30, 30)
Shapes.Move(sikaku2, 0, GraphicsWindow.Height - 30)
Shapes.Move(sikaku3, GraphicsWindow.Width - 30, 0)
Shapes.Move(sikaku4, GraphicsWindow.Width - 30, GraphicsWindow.Height - 30)

GraphicsWindow.FontName = "Rounded M+ 1p medium"

'表紙
GraphicsWindow.FontSize = 60
hyousi = Shapes.AddText("なんか小説")
GraphicsWindow.FontSize = 24
hyousi2 = Shapes.AddText("Spaceキーで読み進めてください。")
Shapes.Move(hyousi, 250, 100)
Shapes.Move(hyousi2, 220, 200)
page = 1

'本文
text[1][1] = "「キミ、名前は?」"
text[1][2] = "ぼくは彼女に尋ねた。"
text[1][3] = "「わたし? わたしの名前は、マオーコ」"
text[1][4] = "「マオーコ? 変わった名前だな……」"
text[1][5] = "「そんなことないわ。なら、あなたの名前は何?」"
text[1][6] = "「ぼくはユーテルヴォガリア・シャフォンレーム。長いからユーシャ"
text[1][7] = "と呼ばれている」"
text[1][8] = "「あなたこそ変な名前じゃない。わたしの名前は由緒正しいのよ。"
text[1][9] = "魔王の血筋に代々受け継がれていて……」"
text[1][10] = "「まさか、魔王の娘だから『魔王・子』なんてダサいネーミング……"
text[1][11] = "えっ、ま、魔王!?」"
text[1][12] = "ぼくは驚いた。"
text[1][13] = "まさか、こんな所に魔王の娘が居るなんて。"

text[2][1] = "「ダサいって何よ、失礼ね! 謝りなさい」"
text[2][2] = "「キミだってぼくの名前を変だと言っただろ。おあいこさ」"
text[2][3] = "魔王の娘という割には、やけにフランクだな。"
text[2][4] = "「それで、一体何の用? ぼくと戦うつもり?」"
text[2][5] = "「フフ、それもいいわね……」"
text[2][6] = "「……!」"
text[2][7] = "ぼくはとっさに、剣の柄を握った。"
text[2][8] = "だが彼女は微動だにせず、笑っている。"
text[2][9] = "「そのナマクラで、わたしと戦おうというの?」"
text[2][10] = "「そっちがそのつもりなら、そうするさ」"
text[2][11] = "「人間って本当に野蛮ね」"
text[2][12] = "「魔族に言われたくない」"

GraphicsWindow.PenColor = "Black"
GraphicsWindow.BrushColor = "Black"

GraphicsWindow.KeyDown = StartKey

Sub StartKey
  If GraphicsWindow.LastKey = "Space" And page = 1 Then  
    Shapes.HideShape(hyousi)
    Shapes.HideShape(hyousi2)
    For i = 1 To 13
      For n = 1 To Text.GetLength(text[page][i])
        textShapemoji[page][i][n] = Shapes.AddText(Text.GetSubText(text[page][i], n, 1))
        Shapes.Move(textShapemoji[page][i][n], 20 + (24 * (n - 1)), 20 + (35 * (i - 1)))
        Program.Delay(30)
      EndFor
    EndFor
    page = page + 1
  EndIf
  Timer.Tick = yajirusi
  Timer.Interval = 1000
  GraphicsWindow.KeyDown = StartKey2
EndSub
  
Sub StartKey2
  If GraphicsWindow.LastKey = "Space" And page = 2 Then
    Shapes.HideShape(next)
    Timer.Pause()
    For i = 1 To 13
      For n = 1 To Text.GetLength(text[1][i])
        Shapes.HideShape(textShapemoji[1][i][n])
      EndFor
    EndFor
    For i = 1 To 12
      For n = 1 To Text.GetLength(text[page][i])
        textShapemoji[page][i][n] = Shapes.AddText(Text.GetSubText(text[page][i], n, 1))
        Shapes.Move(textShapemoji[page][i][n], 20 + (24 * (n - 1)), 20 + (35 * (i - 1)))
        Program.Delay(30)
      EndFor
    EndFor
    page = page + 1
  EndIf
  Timer.Tick = yajirusi
  Timer.Interval = 1000
EndSub

Sub yajirusi
  Shapes.HideShape(next)
  next = Shapes.AddTriangle(750, 550, 750, 570, 770, 560)
  Shapes.Animate(next, 10, 0, 1000)
EndSub

次回はデータのセーブとロードについて。

次:その3 データのセーブとロード


▲TOPへ戻る