Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






  • Как продвинуть сайт на первые места?
    Вы создали или только планируете создать свой сайт, но не знаете, как продвигать? Продвижение сайта – это не просто процесс, а целый комплекс мероприятий, направленных на увеличение его посещаемости и повышение его позиций в поисковых системах.
    Ускорение продвижения
    Если вам трудно попасть на первые места в поиске самостоятельно, попробуйте технологию Буст, она ускоряет продвижение в десятки раз, а первые результаты появляются уже в течение первых 7 дней. Если ни один запрос у вас не продвинется в Топ10 за месяц, то в SeoHammer за бустер вернут деньги.
    Начать продвижение сайта
  • Использование массивов при программировании игр






     

    Какая польза от массивов при программировании игр? Вряд ли хоть одну «умную» игру можно запрограммировать без применения массивов. Возьмем хотя бы «крестики-нолики» на поле размером 3 на 3. Вам придется рисовать на экране большие клетки, а в них – нолики (кружочки) после ваших ходов и крестики (пересекающиеся косые линии) после ходов компьютера. Но этого недостаточно. Чтобы компьютер не поставил случайно крестик в занятом поле, он должен хотя бы знать, в каких клетках крестики и нолики уже стоят. Анализировать для этого информацию о пикселах экрана очень неудобно. Гораздо разумнее заранее организовать Dim a (1 To 3, 1 To 3) As Integer и записывать туда в нужные места нолики после ходов человека и, скажем, единички после ходов компьютера. Сразу же после записи в массив 0 или 1 программа должна рисовать в соответствующем месте экрана кружок или крестик. Мыслить компьютер мог бы при помощи примерно таких операторов – if a(1, 1)=0 And a(1, 2)=0 Then a(1, 3)=1. Это очевидный защитный ход компьютера - на два кружочка в ряду он ставит в тот же ряд крестик.

     

    Проиллюстрируем эту идею подробнее на специально придуманном примитивном примере (типа морского боя).

    Задание на создание игры: Играют друг против друга два человека на квадратном поле размером 2 на 2:

     
     

     

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

    Сначала запрограммируем эту игру без графики.

    Поле боя после двух выстрелов будет показано на экране в следующем виде:

    М к

    О х

    Здесь я использовал такие обозначения:

    о - корабля здесь нет и сюда не стреляли

    к - неподбитый корабль

    х - подбитый корабль

    м - мимо (стреляли и промахнулись)

    Других вариантов быть не может. До окончания игры поле на экране не показывается.

    Вот программа:

    Dim a(1 To 2, 1 To 2) As String * 1 'Поле боя

    Dim i As Integer

    Dim j As Integer

    Dim Подбито As Integer

    ______________________________________________________________________

    Private Sub Command1_Click() 'Главная процедура

    a(1, 1) = " о": a(2, 1) = " о" 'Поначалу на поле боя кораблей нет

    a(1, 2) = " о": a(2, 2) = " о"

     

    Устанавливаем_корабль 1

    Устанавливаем_корабль 2

     

    Подбито = 0 'Пока не стреляли

    Выстрел 1

    Выстрел 2

    'Показываем поле боя после битвы:

    For i = 1 To 2

    For j = 1 To 2

    Debug.Print a(i, j);

    Next j

    Debug.Print

    Next i

    Debug.Print Подбито 'Показываем исход битвы

    End Sub

    ______________________________________________________________________

    Private Sub Устанавливаем_корабль(Номер_корабля As Integer)

    i = InputBox(" Первый игрок, назовите номер строки корабля " & Номер_корабля)

    j = InputBox(" Первый игрок, назовите номер столбца корабля " & Номер_корабля)

    a(i, j) = " к"

    End Sub

    ______________________________________________________________________

    Private Sub Выстрел(Номер_выстрела As Integer)

    i = InputBox(" Второй игрок, назовите номер строки для выстрела " & Номер_выстрела)

    j = InputBox(" Второй игрок, назовите номер столбца для выстрела " & Номер_выстрела)

    If a(i, j) = " к" Then 'Если попал, то

    a(i, j) = " х" 'ставим крестик

    Подбито = Подбито + 1 'и увеличиваем счетчик подбитых кораблей

    ElseIf a(i, j) = " о" Then 'иначе если промахнулся, то

    a(i, j) = " м" 'ставим м

    End If

    End Sub

    Пояснения касательно Dim a(1 To 2, 1 To 2) As String *1:

    Конструкция String * 1 означает приказ компьютеру считать значения переменной a имеющими длину в 1 символ. Вообще-то можно было написать просто String, но так все-таки лучше, четче и экономнее. Теперь компьютер отведет в памяти под каждое значение a ровно 1 байт и не будет думать, хватит этого или не хватит.

    Определение победителя оставляю вам.

     

    Когда готова и работает программа без графики, можно подумать о том, как оживить ее графическими изображениями. Эффективнее всего создать единую процедуру, которая сначала оператором Cls все стирает с экрана, а затем все рисует снова согласно новым значениям массива a. Например, рисует во весь экран пустое поле из 4 клеток и тут же их заполняет: скажем, ставит маленькие кружочки туда, куда стреляли и промахнулись, красит красным клетки с подбитыми кораблями и синим - с неподбитыми. Для заполнения достаточно в написанном уже фрагменте, показывающем поле

    For i = 1 To 2

    For j = 1 To 2

    Debug.Print a(i, j);

    Next j

    Debug.Print

    Next i

    вместо Debug.Print a(i, j) написать некий код такого примерно смысла:

    If a(i, j) = " х" Then Крась_красным i j

    If a(i, j) = " к" Then Крась_синим i j

    If a(i, j) = " м" Then Рисуй_кружок i j

    Здесь мы видим три процедуры с параметрами i и j, от значения которых зависят координаты кружочков на форме и закрашиваемых квадратов. Зависимость эту продумайте сами.

    Что замечательно - в остальном программа от добавлении графики не изменится. Процедуру эту можно будет, не думая о графике, использовать всякий раз, когда мы хотим обновить поле на экране. Особенно это удобно в настоящем морском бое и настоящих крестиках-ноликах, когда поле надо обновлять после каждого хода.






    © 2023 :: MyLektsii.ru :: Мои Лекции
    Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
    Копирование текстов разрешено только с указанием индексируемой ссылки на источник.