mais quand je dis on code, c’est on code à la bourrin… le projet informatique qu’on doit rendre doit être fini à la fin de la semaine et c’est pas fini donc on utilise parfois des racourcis de codage un peu… limite… pour ceux qui connaissent le turbo pascal… allez y de bon coeur !
--------------------------- init --------------------------------
unit bataille;
interface
uses
crt,jet_de_d, mestypes;
var
type_de_coup : byte;
p1,p2 : personnage;
combat : boolean;
j1_attaque_j2 : boolean;
procedure choix_du_coup (var style : byte);
procedure calcul_point_action (var perso1,perso2 : personnage);
procedure debut_de_round (var perso1,perso2:personnage;var j1_attaque_j2:boolean);
procedure calcul_critique (var dommage_critique_total : word);
function calcul_de_dommage_coup (perso : personnage;diff_coup_porte:word):word;
procedure style_offensif (var atta,def : personnage; var delta_BO_temp, dommage_complet:integer;var dommage_du_critique:word);
procedure style_normal (var atta,def : personnage; var delta_BO_temp, dommage_complet:integer;var dommage_du_critique:word);
procedure style_defensif (var atta,def : personnage; var delta_BO_temp, dommage_complet:integer;var dommage_du_critique:word);
procedure touche(var atta,def : personnage; style : byte);
function mort_du_joueur (perso : personnage) : boolean;
function inconscience_du_joueur (perso : personnage) : boolean;
procedure test_de_fin_de_combat (var perso : personnage);
function fin_du_combat (perso1,perso2 : personnage) : boolean;
procedure affichage_fin_de_combat (perso : personnage);
procedure deroulement (p1,p2 : personnage; j1_attaque_j2, combat : boolean; type_de_coup : byte);
implementation
procedure choix_du_coup (var style : byte);
var choix : char;
begin
style:=0;
writeln (‘Choississez votre type de coup : (O)ffensif, (N)ormal ou (D)‚fensif’);
while type_de_coup = 0 do begin
choix := readkey;
case choix of
‘o’ : style:=1;
‘n’ : style:=2;
‘d’ : style:=3;
end;
end;
end;
procedure calcul_point_action (var perso1,perso2 : personnage);
const
constante_de_temps = 1; {constante relative au calcul des points d’action}
begin {calcul de la progression des points d’action}
perso1.pa := perso1.pa + (perso1.viva div 10) * constante_de_temps + jet_1d10;
perso2.pa := perso2.pa + (perso2.viva div 10) * constante_de_temps + jet_1d10;
end;
procedure debut_de_round (var perso1,perso2:personnage;var j1_attaque_j2:boolean);
var i : word;
begin {calculs du d‚clenchement des actions}
j1_attaque_j2:=false;
while (perso1.pa<100) and (perso2.pa<100) do begin {la limite est 100}
calcul_point_action (perso1,perso2);
end;
if perso1.pa > perso2.pa then begin {le joueur 1 attaque et reset de ses points d’action}
perso1.pa := perso1.pa - 100;
j1_attaque_j2:=true;
end
else begin {le joueur 2 attaque et reset de ses points d’action}
perso2.pa := perso2.pa - 100;
end;
end;
procedure calcul_critique (var dommage_critique_total : word);
var dommage_critique : word;
begin
dommage_critique_total:=0;
dommage_critique:=jet_2d10; {jet al‚atoire du coup critique}
{si >95, on additionne un nouveau jet de 2d10}
if dommage_critique >= 95 then dommage_critique := dommage_critique + jet_2d10;
{les multiples de 10 doublent les points de d‚gats}
if (dommage_critique mod 10 = 0) then dommage_critique_total:=dommage_critique*2;
dommage_critique_total := dommage_critique;
if dommage_critique <= 10 then begin {si <10, alors le critique ‚choue mais fait 1 de d‚gat}
dommage_critique:=1;
dommage_critique_total:=0
end;
end;
function calcul_de_dommage_coup (perso : personnage;diff_coup_porte:word):word;
begin {calcul du dommage}
calcul_de_dommage_coup:=(perso.force mod 10)+perso.dps+diff_coup_porte;
end;
procedure style_offensif (var atta,def : personnage; var delta_BO_temp, dommage_complet:integer;var dommage_du_critique:word);
var atta_BO, def_BO : word;
delta_BO : integer;
begin
atta_BO := jet_2d10 + atta.dext div 10;
def_BO := jet_2d10 + def.dext div 10;
delta_BO_temp :=trunc((atta_BO)/2) - def_BO; {diff‚rence entre les deux jet de d‚s}
if delta_BO_temp>0 then begin {si la diff‚rence est positive, le coup est atteint}
delta_BO := delta_BO_temp;
if delta_BO >=20 then calcul_critique (dommage_du_critique);
{si la diff‚rence >60 alors c’est un coup critique}
{addition du critique ‚ventuel avec les d‚gats du coup port‚}
{c’est un coup offensif, les dommages sont doubl‚s}
dommage_complet:=dommage_du_critique*3+calcul_de_dommage_coup (atta,delta_BO)*3-def.fa;
{si les d‚gats sont n‚gatifs, alors aucune action, sinon, on retire les pdv correspondant}
if dommage_complet >0 then def.pdv:=def.pdv-dommage_complet
else dommage_complet := 0;
if dommage_complet = 0 then writeln (' mais n''inflige aucun dommage')
else begin {proc‚dure d'affichage}
if dommage_du_critique<>0 then begin writeln (', r‚alise un coup parfait');
if dommage_complet = 1 then writeln ('Et inflige ',dommage_complet,' point de dommage')
else writeln ('Et inflige ',dommage_complet,' points de dommages');
end
else if dommage_complet = 1 then writeln (' et inflige ',dommage_complet,' point de dommage')
else writeln (' et inflige ',dommage_complet,' points de dommages');
end;
{affichage des dommages}
if dommage_du_critique<>0 then if dommage_du_critique = 1 then
writeln ('Dont ',dommage_du_critique*3,' point de dommage critique !')
else writeln ('Dont ',dommage_du_critique*3,' points de dommages critiques !');
if def.pdv<=0 then writeln ('Il ne reste plus aucun point de vie … ',def.nom)
else if def.pdv = 1 then writeln ('Il reste ',def.pdv,' point de vie … ',def.nom)
else writeln ('Il reste ',def.pdv,' points de vie … ',def.nom);
end;
if delta_BO_temp<=0 then begin
writeln (' mais rate son coup');
end;
end;
procedure style_normal (var atta,def : personnage; var delta_BO_temp, dommage_complet:integer;var dommage_du_critique:word);
var atta_BO, def_BO : word;
delta_BO : integer;
begin
atta_BO := jet_2d10 + atta.dext div 10;
def_BO := jet_2d10 + def.dext div 10;
delta_BO_temp := atta_BO - def_BO;
if delta_BO_temp>0 then begin
delta_BO := delta_BO_temp;
if delta_BO >=60 then calcul_critique (dommage_du_critique);
dommage_complet:=dommage_du_critique+calcul_de_dommage_coup (atta,delta_BO)-def.fa;
if dommage_complet >0 then def.pdv:=def.pdv-dommage_complet
else dommage_complet := 0;
if dommage_complet = 0 then writeln (' mais n''inflige aucun dommage')
else begin {proc‚dure d'affichage}
if dommage_du_critique<>0 then begin writeln (', r‚alise un coup parfait');
if dommage_complet = 1 then writeln ('Et inflige ',dommage_complet,' point de dommage')
else writeln ('Et inflige ',dommage_complet,' points de dommages');
end
else if dommage_complet = 1 then writeln (' et inflige ',dommage_complet,' point de dommage')
else writeln (' et inflige ',dommage_complet,' points de dommages');
end;
if dommage_du_critique<>0 then if dommage_du_critique = 1 then
writeln ('Dont ',dommage_du_critique,' point de dommage critique !')
else writeln ('Dont ',dommage_du_critique,' points de dommages critiques !');
if def.pdv<=0 then writeln ('Il ne reste plus aucun point de vie … ',def.nom)
else if def.pdv = 1 then writeln ('Il reste ',def.pdv,' point de vie … ',def.nom)
else writeln ('Il reste ',def.pdv,' points de vie … ',def.nom);
end;
if delta_BO_temp<=0 then begin
writeln (' mais rate son coup');
end;
end;
procedure style_defensif (var atta,def : personnage; var delta_BO_temp, dommage_complet:integer;
var dommage_du_critique:word);
var atta_BO, def_BO : word;
delta_BO : integer;
begin
atta_BO := jet_2d10 + atta.dext div 10;
def_BO := jet_2d10 + def.dext div 10;
delta_BO_temp := atta_BO*2 - def_BO;
if delta_BO_temp>0 then begin
delta_BO := delta_BO_temp;
if delta_BO >=90 then calcul_critique (dommage_du_critique);
dommage_complet:=trunc(dommage_du_critique/2)+trunc(calcul_de_dommage_coup (atta,delta_BO)/4)-def.fa;
if dommage_complet >0 then def.pdv:=def.pdv-dommage_complet
else dommage_complet := 0;
if dommage_complet = 0 then writeln (' mais n''inflige aucun dommage')
else begin {proc‚dure d'affichage}
if dommage_du_critique<>0 then begin writeln (', r‚alise un coup parfait');
if dommage_complet = 1 then writeln ('Et inflige ',dommage_complet,' point de dommage')
else writeln ('Et inflige ',dommage_complet,' points de dommages');
end
else if dommage_complet = 1 then writeln (' et inflige ',dommage_complet,' point de dommage')
else writeln (' et inflige ',dommage_complet,' points de dommages');
end;
if dommage_du_critique<>0 then if dommage_du_critique = 1 then
writeln ('Dont ',trunc(dommage_du_critique/2),' point de dommage critique !')
else writeln ('Dont ',trunc(dommage_du_critique/2),' points de dommages critiques !');
if def.pdv<=0 then writeln ('Il ne reste plus aucun point de vie … ',def.nom)
else if def.pdv = 1 then writeln ('Il reste ',def.pdv,' point de vie … ',def.nom)
else writeln ('Il reste ',def.pdv,' points de vie … ',def.nom);
end;
if delta_BO_temp<=0 then begin
writeln (' mais rate son coup');
end;
end;
procedure touche(var atta,def : personnage; style : byte);
var dommage_du_critique, dommage, delta_BO : word;
dommage_complet, delta_BO_temp : integer;
begin
dommage_du_critique:=0; {init du calcul du critique}
dommage_complet := 0;
case style of
1 : style_offensif (atta,def,delta_BO_temp,dommage_complet,dommage_du_critique);
2 : style_normal (atta,def,delta_BO_temp,dommage_complet,dommage_du_critique);
3 : style_defensif (atta,def,delta_BO_temp,dommage_complet,dommage_du_critique);
end;
end;
function mort_du_joueur (perso : personnage) : boolean;
begin {condition de mort}
if (perso.pdv <= 0) then mort_du_joueur := true
else mort_du_joueur := false;
end;
function inconscience_du_joueur (perso : personnage) : boolean;
begin {condition selon laquelle le joueur tombe inconscient}
if perso.pdv < ((perso.pdvbase/2)-perso.cons) then begin
if jet_2d10 < 50 then inconscience_du_joueur := true;
end
else inconscience_du_joueur := false;
end;
procedure test_de_fin_de_combat (var perso : personnage);
begin {‚criture de la proc‚dure de fin de combat}
if inconscience_du_joueur (perso) then perso.inconscient := true;
if mort_du_joueur (perso) then perso.mort := true;
end;
function fin_du_combat (perso1,perso2 : personnage) : boolean;
begin {si un des deux joueurs est mort ou inconscient, le combat est fini}
if (perso1.mort) or (perso2.mort) or (perso1.inconscient) or (perso2.inconscient) then fin_du_combat := true
else fin_du_combat := false;
end;
procedure affichage_fin_de_combat (perso : personnage);
begin {proc‚dure d’affichage de fin de combat}
if perso.inconscient = true then writeln (perso.nom,’ perd connaissance sous le poids de ses blessures’);
if perso.mort = true then writeln (perso.nom,’ succombe … ses blessures’);
end;
procedure deroulement (p1,p2 : personnage; j1_attaque_j2, combat : boolean; type_de_coup : byte);
begin
while not combat do begin
{proc‚dure de d‚but d’attaque}
debut_de_round (p1,p2,j1_attaque_j2);
{fin de proc‚dure d’attaque, le coup est d‚clench‚}
if j1_attaque_j2= true then begin
write (p1.nom, ’ : ‘);
choix_du_coup (type_de_coup);
write (p1.nom,’ attaque ',p2.nom);
touche (p1,p2, type_de_coup); {le joueur 1 frappe le joueur 2}
{recherche de fin de combat}
test_de_fin_de_combat (p2);
end
else begin
write (p2.nom, ’ : ‘);
choix_du_coup (type_de_coup);
write (p2.nom,’ attaque ',p1.nom);
touche (p2,p1,type_de_coup) {proc‚dure invers‚};
test_de_fin_de_combat (p1);
end;
{conditions de fin de combat}
combat := fin_du_combat (p1,p2);
if combat = true then begin {affichage de fin de combat}
affichage_fin_de_combat (p1);
affichage_fin_de_combat (p2);
end;
readln;
end;
end;
end.
-------------------------------------- end -----------------------------
et encore ce n’est qu’un seul fichiers… T_T aller, j’y retourne.