Program TP3; Uses Crt, Graph; Var a, b, c, d, e, f, g, h, i, score, rep : integer; Var nom, r : string; Procedure beat; (*c"est un rythme qui sera utilise dans le prgramme*) begin sound(500); (*notes de musique*) delay(50); nosound; delay(500); sound(500); delay(50); nosound; delay(500); sound(500); delay(50); nosound; delay(310); sound(600); delay(50); nosound; delay(300); sound(600); delay(50); nosound; delay(320); end; Procedure fond_d_ecran; (*c"est le fond d"ecran qui apparait lors de la narration*) begin SetBKcolor(lightcyan); (*couleur de fond bleu-ciel*) SetFillStyle(1, 6); bar(0, 400, 640, 480); (*ce rectangle est le sol*) SetFillStyle(1, green); (*tourettes vertes comme dans mario bros*) bar(20, 260, 100, 400); bar(10, 240, 110, 260); bar(540, 260, 620, 400); bar(530, 240, 630, 260); setFILLstyle(6, brown); (*style de remplissage des carres*) setCOLOR(brown); (*couleur du contour*) bar(210, 100, 260, 150); bar(260, 100, 310, 150); (*rectangle suspendus comme dans mario bros*) bar(310, 100, 360, 150); (*remplissage*) bar(360, 100, 410, 150); rectangle(210, 100, 260, 150); rectangle(260, 100, 310, 150); rectangle(310, 100, 360, 150); (*contour*) rectangle(360, 100, 410, 150); setTEXTstyle(5, 0, 2); setCOLOR(red); outTEXTxy(50, 30, 'Il y etait une fois...'); end; Procedure mario; (*dessin de mario*) begin SetFillStyle(1, 4); fillellipse(200, 340, 20, 35); (*corps de mario*) SetFillStyle(1, 1); bar(190, 370, 198, 400); (*jambes de mario*) bar(202, 370, 210, 400); SetFillStyle(1, 4); bar(150, 313, 250, 323); (*bras de mario*) SetFillStyle(1, 12); fillELLIPSE(200, 290, 20, 20); (*tete de mario*) line(190, 285, 195, 280); line(210, 285, 205, 280); line(195, 305, 205, 305); SetFillStyle(1, 4); bar(190, 265, 210, 275); SetFillStyle(1, 6); fillELLIPSE(200, 295, 10, 2); (*moustache de mario*) SetColor(15); circle(200, 290, 5); (*nez de mario*) end; Procedure bowser; (*dessin de bowser*) begin setFILLstyle(1, 2); FILLellipse(400, 310, 50, 65); (*corps de bowser*) bar(365, 350, 395, 400); (*jambes de bowser*) bar(405, 350, 435, 400); FILLellipse(350, 280, 20, 20); (*bras de bowser*) FILLellipse(450, 280, 20, 20); setFILLstyle(1, 12); line(410, 215, 420, 190); line(420, 190, 420, 220); line(390, 215, 380, 190); line(380, 190, 380, 220); FILLellipse(400, 240, 30, 30); (*tete de bowser*) line(390, 255, 410, 255); line(385, 225, 395, 235); line(415, 225, 405, 235); end; Procedure mise_en_situation; begin Cleardevice; (*efface l"ecran*) fond_d_ecran; (*affiche le fond d"ecran*) beat; (*delais avant l"apparition de mario*) mario; (*apparition de mario*) beat; (*delais avant l"apparition du texte*) SetColor(darkgray); (*couleur et style du texte*) setTEXTstyle(0, 0, 1); outTEXTxy(100, 200, 'C"est moi, Mario!'); (*texte*) outTEXTxy(100, 220, 'Je vais a l"epicerie!'); beat; (*delais avant la disparition du texte*) beat; Cleardevice; (*effacage de l"ecran*) fond_d_ecran; (*redessin du fond et de mario*) mario; beat; (*delais avant l"apparition de bowser*) bowser; (*apparition de Bowser*) beat; (*delais avant le texte de bowser*) setTEXTstyle(0, 0, 1); setCOLOR(darkgray); outTEXTxy(340, 160, 'Je suis Bowser!'); (*texte de bowser*) outTEXTxy(230, 180, 'Reponds a mes questions ou je te defenestrerai!'); beat; beat; (*delais avant la disparition du texte de bowser*) Cleardevice; (*effacage de l"ecran*) fond_d_ecran; (*redessin de bowser, de mario et du fond*) mario; bowser; delay(500); (*delais avant le texte de mario*) setTEXTstyle(0, 0, 1); setcolor(darkgray); outTEXTxy(150, 250, 'Ok!'); (*texte de mario*) beat; (*delais avant la disparition de l"ecran*) setfillstyle(1, red); (*rectangle grandissant*) For e:=160 downto 0 do begin bar(0, 480, 640, 3*e); (*dimensions grandissantes du rectangle*) sound(e); (*son accompagnant le tout*) delay(10); nosound; end; Cleardevice; (*effacement de l"ecran*) SetBKcolor(black); (*couleur de fond noir*) Setcolor(white); (*couleur de texte blanc*) SetTextStyle(3, 0, 2); (*style de texte*) delay(1000); outTEXTxy(50, 100, 'Mario saura-t-il repondre aux questions de Bowser?'); delay(2000); outTEXTxy(50, 150, 'Subira-t-il une mort affreuse par defenestration?'); delay(2000); (*texte*) SetTextStyle(3, 0, 4); outTEXTxy(50, 200, 'Cela ne depend que de TOI.'); delay(2000); SetTextStyle(3, 0, 2); outTEXTxy(50, 260, 'Quel est ton nom?'); (*deplacement du curseur pour que l"usager puisse voire le texte qu"il entre*) gotoXY(8, 20); readln(nom); (*entree du nom de l"usager*) Cleardevice; SetTextStyle(3, 0, 5); OutTEXTxy(50, 110, nom); (*je m"adresse a l"usager*) SetTextStyle(3, 0, 2); OutTEXTxy(50, 170, 'prepare-toi a vivre l"aventure de ta vie!'); OutTEXTxy(50, 220, 'APPUIE SUR LE RETOUR DE CHARIOT POUR DEBUTER.'); readln; setFILLstyle(2, lightblue); For e:=0 to 400 do begin (*cercle grandissant*) fillELLIPSE(320, 240, e, e); sound(round(e*e/100)); (*son pendant l"agrandissement*) nosound; end; end; Procedure intro; begin SetBKcolor(white); (*fond blanc*) Randomize; Readln; For d:=0 to 300 do (*apparition de 300 cercles au hasard*) begin setfillstyle(1, random(14)); (*couleur choisie au hasard*) c:=random(70); (*rayon choisi au hasard*) fillellipse(random(640), random(480), c+10, c+10); (*emplacement choisi au hasard*) sound(round(200*sin(d/5)+900)); (*son de sirene (frequence sinusoidale)*) delay(10); nosound; end; delay(500); setFILLstyle(11, 8); bar(100, 100, 540, 380); (*rectangle o\u ecrire*) setcolor(red); (*texte rouge*) setTEXTstyle(1, 0, 4); outTEXTxy(135, 120, 'Les comissions de Mario'); (*texte*) setcolor(blue); setTEXTstyle(5, 0, 2); (*style de texte*) outTEXTxy(113, 170, 'Par Jeremie Gauthier et Geremia Massarelli');(*texte*) setcolor(darkgray); settextstyle(1, 0, 2); outTEXTxy(110, 350, 'Copyright 2010');(*texte*) Readln; setfillstyle(8, 8); (*rectangle grandissant et englobant la page*) For e:=0 to 160 do begin bar(0, 0, 640, 3*e); (*dimensions grandissantes du rectangle*) sound(3*e); delay(5); nosound; (*son pendant l"agrandissement*) end; delay(1000); end; procedure bonne_reponse; (*c"est ce qui s"affichera a l"ecran apres une bonne reponse*) begin cleardevice; setBKcolor(green); (*la couleur vert*) setLINEstyle(0, $c3, 3); (*des lignes epaisses*) setcolor(blue); (*des lignes bleues*) line(350, 120, 390, 150); line(390, 150, 330, 370); line(330, 370, 150, 250); (*ces lignes forment un crochet pour signaler la bonne reponse*) line(150, 250, 175, 225); line(175, 225, 300, 280); line(300, 280, 350, 120); for c:=15 to 35 do begin (*ce sont devient de plus en plus aigu*) sound(c*c); delay(50); nosound; end; delay(300); end; procedure mauvaise_reponse; begin cleardevice; setBKcolor(red); (*ecran rouge pour signaler la mauvaise reponse*) setLINEstyle(0, $c3, 3); setcolor(blue); for c:=350 downto 50 do begin sound(c); (*son qui devient de plus en plus grave pour signaler la mauvaise reponse*) delay(5); nosound; end; delay(300); end; procedure consignes; begin cleardevice; setBKcolor(blue); (*couleur du fond*) setTEXTstyle(1, 0, 3); (*style du texte*) setcolor(white); (*couleur du texte*) outTEXTxy(10, 40, 'Tu devras porter assistance a Mario en lui'); outTEXTxy(10, 80, 'suggerant des reponses aux questions de Bowser.'); outTEXTxy(10, 120, 'Attention : tu n"auras qu"une chance pour'); outTEXTxy(10, 160, 'repondre a chaque question, alors reflechis'); outTEXTxy(10, 200, 'bien! Bowser posera quinze question a notre heros,'); outTEXTxy(10, 240, 'qui devra lui donner au moins neuf bonnes reponses'); outTEXTxy(10, 280, 'pour assurer sa survie.'); outTEXTxy(10, 340, 'Alors, '); setTEXTstyle(1, 0, 6); outTEXTxy(10, 365, nom); (*je m"adresse a l"utilisateur*) setTEXTstyle(1, 0, 4); outTEXTxy(10, 430, 'ES-TU UN CAID?'); (*l"ultime question*) (*c"est le texte*) readln; (*le jeu commence en appuyant sur le retour de chariot*) end; procedure question1; (*premiere question*) begin Cleardevice; (*effacement de l"ecran*) setbkcolor(lightgreen); (*fond d"ecran*) settextstyle(3, 0, 2); outtextxy(20,30,'Question 1'); (*ecriture de " question un "*) delay(1000); outtextxy(20,60,'Abraham Lincoln etait...'); (*texte de la question*) delay(500); (*delais entre l"apparition des differents elements de texte*) outtextxy(20,120,'1. Un fameux cheval de course'); (*choix de reponse*) delay(500); outtextxy(20,180,'2. Le premier homme dans l"espace'); delay(500); outtextxy(20,240,'3. Un president des Etats-Unis'); delay(500); outtextxy(20,300,'4. Un personnage dans Mario Bros le film'); gotoXY(6, 26); (*deplacement du curseur a un endroit approprie*) Readln(rep); (*lecture de la reponse*) If rep=3 then begin bonne_reponse; (*si la reponse est bonne, un point est ajoute et un ecran vert est affiche*) score:=score+1 end else begin mauvaise_reponse;(*si la reponse est mauvaise, un ecran rouge est affiche*) end; end; procedure question2; (*question 2*) begin Cleardevice; setBKcolor(magenta); outtextxy(20,30,'Question 2'); delay(1000); outtextxy(20,60,'A quel pays appartient le Groenland?'); delay(500); outtextxy(20,120,'1. Le Canada'); (*texte de la question et reponses*) delay(500); outtextxy(20,180,'2. L"Icelande'); delay(500); outtextxy(20,240,'3. Le Danemark'); delay(500); outtextxy(20,300,'4. L"Alaska'); gotoXY(6, 26); Readln(rep); If rep=3 then begin bonne_reponse; score:=score+1 end else begin mauvaise_reponse; end; end; procedure question3; (*question 3*) begin Cleardevice; setcolor(white); setbkcolor(lightblue); outtextxy(20,30,'Question 3'); delay(1000); outtextxy(20,60,'De quel fameux personnage provient cet enonce?'); outtextxy(20,80,'" L"existence precede l"essence "'); delay(500); outtextxy(20,120,'1. Rene Descartes'); delay(500); outtextxy(20,180,'2. Jean Saul Partre'); delay(500); outtextxy(20,240,'3. Stephen Harper'); delay(500); outtextxy(20,300,'4. Mahatma Gandhi'); delay(500); outtextxy(20,360,'5. Paul Piche'); delay(500); outtextxy(20,420,'6. Jean-Paul Sartre'); gotoXY(6, 26); Readln(rep); If rep=6 then begin bonne_reponse; score:=score+1 end else begin mauvaise_reponse; end; end; procedure question4; (*question 4*) begin Cleardevice; setbkcolor(lightgreen); outtextxy(20,30,'Question 4'); delay(1000); outtextxy(20,60,'Qui fit, avant tout autre, le tour du monde?'); delay(500); outtextxy(20,120,'1. Ferdinand de Magellan'); delay(500); outtextxy(20,180,'2. Paul Giamatti'); delay(500); outtextxy(20,240,'3. Vasco de Gamma'); delay(500); outtextxy(20,300,'4. Amerigo Vespucci'); delay(500); outtextxy(20,360,'5. Jean-Rene Dufort'); gotoXY(6, 26); Readln(rep); If rep=1 then begin bonne_reponse; score:=score+1 end else begin mauvaise_reponse; end; end; procedure question5; (*question 5*) begin Cleardevice; setbkcolor(magenta); outtextxy(20,30,'Question 5'); delay(1000); outtextxy(20,60,'Quelle est la capitale de la Republique Democratique du '); outtextxy(20,80,'Congo?'); delay(500); outtextxy(20,120,'1. Matadi'); delay(500); outtextxy(20,180,'2. Molepolole'); delay(500); outtextxy(20,240,'3. Amsterdam'); delay(500); outtextxy(20,300,'4. Kinshasa'); gotoXY(6, 26); Readln(rep); If rep=4 then begin bonne_reponse; score:=score+1 end else begin mauvaise_reponse; end; end; procedure question6; begin (*question 6*) Cleardevice; setbkcolor(brown); outtextxy(20,30,'Question 6'); delay(1000); outtextxy(20,60,'Quelle appellation les amerindiens avaient-ils pour l"actuelle'); outtextxy(20, 80, 'ville de Quebec?'); delay(500); outtextxy(20,120,'1. Stadakone'); delay(500); outtextxy(20,180,'2. Hochelaga'); delay(500); outtextxy(20,240,'3. Kaknawaga'); delay(500); outtextxy(20,300,'4. Kanesatake'); gotoXY(6, 26); Readln(rep); If rep=1 then begin bonne_reponse; score:=score+1 end else begin mauvaise_reponse; end; end; procedure question7; (*question 7*) begin Cleardevice; SetBKcolor(13); outtextxy(20,30,'Question 7'); delay(1000); outtextxy(20,60,'Si l"on met 4 tartes dans une boite et que'); outtextxy(20,80,'l"on en enleve la moitie de ce nombre initial de tartes'); outtextxy(20,100,'et que l"on remet a la suite 100/25 eme de tarte,'); outtextxy(20,120,'combien de tartes restent-il?'); delay(500); outtextxy(20,180,'1. quatre'); delay(500); outtextxy(20,240,'2. six'); delay(500); outtextxy(20,300,'3. zero'); delay(500); outtextxy(20,360,'4. moins trois'); gotoXY(6, 26); Readln(rep); If rep=2 then begin bonne_reponse; score:=score+1 end else begin mauvaise_reponse; end; end; procedure question8; (*question 8*) begin Cleardevice; setbkcolor(lightgreen); outtextxy(20,30,'Question 8'); delay(1000); outtextxy(20,60,'Si j"ai dix dollard et que Paul a quinze dollards,'); outtextxy(20,80,'qui a le plus d"argent?'); delay(500); outtextxy(20,120,'1. Moi '); delay(500); outtextxy(20,180,'2. Paul'); delay(500); outtextxy(20,240,'3. Chuck Norris'); delay(500); outtextxy(20,300,'4. Aucune de ces reponses'); gotoXY(6, 26); Readln(rep); If rep=3 then begin bonne_reponse; score:=score+1 end else begin mauvaise_reponse; end; end; procedure question9; (*question 9*) begin Cleardevice; setbkcolor(cyan); outtextxy(20,30,'Question 9'); delay(1000); outtextxy(20,60,'Si je suis au dixieme etage d"un bloc appartement et que je'); outtextxy(20,80,'defenestre mon rival et qu"il se fait intercepeter au '); outtextxy(20,100,'quatre cinquiemes du chemin, quel est le nombre'); outtextxy(20,120,'d"etages qu"il lui restait a tomber?'); delay(500); outtextxy(20,180,'1. douze'); delay(500); outtextxy(20,240,'2. quatorze'); delay(500); outtextxy(20,300,'3. deux'); delay(500); outtextxy(20,360,'4. huit'); gotoXY(6, 26); Readln(rep); If rep=3 then begin bonne_reponse; score:=score+1 end else begin mauvaise_reponse; end; end; procedure question10; begin (*question 10*) Cleardevice; setbkcolor(yellow); outtextxy(20,30,'Question 10'); delay(1000); outtextxy(20,60,'Si deux personnes sont dos a dos et qu"ils font quatre pas'); outtextxy(20,80,'devant eux, puis qu"ils tournent a leur droite et font'); outtextxy(20,100,'trois pas, quelle distance les separe?'); delay(500); outtextxy(20,180,'1. cinq pas'); delay(500); outtextxy(20,240,'2. dix pas'); delay(500); outtextxy(20,300,'3. douze pas'); delay(500); outtextxy(20,360,'4. deux pas'); gotoXY(6, 26); Readln(rep); If rep=2 then begin bonne_reponse; score:=score+1 end else begin mauvaise_reponse; end; end; procedure question11; begin (*question 11*) Cleardevice; SetBKcolor(cyan); outtextxy(20,30,'Question 11'); delay(1000); outtextxy(20,60,'On compte, sur une ferme, un total de cent dix-huit pattes.'); outtextxy(20,80,'Sachant qu"il y a trois fois plus de poules que'); outtextxy(20,100,'d"ornithorinques et que la somme du nombre '); outtextxy(20,120,'d"ornithorinques et du nombre d"ours vaut vingt-huit, '); outtextxy(20,140,'combien y a-t-il de chaque animal?'); delay(500); outtextxy(20,180,'1. 6 poules, 2 ornithorinque et 26 ours'); delay(500); outtextxy(20,240,'2. 3 poules, 1 ornithorinque et 27 ours'); delay(500); outtextxy(20,300,'3. 12 poules, 4 ornithorinques et 24 ours'); delay(500); outtextxy(20,360,'4. 21 poules, 7 ornithorinques et 21 ours'); gotoXY(6, 26); Readln(rep); If rep=2 then begin bonne_reponse; score:=score+1 end else begin mauvaise_reponse; end; end; procedure question12; begin (*question 12*) Cleardevice; setbkcolor(lightgreen); outtextxy(20,30,'Question 12'); delay(1000); outtextxy(20,60,'Combien d"yeux ont huit cyclopes borgnes?'); delay(500); outtextxy(20,120,'1. seize'); delay(500); outtextxy(20,180,'2. vingt-quatre'); delay(500); outtextxy(20,240,'3. huit'); delay(500); outtextxy(20,300,'4. cinq virgule six'); gotoXY(6, 26); Readln(rep); If rep=3 then begin bonne_reponse; score:=score+1 end else begin mauvaise_reponse; end; end; procedure question13; (*question 13*) begin Cleardevice; setbkcolor(lightblue); outtextxy(20,30,'Question 13'); delay(1000); outtextxy(20,60,'Combien de triangles distincts y a-t-il ?'); delay(500); outtextxy(20,120,'1. trois'); delay(500); outtextxy(20,180,'2. six'); delay(500); outtextxy(20,240,'3. douze'); delay(500); outtextxy(20,300,'4. onze'); delay(500); rectangle(350,120,450,220); line(300,220,350,220); line(300,220,350,220); (*lignes dessinant la figure en question*) line(350,120,450,220); line(350,220,450,120); line(450,120,500,120); line(450,220,500,120); line(300,220,350,120); gotoXY(6, 26); Readln(rep); If rep=3 then begin bonne_reponse; score:=score+1 end else begin mauvaise_reponse; end; end; procedure question14; begin (*question 14*) Cleardevice; setbkcolor(lightblue); outtextxy(20,30,'Question 14'); delay(1000); outtextxy(20,60,'Deux droites non paralleles et non gauches dans l"espace'); outtextxy(20,80,'se croisent a combien de places?'); delay(500); outtextxy(20,120,'1. un'); delay(500); outtextxy(20,180,'2. trois'); delay(500); outtextxy(20,240,'3. deux'); delay(500); outtextxy(20,300,'4. trente-deux'); gotoXY(6, 26); Readln(rep); If rep=1 then begin bonne_reponse; score:=score+1 end else begin mauvaise_reponse; end; end; procedure question15; (*question 15*) begin Cleardevice; setbkcolor(lightred); outtextxy(20,30,'Question 15'); delay(1000); outtextxy(20,60,'Quelle est la somme des angles internes d"un octogone?'); delay(500); outtextxy(20,120,'1. 180 degres'); delay(500); outtextxy(20,180,'2. 360 degres'); delay(500); outtextxy(20,240,'3. 1080 degres'); delay(500); outtextxy(20,300,'4. 1 radian'); gotoXY(6, 26); Readln(rep); If rep=3 then begin bonne_reponse; score:=score+1 end else begin mauvaise_reponse; end; end; procedure victoire; begin cleardevice; delay(1000); setbkcolor(black); settextstyle(2,0,6); outtextxy(20,30,'Vous avez repondu correctement a soixante pourcent ou'); outtextxy(20,50,'plus des questions de Bowser. Mario pourra donc...'); delay(2000); sound(200); delay(500); nosound; delay(100); sound(300); delay(500); nosound; delay(100); sound(400); delay(1000); nosound; delay(200); settextstyle(3,0,3); setcolor(green+blink); outtextxy(100,200,'FAIRE SES COMMISSIONS!!!!!!'); setcolor(white); setfillstyle(1,7); bar(100,260,400,400); setfillstyle(1,red); bar(100,260,400,300); settextstyle(3,0,2); setcolor(blue); outtextxy(200,260,'PROVIGO'); setfillstyle(1,8); bar(180,330,220,400); setfillstyle(1,blue); bar(300,330,340,360); delay(4000); end; procedure defaite; begin cleardevice; delay(1000); setbkcolor(black); settextstyle(2,0,6); outtextxy(20,60,'Vous avez repondu correctement a moins de soixante'); outtextxy(20,80,'pourcent des questions de Bowser.'); delay(3000); sound(150); delay(100); nosound; delay(100); sound(100); delay(100); nosound; delay(100); sound(80); delay(300); nosound; delay(300); settextstyle(3,0,8); setcolor(red+blink); outtextxy(20,200,'Defenestration!!!!'); delay (2000); settextstyle(3,0,3); setcolor(white); outtextxy(100,300,'Prishh!!! (son d"une fenetre qui casse)'); delay(4000); end; procedure final; begin closegraph; TEXTcolor(red); GotoXY(15, 10); Write('En passant, votre score etait ', score, '.'); delay(3000); GotoXY(15, 13); Write('Si vous voulez rejouer, tapez " rejouer ". Atrement, '); GotoXY(15, 14); Write('entrez n"importe quelle autre chaine de caracteres.'); GotoXY(15, 15); Readln(r); end; procedure au_revoir; begin Clrscr; GotoXY(15, 10); Textcolor(lightgray); Write('Merci et au revoir, ', nom, '! '); GotoXY(1, 14); (*Ceci cre/e un joli motif.*) For f:=1 to 6 do begin For g:=1 to f*f do begin Textcolor(f*g mod 10+2); write(''); end; Writeln; end; For h:=6 downto 1 do begin For i:=1 to h*h do begin Textcolor(h*i mod 9 +3); write(''); end; writeln; end; For c:=30 to 3000 do (*petit son amusant*) begin Sound(c); delay(5); (*la frequence du son est incrementee a toutes les cinq millisecondes*) end; Nosound; end; Begin Repeat a:=detect; InitGraph(a, b, 'M:/BGI'); (*intiation du graph*) intro; (*procedure d"introduction*) mise_en_situation; (*procedure de mise en situation*) consignes; (*procedure de consignes*) score:=0; (*definition de la variable " score " comme nulle*) question1; question2; question3; (*execution des question*) question4; question5; question6; question7; question8; question9; question10; question11; question12; question13; question14; question15; If score>=9 then victoire else defaite; final; Until r <> ('rejouer'); au_revoir; End.