Валерий Алексеевич Жарков

Справочник Жаркова по проектированию и программированию искусственного интеллекта. Том 6: Программирование на Visual Basic искусственного интеллекта. Продолжение 2


Скачать книгу

имя папки и нажимаем клавишу Enter.

      Добавляем в эту папку первый звуковой файл Windows XP Balloon.wav по стандартной схеме: выполняем правый щелчок по имени этой папки, в контекстном меню выбираем Add, Existing Item, в панели Add Existing Item в окне “Files of type” выбираем “All Files”, в центральном окне находим (например, в папке с загруженными из Интернета файлами) и выделяем имя файла и щёлкаем кнопку Add (или дважды щёлкаем по имени файла). В панели Solution Explorer мы увидим этот файл.

      Аналогично добавляем в проект второй файл win.wav.

      Напомним, что добавлять в проект указанные выше файлы можно как по одному, так и все сразу (после их выделения или только одной мышью, или мышью с нажатой клавишей Shift – для выделения всех соседних файлов, или мышью с нажатой клавишей Ctrl – для выделения всех файлов в различных местах).

      Рис. 20.13. В панели Images Collection Editor щёлкаем кнопки Add и OK.

      Для ввода в проект новой формы (для таблицы с результатами игры) в меню Project выбираем Add Windows Form, в панели Add New Item оставляем заданные по умолчанию параметры и щёлкаем кнопку Add. В ответ VS выводит новую форму Form2 и добавляет в панель Solution Explorer новый пункт Form2.vb. Аналогично, как первую, проектируем вторую форму (рис. 20.14), за маркеры увеличиваем форму до размеров Size (436; 223) и вводим на форму элементы управления: сетку DataGridView с размерами Size (288; 104), кнопку Button с заголовком Reset (в свойстве Text) и флажок CheckBox, для которого в свойстве Name записываем имя isSoundOn, а в свойстве Checked выбираем значение True (устанавливаем флажок). Свойства этих элементов управления можно стандартно изменять, как описано ранее.

      Рис. 20.14. Форма Form2 для таблицы с результатами игры.

      20.4. Код программы

      Открываем файл Form1.vb (например, по схеме: File, Open, File) и в классе Form1 нашего проекта записываем следующие переменные и методы.

      Листинг 20.1. Переменные и методы.

      Dim matrix As Grid

      Dim score As Integer = 0

      Dim mouseOffset As Point

      Dim paused As Boolean = False

      Dim isSoundOn As Boolean = True

      Private Sub BlockClick(ByVal sender As Object, _

      ByVal e As System.Windows.Forms.MouseEventArgs)

      ' Play the sound.

      If isSoundOn Then

      'Исправляем ошибку в оригинале:

      My.Computer.Audio.Play( _

      "..\..\Resources\Windows XP Balloon.wav", _

      AudioPlayMode.WaitToComplete) 'Ждем окончания мелодии.

      End If

      ' Update the matrix and compute the new score.

      Dim count As Integer = matrix.Click(New Point(e.X, e.Y))

      score += 10 * count

      ' Draw the new grid.

      matrix.Draw(Me.PictureBox1.CreateGraphics(), _

      Me.PictureBox1.BackColor)

      ' Write the score on the screen.

      Dim images() As PictureBox = { _

      Me.tenthousands, Me.thousands, _

      Me.hundreds, Me.tens, Me.ones}

      Dim scoreString As String = score.ToString().PadLeft(5)

      Dim digits() As String = { _

      scoreString.Chars(0), _

      scoreString.Chars(1), _

      scoreString.Chars(2), _

      scoreString.Chars(3), _

      scoreString.Chars(4)}

      For index As Integer = 0 To 4

      If digits(index) <> " " Then

      images(index).Image = _

      numbers.Images(CInt(digits(index)))

      Else

      images(index).Image = Nothing

      End If

      Next

      End Sub

      Private Sub StartNewGame()

      ' If a game is already running, check for a new high score.

      If Not matrix Is Nothing Then

      Me.Timer1.Enabled = False

      HighScores.UpdateScores(score)

      End If

      Timer1.Enabled = False

      matrix = New Grid(6)

      score = 0

      matrix.Draw(Me.PictureBox1.CreateGraphics(), _

      Me.PictureBox1.BackColor)

      Timer1.Enabled = True

      AddHandler PictureBox1.MouseDown, AddressOf BlockClick

      'Обнуляем счётчик секунд:

      secondCounter