Игра — Попади в цель

Решение задачи 19 по книге Лукина «Понятно о Visual Basic.net»

Условие задачи:

Усложним нашу задачу про ПОПАЛ – НЕ ПОПАЛ: Целей для нашего выстрела две. Одна находится в диапазоне дальности 28-30, другая – в диапазоне 65-70. Человек вводит в компьютер число – дальность выстрела. Если снаряд попал в цель, то есть число находится в интервале от 28 до 30 или от 65 до 70, то нужно выдать сообщение ПОПАЛ. Если снаряд упал на расстоянии ближе 10 к любой из целей, то нужно выдать сообщение БЛИЗКО. Кроме этого предусмотрите варианты ПЕРЕЛЕТ, НЕДОЛЕТ, МЕЖДУ ЦЕЛЯМИ и НЕ БЕЙ ПО СВОИМ. Нарисуйте схему выстрела (Рис. 7.3). Горизонтальная линия – земля. Два синих прямоугольника в заданном месте и заданных размеров – это цели. Черный квадратик слева – пушка. Вся картина должна появляться на форме до ввода дальности выстрела, после ввода должен появляться красный. кружочек – место попадания снаряда. Перед рисованием вам придется выбрать масштаб: скажем, 1 к 10. Это значит, что, например, первая цель будет прямоугольником, занимающим пространство на расстоянии от 280 до 300 пикселей от пушки.

Public Class Form1
    Dim graf As Graphics 'объявляем переменную для рисования
    Dim vistrel As Integer
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        'рисуем графику - землю, пушку и мишени
        graf = Me.CreateGraphics
        graf.DrawLine(Pens.Black, 0, 200, 1000, 200) 'рисуем землю
        graf.FillRectangle(Brushes.Black, 0, 180, 20, 20) 'рисуем пушку
        graf.FillRectangle(Brushes.Blue, 280, 180, 20, 20) 'рисуем первую цель расстояние 280-300
        graf.FillRectangle(Brushes.Blue, 650, 180, 50, 20) 'рисуем вторую цель расстояние 650-700
        vistrel = Val(InputBox("введите расстояние для цели, не более 1000", "Прицеливание"))
        'если прямо в цель
        If vistrel >= 280 And vistrel <= 300 Or vistrel >= 650 And vistrel <= 700 Then
            graf.FillEllipse(Brushes.Red, vistrel, 195, 10, 10) : MessageBox.Show("Прямо в цель!", "Результат")
            'если рядом в 10 пикселях
        ElseIf (vistrel >= 270 And vistrel <= 310) Or (vistrel >= 640 And vistrel <= 710) Then
            graf.FillEllipse(Brushes.Red, vistrel, 195, 10, 10) : MessageBox.Show("Близко", "Результат")
            'если перелёт
        ElseIf vistrel > 710 Then
            graf.FillEllipse(Brushes.Red, vistrel, 195, 10, 10) : MessageBox.Show("Перелёт", "Результат")
            'если недолёт
        ElseIf vistrel > 20 And vistrel < 270 Then
            graf.FillEllipse(Brushes.Red, vistrel, 195, 10, 10) : MessageBox.Show("Недолёт", "Результат")
            'если по своим
        ElseIf vistrel <= 20 Then
            graf.FillEllipse(Brushes.Red, vistrel, 195, 10, 10) : MessageBox.Show("Не бей по своим !", "Результат")
            'если между целями
        ElseIf vistrel > 310 And vistrel < 640 Then
            graf.FillEllipse(Brushes.Red, vistrel, 195, 10, 10) : MessageBox.Show("Между целями", "Результат")

        End If

    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.Width = 1000
        Me.Height = 300
    End Sub
End Class
  1. Сначала создаём форму, размещаем на форме кнопку выстрела. У меня размер формы 1000*300, размер шрифта 12. Размер формы установлен при загрузке формы.
  2. Хотел прописать графику (земля — мишени) после загрузки формы .. увы почему то не рисуется. Попробовал изменить метод (при наводке курсора на форму) графика появляется, но подозреваю, она будет мне постоянно обновлять картинку по новой, как только наведу мышку на форму, что совсем неудобно для просмотров результатов выстрела. Поэтому сделал её после нажатия на кнопку, но до ввода координат выстрела. (в принципе по условию задачи такое и требовали, но мы же упоротые, хотим постоянно усложнить )
  3. Прописываем код для ввода пользователем длины выстрела
  4. Пишем логику попадания.

Скачать программу: Попади в цель
Установки не требует.
Файл exe. Размер 21kb.
На компьютере должен быть установлен net.framework 3.5 и выше.

Внимание!!! На некоторых компьютерах, у меня к примеру, система не даёт запускаться файлам с расширением .Exe . Всё просто, эти файлы исполняемые, и система их блокирует, как и любой файл Exe от сторонних разработчиков. В моих программах вирусов нет, можно проверить на любом сайте онлайн проверки на вирусы, или сам файл антивирусником. Если вы всё равно остерегаетесь, то используйте сам код программы в Visual Studio.net 2008

Запись опубликована в рубрике Мои программы, Решение заданий vb.net. Добавьте в закладки постоянную ссылку.