ランキングはこちらをクリック! にほんブログ村 ゲームブログ ゲーム制作へ ブログランキング【くつろぐ】

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

=第30話=「正解は・・・」画面を作りましょう

さてさて答えの値を選択するところまで作成できましたので、
次はその選択した値が正解か不正解か判定するところを作成しましょう。

1.Form1の「フォームデザイナ」ウィンドウの
 「MainTab」部分を右クリックし「タブの追加」をクリックして
 「TabPage6」を追加しましょう。

2.「TabPage6」に正解は文字を配置しましょう。

「Label」コントロール
(Name):Label8
Font-Size:72
ForeColor:Blue
Text:正解は

nttadamoji-038.gif


3.Form1の「SceneChange」プロシージャの「Select」文に
 [正解は]シーン変更処理のコードを追加します。




Case 6 '[正解は]シーン変更処理
'表示用にタイマーをセット(3秒間表示)
Me.Timer1.Interval = 3000
Me.Timer1.Enabled = True

'タブのページを切り替える
Me.MainTab.SelectedIndex = intScene - 1




4.Form1の「SceneProc」プロシージャの「Select」文に
 [正解は]シーン表示処理のコードを追加します。




Case 6 '[正解は]シーン表示処理

'次のシーンへ
Call SceneChange(intScene + 1)




※それではデバッグ開始を実行してみましょう!

nttadamoji-039.gif

答え入力画面で答えを入力後に正解は画面が表示されましたね。

次回は、回転した文字を正しい角度で表示する処理を実装していきます。



テーマ : フリーゲーム - ジャンル : ゲーム

=第29話=答え入力画面を作りましょう

前回まででゲームで遊ぶ画面までできました。
しかしまだゲームの結果を判定して結果を表示する処理を実装していません。
そのあたりを作っていきましょう。それではさっそく。


1.Form1の「フォームデザイナ」ウィンドウの「MainTab」部分を右クリックし
 「タブの追加」をクリックして「TabPage5」を追加しましょう!

2.「TabPage5」に文字と答え入力ボタンを配置しましょう!
 以下の値で5つのコントロールを配置してください。

「Label」コントロール
(Name):Label8
Font-Size:36
ForeColor:Green
Text:正しい文字の数は?

「Button」コントロール
(Name):btnAnswer1
BackColor:White
Font-Size:36
Text:A1

「Button」コントロール
(Name):btnAnswer2
BackColor:White
Font-Size:36
Text:A2

「Button」コントロール
(Name):btnAnswer3
BackColor:White
Font-Size:36
Text:A3

「Button」コントロール
(Name):btnAnswer4
BackColor:White
Font-Size:36
Text:A4

nttadamoji-035.gif

3.MainFormクラスに答え入力の値を保持する変数
 「intKotae」をコードに追加します!

--------------------------------------------------

'答え入力値の変数
Private intKotae As Integer

--------------------------------------------------

4.Form1の「SceneChange」プロシージャの「Select」文に
 [答え入力]シーン変更処理のコードを追加します!

【ちょっと説明。がんばって読んでね】
この処理では、乱数(ランダムに決定される数値)を発生させて、
その値を元に答えの候補のパターンを決定します。

 ゲームにとって乱数はとても便利ですね。
 プログラムは作ったとおりに動作するので
 作者にとっては動作が予測できますが、
 乱数をつかってその結果に応じて処理が決定されるのであれば
 作者であっても予測できません。
 自分でつくっても自分で楽しめるとはなんて素晴らしいのでしょう。
 その乱数を活かすも殺すもアイデア次第ですね。

話がすこしそれましたので戻します。
正解の値が7の場合、7から3を引いた値である4を先頭に
[4,5,6,7][5,6,7,8][6,7,8,9][7,8,9,10]の4パターンの
いずれかをランダムに決定します。

しかし、このアルゴリズムだと正解の値が1の場合、
1から3を引いた値である-2を先頭にすると
[-2,-1,0,1][-1,0,1,2][0,1,2,3][1,2,3,4]となってしまい、
答えとしてはありえないパターンが出来てしまいます。

この問題に対応するためは、問題となる答えの候補のパターンが
決まらないよう、乱数の最小値と最大値を決定する処理を加えます。

nttadamoji-036.gif


--------------------------------------------------

Case 5 '[答え入力]シーン変更処理

'答えを四択で表示
'乱数の取得範囲の最小値と最大値を計算
Dim min As Integer = intOmote - 3
Dim max As Integer = intOmote
'最小値がゼロ未満の場合は最小値をゼロに
If min < 0 Then
min = 0
End If
'最大値が9を超える場合は最大値を9に
If max > 12 - 3 Then
max = 12 - 3
End If
'範囲を指定して乱数を取得
Dim rnd As New System.Random()
Dim idx As Integer = rnd.Next(min, max + 1)
'btnAnswer1~4のTextに答え入力の値を設定
For i As Integer = 0 To 3
Me.TabPage5.Controls("btnAnswer" & i + 1).Text = idx + i
Next

'タブのページを切り替える
Me.MainTab.SelectedIndex = intScene - 1

--------------------------------------------------

5.答え入力ボタンである「btnAnswer1」をダブルクリックして、
 「btnAnswer_Click」イベントプロシージャにコードを追加します!


--------------------------------------------------

Private Sub btnAnswer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAnswer1.Click, btnAnswer2.Click, btnAnswer3.Click, btnAnswer4.Click

'答えの数値を取得
Dim btn As Button = CType(sender, Button)
intKotae = Convert.ToInt32(btn.Text)

'次のシーンへ
Call SceneChange(intScene + 1)

End Sub

--------------------------------------------------

「Handles btnAnswer1.Click」の後に「btnAnswer2.Click…」
を入力し忘れないよう注意してください。
この記述を加えることによって、「btnAnswer2~4」を
クリックした場合の処理も行ないます。
「btnAnswer1」だけの処理では無いことを表したいので、
プロシージャ名を「btnAnswer1_Click」から
「btnAnswer_Click」に変更してください。

プロシージャの引数「sender」には、
クリックされたボタンの情報が入っています。
ここでは、クリックされた「btnAnswer1~4」ボタンの
Textの値を、変数「intKotae」に代入しています。

※それではデバッグ開始を実行してみましょう!

nttadamoji-037.gif

 終了画面の表示後に答え入力画面が表示されましたね。
 正解のボタンがどの位置に表示されるかが
 ランダムで決まることを確認してください。

テーマ : フリーゲーム - ジャンル : ゲーム

=第28話=終了画面を作りましょう

しばらくの間更新が滞っていましたが更新します。
世間は不景気ですね。
私は今社会人なのですが社内のお金にならない仕事をしています。
「あー仕事が何もないからやらされてるんだろうなー(涙)
そろそろ危ないかなー。。。」
ではそんななかゲーム作成の続きといきましょう。


1.Form1の「フォームデザイナ」ウィンドウの「MainTab」部分を右クリックし
 「タブの追加」をクリックして「TabPage4」を追加しましょう!

2.「TabPage4」に終了文字を配置しましょう

「Label」コントロール
(Name):Label7
Font-Size:72
ForeColor:Red
Text:終了

nttadamoji-033.gif

3.Form1の「SceneChange」プロシージャの「Select」文に
  [終了]シーン変更処理のコードを追加します。

--------------------------------------------------

Case 4 '[終了]シーン変更処理

'表示用にタイマーをセット(3秒間表示)
Me.Timer1.Interval = 3000
Me.Timer1.Enabled = True

'タブのページを切り替える
Me.MainTab.SelectedIndex = intScene - 1

--------------------------------------------------

4.Form1の「SceneProc」プロシージャの「Select」文に
[終了]シーン表示処理のコードを追加します。

--------------------------------------------------

Case 4 '[終了]シーン表示処理

'次のシーンへ
Call SceneChange(intScene + 1)

--------------------------------------------------

※デバッグ開始を実行してみましょう!
nttadamoji-034.gif


文字探し表示画面の表示後に終了画面が表示されました。

テーマ : フリーゲーム - ジャンル : ゲーム

=第27話=文字を回転して表示する処理を追加しましょう

今日はもののけ姫に夢中になりつつ記事を書いています。

なんでも1つの作品を完成させるのに大変な時間と費用と

人材が必要なんだなと思いながら・・・。

このブログは趣味でやってますので約束の年内完成も間に合わず

気楽に更新させていただいております。

拍手の件数が多ければ更新ペースが早くなるかも知れません(笑)

それでは今日も張り切っていきましょう!


Mojiクラスのインスタンスプロシージャの

「文字の角度を取得(0~359)」コメント部分に

以下のコードを追加します。

--------------------------------------------------

'文字の角度を取得(0~359)
_intKakudo = rnd.Next(360)

--------------------------------------------------

1つ1つの処理についての説明はゲームが完成してから

記事にしますので興味のある方は見てくださいね。

とりあえず完成を急ぎましょう。

続いてMojiクラスの「DrawMoji」プロシージャの

「角度をラジアン単位に変換」コメント部分に

以下のコードを追加します。

--------------------------------------------------

'角度をラジアン単位に変換
Dim d As Double = 0
If mdt = MojiDrawType.DrawTurn Then
d = (Math.PI / 180) * _intKakudo
End If

--------------------------------------------------

意味がわからなくなって来たらコメントください。

禁止ワードも設定しておりますが

丁寧語で普通に記入いただけたらひっかからないはずです。

ひっかかってしまったらごめんなさい。

さらに今日は続けます。

Mojiクラスの「DrawMoji」プロシージャの

「回転後の座標を計算」コメント部分に

以下のコードを追加します。

--------------------------------------------------

'回転後の座標を計算
Dim iwc As Single = img.Width / 2
Dim ihc As Single = img.Height / 2
Dim x0 As Single = (-iwc) * Math.Cos(d) - (-ihc) * Math.Sin(d) + iwc
Dim y0 As Single = (-iwc) * Math.Sin(d) + (-ihc) * Math.Cos(d) + ihc
Dim x1 As Single = iwc * Math.Cos(d) - (-ihc) * Math.Sin(d) + iwc
Dim y1 As Single = iwc * Math.Sin(d) + (-ihc) * Math.Cos(d) + ihc
Dim x2 As Single = (-iwc) * Math.Cos(d) - ihc * Math.Sin(d) + iwc
Dim y2 As Single = (-iwc) * Math.Sin(d) + ihc * Math.Cos(d) + ihc

--------------------------------------------------

焦らず1つ1つ確認しながら打ち込んでください。

タイプミスなどで進めないのが嫌だったり

頭が疲れてきた方はここで中断するのももったいないので

ちゅうちょせずコピペ(コピーアンドペースト)してくださいね。

まだまだ行きます。

Mojiクラスの「DrawMoji」プロシージャの

「描画座標を計算」コメント部分を

以下のコードに置き換えます。

--------------------------------------------------

'描画座標を計算
x0 = x0 + _x - iwc
y0 = y0 + _y - ihc
x1 = x1 + _x - iwc
y1 = y1 + _y - ihc
x2 = x2 + _x - iwc
y2 = y2 + _y - ihc

--------------------------------------------------

本日最後の仕上げです。

Mojiクラスの「DrawMoji」プロシージャの

「描画座標のPointF配列を作成」コメント部分を

以下のコードに置き換えます。

--------------------------------------------------

'描画座標のPointF配列を作成
Dim pf() As PointF = {New PointF(x0, y0), _
New PointF(x1, y1), _
New PointF(x2, y2)}

--------------------------------------------------

ふぅー。疲れた。

それではお待たせしました。

デバッグ開始を実行してみましょう!

nttadamoji-032.gif


文字探し表示画面の文字がランダムに回転表示されました。

いい感じで回転しましたか!?

あと少しで完成です。

パチパチパチ

テーマ : フリーゲーム - ジャンル : ゲーム

=第26話=文字を反転表示する処理を追加しましょう

あけましておめでとう御座います。

2009年はどんな年でしたか?

私は全体的には良いことも悪いこともありました。

唯一仕事がこの不景気にあおられて、

よろしくない状況なのでストレスたまっとります(`3´)ノ!!

それはそれ、ゲームはゲームということで続きいきます。


Mojiクラスのインスタンスプロシージャの

「文字が裏向きであるかを取得(1/2の確率で裏向き)」

コメント部分に以下のコードを追加します。

--------------------------------------------------

'文字が裏向きであるかを取得(1/2の確率で裏向き)
If rnd.Next(2) = 0 Then
_blnUramuki = True
Else
_blnUramuki = False
End If

--------------------------------------------------

続きまして、Mojiクラスの「DrawMoji」プロシージャの

「水平方向に反転(文字を裏向きにする)」コメント部分に

以下のコードを追加します。

--------------------------------------------------

'水平方向に反転(文字を裏向きにする)
If _blnUramuki Then
img.RotateFlip(RotateFlipType.RotateNoneFlipX)
End If

--------------------------------------------------

それでは今回もデバッグ開始を実行してみましょう!
nttadamoji-031.gif


文字探し表示画面の文字がランダムに反転表示されました。

だんだんそれっぽくなってきましたね!

次回は、文字を回転して表示する処理を実装していきます。

2010年はよい年でありますように。

テーマ : フリーゲーム - ジャンル : ゲーム


プロフィール

ウルトラパワー

Author:ウルトラパワー
FC2ブログへようこそ!

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ

相互リンク

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。