JeuWeb - Crée ton jeu par navigateur
Système d'attaques - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Système d'attaques (/showthread.php?tid=4713)

Pages : 1 2


RE: Système d'attaques - xepos - 07-04-2010

Voila le script, mais je ne pense pas que s'est ce que tu voulait...

Résultat:

Rounds N°1
Le joueur Jeu attaque Web, il inflige 3 de dêgats. Point de vies restant: 297
Le joueur Web attaque Jeu, il inflige 22 de dêgats. Point de vies restant: 128

Rounds N°2
Le joueur Jeu attaque Web, il inflige 49 de dêgats. Point de vies restant: 248
Le joueur Web attaque Jeu, il inflige 22 de dêgats. Point de vies restant: 106

Rounds N°3
Le joueur Jeu attaque Web, il inflige 40 de dêgats. Point de vies restant: 208
Le joueur Web attaque Jeu, il inflige 20 de dêgats. Point de vies restant: 86

Rounds N°4
Le joueur Jeu attaque Web, il inflige 59 de dêgats. Point de vies restant: 149
Le joueur Web attaque Jeu, il inflige 22 de dêgats. Point de vies restant: 64

Rounds N°5
Le joueur Jeu attaque Web, il inflige 10 de dêgats. Point de vies restant: 139
Le joueur Web attaque Jeu, il inflige 27 de dêgats. Point de vies restant: 37

Rounds N°6
Le joueur Jeu attaque Web, il inflige 49 de dêgats. Point de vies restant: 90
Le joueur Web attaque Jeu, il inflige 11 de dêgats. Point de vies restant: 26

Rounds N°7
Le joueur Jeu attaque Web, il inflige 36 de dêgats. Point de vies restant: 54
Le joueur Web attaque Jeu, il inflige 34 de dêgats. Point de vies restant: 0
Le joueur Web a gagner le combat.

Le code php:
Code PHP :
<?php

// - Les informations joueurs.
$Joueurs[1] = array( 'Pseudo' => 'Jeu', 'Arme' => 2, 'Vie' => 150 );
$Joueurs[2] = array( 'Pseudo' => 'Web', 'Arme' => 1, 'Vie' => 300 );

// - Les armes
$Arme[1] = array( 'Nom' => 'Sabre', 'Puissance' => 75, 'Efficacite' => 50 ); // - Efficacité en pourcentage sur 100.
$Arme[2] = array( 'Nom' => 'Fusil', 'Puissance' => 100, 'Efficacite' => 75 ); // - Efficacité en pourcentage sur 100.

Function Combat( $Issu = 10 ){ // - Si 10 Round.
Global $Joueurs, $Arme;

$Boucle = 1; // - Initialisation.

While( ( $Boucle <= $Issu ) AND ( $Joueurs[1]['Vie'] > 0 ) AND ( $Joueurs[2]['Vie'] > 0 ) ){ // - Création de la boucle.

// - Attaque du joueur 1.
$Joueurs[2][$Boucle]['Pertes'] = floor( $Arme[$Joueurs[1]['Arme']]['Puissance'] * ( rand( 0, $Arme[$Joueurs[1]['Arme']]['Efficacite'] ) / 100 ) );
$Joueurs[2]['Vie'] -= $Joueurs[2][$Boucle]['Pertes'];

// - Attaque du joueur 2.
$Joueurs[1][$Boucle]['Pertes'] = floor( $Arme[$Joueurs[2]['Arme']]['Puissance'] * ( rand( 0, $Arme[$Joueurs[2]['Arme']]['Efficacite'] ) / 100 ) );
$Joueurs[1]['Vie'] -= $Joueurs[1][$Boucle]['Pertes'];

// - On va vérifié que les point de vies sont pas a 0.
if( $Joueurs[2]['Vie'] <= 0 ){

$Conclu = "Le joueur ". $Joueurs[1]['Pseudo'] ." a gagner le combat.";
$Joueurs[2]['Vie'] = 0;
} elseif(
$Joueurs[1]['Vie'] <= 0 ){

$Conclu = "Le joueur ". $Joueurs[2]['Pseudo'] ." a gagner le combat.";
$Joueurs[1]['Vie'] = 0;
} elseif( (
$Joueurs[1]['Vie'] <= 0 ) AND ( $Joueurs[2]['Vie'] <= 0 ) ){

$Conclu = "Le combat se termine par un match nul.";
$Joueurs[2]['Vie'] = 0;
$Joueurs[2]['Vie'] = 0;
} elseif( (
$Boucle == $Issu ) AND ( $Joueurs[1]['Vie'] > 0 ) AND ( $Joueurs[2]['Vie'] > 0 ) ){

$Conclu = "Le combat se termine par un match nul.";
}

echo
"Rounds N°". $Boucle ."<br />";
echo
"Le joueur ". $Joueurs[1]['Pseudo'] ." attaque ". $Joueurs[2]['Pseudo'] .", il inflige ". $Joueurs[2][$Boucle]['Pertes'] ." de dêgats. <i>Point de vies restant: ". ( $Joueurs[2]['Vie'] ) ."</i><br />";
echo
"Le joueur ". $Joueurs[2]['Pseudo'] ." attaque ". $Joueurs[1]['Pseudo'] .", il inflige ". $Joueurs[1][$Boucle]['Pertes'] ." de dêgats. <i>Point de vies restant: ". ( $Joueurs[1]['Vie'] ) ."</i><br />";
echo
$Conclu ."<br />";

$Boucle++;
}


}

Combat(10);
?>

Il présente encore quelque erreurs.

Cordialement.


RE: Système d'attaques - noxo. - 07-04-2010

olala excellent j'ai vite fais lu le code, il m'a l'air très bien ^^

En fait c'est simple le principe attaquer se déroule comme ça.

Je suis dans la ville.
Je sélectionne le pseudo à attaquer.
Le clique sur le bouton attaquer.

En fonction de mon arme et la sienne, je fais X de dégâts et le riposte pour X de dégâts.

Fin de l'attaque.
La vie de l'adversaire n'est disponible qu'en effectuant une analyse via la ville (qui coutera 3 PA).

Je regarderai et testerai ça un peux plus tard de toute façon Big Grin


RE: Système d'attaques - xepos - 07-04-2010

tu peut si cela t'intéresse prendre la formule qui a un pourcentage d'efficacité cela peut être intéressant


RE: Système d'attaques - Tiny3983 - 22-02-2011

J'ai un léger soucis pour l'exécution d'un tel script à heure H.

Exemple le joueur1 envoie son armée attaquer le joueur 2 et il leur faut 30 minutes pour arriver sur les lieux du combat.

Par quel procédé exécuter le script à heure H qui va aller chercher automatiquement les caractéristiques du joueur2 sachant que entre deux il aura peut-être créer de nouveaux soldats, equipements et autres.


RE: Système d'attaques - niahoo - 22-02-2011

Avec un serveur de jeu ou bien une tache cron qui s'exécute le plus souvent possible et qui récupère dans une table, une par une, les tâches à gérer.


RE: Système d'attaques - Tiny3983 - 22-02-2011

J'aurais voulu éviter les tâches cron.
Y a pas d'autres moyens que celui la ?


RE: Système d'attaques - Ter Rowan - 22-02-2011

Autre solution :

quelque part est stocké l'événement heure H joueur1 combat Joueur2

quand joueur1 se connecte, le système passe en revue tous les événements "passés" qui lui sont associés et les traite. Dans le cas où un événement concerne un autre joueur, de manière récursive, il traite tous les événements à une date inférieure de ce nouveau joueur, etc..

grosso modo je vois les événements comme une pile:

on empile quand un joueur donne un ordre (attaquer X, produire,...)
on dépile quand un événement doit se réaliser (sauf que là on dépile de manière récursive)


RE: Système d'attaques - niahoo - 22-02-2011

Comme on l'a déjà dit, c'est une mauvaise architecture de compter sur la navigation des joueurs pour gérer des choses qui ne les concerne pas. D'autant plus que plusieurs joueurs peuvent se connecter en même temps, ce qui te laisse le choix entre des race conditions et une surcharge de ta base de données.


RE: Système d'attaques - Argorate - 22-02-2011

C'est une mauvaise architecture, selon toi, nuance. ^^
C'est juste une histoire de temps, de quand sont faites les choses, mais tant que l'ordre est conserver (principe de pille), il n'y a strictement aucun problème d'ordre technique... Après c'est un choix.
Mais on va pas refaire le débat une n-ième fois, ça n'apporterais rien de plus, mais je trouve bien de présenter toutes les options possible pour laisser à Tiny3983 le soin de choisir Smile

D'autant plus que sa demande est justement d'éviter un cron distant.