C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 32 を表示中)
■15855 / )  Re[11]: スロットマシンを作ってみましたが
□投稿者/ y4yama (62回)-(2008/03/24(Mon) 09:35:49)
No15781 (seven さん) に返信
>人からサンプルもらってしまうとどうしてもそれに引きずられてしまうので
>見せられる前に自分で考えてみた方が勉強になると思います。
というご意見は、もっともなので、「それに引きずられてしまう」ことなく、一例として
ながめて下さいネ
VB2005EEで動作確認しました。

Public Class Form1

    Private y1 As Single = 999
    Private y1_addvalue As Single = 8
    Private y1_hantei As Single
    Private b1_push As Boolean = False
    Private arrLabel() As String = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"}
    Private a1 As Integer = 0
    Private yLabel(2) As Label '3つの文字は、実行時にソフトが作る

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'PictureBox1 は幅40、高さ80 
        PictureBox1.BorderStyle = BorderStyle.Fixed3D

        Timer1.Interval = 160 'ドラムの回転速度
        Timer1.Enabled = True
        Dim ii As Integer
        For ii = 0 To 2
            yLabel(ii) = New Label()
            yLabel(ii).Width = 20
            yLabel(ii).Left = 5
            yLabel(ii).TextAlign = ContentAlignment.MiddleCenter
            yLabel(ii).BorderStyle = BorderStyle.Fixed3D
            yLabel(ii).ForeColor = Color.Blue
            PictureBox1.Controls.Add(yLabel(ii))
        Next
    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        If 0 < y1_addvalue Then
            y1 += y1_addvalue       '下に回転する
        End If
        If 32 <= y1 Then
            y1 = 0
            a1 = a1 + 1
            If 9 < a1 Then
                a1 = 0
            End If
            yLabel(0).Text = arrLabel(a1)
            yLabel(1).Text = arrLabel((a1 + 9) Mod 10)
            yLabel(2).Text = arrLabel((a1 + 8) Mod 10)
        End If
        If b1_push Then
            If y1_addvalue < y1_hantei And 12 <= y1 And y1 < 16 Then
                y1 = 15
                y1_addvalue = 0
                yLabel(1).ForeColor = Color.Red '中央のyLabel(1)を赤色(停止のサイン)
            ElseIf y1_hantei <= y1_addvalue Then
                y1_addvalue -= 0.13  '回転を少しづつ遅くする
            End If
        End If
        'yLabel(0)〜(2)のPictureBox1中での位置を更新する
        Dim y_offset = 20
        yLabel(0).Top = y1 - y_offset
        yLabel(1).Top = y1 - y_offset + 32
        yLabel(2).Top = y1 - y_offset + 64

    End Sub

    '停止ボタン
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        b1_push = True
        y1_hantei = 0.9 + (Now().Millisecond) / 300 '擬似乱数で停止の判定を変化させる
    End Sub

    'restartボタン. 再度、回転を始める
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        b1_push = False
        a1 = 2
        y1 = 999
        y1_addvalue = 8
        yLabel(1).ForeColor = Color.Blue
    End Sub
End Class

PictureBox1の中に、yLabel(0)〜(2)が3個配置されて、配置位置はソフトでyLabel(0).Top を更新しています
yLabel(0)〜(2)には、yLabel(1).Text = arrLabel((a1 + 9) Mod 10)というようにシーケンスな"0"〜"9"の
文字を表示させます
imageListを使わなくても、このようにTESTは簡単にできるのです。正確な終了処理などはしてませんので、あしからず・・

返信 編集キー/


管理者用

- Child Tree -