Главная
    Статьи
    Программы
    Гостевая книга
    О сайте
   

 

   

 

 
 


Главная/Статьи/Пишем игру "Угадай число" с виртуальным противником на Visual Basic

Пишем игру "Угадай число"
с виртуальным противником на Visual Basic

 

Сейчас я расскажу, как написать игру «Угадай число» на Visual Basic. Наверняка вы уже видели подобные примеры, но моя программы будет обладать одной особенностью: в ней можно будет играть с виртуальным соперником.

Сам я не очень люблю язык Visual Basic, т.к. серьезных приложений на нем не напишешь. Гораздо больше мне нравится Delphi – там и работать приятнее, и интереснее, и больше возможностей для реализации творческого замысла. Но написать игру «Угадай число» я решил именно в Visual Basic – просто  начинал изучать программирование именно с этого языка, и свою самую первую игру – «Угадай число» – написал именно на нем.

Итак, начнем. Сначала продумаем логику работы программы. Компьютер должен случайным образом выбрать число от 1 до, например, 100. После чего бросается жребий права первого хода. Если жребий пал на вас, то вы вводите число, программа сравнивает введенное число с загаданным, и сообщает, больше оно загаданного или меньше. Затем ход передается компьютеру, он также загадывает число, оно проверяется на правильность, и т.д., пока кто-нибудь не выиграет.

Запускайте Visual Basic 6.0, создайте новый проект и сразу сохраните его.

На первую форму (Name = Frm1) поместим следующие элементы: компонент TextBox, две кнопки Button и Label. Свойство Caption у Label изменим на «Введите максимальное загадываемое число», заголовок одной кнопки измените на «Выход», а другой - «Войти в игру».

 

В коде кнопки выхода напишите:

Private Sub Command2_Click()

End

End Sub

Теперь создайте вторую форму. Сформируйте ее таким образом, чтобы вверху было поле противника, а внизу – ваше. В ней-то и будет происходить вся игра. Поместите на форму 2 компонента «Frame», 2 «Image» и 4 таймера. У таймеров установите следующие свойства:

 

Свойство

Таймер 1

Таймер 2

Таймер 3

Таймер 4

Name

TimerHod

TimerUser

TimerKomp

TimerRestart

Enabled

False

False

False

False

Interval

1000

700

1000

1500

Теперь на вторую Frame добавьте еще один компонент Frame (свойство Visible = False), в него поместите поле ввода TextBox и одну кнопку Button.

Добавьте в свое поле и поле противника по Label и хорошо растяните их.

Перейдите в первую форму и создайте обработчик события нажатия кнопки «Старт!»:

Private Sub Command1_Click()

If Text1.Text = "" Then MsgBox "Вводите целые положительные числа меньше 256!", vbExclamation, "Riddle": Text1.Text = "": Text1.SetFocus: Exit Sub

If Text1.Text = "0" Then MsgBox "Вводите целые положительные числа меньше 256!", vbExclamation, "Riddle": Text1.Text = "": Text1.SetFocus: Exit Sub

If Val(Text1.Text) < 2 Then MsgBox "Число не может быть меньше 2!", vbExclamation, "Riddle"

Me.Hide

Form3.Show

    Module1.StartOnly

End Sub

Здесь проверяется, что пользователь ввел в текстовое поле. Если там ничего нет, стоит ноль или введенное число меньше двух, то выдается предупреждение. Если этот этап пройден, то форма скрывается (Me.Hide), и выполняется процедура StartOnly из модуля Module1, которую еще предстоит написать.

Сразу напишем обработчик события выгрузки формы (если пользователь нажмет кнопку-крестик):

Private Sub Form_Unload(Cancel As Integer)

End

End Sub

Теперь добавляем в проект новый модуль (Project->Add Module). Скопируйте код, приведенный ниже, в модуль.

 

Option Explicit

Global chislo As Integer ’Главное загаданное число

Global x As Integer ‘Это число ввел пользователь при старте,

                    ‘это максимальное загадываемое число

Global max As Integer, min As Integer ‘Максимальное и минимальное число

Global hod As Byte ‘Кидаем жребий: чей будет ход

Global ChU As Integer ‘Число, которое вводит юзер при каждой попытке

‘угадать число

Global ChK As Integer ‘То же самое, только число компьютера

                   

 

Function StartOnly()

x = Form2.Text1.Text

    Do

    Randomize Timer

    chislo = Int(Rnd * (x + 1))

    Loop Until chislo <> 0

    'Число загадано!

Form3.Label1.Caption = "": Form3.Label2.Caption = "": Form3.Label3.Caption = ""

 

min = 0

max = x

Form3.TimerHod.Enabled = True

End Function

Теперь переходим на вторую форму (Name = Form3) и объявляем переменные (в самом верху кода):

 

Option Explicit

Dim a As Byte

Dim t1 As Byte, t2 As Byte, t3 As Byte

 

Private Sub Form_Load()

t1 = 0

t2 = 0

t3 = 0

End Sub

 

Private Sub Form_Unload(Cancel As Integer)

End

End Sub

 

Описываем таймеры:

 

Private Sub TimerHod_Timer()

t1 = t1 + 1

If t1 = 1 Then

    Label1.Caption = "Бросаем жребий…"

    Randomize Timer

    a = Int(Rnd * 2)

    End If

If t1 = 2 Then

    If a = 0 Then ‘Первый ход - компьютера

        Label1.Caption = "Первый ход - компьютера"

        TimerKomp.Enabled = True

        TimerHod.Enabled = False

        t1 = 0

        Else

        Label1.Caption = "Первый ход - ваш"

        Frame3.Visible = True

        Form3.Text1.SetFocus

        TimerHod.Enabled = False

        t1 = 0

        End If

    End If

End Sub

 

Private Sub TimerUser_Timer()

t2 = t2 + 1

If t2 = 1 Then

    ChU = Text1.Text

    Text1.Text = ""

    Label3.Caption = "Проверка вашего числа…"

    Label2.Caption = ""

    End If

If t2 = 2 Then

    If ChU = chislo Then

        Label3.Caption = "Победа"

        Label1.Caption = "Загаданное число было " + Str(chislo)

        TimerUser.Enabled = False

        TimerRestart.Enabled = True

        Exit Sub

        Else

        If ChU > chislo Then

                Label3.Caption = "Загаданное число меньше " + Str(ChU)

                If ChU < max Then max = ChU

                TimerKomp.Enabled = True

                Label1.Caption = "Ход компьютера"

                TimerUser.Enabled = False

                t2 = 0

                Else

                Label3.Caption = " Загаданное число больше " + Str(ChU)

                If ChU > min Then min = ChU

                TimerKomp.Enabled = True

                Label1.Caption = "Ход компьютера"

                TimerUser.Enabled = False

                t2 = 0

                End If

        End If

End If

End Sub

 

Private Sub TimerKomp_Timer()

t3 = t3 + 1

If t3 = 1 Then

    Do

    Randomize Timer

    ChK = Int(Rnd * x + 1)

    Loop Until (ChK <> 0) And (ChK > min) And (ChK < max)

    Label2.Caption = "Мое число " + Str(ChK)

    Label3.Caption = ""

    End If

If t3 = 2 Then

    If ChK = chislo Then

        Label2.Caption = "Я победил!"

        Label3.Caption = ""

        Label1.Caption = "Загаданное число было " + Str(chislo)

        TimerKomp.Enabled = False

        TimerRestart.Enabled = True

        Exit Sub

        Else

        If ChK > chislo Then

            Label2.Caption = "Загаданное число меньше " + Str(ChK)

            If ChK < max Then max = ChK

            Label1.Caption = "Ваш ход"

            Frame3.Visible = True

            Form3.Text1.SetFocus

            TimerKomp.Enabled = False

            t3 = 0

            Else

            Label2.Caption = " Загаданное число больше " + Str(ChK)

            If ChK > min Then min = ChK

            Label1.Caption = " Ваш ход "

            Frame3.Visible = True

            Form3.Text1.SetFocus

            TimerKomp.Enabled = False

            t3 = 0

            End If

        End If

    End If

End Sub

 

Private Sub TimerRestart_Timer()

t1 = 0

    t2 = 0

    t3 = 0

 

    If MsgBox("Хотите сыграть заново?", vbQuestion + vbYesNo, "Riddle") = 6 Then

        Module1.StartOnly

        TimerRestart.Enabled = False

    Else

        End

    End If

End Sub

 

Код кнопки Button1, которую нажимает пользователь, когда пытается угадать число и вводит его в Text1:

 

Private Sub Command1_Click()

If Not IsNumeric(Text1.Text) Then Text1.Text = "": Text1.SetFocus: Exit Sub

If Text1.Text = "" Then Text1.SetFocus: Exit Sub

If Val(Text1.Text) < 1 Then Text1.Text = "": Text1.SetFocus: Exit Sub

TimerUser.Enabled = True

Frame3.Visible = False

End Sub

 

Вот и все. В заключение хочу добавить, что код этот я написал полгода назад, а когда открыл, то ужаснулся – сколько же в нем было ошибок! Некоторые я исправил, но другие все еще остались. Придумайте, как усовершенствовать программу. Можно, например, сделать не одного, а трех виртуальных игроков, или же командную игру. Дерзайте, все в ваших руках!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Expert © 2006-2008
Hosted by uCoz