A l'ISEL parfois on code

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&lt;&gt;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&lt;&gt;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&lt;=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&lt;=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&lt;&gt;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&lt;&gt;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&lt;=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&lt;=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&lt;&gt;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&lt;&gt;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&lt;=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&lt;=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.

Tout au notepad ou pas kan meme ?

merci pour l’indentation c’est super, la prochaine fois vire les retours à la ligne aussi ou balance le .exe en hexa aussi :twisted: :smiley:

pour te répondre anarki sinon ils ne font pas ça sous Notepad car dans leurs commentaires les “é” sont remplacés par “,” comme dans “jet al‚atoire” donc ils bossent dans un prog console en mode texte, l’éditeur de TPascal je suppose :wink:

sinon pourquoi vous avez pas fait de votre perso un objet au lieu de vous faire chier à le trimbaler partout en structure ? 0_o
c’est beaucoup plus facile à relire l’objet surtout pour ce genre de prog :wink:

enfin j’ai juste survolé mais ça a l’air sympa, c’est un FF-like non ?

en faite c’est le forum qui a chier l’indentation… parce que normalement c’est indenté à mort… et plus si affinité, d’ailleur je rajoute le ficher
et oui, le compilateur en mode texte sous dos aime pas les accents etc…

@aevoc tout simplement parce que le turbopascal sait pas faire du lmangage objet… donc on se tape de la structure…
et oui c’est un petit FF mais vraiment petit :slight_smile:

ci joint le fichier indenté :slight_smile:

Le Pascal c’est le troisième langage que j’ai appris après le basic et l’assembleur, tu peux très bien faire de l’objet en Turbo Pascal depuis la version 5.5, j’avais un prof en école d’ingé qui en faisait…
ex : http://community.borland.com/article/0,1410,20803,00.html

Faut juste être sado-masochiste c’est tout…

C’est comme les pointeurs en Pascal, jamais vu un truc aussi horrible… si tu ne les a pas encore vus j’espère que tu découvriras les pointeurs en C comme moi, pasque moi j’ai découvert ça en Pascal après l’avoir découvert en C et ça m’a vraiment foutu les boules de voir un truc aussi laid, ça rend la notion de pointeur 10x plus imbittable à celui qui découvre ça :shock: :lol:

ben en fait on en est au 7.0 si je me souviens bien mais notre prof nous as dis : le turbo et l’objet c’est pas possible… donc je l’ai cru sur le moment mais je doit bien admettre qu’il doit pas en connaitre bien lourd en TP le bougre…

En ce qui concerne les pointeurs, on les a étudiés en Turbo pascal… c’est trop lourd, je vois pas l’intérêt de se trimballer un truc pareil sauf pour deux ou trois cas précis mais bon, je me vois mal utiliser ça dans un prog qui n’est pas explicitement demandé avec pointeur…

Pourquoi ? sur C c’est plus simple et plus pratique ? (faut avouer que sous turbo pascal c’est bien la merde à programmer et surtout à utiliser…)

ben en C on est plus souvent obligé de les utiliser qu’en Pascal, et surtout c’est beaucoup plus lisible que le coup des ptis chapeaux à gauche ou à droite de la variable qu’on s’y retrouve plus à la fin :wink:

et t’as gagné combien d’AGCs pour ton post ? :slight_smile:

JE VEUT ARRETER L’ISEL !!!

oki, mais alors reprends les cours de français par ce que “je veut” c’est pas superbe pour un futur ingénieur :stuck_out_tongue:

Tu veras dans deux ans tu feras comme moi et rasta :]

oki, mais alors reprends les cours de français par ce que "je veut" c'est pas superbe pour un futur ingénieur :P

Tu veras dans deux ans tu feras comme moi et rasta :]

Oulà Fred pour faire cette remarque t’as du t’améliorer par rapport au lycée parce que j’ai de vagues souvenirs de tes copies en première, c’était pas très glorieux lol :wink:

je fis encore pas mal de fautes, mais je fais des efforts et surtout, je me relis lorsque je poste sur un forum ^^

je fis encore pas mal de fautes, mais je fais des efforts et surtout, je me relis lorsque je poste sur un forum ^^

:…:

bon z’allez pas faire chier pour des fautes de frappe aussi pendant que vous y êtes !! :twisted:

Non mais là c’était trop gros je pouvais pas laisser passer :stuck_out_tongue: