goo blog サービス終了のお知らせ 

職案人

求職・歴史・仏教などについて掲載するつもりだが、自分の思いつきが多いブログだよ。適当に付き合って下さい。

仲間を探せ2--続

2019年11月02日 | VB2017
仲間を探せ2--続

【開発環境】
os:Windows 10
IDE(統合開発環境):VisualStudio 2017
言語;VB

【参考書】
株式会社秀和システム「作って覚えるVisualBasic2017」
著者:萩原 博之/宮崎 昭世

【仲間を探せ2】
この前の続き、この前はボールが一つ勝手に動いてるだけで、未完成でしたが、今度はボールを5つにしてプログラムを完成させる。

【ゲーム起動】
1.開始
5つのボールが背景の「烏」を消して行く

2.正解
「烏」と書いてあるボールの色と、同じ色のボールを上部から選んでクリックする。正解すると、背景が○になり、時計が止まり、再スタートボタンがアクティブになる。

3.間違えた場合
ゲームを再スタートしたい場合は「再スタート」ボタンを押す。同じ様に、「烏」と書いてあるボールを探す。間違えると、速度が遅くなる。



【コーデング】
1.FormBallGame

Public Class FormBallGame
'=============================================================
'メンバー変数
'====================================================================
   ’クラス宣言
Private canvas As Bitmap '画面下の描画領域

'配列宣言
Private ボール As Ball() 'ボールを管理
Private 漢字 As String() 'ボールに書く漢字の配列
Private ブラシ As Brush() 'ボールを塗る色の配列

'文字
Private fontName As String = "HG教科書体" '表示する漢字のフォント名
Private correcText As String = "烏"    '正解の文字
Private mistakeText As String = "鳥"   '間違いの文字[4]

'背景
Private circleText As String = "○" '正解した場合背景文字を○にする
Private 間違 As String = "☓" '間違えた場合

'ボール数
Private randomResult As Integer = 0 '正解の番号:0~ボールの数のいすれか
Private ボール数 As Integer = 5 'ボールの数

'時間
Private nowTime As Double = 0 '経過時間

'====================================================
'戻り値の無いSub関数を作る
'===================================================
'---------------------------
'配列の初期化、画面の初期化
'---------------------------
Private Sub InitGraphics()
'初期化
ブラシ = New Brush(ボール数) {}
漢字 = New String(ボール数) {}
ボール = New Ball(ボール数) {}

'ブラシ色の設定
ブラシ(0) = Drawing.Brushes.LightPink
ブラシ(1) = Drawing.Brushes.LightBlue
ブラシ(2) = Drawing.Brushes.LightGray
ブラシ(3) = Drawing.Brushes.LightCoral
ブラシ(4) = Drawing.Brushes.LightGreen

'上のImageオブジェクト
DrowCircleSelectPictureBox()

'下のImageオブジェクト
'引数1は文字色:引数2はフォント:引数3は文字:引数4は背景色
DrowMainPictureBox(Drawing.Brushes.Orange, fontName, correcText, False)

RestartButton.Enabled = False '再スタートボタンを操作できる様にする
textHunt.Text = correcText '上部のtextboxに正解文字を表記

End Sub
'--------------------------------------------------------
'ボールのインスタンスの作成・ランダムな位置にボールを描く
'--------------------------------------------------------

'漢字の設定
Private Sub SetStartPosition()
For i As Integer = 0 To ボール数 - 1    'for文
漢字(i) = mistakeText    '間違え文字「鳥」を4つセットする
Next
'ボール数の分の範囲で乱数を取得し、変数にセット
randomResult = New Random().Next(ボール数)
漢字(randomResult) = correcText '正解の文字「烏」を一つセットする

'ボールクラスのインスタンス作成
For i As Integer = 0 To ボール数 - 1
ボール(i) = New Ball(MainPictureBox, ブラシ(i), 漢字(i))
Next

'ランダムな位置にボールを描く
Dim 下幅 As Integer = MainPictureBox.Width
Dim 下高 As Integer = MainPictureBox.Height
SetBalls(New Random().Next(下幅), New Random().Next(下高))

'タイマーをスタートさせる
nowTime = 0
Timer1.Start()

End Sub
'----------------------------------------------
'引数の位置情報を利用してランダムにボールを描く
'----------------------------------------------
Private Sub SetBalls(x As Integer, y As Integer)
'ローカル変数
Dim 下幅 As Integer = MainPictureBox.Width  '下部ピクチャボックスの幅
Dim 下高 As Integer = MainPictureBox.Height '下部ピクチャボックスの高
Dim rndX As Integer 'ランダム幅
Dim rndY As Integer        'ランダム高

'for文でランダム値を生成している
For i As Integer = 0 To ボール数 - 1
rndX = New Random(i * x).Next(下幅)
rndY = New Random(i * y).Next(下高)
'クラスメソッド
ボール(i).DeleteCircle() '以前のボールを削除
ボール(i).PutCircle(rndX, rndY) '新しい位置にボールを描く
Next
End Sub

'-------------------------------------------
'画面上部のPictureBoxに円を書くサブルーチン
'------------------------------------------
Private Sub DrowCircleSelectPictureBox()
     'ローカル変数
Dim 上高 As Integer = SelectPictureBox.Height '上部のピクチャボックスの高さ
Dim 上幅 As Integer = SelectPictureBox.Width '上部のピクチャボックスの幅

'図形のサイズを決める
Dim selectCanvas As Bitmap = New Bitmap(上幅, 上高)

'キャンパスに書くための筆を決める
Using g As Graphics = Graphics.FromImage(selectCanvas)
'For文
For i As Integer = 0 To ボール数 - 1
        '5つのボールの塗りつぶし
 g.FillEllipse(ブラシ(i), i * 上高, 0, 上高, 上高) 
Next

'書いた内容をコントロールに割り当てる
SelectPictureBox.Image = selectCanvas
End Using

End Sub

'---------------------------------------------
'画面下部のPictureBoxに文字を書くサブルーチン
'---------------------------------------------
Private Sub DrowMainPictureBox(color As Brush, font As String, text As String, truePlag As Boolean)
     'ローカル変数
Dim 下幅 As Integer = MainPictureBox.Width '下部ピクチャボックスの幅
Dim 下高 As Integer = MainPictureBox.Height '下部ピクチャボックスの高

'描画先とするImageオブジェクトを作成する
      '初回は変数canvasがまだないのでNothingに成る
If canvas Is Nothing Then    
canvas = New Bitmap(下幅, 下高)
End If

'キャンパスに文字を描くための筆を用意
Using g As Graphics = Graphics.FromImage(canvas)
'正解用の背景
If truePlag Then
g.FillRectangle(Drawing.Brushes.LightPink, 0, 0, 下幅, 下高)
'不正解用の背景
Else
g.FillRectangle(Drawing.Brushes.White, 0, 0, 下幅, 下高)
End If

'背景に引数で指定した文字列を描画する
g.DrawString(text, New Font("HG教科書", 下高 - 下高 / 4),
color, 0, 0, New StringFormat())

'MainPictureBoxに表示する
MainPictureBox.Image = canvas

End Using
End Sub

'=====================================================
'イベントを処理するイベントハンドラーの作成
'=====================================================

'起動される時に呼ばれるハンドラー
Private Sub FormBallGame_Load(sender As Object, e As EventArgs) Handles MyBase.Load
'初期化
InitGraphics()

'ボールのインスタンスの作成・ランダムな位置にボールを描く
SetStartPosition()


End Sub

'再スタートボタンが押された時、呼ばれるイベントハンドラ
Private Sub RestartButton_Click(sender As Object, e As EventArgs) Handles RestartButton.Click
'初期化
InitGraphics()

'ボールのインスタンスの作成・ランダムな位置にボールを描く
SetStartPosition()

End Sub

'上のピクチャーボックスが押された時、呼ばれるイベントハンドラ
Private Sub SelectPictereBox_MuuseClick(sender As Object, e As MouseEventArgs) Handles SelectPictureBox.MouseClick
'再スタートボタンが操作可能が操作可能な場合は何もせず処理を終了
If (RestartButton.Enabled) Then
Exit Sub
End If

'押されたx座標で正解判定
'<判定>押されたボタンがマウスの左ボタン?
If (e.Button = MouseButtons.Left) Then
'どの円を選択したかを算出(クリックしたx座標の位置/pictureBoxの横幅)
Dim selectCircle As Integer = e.X / SelectPictureBox.Height

      '正解ならば
If (randomResult = selectCircle) Then
       ’タイマー停止
Timer1.Stop()
       '背景に赤○を描く
DrowMainPictureBox(Drawing.Brushes.Red, fontName, circleText, True)
       '再スタートボタンを操作可能に
RestartButton.Enabled = True

      '不正解ならば
Else 
DrowMainPictureBox(Drawing.Brushes.Black, fontName,間違, False)
'移動の割合を減少させる
For i As Integer = 0 To ボール数 - 1
   ボール(i).pitch = ボール(i).pitch - ボール(i).pitch / 2
Next
nowTime = nowTime + 10 'ペナルティ
End If

End If
End Sub

'下のピクチャーボックスが押された時、呼ばれるイベントハンドラ
Private Sub MainPictureBox_MouseClick(sender As Object, e As MouseEventArgs) Handles MainPictureBox.MouseClick

'再スタートボタンが操作可能な場合は何もせずに終了可能
If (RestartButton.Enabled) Then
Exit Sub
End If
'マウスをクリックした位置にボールをセットする関数を呼び出す
SetBalls(e.X, e.Y)
End Sub

'タイマーが動いてる時、呼ばれるイベントハンドラ
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
For i As Integer = 0 To ボール数 - 1
ボール(i).Move()

Next

nowTime = nowTime + 0.02
TextBox2.Text = nowTime.ToString("0.00")

End Sub
End Class


2.Ballクラス
Imports System.Drawing
Imports System.Windows.Forms
Public Class Ball
'------------------------------------------
'クラスのデータ部(必要な情報の定義)
'------------------------------------------
'公開データ

Public pitch As Integer '移動の割合

'===============================================
'非公開データ
'===============================================
Private pictureBox As PictureBox '描画する
Private canvas As Bitmap '描画するキャンパス
Private brushColor As Brush '塗りつぶす色

Private positionX As Integer '横位置(X座標)
Private positionY As Integer '縦位置(Y座標)

Private previousX As Integer '以前の横位置(X座標)
Private previousY As Integer '以前の縦位置(Y座標)

Private directionX As Integer '移動方向(X座標)(+1 Or -1)
Private directionY As Integer '移動方向(Y座標)(+1 Or -1)

Private radius As Integer '円の半径
Private kanji As String '表示する漢字
Private fontName As String '表示する漢字のフォント

'====================メソッド部門======================================

'---------------------------------------------
'Ballコンストラクタ
'----------------------------------------------
'4つの引数を指定しクラスの内部に保持する。4つの引数は、描画するPictureBox
'描画するキャンパス、塗りつぶす色、表示する漢字

Public Sub New(pb As PictureBox, cl As Brush, st As String)
pictureBox = pb '描画するpictureBox
canvas = pb.Image '描画するキャンパス
brushColor = cl '塗りつぶす色
kanji = st '表示する漢字

radius = 40 '円の半径の初期設定
pitch = radius / 2 '移動の割合の初期設定(半径の半分)
directionX = +1 '移動方向を+1で初期設定
directionY = +1 '移動方向を+1で初期設定
fontName = "HG教科書体" '漢字のフォント名の初期設定
End Sub

'-------------------------------------
'指定した位置にボールを描くメソッド
'-----------------------------------
Public Sub PutCircle(x As Integer, y As Integer)
'現在の位置を記憶
positionX = x
positionY = y
'------------------------------------
'usingステートメント
'-----------------------------------
Using g As Graphics = Graphics.FromImage(canvas)
'円をbrushColorで指定された色で描く
g.FillEllipse(brushColor, x, y, radius * 2, radius * 2)

'文字列を描画する
g.DrawString(kanji, New Font(fontName, radius),
Brushes.Black, x + 4, y + 12, New StringFormat())

'mainPictureBoxの表示する
pictureBox.Image = canvas

End Using
End Sub

'-----------------------------------
'指定した位置のボールを消すメソッド(白く描く)
'--------------------------------------
Public Sub DeleteCircle()
'初めて呼ばれて以前の値がない場合
If (previousX = 0) Then
previousX = positionX
End If
If (previousY = 0) Then
previousY = positionY
End If
'------------------------------------
'usingステートメント
'-----------------------------------
Using g As Graphics = Graphics.FromImage(canvas)
'円を白で描く
g.FillEllipse(Brushes.White, previousX, previousY, radius * 2, radius * 2)
'mainPictureBoxに表示する
pictureBox.Image = canvas
End Using
End Sub
'-----------------------------------
'指定した位置にボールを動かすメソッド
'--------------------------------------
Public Sub Move()
'以前の表示を削除
DeleteCircle()

'新しい移動先の計算
Dim x As Integer = positionX + pitch * directionX
Dim Y As Integer = positionY + pitch * directionY

'壁で跳ね返る補正
If (x >= pictureBox.Width - radius * 2) Then '右端に来た場合の判断
directionX = -1
End If
If (x <= 0) Then '左端に来た場合の判断
directionX = +1
End If
If (Y >= pictureBox.Height - radius * 2) Then '下端に来た場合の判断
directionY = -1
End If
If (Y <= 0) Then '上端に来た場合の判断
directionY = +1
End If

'跳ね返り補正を反映した値で新しい位置を計算
positionX = x + directionX
positionY = Y + directionY

'新しい位置に描画
PutCircle(positionX, positionY)

'新しい位置を以前の値として記憶
previousX = positionX
previousY = positionY

End Sub
End Class

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

仲間を探せ2

2019年10月14日 | VB2017
仲間を探せ2


【開発環境】
os:Windows 10
IDE(統合開発環境):VisualStudio 2017
言語;VB

【参考書】
株式会社秀和システム「作って覚えるVisualBasic2017」
著者:萩原 博之/宮崎 昭世


【仲間を探せ2】
前回の仲間を探せゲームを応用したもので、グラフィックを使って仲間を探すように改良したもの!

■仕様
1)いきなり開始。ランダムにボールが飛び交う
2)壁にボールが当たったら、跳ね返る
3)発見するまでタイマーは動いている
4)正解の文字位置はランダムに表示される
5)正解の文字を見つけたら、画面上部に表示された同じ色のボールをクリックする
6)間違った同じ色をクリックすると、ボールの移動速度が遅くなると、同時に10秒加算される

■デザインイメージ
仕上がりのイメージ


【画面作成】
①フォームコントロールにSplitContainerコントロールを貼って画面を二分割にする。

・フォームコントロールのプロパティ設定
(Name)= FormBallGame
FormBallGame.Size = 1050,800
FormBallGame.Text = 間違いボール探し

②SplitContainerコントロールのプロパティ設定
(Name)= SplitContainer1
SplitContainer1.SplitterDistance = 70

③タイマーコントロールを貼る

・タイマーコントロールのプロパティ設定
Timer.interval = 20←好み

[画面上部]
左から順に各コントロールを貼る
①TextBoxコントロールのプロパティ設定
(Name) = textHunt
textHunt.Font = メリオス,20pt
textHunt.Size = 45,47

②Labelコントロールのプロパティ設定
Label9.Text = を探せ

③Labelコントロールのプロパティ設定
Label1.Text = 下の背景に表示された漢字と同じ色の円をクリック→

④Labelコントロールのプロパティ設定
Label2.Text = ↓下のエリアをクリックするとボールの位置が変わります

⑤PicturBoxコントロールのプロパティ設定
(Name) = selectPicturBox
selectPicturBox.BackColor = white
selectPicturBox.Size = 275,50

⑥Buttonコントロールのプロパティ設定
(Name) = restartButton
restartButton.Size = 82,35
restartButton.Text = 再スタート

⑦Labelコントロールのプロパティ設定
Label8.Text = 記録:

⑧TextBoxコントロールのプロパティ設定
(Name) = textTimer
textTimer.Font = メリオス,20pt
textTimer.Size = 129,47
textTimer.Text = Rigt

⑨Labelコントロールのプロパティ設定
Label3.Text = 秒

[画面下部]
①SplitContainerコントロールの下部に、PicturBoxコントロールを貼る
(Name) = mainPictureBox
mainPictureBox.SizeMode = Zoom
mainPictureBox.Dock = Fill
mainPictureBox.BackColor = while

以上
【ためしコーデング】
Partial Class FormBallGame

'画面上部のPictureBoxに円を書くサブルーチン
Private Sub DrowCircleSelectPictureBox()
Dim 高 As Integer = SelectPictureBox.Height '高さ
Dim 幅 As Integer = SelectPictureBox.Width '幅

'図形のサイズを決める
Dim selectCanvas As Bitmap = New Bitmap(幅, 高)

'キャンパスに書くための筆を決める
Using g As Graphics = Graphics.FromImage(selectCanvas)
'塗りつぶし,幅=高さ
g.FillEllipse(Brushes.LightBlue, 0, 0, 高, 高)
'書いた内容をコントロールに割り当てる
SelectPictureBox.Image = selectCanvas
End Using
End Sub

'画面下部のPictureBoxに文字を書くサブルーチン
Private Sub DrowMainPictureBox()

'描画先とするImageオブジェクトを作成する
Dim canvas As Bitmap = New Bitmap(MainPictureBox.Height,MainPictureBox.Width )

'キャンパスに文字を描くための筆を用意
Using g As Graphics = Graphics.FromImage(canvas)
'背景に引数で指定した文字列を描画する
g.DrawString("烏", New Font("HG教科書", MainPictureBox.Height -
    MainPictureBox.Height / 4),
Brushes.Orange, 0, 0, New StringFormat())

'MainPictureBoxに表示する
MainPictureBox.Image = canvas


End Using

End Sub


’イベントハンドラー
Private Sub FormBallGame_Load(sender As Object, e As EventArgs) Handles MyBase.Load

DrowCircleSelectPictureBox()
DrowMainPictureBox()
End Class

■試運転
実行してみる


【コーデング】


■Form1.vb
Public Class FormBallGame
'=============================================================
'クラス共通の変数
'====================================================================

Private canvas As Bitmap   '画面下の描画領域
Private ボール As Ball 'ボールを管理
Private fontName As String = "HG教科書体" '表示する漢字のフォント名
Private correcText As String = "烏"    '正解の文字:一つだけ
Private nowTime As Double = 0 '経過時間

'====================================================
'自作サブルーチン部
'===================================================

'画面上部のPictureBoxに円を書くサブルーチン

Private Sub DrowCircleSelectPictureBox()
Dim 高 As Integer = SelectPictureBox.Height '高さ
Dim 幅 As Integer = SelectPictureBox.Width '幅
'図形のサイズを決める
Dim selectCanvas As Bitmap = New Bitmap(幅, 高)

'キャンパスに書くための筆を決める
Using g As Graphics = Graphics.FromImage(selectCanvas)
'塗りつぶし,幅=高さ
g.FillEllipse(Brushes.LightBlue, 0, 0, 高, 高)
'書いた内容をコントロールに割り当てる
SelectPictureBox.Image = selectCanvas
End Using

End Sub

'画面下部のPictureBoxに文字を書くサブルーチン

Private Sub DrowMainPictureBox(color As Brush, font As String, text As String)
Dim 高 As Integer = MainPictureBox.Height '高さ
Dim 幅 As Integer = MainPictureBox.Width '幅
'描画先とするImageオブジェクトを作成する

Dim canvas As Bitmap = New Bitmap(幅, 高)
'キャンパスに文字を描くための筆を用意
Using g As Graphics = Graphics.FromImage(canvas)
'背景に引数で指定した文字列を描画する
g.DrawString("烏", New Font("HG教科書", 高 - 高 / 4),
Brushes.Orange, 0, 0, New StringFormat())

'MainPictureBoxに表示する
MainPictureBox.Image = canvas


End Using
End Sub

'=====================================================
'イベントハンドラー部
'=====================================================

'起動される時に呼ばれるハンドラー
Private Sub FormBallGame_Load(sender As Object, e As EventArgs) Handles Base.Load
'上部のPictureBoxに円を描く
DrowCircleSelectPictureBox()

'下部のPictureBoxに烏を描く
DrowMainPictureBox(Brushes.Orange, fontName, correcText)
textHunt.Text = correcText

'ボールクラスのインスタンス作成
ボール = New Ball(MainPictureBox, Brushes.LightBlue, correcText)
'位置100,100にボールを置く
ボール.PutCircle(100, 100)

'タイマーをスタートさせる
Timer1.Start()

End Sub

'再スタートボタンが押された時、呼ばれるイベントハンドラ
Private Sub RestartButton_Click(sender As Object, e As EventArgs) Handles RestartButton.Click


End Sub

'上のピクチャーボックスが押された時、呼ばれるイベントハンドラ
Private Sub SelectPictereBox_MuuseClick(sender As Object, e As MouseEventArgs) Handles SelectPictureBox.MouseClick

End Sub

'下のピクチャーボックスが押された時、呼ばれるイベントハンドラ
Private Sub MainPictureBox_MouseClick(sender As Object, e As MouseEventArgs) Handles MainPictureBox.MouseClick

End Sub

'タイマーが動いてる時、呼ばれるイベントハンドラ
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick

ボール.Move()


nowTime = nowTime + 0.02
TextBox2.Text = nowTime.ToString("0.00")

End Sub

End Class

■クラスの作成
Ball.vb
Imports System.Drawing
Imports System.Windows.Forms

'クラス
Public Class Ball
'------------------------------------------
'クラスのデータ部(必要な情報の定義)
'------------------------------------------
'公開データ

Public pitch As Integer '移動の割合

'===============================================
'非公開データ
'===============================================
Private pictureBox As PictureBox '描画する
Private canvas As Bitmap '描画するキャンパス
Private brushColor As Brush '塗りつぶす色

Private positionX As Integer '横位置(X座標)
Private positionY As Integer '縦位置(Y座標)

Private previousX As Integer '以前の横位置(X座標)
Private previousY As Integer '以前の縦位置(Y座標)

Private directionX As Integer '移動方向(X座標)(+1 Or -1)
Private directionY As Integer '移動方向(Y座標)(+1 Or -1)

Private radius As Integer '円の半径
Private kanji As String '表示する漢字
Private fontName As String '表示する漢字のフォント

'====================メソッド部門======================================

'---------------------------------------------
'Ballコンストラクタ
'----------------------------------------------
'4つの引数を指定しクラスの内部に保持する。4つの引数は、描画するPictureBox
'描画するキャンパス、塗りつぶす色、表示する漢字

Public Sub New(pb As PictureBox, cl As Brush, st As String)
pictureBox = pb '描画するpictureBox
canvas = pb.Image '描画するキャンパス
brushColor = cl '塗りつぶす色
kanji = st '表示する漢字

radius = 40 '円の半径の初期設定
pitch = radius / 2 '移動の割合の初期設定(半径の半分)
directionX = +1 '移動方向を+1で初期設定
directionY = +1 '移動方向を+1で初期設定
fontName = "HG教科書体" '漢字のフォント名の初期設定
End Sub

'-------------------------------------
'指定した位置にボールを描くメソッド
'-----------------------------------
Public Sub PutCircle(x As Integer, y As Integer)
'現在の位置を記憶
positionX = x
positionY = y
'------------------------------------
'usingステートメント
'-----------------------------------
Using g As Graphics = Graphics.FromImage(canvas)
'円をbrushColorで指定された色で描く
g.FillEllipse(brushColor, x, y, radius * 2, radius * 2)

'文字列を描画する
g.DrawString(kanji, New Font(fontName, radius),
Brushes.Black, x + 4, y + 12, New StringFormat())

'mainPictureBoxの表示する
pictureBox.Image = canvas

End Using
End Sub

'-----------------------------------
'指定した位置のボールを消すメソッド(白く描く)
'--------------------------------------
Public Sub DeleteCircle()
'初めて呼ばれて以前の値がない場合
If (previousX = 0) Then
previousX = positionX
End If
If (previousY = 0) Then
previousY = positionY
End If
'------------------------------------
'usingステートメント
'-----------------------------------
Using g As Graphics = Graphics.FromImage(canvas)
'円を白で描く
g.FillEllipse(Brushes.White, previousX, previousY, radius * 2, radius * 2)
'mainPictureBoxに表示する
pictureBox.Image = canvas
End Using
End Sub
'-----------------------------------
'指定した位置にボールを動かすメソッド
'--------------------------------------
Public Sub Move()
'以前の表示を削除
DeleteCircle()

'新しい移動先の計算
Dim x As Integer = positionX + pitch * directionX
Dim Y As Integer = positionY + pitch * directionY

'壁で跳ね返る補正
If (x >= pictureBox.Width - radius * 2) Then '右端に来た場合の判断
directionX = -1
End If
If (x <= 0) Then '左端に来た場合の判断
directionX = +1
End If
If (Y >= pictureBox.Height - radius * 2) Then '下端に来た場合の判断
directionY = -1
End If
If (Y <= 0) Then '上端に来た場合の判断
directionY = +1
End If

'跳ね返り補正を反映した値で新しい位置を計算
positionX = x + directionX
positionY = Y + directionY

'新しい位置に描画
PutCircle(positionX, positionY)

'新しい位置を以前の値として記憶
previousX = positionX
previousY = positionY

End Sub
End Class

■実行画面


以上で一つのボールが動くが、これでゲームは完成でない。


コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

仲間を探せ

2019年09月15日 | VB2017
仲間を探せゲーム


【開発環境】
os:Windows 10
IDE(統合開発環境):VisualStudio 2017
言語;VB

【参考書】
株式会社秀和システム「作って覚えるVisualBasic2017」
著者:萩原 博之/宮崎 昭世

【アプリのイメージ】


■仕様
・「スタート」ボタンをクリックすることでゲームが始まる
・ゲームが始まると、秒読みも始まる
・正解の文字と違う文字が表示される。正しい文字の位置はランダムで良い
・正解の文字をクリックすると、タイマーが止まる
以上

【画面デザイン】
1)form1コントロールのプロパティを設定
・form1.Text =仲間を探せ
・form1.Size = 700,730

2)form1にSplitContainerコントロールを貼る

SplitContainerコントロールの▶をクリックし、「上下分割の方向」を選択する。

SplitContainer.Splitter = 70に設定

3)パネル1の部分に各コントロールを貼る


・textbox1コントロール
textbox1.Font = メイリオ,16pt
textbox1.Size = 55,55

・textbox2コントロール
textbox2.Font = メイリオ,16pt
textbox2.Size = 160,55
textbox2.TextAlige = Right

・Label1コントロール
Label1.Text = を探せ

・Label2コントロール
Label2.Text = 記録:

・Label3コントロール
Label3.Text = 秒

・Button1コントロール
Button1.name = ButtonStart
Button1.Font = メイリオ,16pt
Button1.Size = 211,55
Button1.Text = スタート


パネル2のデザイン画面を作る
パネル2に縦5個✕横5個のButtonコントロールを貼る

1)パネル2にButtonを貼る

・プロパティを設定する
Button1.Font = メイリオ,36pt
Button1.Size = 125,100
Button1.Text = ""空白


2)Button1コントロールを横に4個、コピーする
・Button1コントロールを選択し、「Ctrl」ボタンを押しながら、マウスをクリックする

最後に、左右の間隔を均等にするボタンを押す

3)縦横25個のButtonコントロールを完成させる
・縦横25のButtonコントロールが出来たら、上下の間隔を均等にする

・縦を選択する

左のボタンを押す



4)Timerコントロールを貼る
Timer1.interval = 20

【コーデング】
Public Class Form1
'スタート
Private Sub ButtonStart_Click(sender As Object, e As EventArgs) Handles      ButtonStart.Click
 処理を書く
End Sub

'25個のボタン
Private Sub Buttons_Click(sender As Object, e As EventArgs) Handles        Button9.Click, Button8.Click, Button7.Click, Button6.Click, Button5.Click, Button4.Click, Button3.Click, Button26.Click, Button25.Click, Button24.Click, Button23.Click, Button22.Click, Button21.Click, Button20.Click, Button2.Click, Button19.Click, Button18.Click, Button17.Click, Button15.Click, Button14.Click, Button13.Click, Button12.Click, Button11.Click, Button10.Click, Button1.Click
  処理を書く
End Sub

'タイマー
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
  処理を書く
End Sub
End Class

完成
Public Class Form1
Dim 正解 As String = "烏" '正解の文字
Dim 不正解 As String = "鳥" '不正解の文字

Dim nowTime As Double '経過時間

'スタート
Private Sub ButtonStart_Click(sender As Object, e As EventArgs) Handles ButtonStart.Click
TextBox1.Text = 正解  '探す文字を表示

Dim Rnd As Random = New Random() '乱数を生成するためのインスタンスを生成
Dim randomRessult As Integer = Rnd.Next(25) '0~24の乱数を取得

'SplitContainerの下部のpanel2に乗っている
'ButtonのTextをすべて不正解の文字にする
'forループ文
'For ループカウンタ変数名 As データ型名 = 
     初期値 To 終了値
' 繰り返す処置
' Next

For i As Integer = 0 To SplitContainer1.Panel2.Controls.Count - 1
SplitContainer1.Panel2.Controls(i).Text = 不正解
Next

'ランダムで1つだけ正解の文字にする
SplitContainer1.Panel2.Controls(randomRessult).Text = 正解
'タイマー
nowTime = 0 'タイマーの初期化
Timer1.Start()

End Sub

'25個のボタン
Private Sub Buttons_Click(sender As Object, e As EventArgs) Handles Button9.Click, Button8.Click, Button7.Click, Button6.Click, Button5.Click, Button4.Click, Button3.Click, Button25.Click, Button24.Click, Button23.Click, Button22.Click, Button21.Click, Button20.Click, Button2.Click, Button19.Click, Button18.Click, Button17.Click, Button15.Click, Button14.Click, Button13.Click, Button12.Click, Button11.Click, Button10.Click, Button1.Click
If CType(sender, Button).Text = 正解 Then
Timer1.Stop() '時間の計算終了
Else
nowTime = nowTime + 10 'ペナルティー

End If
End Sub

'タイマー
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
nowTime = nowTime + 0.02
TextBox2.Text = nowTime.ToString("0.00")

End Sub
End Class

【実行】

「スタート」ボタンを押す

「烏」ボタンを押すとタイマーが止まる。再スタートしたい時は、「スタート」ボタンを押す








コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

カラス占い

2019年08月28日 | VB2017
カラス占い


【開発環境】
os:Windows 10
IDE(統合開発環境):VisualStudio 2017
言語;VB

【参考書】
株式会社秀和システム「作って覚えるVisualBasic2017」
著者:萩原 博之/宮崎 昭世

【カラス占い】
内容は
占いたい曜日を入れ、「占い」を押すと、キョエちゃんが答えたを出す様にする。

◆画面デザイン
Label1及びLabel2、Button、DateTimePicker、pictureBoxなどのコントロールを配置する


◆各コントロールのプロパティ設定
1)formコントロール
form.Text = キョエ占い
form.SizeGripStyle = Show←サイズ変更グリック

2)Label1コントロール
Label1.AutoSize = False
Label1.text = キョエが、お前らの運勢を占ってやる!占いたい日付を書いてね

3)Buttonコントロール
Button.text = 占う

4)Label2コントロール
Label1.AutoSize = False
Label1.text =お告げ

5)pictureBoxコントロール
pictureBox.size = 300,169
pictureBox.SizeMode = Zoom
pictureBox.Anchor = すべて




◆リソースの扱い方
ⅰ)カラス占いプロジェクトを「右クリック」し、「プロパティ」をクリック

ⅱ)プロパティ画面が表示されたら、左側の「リソース」を選択し、「リソースの追加」-「新しいイメージ」-「JPEGイメージ」選択する


ⅲ)新しいリソースの名前を入力する

・「title」と入力したら、「Add」ボタンをクリックする


ⅳ)ペイントと関連させる
「Resource」-「title.jpg」をクリック


「title.jpg」をWクリックすると、ペイントが立ち上がる

ⅴ)ペイントで好きな画像を取り込む

取り込めたら、一旦閉じる

ⅵ)画像を表示させる
「pictureBox」の▶をクリックする

「プロジェクトリソース」にチェックし、「title」選択し、「OK」ボタンをクリック

「title」が表示される


・「title」画像を変えてみる
「Resource」-「title.jpg」をWクリックして、ペイントを立ち上げ別な画像と差し替えて閉じる


ⅶ)大吉、中吉、小吉、吉、凶の6データを揃える


【コーデング】
Public Class Form1

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim dateNumber As Integer '年間累積日を記憶する変数
dateNumber = DateTimePicker1.Value.DayOfYear '選んだ日付から、年間累積日を計算

'Select~Case文
Select Case dateNumber Mod 5 '年間累積日を5で割った余り

Case 0 '大吉
PictureBox1.Image = My.Resources.daikihi
Label2.Text = "宝くじが当たるかもwwドーン"

Case 1 '中吉
PictureBox1.Image = My.Resources.cyuukichi
Label2.Text = "五輪チケットが当たるかも"

Case 2 '小吉
PictureBox1.Image = My.Resources.syoukichi
Label2.Text = "岡村に会えるかも"

Case 3 '吉
PictureBox1.Image = My.Resources.kichi
Label2.Text = "NHKのど自慢に出られるかも"

Case 4 '凶
PictureBox1.Image = My.Resources.kyou
Label2.Text = "ぼーっと生きてんじゃねよ。落下物に注意"

Case Else 'ミス
MsgBox("プログラムミスが有る")

End Select

End Sub
End Class

【プログラム実行】




コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

メモ帳

2019年08月14日 | VB2017
メモ帳の作り方


【開発環境】
os:Windows 10
IDE(統合開発環境):VisualStudio 2017
言語;VB

【参考書】
株式会社秀和システム「作って覚えるVisualBasic2017」
著者:萩原 博之/宮崎 昭世

Windows.Forms.✗✗はVisualStudio 2012以降廃止になった

【メモ帳を作る】
イメージ


1.画面デザイン
ⅰ)パーツの配置
「Label」を2つ、「TextBox」を2つ、ColorDialogを貼る


ⅱ)プロパティを設定する
Label1.text = 今日
Label1.Font = MS 明朝 12pt


ⅲ)TextBox1タスクのMulutLineプロパティにチェックを入れる

TextBox1.Dock = full
TextBox1.backcolor=255,192,255


Label1.text = 明日
Label1.Font = MS 明朝 12pt

TextBox2タスクのMulutLineプロパティにチェックを入れる
TextBox.Dock = Bottom
TextBox1.backcolor =128, 255,255

ⅳ)各パーツの順序
ツールを右クリックすると表示位置が現れるので、「最前」か、「最背」かを選ぶ


ⅴ)Formプロパティの設定
・タイトルバー消す

FormプロパティのFormBorderStyleを「None」に変更する


・半透明にする
Opacity=60%

・最上位に表示させる
TopMost=True
・(Name)プロパティをFormFusenに変更

ⅵ)ColorDialogの設定
・(Name)プロパティをColorDialgFusenに変更する


【コーディング】
ⅰ)まずForm1-1.vbをクリックして
Public Class FormFusen

End Class
を確認する。
ⅱ)イベントのコードを書く
TextBoxのKeyDownイベントをクリックする


イベントハンドラが表示される
Public Class FormFusen
Private Sub TextBox1_KeyDown(sender As Object, e As KeyEventArgs) Handles TextBox1.KeyDown

End Sub

End Class

【実際のイベントハンドラのコーディング】
Public Class FormFusen
Private MouseX As Integer 'マウスの横位置(X座標)
Private MouseY As Integer 'マウスの縦位置(Y座標)

'テキストボックス1にキーボードから文字を入力した時
Private Sub TextBox1_KeyDown(sender As Object, e As KeyEventArgs) Handles TextBox1.KeyDown
'<判定>押されたキーがエスケープキー?
If (e.KeyCode = Keys.Escape) Then
'「yes」の場合
'アプリケーションを終了
Me.Close()
End If

End Sub

'テキストボックス1をマウスでクリックした時
Private Sub TextBox1_MouseDown(sender As Object, e As MouseEventArgs) Handles TextBox1.MouseDown
'<判定>押されたキーがマウスの左ボタン?
If (e.Button = MouseButtons.Left) Then
'「yes」の場合
Me.MouseX = e.X 'マウスの横位置(X座標)を記憶
Me.MouseX = e.Y 'マウスの縦位置(Y座標)を記憶
End If
End Sub

'テキサスボックス1でクリックしたマウスを移動させた時
Private Sub TextBox1_MouseMove(sender As Object, e As MouseEventArgs) Handles TextBox1.MouseMove
'<判定>押されたキーがマウスの左ボタン?
If (e.Button = MouseButtons.Left) Then
'「yes」の場合
Me.Left = Me.Left + e.X - MouseX 'フォームの横位置を更新
Me.Top = Me.Top + e.Y - MouseY 'フォームの縦位置を更新
End If
End Sub

'テキストボックス1をマウスでダブルクリックした時
Private Sub TextBox1_MouseDoubleClick(sender As Object, e As MouseEventArgs) Handles TextBox1.MouseDoubleClick
'色の設定ダイアログを表示する
ColorDialogFusen.ShowDialog()
'テキストボックスの背景色を色の設定ダイアログで選んだ色に設定する
TextBox1.BackColor = ColorDialogFusen.Color
End Sub

'テキストボックス2をマウスでダブルクリックした時
Private Sub TextBox2_MouseDoubleClick(sender As Object, e As MouseEventArgs) Handles TextBox2.MouseDoubleClick
'色の設定ダイアログを表示する
ColorDialogFusen.ShowDialog()
'テキストボックスの背景色を色の設定ダイアログで選んだ色に設定する
TextBox2.BackColor = ColorDialogFusen.Color
End Sub
End Class


◆画面デザインの変更
ラベルの所にテキストの文字が隠れる為、2つラベルをTextBox1にドッキングした
Label1.Dock = Top
Label2.Dock = Bottom
に変更



【実行】


①停止は「Esc」キーを押す
②移動はテキストのマウスで左クリックしたまま移動する
③色を変えたい問はテキストをWクリックする




コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする