Главная страница Случайная страница Разделы сайта АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
💸 Как сделать бизнес проще, а карман толще?
Тот, кто работает в сфере услуг, знает — без ведения записи клиентов никуда. Мало того, что нужно видеть свое раписание, но и напоминать клиентам о визитах тоже.
Проблема в том, что средняя цена по рынку за такой сервис — 800 руб/мес или почти 15 000 руб за год. И это минимальный функционал.
Нашли самый бюджетный и оптимальный вариант: сервис VisitTime.⚡️ Для новых пользователей первый месяц бесплатно. А далее 290 руб/мес, это в 3 раза дешевле аналогов. За эту цену доступен весь функционал: напоминание о визитах, чаевые, предоплаты, общение с клиентами, переносы записей и так далее. ✅ Уйма гибких настроек, которые помогут вам зарабатывать больше и забыть про чувство «что-то мне нужно было сделать». Сомневаетесь? нажмите на текст, запустите чат-бота и убедитесь во всем сами! Использование массивов при программировании игр
Какая польза от массивов при программировании игр? Вряд ли хоть одну «умную» игру можно запрограммировать без применения массивов. Возьмем хотя бы «крестики-нолики» на поле размером 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
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, от значения которых зависят координаты кружочков на форме и закрашиваемых квадратов. Зависимость эту продумайте сами. Что замечательно - в остальном программа от добавлении графики не изменится. Процедуру эту можно будет, не думая о графике, использовать всякий раз, когда мы хотим обновить поле на экране. Особенно это удобно в настоящем морском бое и настоящих крестиках-ноликах, когда поле надо обновлять после каждого хода.
|