Судя по всему людям особо нечего сказать по поводу использования MVC-фреймворка для разработки игры. Ладно. Пойдем сложным путем =)
В этой теме попытаюсь написать простенькую боевую систему похожую на ganjawars.ru.
Первый пост теоретический, распишу что и как буду делать.
Итак, поехали. Бой 1х1, пошаговый. Возможности игроков: 1. Уклонение (влево/на месте/вправо) 2. Выстрел (влево/по центру/вправо)
Два игрока имеют одинаковые характеристики: 1. Оружие - урон 2-10, очередь 3 пули 2. Броня - голова (-2 урона), туловище (-5 урона) 3. Здоровье - 20
Если направление вражеского выстрела и уклонения игрока совпали, шанс на попадание пули - 90%, если не совпали - 20%. Если пуля попала, шанс 40% на попадание в туловище, 25% - в ноги или руки и 10% - в голову.
Получаем одно или несколько попаданий с рандомным уроном от 2-10 (см. оружие игроков). От этого значения вычитаем защиту броней.
Расчеты производим для каждой пули отдельно, далее урон, нанесенный каждой пулей, сложим и вычтем из здоровья игрока.
Теперь непосредственно к технической реализации. Таблицы БД: 1. player (player_id, battle_id, team, login, hp, dmg_min, dmg_max, shots, helmet, vest) - таблица для участников боя 2. battle (battle_id, time_start, time_end, is_over, turn, turn_ends) - основные параметры боя 3. shot (battle_id, player_id, target_id, turn, direction) - выстрелы игроков 4. evasion (battle_id, player_id, turn, direction) - уклонения игроков 5. hits (battle_id, player_id, target_id, turn, damage) - попадания и нанесенный ими урон
Для работы с базой данной потребуются модели: 1. player (отвечает за игроков): - создание нового игрока - изменение параметра здоровья 2. battle (отвечает за бой, выстрелы, уклонения и попадания): - создание нового боя - редактирование боя - создание нового "выстрела" - создание нового "уклонения" - создание нового "ранения"
Код, относящийся к боевой системе, думаю оформить в виде библиотеки. Функционал библиотеки: 1. Начало нового боя (добавление в него участников) 2. Завершение боя (если здоровье одного или нескольких игроков равно 0) 3. Проверка оставшегося до конца хода времени 4. Подсчет результатов хода
Апдейт первый Модель battle
Code
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
class Battle extends CI_Model {
public function __construct(){ $this->load->database(); }
public function get_battle($battle_id = false){ if(empty($battle_id)){ show_404(); }