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

スポンサーサイト

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

=第23話=Mojiクラスを実際に使用する処理を作成しましょう

今日は仕事も休みなので「WINDING ROAD」を聞きながら

この記事を書いています。休日は楽しく過ごしたいものです。

本題ですが、今回は久々にデバッグ実行の日です!

うまく動作することを期待してがんばりましょう!

それでは、MainFormクラスに正しい文字数の値を保持する

変数「intOmote」と、Mojiオブジェクトの変数「Moji」をコードに追加します。

MainFormクラスです。Mojiクラスではないです。間違わないように!
--------------------------------------------------

'正しい文字数の変数
Private intOmote As Integer

'Mojiオブジェクトの変数
Private Moji(12 - 1) As Moji

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

続きまして、「SceneChange」プロシージャの

「Mojiオブジェクトの作成」コメント部分に以下のコードを追加します。

過去の記事で作成済みの「SceneCahge」プロシージャ内に

「'Mojiオブジェクトを作成」とコメントしてある行の下に

「'★この部分に後ほどコードを追加します★」と

コメントしてあるところに以下のコードを追加してください。

追加したら★印のコメントは削除していただいて結構です。

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

'Mojiオブジェクトの作成
intOmote = 0
For i As Integer = 0 To 3 - 1
For j As Integer = 0 To 4 - 1
'描画座標を指定してMojiオブジェクトのインスタンスを作成
Moji(4 * i + j) = New Moji(Me.TabPage1.Width / 5 * (j + 1), Me.TabPage1.Height / 4 * (i + 1))
'正しい文字数の数をカウント
If Not Moji(4 * i + j).Uramuki Then
intOmote = intOmote + 1
End If
Next j
Next i

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

続きまして、「TabPage3」に文字を描画するための処理を行なう

「DrawTabPage3」プロシージャをコードに追加します。

これもMainFormクラス内に追加してください。

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

'TabPage3の描画処理
Private Sub DrawTabPage3()

If Not Moji Is Nothing Then
Dim g As Graphics = Me.TabPage3.CreateGraphics

'文字を表示
For i As Integer = 0 To Moji.Length - 1
Moji(i).DrawMoji(g, MojiDrawType.DrawTurn)
Next
End If

End Sub

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

すると?あれ?MojiDrawTypeと書いてある部分に波線が表示されてる(・◇・;

これは、波線でエラーになったコード部分を、

nttadamoji.Moji.MojiDrawType.DrawTurn(nttadamojiプロジェクトの

MojiクラスのMojiDrawType構造体のDrawTurn値という意味)

と書きなおせば問題ない(エラーが消える)のですが、

ずいぶんと長ったらしい名前になってしまいます。

このような場合は、デフォルトの名前空間を指定することで

MojiDrawType.DrawTurnとゆうように省略した名前を書くことができます。

自分の家の住所を説明するときに地球の日本の東京都○○区・・・

なんて長ったらしいことは誰も言わないですね。

なので予め「地球の日本」の住所を使用するので

「地球の日本の」を省略します宣言をするわけです。

ということで、「Public Class MainForm」よりも更に上の部分に

デフォルトの名前空間を追加します。

以下をMainFormクラスの外(上の行)に追加してください。
--------------------------------------------------

Imports nttadamoji.Moji

--------------------------------------------------
nttadamoji-026.gif

この行自体がエラー(nttadamojiに波線がでる)となる場合は、

「メニューバーの[プロジェクト(P)]にある[nttadamojiのプロパティ(P)]

を選択し、[アプリケーション]項目の[ルート名前空間]の値を確認してください。

そこの値が「nttadamoji」となっているか確認し、なっていなければ

「nttadamoji」という値に変更してみてください。エラーがなくなるはずです。

これで、MojiDrawTypeと書いてある部分の波線が消えました。

もう少し頑張ります。

「Form1」の「コードエディタ」ウインドウを表示し、

クラス名(画面左上のリスト)の「TabPage3」をクリック、

メソッド名(画面右上のリスト)の「Paint」をクリックすることで

「TabPage3_Paint」イベントプロシージャが追加されます。

「TabPage3_Paint」イベントプロシージャにコードを追加します。

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

'TabPage3の描画処理
Call DrawTabPage3()

--------------------------------------------------
nttadamoji-027.gif

ここまでうまくいきましたでしょうか。

それではおまたせいたしました!

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


文字探し表示画面に文字が表示されましたね。

しかし、同じ大きさの"あ"という文字が並んでいるだけです。

次回から、文字の表示に変化を付ける処理を実装していきます。


スポンサーサイト

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

=第22話=Mojiクラスに文字を描画するメソッドを追加しましょう

今回もまたまたコードを追加します。

文字を描画するメソッドをコードに追加します。

このメソッドをつかって文字を描画します。

頭が整理できず混乱しそうなときは中の処理を今は難しく考えず、

このDrawMojiというメソッドを使えばゲーム用の文字が

画面に描画される程度でとめておきましょう。

ではさっそく以下のコードをMojiクラスに追加してください。
--------------------------------------------------

Public Sub DrawMoji(ByVal g As Graphics, ByVal mdt As MojiDrawType)

'Bitmapオブジェクトを作成
Dim img As New Bitmap(100, 100)

'imgのGraphicsオブジェクトを取得
Dim ig As Graphics = Graphics.FromImage(img)

'Control色に塗りつぶす
ig.FillRectangle(SystemBrushes.Control, ig.VisibleClipBounds)

'文字を描画
Dim fnt As New Font("MS ゴシック", _intSize)
Dim sf As New StringFormat
sf.Alignment = StringAlignment.Center
sf.LineAlignment = StringAlignment.Center
ig.DrawString(_strMoji, fnt, Brushes.Black, ig.VisibleClipBounds, sf)

'水平方向に反転(文字を裏向きにする)
'★この部分に後ほどコードを追加します★

'正解○または不正解×を描画
'★この部分に後ほどコードを追加します★

'角度をラジアン単位に変換
'★この部分に後ほどコードを追加します★

'回転後の座標を計算
'★この部分に後ほどコードを追加します★

'描画座標を計算
Dim iwc As Single = img.Width / 2
Dim ihc As Single = img.Height / 2
Dim x0 As Single = _x - iwc
Dim y0 As Single = _y - ihc

'描画座標のPointF配列を作成
Dim pf As PointF = New PointF(x0, y0)

'作成した文字の画像を描画
g.DrawImage(img, pf)

'リソースを開放
img.Dispose()
ig.Dispose()
fnt.Dispose()
sf.Dispose()

End Sub

--------------------------------------------------
nttadamoji-025.gif

どんどん完成に近づいてきています。

今年中に完成させますよー!

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

=第21話=Mojiクラスにインスタンスを追加しましょう

「デジタルフォトフレーム」っていいなーと思う今日この頃です。

でも自分で買うのもちょっと高いし、誰かくれないかな(ーー;


その話はおいといて、

それでは今回はMojiクラスのインスタンス生成を行なうコードを追加します。

以下のコードをMojiクラス内に貼り付けるか自力で打ち込んでください。
--------------------------------------------------

Public Sub New(ByVal x As Integer, ByVal y As Integer)

'文字の描画中心座標を取得
_x = x
_y = y

'暗号乱数ジェネレータを使用してシード値を決定して乱数を生成
'★この部分に後ほどコードを追加します★

'文字テーブルから一文字を取得
_strMoji = "あ"

'文字のサイズを取得(20~70)
_intSize = 50

'文字が裏向きであるかを取得(1/2の確率で裏向き)
'★この部分に後ほどコードを追加します★

'文字の角度を取得(0~359)
'★この部分に後ほどコードを追加します★

End Sub

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

nttadamoji-024.gif

どんどん完成に近づいて来ました。

はやく実行して完成していくことを実感して頂きたいのですが、

このMojiクラスが今回のゲームにとって、とても重要で中心となるところです。

今のうちにどういった動きをするものを作成しているのか、

コードを見て、調べてみたり、予想したりして楽しんでください。

わくわくしてください(笑)

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

=第20話=Mojiクラスに列挙型とプロパティを追加しましょう

それでは今回もはりきっていきましょう。

今回は作成したMojiクラスに列挙型とプロパティを追加します。

「列挙型?」「プロパティ?」と思われた方は気にせず

以下のコード(列挙型)をクラス内に記述してください。

気になる方は「VB 列挙型」などで調べてみてください。
--------------------------------------------------

Public Enum MojiDrawType As Integer
DrawTurn = 0 '回転した文字
DrawNotTurn = 1 '回転していない文字
DrawAnswer = 2 '回転していない文字に正解表示
End Enum

--------------------------------------------------
上記コードは描画する文字のタイプを指定する列挙型です。

続いて以下のプロパティをクラス内に記述してください。

描画する文字の裏表を返すための読み取り専用のプロパティです。
--------------------------------------------------

'文字が裏向きであるかを返す
Public ReadOnly Property Uramuki() As Boolean
Get
Return _blnUramuki
End Get
End Property

--------------------------------------------------
nttadamoji-023.gif

できましたでしょうか。

焦らず毎日少しずついきましょう。

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

=第19話=Mojiクラスに変数と配列を追加しましょう

2009年も終盤にさしかかってきました。

今年中にやっておきたいことは終わりそうですか。

私たちは今年中にこのブログでゲームの完成までは書ききろうと思ってます。

では今回も頑張りましょう。


文字を表示するために必要となる変数をコードに追加します。

以下のコードを前回作成したMojiクラスの中に記述してください。

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

Private _x As Integer '文字の描画中心座標X
Private _y As Integer '文字の描画中心座標Y
Private _strMoji As String '描画する文字
Private _blnUramuki As Boolean '文字が裏向きであるか
Private _intSize As Integer '文字のサイズ
Private _intKakudo As Integer '文字の角度

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

続いて描画する文字を指定する配列をコードに追加します。

配列とは学校の靴入れ(ロッカー)のように
連続して値を格納できる入れ物のようなものです。

今回のゲームで使用する文字(ひらがな)を格納しますが、
反転してるか判別が難しい文字は使用しないことにします。

以下の配列宣言をMojiクラスに記述してください。

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

'描画に使用する文字テーブル
'(回転した際に [い][こ] [く][へ] [し][つ]
' 反転した際に [さ][ち] [ひ]
' 回転+反転した際に [に] が判別しにくいので使用しない)
Private strHiragana() = New String() {"あ", "う", "え", "お", _
"か", "き", "け", _
"す", "せ", "そ", _
"た", "て", "と", _
"な", "ぬ", "ね", "の", _
"は", "ふ", "ほ", _
"ま", "み", "む", "め", "も", _
"や", "ゆ", "よ", _
"ら", "り", "る", "れ", "ろ", _
"わ", "を", "ん"}

--------------------------------------------------
nttadamoji-022.gif

今日はここまでです。

少しずつですができるだけ毎日更新するように頑張ります。


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

=第18話=文字を表示するためのMojiクラスを作成しましょう

ゲームをつくるのも根気が必要です。

2時間以上集中できる時間をつくって一気に作成し、

その後は思いっきり休憩するサイクルが私は好きです。

くれぐれも睡眠不足には気をつけましょう。

十分な睡眠をとることがインフルエンザ対策に効果的だそうです。


では早速ですが今回は「クラス」というものを使います。
文字を表示するためのMojiクラスを作成しましょう。

---------------------------------------------------
1.ソリューションエクスプローラの[nttadamoji]を右クリック
nttadamoji-019.gif

2.[追加]→[クラス]をクリック

3.ファイル名に「Moji」と入力し、[追加]をクリック
nttadamoji-020.gif

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

これでnttadamojiプロジェクトにMojiクラスが追加されました。
nttadamoji-021.gif


クラスを使うと「オブジェクト指向」で作成することができます。
「オブジェクト指向」を簡単に説明すると「物」です。
そしてその物に対して指示を与えると情況に応じて応答します。
例えば車という物に対して鍵を挿してまわすとエンジンがかかります。
アクセルを踏むと走り出します。ガソリンが減ってきたらガソリンランプがつきます。

このように今回作成するゲームで登場する(扱う)文字をオブジェクトとして
車のように扱うことができます。
「表示しろ、まわれ、とまれ」と命令するだけでそれに従ってくれるようにします。
そうすることで自分で動かすというより命令して働かせるイメージにかわります。
あなたはその指揮をとるだけでいいのです。

ということで次回から、Mojiクラスにコードを追加していきます。
そのコードが命令に従い判断、行動する内容になります。

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


プロフィール

ウルトラパワー

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

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

相互リンク

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