В помощь игростроителю - Игростроение и развлечение

Форма входа

Приветствую Вас Гость!

Логин:
Пароль:

Наш опрос

Почему вы занимаетесь сексом?
Всего ответов: 64


    Случайное фото

    Статистика


Поддержите наш проект

WebMoney:
R309699065243
U292079291240
Z373355457648

Счётчики


Rambler's Top100
Рейтинг@Mail.ru

В помощь игростроителю - Игростроение и развлечение

[ Новые сообщения · Участники · Правила форума · RSS ]

WWW Site Forum
Страница 1 из 11
Игростроение и развлечение » Программинг » Алгоритмика, Математика, Физика » В помощь игростроителю (как это работает...)
В помощь игростроителю
quadrathellДата: Воскресенье, 05.04.2015, 13:32 | Сообщение # 1
Admin
Группа: Администраторы
Сообщений: 1018
Репутация: 23
Статус: Offline
У меня была ситуация когда нужно было создать LIFEBAR - это такая полоска которая показывает уровень жизни персонажа. Я тут набросал небольшую формулу... В учёт идёт:

WB = длинна полосы на экране
MP = максимальный параметр шкалы
SP = установленный параметр

то есть к примеру шкала у наc длинной 60 поинтов,
максимальная жизнь персонажа 100,
текущее состояние жизни 22

Имея эти данные:

PR = MP / WB ; переменная PR = количество жизней в 1 делении шкалы
A = 0 ; устанавливаем переменную в 0 для начала отсчёта сравнения параметра

For i = 1 to WB ; цикл рисования шкалы на экране
If a < SP ; если А меньше установленного параметра
Print("|") ; по печатаем чёрточку
Else
Print(".") ;  иначе печатаем точку
Endif
a = a + PR ; приращиваем переменную А на 1 поинт жизней в шкале.
Next i

Здесь я показал самый простой, примитивный пример, вместо чёрточек и точек можно использовать всё на что способна ваша фантазия, начиная с картинок и заканчивая 3D графикой.

Вот мой пример текстового бара на Purebasic:



Также прикрепляю скомпилированный пример с исходником на Purebasic
Прикрепления: 4147746.jpg(18Kb) · lifebar.zip(2Kb)


 
quadrathellДата: Среда, 08.04.2015, 19:54 | Сообщение # 2
Admin
Группа: Администраторы
Сообщений: 1018
Репутация: 23
Статус: Offline
Многие игры используют случайный генератор чисел для вывода различной информации, причём информация описана в строгих рамках (её всего лишь нужно вывести в случайном порядке) Для примера за основу я возьму массив из колоды карт, стандартно 36 штук.

Создаём массив:

Dim card(36);
В массиве будем хранить коды каждой карты в пределах 0 - 35 ячейках, 36 ячейка будет счётчиком оставшихся карт.

Для примера я в цикле забью в массив числа от 1 до 36

For i = 0 to 35
card(i) = i + 1
next i
card(36) = 35


Теперь делаем сам генератор:

gen = Random(Int(card(36))); генерируем в переменную gen число от 0 до числа в ячейке card(36)
res = card(gen); присваиваем переменной res, результат (код карты)
If gen = card(card(36)); если ячейка генератора совпадает с последней ячейкой массива
card(36) = card(36) - 1; уменьшаем счётчик на 1
Else
card(gr) = card(card(36)); в ячейку которая была генерированная записываем последнюю ячейку массива по счётчику.
card(36) = card(36) - 1; уменьшаем счётчик на 1
Endif

И так каждое обращение к нашему генератору мы будем получать случайную карту в переменную res.

Если кто не понял принцип, спрашивайте объясню )


 
PhoenixДата: Воскресенье, 12.04.2015, 12:44 | Сообщение # 3
Новичёк
Группа: Администраторы
Сообщений: 11
Репутация: 0
Статус: Offline
Набросал небольшой алгоритм порядка действия прохождения урона по врагу в РПГ Играх...
У кого-то есть ещё какие-то предложения?

Прикрепления: aaa.jpg(31Kb)
 
PhoenixДата: Понедельник, 23.11.2015, 13:42 | Сообщение # 4
Новичёк
Группа: Администраторы
Сообщений: 11
Репутация: 0
Статус: Offline
Построение линии попиксельно имея координаты начала и конца:

Код
Sub drawline(x1, y1, x2, y2)
Dim i, x, y, d, d1, d2, dx, dy, sx, sy

dx = Abs(x2 - x1)
dy = Abs(y2 - y1)

If x2 >= x1 Then
    sx = 1
Else
    sx = -1
End If

If y2 >= y1 Then
    sy = 1
Else
    sy = -1
End If

If dy <= dx Then
    d = dy * 2 - dx
    d1 = dy * 2
    d2 = (dy - dx) * 2
    'display(x1, y1) = col
    
    x = x1 + sx
    y = y1
    For i = 1 To dx
        If d > 0 Then
            d = d+ d2
            y = y+ sy
        Else
            d = d+ d1
        End If
        'display(x, y) = col
        x = x + sx
    Next
Else
    d = dx * 2 - dy
    d1 = dx * 2
    d2 = (dx - dy) * 2
    'display(x1, y1) = col
    x = x1
    y = y1 + sy
    For i = 1 To dy
        If d > 0 Then
            d = d+ d2
            x = x+ sx
        Else
            d = d+ d1
        End If
        'display(x, y) = col
        y = y + sy
    Next
End If
End Sub


x1; y1; x2; y2 = координаты отрезка. (Код на PUREBASIC)
      
     
Код
dx = Abs(x2 - x1) : dy = Abs(y2 - y1)
      
      If x2 >= x1
        sx = 1
      Else
        sx = -1
      EndIf
      
      If y2 >= y1
        sy = 1
      Else
        sy = -1
      EndIf
      
      StartDrawing(ScreenOutput())
      
      If dy <= dx
        d = dy * 2 - dx : d1 = dy * 2 : d2 = (dy - dx) * 2
        Plot(x,y,RGB(255,0,255))
        x = x1 + sx : y = y1
        For i = 1 To dx
          If d > 0
            d = d + d2 : y = y + sy
          Else
            d = d + d1
          EndIf
          Plot(x,y,RGB(255,0,255))
          x = x + sx
        Next
      Else
        d = dx * 2 - dy : d1 = dx * 2 : d2 = (dx - dy) * 2
        Plot(x,y,RGB(255,0,255))
        x = x1 : y = y1 + sy
        For i = 1 To dy
          If d > 0
            d = d + d2 : x = x + sx
          Else
            d = d + d1
          EndIf
          Plot(x,y,RGB(255,0,255))
          y = y + sy
        Next
      EndIf
      StopDrawing()
 
PhoenixДата: Воскресенье, 29.11.2015, 01:09 | Сообщение # 5
Новичёк
Группа: Администраторы
Сообщений: 11
Репутация: 0
Статус: Offline
Рисуем круг попиксельно (пример на PureBasic):

 
Код
PI.f = 3.14159265359
  x.f = 150
  y.f = 200
  r.f = 25 ; радиус

  dn = 1/r;
  n = 0;
  While n < 2 * PI
    x1 = Round(x + r * Cos(n),#PB_Round_Nearest);
    y1 = Round(y + r * Sin(n),#PB_Round_Nearest);
    Plot(x1, y1, RGB(255,0,255))
    n = n + dn 
  Wend
 
Игростроение и развлечение » Программинг » Алгоритмика, Математика, Физика » В помощь игростроителю (как это работает...)
Страница 1 из 11
Поиск: