Я работаю над такой игрой, как Mafia Wars, и я пытаюсь заставить боевую систему работать, но я все время теряю попытку выработать того, кто выиграет бой, и ему все еще нужно знать, близко ли статистика есть случайная последовательность выигрыша.
$strength = $my_strength;
$otherplayerinfo = mysql_query("SELECT * FROM accounts WHERE id='$player_id'");
$playerinfo = mysql_fetch_array($otherplayerinfo);
$players_strength = $playerinfo['stre'];
$players_speed = $playerinfo['speed'];
$players_def = $playerinfo['def'];
if($players_strength > $strength){
$strength_point_player = 1;
$strength_point_your = 0;
}else{
$strength_point_your = 1;
$strength_point_player = 0;
}
Я пытался создать точечную систему, но я все еще не мог этого сделать.
Вам нужно разработать формулу/алгоритм, чтобы определить, кто победит. Я бы предложил подумать об этом и сначала написать его на простом языке или псевдокоде, а затем перевести его в PHP.
Это может быть что-то вроде
"Сравните каждую силу игроков, скорость и обороны. Рассчитать общий превосходство, вычитая защиты от других сил и умножение на скорость /10. Если в целом оценка в пределах 5%, выбрать победителя в случайное"
например. Или, возможно,
"Сравните каждую статистику, чтобы узнать, больше, равно или в пределах 5% от другая статистика игрока. Счет равен 1, если superior, 0, если достаточно близко, -1, если ниже. Если 0, победитель случайный. В противном случае побеждает более высокий балл".
Оттуда вы можете перевести его на логику на свой язык программирования.
Я пытался создать точечную систему, но я все еще не мог этого сделать.
Я настоятельно рекомендую вам разобраться, что должен делать механик игры. Как только вы сможете описать, как битва должна работать в нескольких предложениях, вы можете получить более подробную информацию о том, как ее реализовать.
Во-первых, mysql_fetch_array
возвращает только строки. Поэтому обязательно укажите каждое поле в (int)
, когда вы назначаете их локальным переменным на всякий случай. Это приводит к тому, что сравнения ведут себя так, как ожидалось, и легче выбрать в коде именно то, что должно происходить.
Во-вторых, вам нужен else if($players_strength === $strength) {/* do something random */}
. В противном случае победа в битве всегда будет идти к вам, если статистика будет одинаковой или большей.
В-третьих, нет необходимости подсчитывать сравнения между всеми статистиками, если они просто сравнивают, если одна сторона больше, чем другая в каждом статусе. Просто суммируйте все статистические данные на каждой стороне игрока, затем сделайте окончательное сравнение обоих итогов. В противном случае, если у вас есть специальные сравнения для каждого отдельного стата и будет выполняться подсчет статистических сравнений, вам нужно будет увеличить флаги для выигрышей, а не просто добавлять их к 1 или 0 снова и снова:
$strength_point_your += 1; $strength_point_player += 0; // you don't even need this line, just for show
false
, поэтому для обработки этого случая необходимо добавить целый новый набор кода.