Başka bir soruda, size futbol için bir simülasyon algoritma oluşturmak için bana yardımcı oldu. I got some very good answers there. Tekrar teşekkürler!
Şimdi bu algoritmayı kodlu ettik. Ben onu geliştirmek ve bunun içinde olabilir küçük hataları bulmak istiyorum. Ben bunu çözmek için nasıl tartışmak istemiyorum - biz son soru olduğu gibi. Şimdi sadece bunu geliştirmek istiyorum. Beni tekrar yardım edebilir miyim?
- Herhangi bir hata var mı?
- Iç içe geçmiş yapısı if-cümlecikleri Tamam mı? Geliştirilmiş olabilir mi?
- Taktik benim açıklama göre doğru entegre edilmiştir?
Tactical settings which should have an influence on the rveomness:
- $ Taktikleri [x] [0] ayarı (1 = savunma, 2 = nötr, 3 = saldırgan): yüksek değeri zayıf olan savunma ve güçlü suçtur
- $ Taktikleri oyun x hızı (1 = Yavaş, 2 = orta, 3 = hızlı): yüksek değerini daha iyi fırsatlar vardır ama daha yüksek bir hızlı karşı atak yakalanma riski olduğunu
- Paso $ taktikleri [x] [2] mesafe (1 = kısa, 2 = orta, 3 = uzun): daha yüksek değer elde daha az ama daha iyi fırsatlar ve daha sık ofsayt vardır
- Değişikliklerin $ taktikleri [x] [3] oluşturma (1 = 2 = orta, 3 = riskli güvenli): yüksek değeri daha iyi fırsatlar vardır ama daha yüksek bir hızlı karşı atak yakalanma riski
- Savunma $ taktikleri [x] [4] basıncı (1 = düşük, 2 = orta, 3 = yüksek): yüksek değer olacak daha hızlı karşı saldırıları
- $ Taktikleri [x] [5] agresivitesinin (1 = düşük, 2 = orta, 3 = yüksek): yüksek değer faulü ile duracaktır daha saldırıları
Note: Tactic 0 ve tactic 4 vardır partly integrated in the rest of the engine, not needed in this function.
The current algorithm:
<?php
function tactics_weight($wert) {
$neuerWert = $wert*0.1+0.8;
return $neuerWert;
}
function strengths_weight($wert) {
$neuerWert = log10($wert+1)+0.35;
return $neuerWert;
}
function Chance_Percent($chance, $universe = 100) {
$chance = abs(intval($chance));
$universe = abs(intval($universe));
if (mt_rve(1, $universe) <= $chance) {
return true;
}
return false;
}
function simulate_attack($teamname_att, $teamname_def, $strength_att, $strength_def) {
global $minute, $goals, $_POST, $matchReport, $fouls, $yellowCards, $redCards, $offsides, $shots, $tactics;
// input values: attacker's name, defender's name, attacker's strength array, defender's strength array
// players' strength values vary from 0.1 to 9.9
$matchReport .= '<p>'.$minute.'\': '.comment_action($teamname_att, 'attack');
$offense_strength = $strength_att['forwards']/$strength_def['defenders'];
$defense_strength = $strength_def['defenders']/$strength_att['forwards'];
if (Chance_Percent(50*$offense_strength*tactics_weight($tactics[$teamname_att][1])/tactics_weight($tactics[$teamname_att][2]))) {
// attacking team passes 1st third of opponent's field side
$matchReport .= ' '.comment_action($teamname_def, 'advance');
if (Chance_Percent(25*tactics_weight($tactics[$teamname_def][5]))) {
// the defending team fouls the attacking team
$fouls[$teamname_def]++;
$matchReport .= ' '.comment_action($teamname_def, 'foul');
if (Chance_Percent(43)) {
// yellow card for the defending team
$yellowCards[$teamname_def]++;
$matchReport .= ' '.comment_action($teamname_def, 'yellow');
}
elseif (Chance_Percent(3)) {
// red card for the defending team
$redCards[$teamname_def]++;
$matchReport .= ' '.comment_action($teamname_def, 'red');
}
// indirect free kick
$matchReport .= ' '.comment_action($teamname_att, 'iFreeKick');
if (Chance_Percent(25*strengths_weight($strength_att['forwards']))) {
// shot at the goal
$shots[$teamname_att]++;
$matchReport .= ' '.comment_action($teamname_att, 'iFreeKick_shot');
if (Chance_Percent(25/strengths_weight($strength_def['goalkeeper']))) {
// attacking team scores
$goals[$teamname_att]++;
$matchReport .= ' '.comment_action($teamname_att, 'shot_score');
}
else {
// defending goalkeeper saves
$matchReport .= ' '.comment_action($teamname_def, 'iFreeKick_shot_save');
}
}
else {
// defending team clevardırs the ball
$matchReport .= ' '.comment_action($teamname_def, 'iFreeKick_clear');
}
}
elseif (Chance_Percent(17)*tactics_weight($tactics[$teamname_att][2])) {
// attacking team is caught offside
$offsides[$teamname_att]++;
$matchReport .= ' '.comment_action($teamname_def, 'offside');
}
else {
// attack isn't interrupted
// attack passes the 2nd third of the opponent's field side - good chance
$matchReport .= ' '.comment_action($teamname_def, 'advance_further');
if (Chance_Percent(25*tactics_weight($tactics[$teamname_def][5]))) {
// the defending team fouls the attacking team
$fouls[$teamname_def]++;
$matchReport .= ' '.comment_action($teamname_def, 'foul');
if (Chance_Percent(43)) {
// yellow card for the defending team
$yellowCards[$teamname_def]++;
$matchReport .= ' '.comment_action($teamname_def, 'yellow');
}
elseif (Chance_Percent(3)) {
// red card for the defending team
$redCards[$teamname_def]++;
$matchReport .= ' '.comment_action($teamname_def, 'red');
}
if (Chance_Percent(19)) {
// penalty for the attacking team
$shots[$teamname_att]++;
$matchReport .= ' '.comment_action($teamname_att, 'penalty');
if (Chance_Percent(77)) {
// attacking team scores
$goals[$teamname_att]++;
$matchReport .= ' '.comment_action($teamname_att, 'shot_score');
}
elseif (Chance_Percent(50)) {
// shot misses the goal
$matchReport .= ' '.comment_action($teamname_att, 'penalty_miss');
}
else {
// defending goalkeeper saves
$matchReport .= ' '.comment_action($teamname_def, 'penalty_save');
}
}
else {
// direct free kick
$matchReport .= ' '.comment_action($teamname_att, 'dFreeKick');
if (Chance_Percent(33*strengths_weight($strength_att['forwards']))) {
// shot at the goal
$shots[$teamname_att]++;
$matchReport .= ' '.comment_action($teamname_att, 'dFreeKick_shot');
if (Chance_Percent(33/strengths_weight($strength_def['goalkeeper']))) {
// attacking team scores
$goals[$teamname_att]++;
$matchReport .= ' '.comment_action($teamname_att, 'shot_score');
}
else {
// defending goalkeeper saves
$matchReport .= ' '.comment_action($teamname_def, 'dFreeKick_shot_save');
}
}
else {
// defending team clevardırs the ball
$matchReport .= ' '.comment_action($teamname_def, 'dFreeKick_clear');
}
}
}
elseif (Chance_Percent(62*strengths_weight($strength_att['forwards'])*tactics_weight($tactics[$teamname_att][2])*tactics_weight($tactics[$teamname_att][3]))) {
// shot at the goal
$shots[$teamname_att]++;
$matchReport .= ' '.comment_action($teamname_att, 'shot');
if (Chance_Percent(30/strengths_weight($strength_def['goalkeeper']))) {
// the attacking team scores
$goals[$teamname_att]++;
$matchReport .= ' '.comment_action($teamname_att, 'shot_score');
}
else {
if (Chance_Percent(50)) {
// the defending defenders block the shot
$matchReport .= ' '.comment_action($teamname_def, 'shot_block');
}
else {
// the defending goalkeeper saves
$matchReport .= ' '.comment_action($teamname_def, 'shot_save');
}
}
}
else {
// attack is stopped
$matchReport .= ' '.comment_action($teamname_def, 'stopped');
if (Chance_Percent(15*$defense_strength*tactics_weight($tactics[$teamname_att][1])*tactics_weight($tactics[$teamname_att][3])*tactics_weight($tactics[$teamname_def][4]))) {
// quick counter attack - playing on the break
$strength_att['defenders'] = $strength_att['defenders']*0.8; // weaken the current attacking team's defense
$matchReport .= ' '.comment_action($teamname_def, 'quickCounterAttack');
$matchReport .= ' ['.$goals[$_POST['team1']].':'.$goals[$_POST['team2']].']</p>'; // close comment line
return simulate_attack($teamname_def, $teamname_att, $strength_def, $strength_att); // new attack - this one is finished
}
}
}
}
// attacking team doesn't pass 1st third of opponent's field side
elseif (Chance_Percent(15*$defense_strength*tactics_weight($tactics[$teamname_att][1])*tactics_weight($tactics[$teamname_att][3])*tactics_weight($tactics[$teamname_def][4]))) {
// attack is stopped
// quick counter attack - playing on the break
$matchReport .= ' '.comment_action($teamname_def, 'stopped');
$strength_att['defenders'] = $strength_att['defenders']*0.8; // weaken the current attacking team's defense
$matchReport .= ' '.comment_action($teamname_def, 'quickCounterAttack');
$matchReport .= ' ['.$goals[$_POST['team1']].':'.$goals[$_POST['team2']].']</p>'; // close comment line
return simulate_attack($teamname_def, $teamname_att, $strength_def, $strength_att); // new attack - this one is finished
}
else {
// ball goes into touch - out of the field
$matchReport .= ' '.comment_action($teamname_def, 'throwIn');
if (Chance_Percent(33)) {
// if a new chance is created
if (Chance_Percent(50)) {
// throw-in for the attacking team
$matchReport .= ' '.comment_action($teamname_def, 'throwIn_att');
$matchReport .= ' ['.$goals[$_POST['team1']].':'.$goals[$_POST['team2']].']</p>'; // close comment line
return simulate_attack($teamname_att, $teamname_def, $strength_att, $strength_def); // new attack - this one is finished
}
else {
// throw-in for the defending team
$matchReport .= ' '.comment_action($teamname_def, 'throwIn_def');
$matchReport .= ' ['.$goals[$_POST['team1']].':'.$goals[$_POST['team2']].']</p>'; // close comment line
return simulate_attack($teamname_def, $teamname_att, $strength_def, $strength_att); // new attack - this one is finished
}
}
}
$matchReport .= ' ['.$goals[$_POST['team1']].':'.$goals[$_POST['team2']].']</p>'; // close comment line
return TRUE; // finish the attack
}