создаем игру Угадайка на visual basic
Думаю, вы не раз видели разделы по программированию в различных печатных (или интернетовских) изданиях, в которых рассказывалось об игре, которую часто называют "Угадайкой". Я лично видел много примеров на самых различных языках программирования - от QWBASIC"а и Паскаля до Delphi, но ни разу - на Visual Basic. Почти все увиденные мной примеры этой игры невзрачны - обычный текстовый режим и ничего нового. Давайте же попробуем создать на Visual Basic, что-нибудь новое, красивое и удобное.
Для начала объясню, что же это за игра. Компьютер загадывает число в заданном диапазоне, ваша задача - это число угадать за определённое количество попыток. Приступим.
Как программа будет выглядеть? Давайте придумаем какой-нибудь новый интерфейс. Представим, как будет происходить диалог между программой и пользователем:
- Число между 1 и 50. Попробуй угадать за 5 попыток.
- Попытка 1.
- 20
- Неверно. Больше.
- Попытка 2.
- 40
- Нет. Меньше.
- Попытка 3.
- 30
- Нет. Меньше.
- Попытка 4.
- 25
- Неверно. Больше.
- Попытка 5.
- 27
- Неверно. Эх ты мазила!
- Ты проиграл! А ведь это число 29!
Теперь представим, что мы сделаем программу в таком виде: пользователь вводит свой вариант в поле ввода, а ответ выводится в другом элементе, ну, например в Label (Надпись). Но ведь пользователю придётся запоминать все ответы компьютера, что было больше, а что меньше. Лучше всего сделать интерфейс типа чата: все вопросы и ответы пользователь видит на экране. Человек вводит вариант, и он автоматически появляется внизу, компьютер отвечает и его ответ помещается под вопросом пользователя - также, как в вышеприведённом примере - весь диалог перед глазами. Ну, что ж, начнём работу!
Итак, запускаем Visual Basic и создаём новый проект Ctrl+N или File/New Project(Файл/Новый проект)- Standard EXE.
Теперь настроим свойства формы. На панели Properties (Свойства) установим следующие параметры:
Name=frmMain
BorderStyle=1 - Fixed Single
Caption=Угадайка by "Your Name Here!"
MinButton=True
ScaleMode=1 - Pixel
Width=7800
Height=5505
Сохраните проект - Save Project (Сохранить проект) и имя проекта установите как "Угадайка.vbp", т. к. название проекта на диске в дальнейшем будет использоваться компилятором как название вашей программы. Теперь всё готово. Займёмся дизайном.
Сначала поместим текстовое поле ввода: Нажмите на кнопку TextBox на панели инструментов и методом протягивания нарисуем этот элемент на нашей главной форме. Точно также разместим три компонента CommandButton и два Label.
Изменяем свойства элемента Text1:
Name=txtSay
Text=""
Элемента Command1:
Default=True
Name=cmdSay
Caption="Сказать"
Элемента Command2:
Name=cmdExit
Caption="Выход"
Элемента Command3:
Name=cmdAbout
Caption="About"
Элемента Label1:
Name=lblComp
AutoSize=True
Caption=""
ForeColor= &H000000FF&
Index=0
Элемента Label2:
Name=lblUser
AutoSize=True
Caption=""
ForeColor= &H00FF0000&
Index=0
Изменив свойство ForeColor элементов lblComp и lblUser мы поменяли цвета их заполнения на красный и синий соответственно, а поменяв свойство Index, мы превратили их в массив и теперь можем создавать таких компонентов столько, сколько понадобится.
Ну, вот и дошли до программного кода.
Option Explicit "Необходимость определять все переменные
Dim n As Integer, Rand As Integer, num As Integer "Определение переменных
Private Sub cmdAbout_Click()
"Нажатие на кнопку About
MsgBox "Угадайка v 1.0.0" & vbCrLf & "Copyright (C) 2003 by Daniyar Atadjanov", , "About"
End Sub
Private Sub cmdExit_Click()
"Нажатие на кнопку Выход
End
End Sub
Private Sub cmdSay_Click()
"Нажатие на кнопку Сказать
If Len(txtSay) <> 0 Then "Обрабатываем, только если есть запрос в поле
num = num + 1 "Увеличиваем число попыток на 1
If Val(txtSay) > Rand Then "Определяем Больше, Меньше или Равно!
Say (">")
ElseIf Val(txtSay) < Rand Then
Say ("<")
Else
Say ("=")
End If
End If
End Sub
Private Sub Form_Load()
Randomize Timer "Перезагружаем генератор случайных чисел
n = 0
num = 0
Rand = 0
Rand = (49) * Rnd + 1
lblComp(n).Caption = "Я загадал число между 1 и 50!""Выводим надпись при загрузке
lblUser(n).Top = lblComp(n).Top + lblComp(n).Height "Местоположение надписи lblUser
End Sub
Private Sub txtSay_Change()
If Len(txtSay.Text) <> 0 Then "А есть ли вообще текст?
If Val(txtSay.Text) < 1 Then txtSay.Text = "1" "Если ввели меньшее число, то 1
If Val(txtSay.Text) > 50 Then txtSay.Text = "50""Если ввели большее чило, то 2
txtSay.Text = Val(txtSay.Text)
txtSay.SelStart = Len(txtSay.Text) "Устанавливаем курсор в поле на конец цифры
End If
End Sub
Private Sub Say(Rav As String)
If num < 5 Then
n = n + 1
Load lblComp(n) "Загружаем новые элементы: lblComp
Load lblUser(n) " и lblUser
lblComp(n).Visible = True "Делаем их видимыми
lblUser(n).Visible = True
lblUser(n).Caption = "Попытка " & num & ": " & txtSay "Выводим номер попытки!
If n <> 1 Then lblComp(n).Top = lblUser(n - 1).Top + lblUser(n - 1).Height Else"Положение
lblComp(1).Top = lblUser(0).Top + lblUser(0).Height
If Rav = ">" Then "Анализ переданных в функцию аргументов
lblComp(n).Caption = "Моё число меньше!"
lblUser(n).Top = lblComp(n).Top + lblComp(n).Height
ElseIf Rav = "<" Then
lblComp(n).Caption = "Моё число больше!"
lblUser(n).Top = lblComp(n).Top + lblComp(n).Height
Else
MsgBox "Поздравляю - это число " & Rand, vbInformation, "Ты выиграл!"
End
End If
txtSay.SelStart = 0 "Выделяем текст в поле ввода!
txtSay.SelLength = Len(txtSay)
Else
If Rav = "=" Then
MsgBox "Поздравляю - это число " & Rand, vbInformation, "Ты выиграл!"
End
Else
MsgBox "Ты проиграл! А ведь это было число " & Rand, vbInformation, "Ты не угадал!"
End
End If
End If
End Sub
Это весь код! Для более подробного его понимания читайте комментарии к программе! Теперь можете компилировать вашу программу - File/Make Угадайка.exe (Файл/Компилировать Угадайка.exe) и посылать друзьям с гордой подписью "Мой проект"!
Приятного программирования.
Daniyar Atadjanov