Cours Free Pascal / Lazarus en vidéo

Date de publication : 08/05/2010 , Date de mise à jour : 08/05/2010

Par Alcatîz
 

Sur cette page, vous pouvez suivre l'intégralité de la série de tutoriels réalisés en vidéo par SchoolFreeware sur le compilateur Free Pascal et son EDI RAD Lazarus.
Ce cours est exclusivement dispensé en anglais et est destiné à un public débutant.
Commentez Donner une note à l'article (0)

    
Viadeo Twitter Google Bookmarks ! Facebook Digg del.icio.us Yahoo MyWeb Blinklist Netvouz Reddit Simpy StumbleUpon Bookmarks Share on Google+      



1. Premier programme
2. Afficher des équations mathématiques à l'écran
3. Formater des lignes
4. Types et entrées par l'utilisateur
5. L'instruction If
6. Les boucles
7. Devine mon nombre
8. L'instruction Case of
9. Les tableaux
10. Les tableaux à plusieurs dimensions
11. les procédures
12. Les fonctions
13. Les enregistrements
14. Utilisation des enregistrements pour créer un jeu de rôle
15. Programmation GUI Windows, Mac et Linux
16. Evénements et propriétés
17. Programmer le Sens de la Vie
18. Notation hongroise et création de fenêtre GUI
19. Conversions de chaînes et calculs
20. Boutons radio
21. Gestion d'erreurs : Try...Except
22. Timer système
23. Tableaux parallèles
24. Quick Clock Quizzer : Aperçu
25. Dessin dans un canvas, crayons, pinceaux et couleurs
26. Randomisation des aiguilles de l'horloge
27. Entrées par l'utilisateur
28. Son et musique
29. Splash screen
30. Changer les curseurs et couper le son
31. Icônes
32. Finalisation et propriétés


1. Premier programme

Ce premier tutoriel présente Free Pascal et Lazarus. Un programme console élémentaire est créé, sauvegardé et compilé en programme exécutable.



Source contenu dans cette vidéo :

program FPTutorial1;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes
  { you can add units after this };

begin
  writeln('This is the first program!');
  writeln;
  writeln;
  writeln('Press [Enter] To Quit');
  readln();
end.

2. Afficher des équations mathématiques à l'écran

Ce tutoriel aborde l'ordre des opérations mathématiques et montre comment afficher des équations mathématiques à l'écran.



Source contenu dans cette vidéo :

program FPTutorial2;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes
  { you can add units after this };

begin
  writeln(5 + 7);
  writeln(6 - 3);
  writeln(5 * 2);
  writeln(10 / 2:5:2);
  writeln(100/3:0:2);
  writeln(5 - 2 + 3);
  writeln((5 - 2) + 3);
  writeln(5 - (2 + 3));
  writeln;
  writeln;
  writeln('Press [Enter] To Quit');
  readln();
end.

3. Formater des lignes

Ce tutoriel montre comment afficher du texte formaté.



Source contenu dans cette vidéo :

program FPTutorial3;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes
  { you can add units after this };

const
  s = ' ';

begin
  writeln(s:3, '5 + 7 = ', 5 + 7);
  writeln(s:3, '6 - 3 = ', 6 - 3);
  writeln(s:3, '5 * 2 = ', 5 * 2);
  writeln(s:3, '10 / 2 = ', s:2, 10 / 2:0:2);
  writeln(s:3, '100 / 3 = ', 100/3:0:2);
  writeln(5 - 2 + 3);
  writeln((5 - 2) + 3);
  writeln(5 - (2 + 3));
  writeln;
  writeln;
  writeln('Press [Enter] To Quit');
  readln();
end.

4. Types et entrées par l'utilisateur

Ce tutoriel aborde les principaux types du langage Pascal, la déclaration de variables et l'entrée de données par l'utilisateur.



Source contenu dans cette vidéo :

program FPTutorial4;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes
  { you can add units after this };

var
  name:string;
  num1:real;
  num2:real;
  total:real;

begin
  write('Enter Name: ');
  readln(name);
  write('Enter First Number: ');
  readln(num1);
  write('Enter Second Number: ');
  readln(num2);
  total := num1 + num2;
  writeln;
  writeln('The Sum Of The Numbers Is: ', total:0:2);
  writeln;
  writeln('Nice To Meet You, ', name);
  writeln;
  writeln;
  writeln('Press [Enter] To Quit');
  readln();
end. 

5. L'instruction If

Cette vidéo traite de l'instruction conditionnelle if : le if...then simple et le if...then...else.
Les différents types de commentaires sont également vus.



Source contenu dans cette vidéo :

program FPTutorial5;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes
  { you can add units after this };

var
  num1:integer;
  num2:integer;

begin
  write('Enter First Number: ');
  readln(num1);
  write('Enter Second Number: ');
  readln(num2);
  writeln;

  if num1 > num2 then
  begin
    writeln(num1, ' Is Greater Than ', num2);
  end  { num1 > num2}
  else if num1 < num2 then
  begin
    writeln(num1, ' Is Less Than ', num2);
  end (* num1 < num2 *)
  else
  begin
    writeln('The Numbers Are The Same');
  end; // else

  writeln;
  writeln;
  writeln('Press [Enter] To Quit');
  readln();
end.

6. Les boucles

Ce tutoriel explique les trois types de boucles : while, repeat et for.



Sources contenus dans cette vidéo :

program Project1;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes
  { you can add units after this };

var
  x:integer;

begin
  x := 1;  {starts x equal to 1}

  while x <= 10 do
  begin
    writeln(x, ' * 2 = ' , x * 2);
    x := x + 1;
  end;    {ends while loop}

  writeln;
  writeln;
  writeln('Press [Enter] To Quit');
  readln();
end.

program Project1;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes
  { you can add units after this };

var
  x:integer;

begin
  x := 1;  {starts x equal to 1}

  repeat
    writeln(x, ' * 2 = ' , x * 2);
    x := x + 1;
  until x > 10;    {ends repeat loop}

  writeln;
  writeln;
  writeln('Press [Enter] To Quit');
  readln();
end.

program Project1;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes
  { you can add units after this };

var
  x:integer;

begin
  for x := 1 to 10 do      {to go backwards:   for x:= 10 downto 1 do }
  begin
    writeln(x, ' * 2 = ' , x * 2);
  end;    {ends for loop}

  writeln;
  writeln;
  writeln('Press [Enter] To Quit');
  readln();
end. 

7. Devine mon nombre

Cette vidéo en deux parties récapitule les notions abordées dans les six vidéos précédentes.
Il s'agit ici de la programmation d'un petit jeu consistant à faire deviner un nombre par l'utilisateur.





Source contenu dans cette vidéo :

program FPTutorial7;

{$mode objfpc}{$H+}

uses
  crt, sysutils,
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes
  { you can add units after this };

var
  answer, guess, cnt:integer;
  game:string;

begin
   repeat
     repeat
       clrscr();  { Clears the Screen, needs crt}
       writeln('Please Select A Game: ');
       writeln;
       writeln('A) 10 ');
       writeln('B) 100 ');
       writeln('C) 1000 ');
       writeln;
       write('Selection : ');
       readln(game);
       game := UpperCase(game); {converts to uppercase, needs sysutils}
       randomize;  {Needed to get random numbers}
     until (game = 'A') or (game = 'B') or (game = 'C'); {makes sure that a correct response is given}

     clrscr();

     if game = 'A' then
     begin
       answer := random(10) + 1; {random (10) gets 0 - 9, so add one for 1 - 10}
       writeln('Game 1 - 10');
     end
     else if game = 'B' then
     begin
       answer := random(100) + 1;
       writeln('Game 1 - 100');
     end
     else if game = 'C' then
     begin
       answer := random(1000) + 1;
       writeln('Game 1 - 1000');
     end;    {end if game statement}

     cnt := 0;    {set the counter to zero}

     repeat
       write('Please Enter A Guess: ');
       readln(guess);
       cnt := cnt + 1;

       if guess < answer then
         writeln('Too Low! ')
       else if  guess > answer then
         writeln('Too High! ')
       else
         writeln('You Guessed My Number In ', cnt, ' Guesses! ');
     until guess = answer;  {repeat until the computer's number is guessed}

     repeat
       writeln;
       write('Play Again Y/N : ');
       readln(game);
       game := UpperCase(game);  {convert to uppercase}
     until (game = 'Y') or (game = 'N');  {repeat until the response is correct}

  until game = 'N'; {repeat until the user selects N to quit the game}
end.

8. L'instruction Case of

Ce tutoriel montre comment une instruction case of peut avantageusement remplacer une cascade d'instructions if...then...else.



Sources contenus dans cette vidéo :

program CaseExample;

{$mode objfpc}{$H+}

uses
  sysutils,
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes
  { you can add units after this };

var
  sel:char;

begin
  write('Please Select a Key (A, B, C, D): ');
  readln(sel);

  writeln;

  case sel of
    'A', 'a': begin
                writeln('A Was Selected');
              end;
    'B', 'b': begin
                writeln('B Was Selected');
              end;
    'C', 'c': begin
                writeln('C Was Selected');
              end;
    'D', 'd': begin
                writeln('D Was Selected');
              end;
  end; {End of Case}

  writeln; 
  writeln;
  writeln('Press [Enter] To Quit');
  readln;
end. 

program GradeIf;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes
  { you can add units after this };

var
  score:integer;

begin
   write('Enter Score: ');
   readln(score);

   writeln;

   if score <= 59 then
   begin
     writeln('Grade F');
   end
   else if (score < 63) and (score >= 60) then
   begin
      writeln('Grade D-');
   end
   else if (score < 67) and (score >= 63) then
   begin
      writeln('Grade D');
   end
   else if (score < 70) and (score >= 67) then
   begin
      writeln('Grade D+');
   end
   else if (score < 73) and (score >= 70) then
   begin
      writeln('Grade C-');
   end
   else if (score < 77) and (score >= 73) then
   begin
      writeln('Grade C');
   end
   else if (score < 80) and (score >= 77) then
   begin
      writeln('Grade C+');
   end
   else if (score < 83) and (score >= 80) then
   begin
      writeln('Grade B-');
   end
   else if (score < 87) and (score >= 83) then
   begin
      writeln('Grade B');
   end
   else if (score < 90) and (score >= 87) then
   begin
      writeln('Grade B+');
   end
      else if (score < 93) and (score >= 90) then
   begin
      writeln('Grade A-');
   end
   else if (score < 97) and (score >= 93) then
   begin
      writeln('Grade A');
   end
   else
   begin
      writeln('Grade A+');
   end;

   writeln;
   writeln;
   writeln('Press [Enter] To Quit');
   readln;
end.

program GradeCase;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes
  { you can add units after this };

var
  score:integer;

begin
  write('Enter A Score: ');
  readln(score);

  writeln;

  case score of
   0..59: begin
            writeln('Grade F');
          end;
   60..62: begin
             writeln('Grade D-');
           end;
   63..66: begin
             writeln('Grade D');
           end;
   67..69: begin
             writeln('Grade D+');
           end;
   70..72: begin
             writeln('Grade C-');
           end;
   73..76: begin
             writeln('Grade C');
           end;
   77..79: begin
             writeln('Grade C+');
           end;
   80..82: begin
             writeln('Grade B-');
           end;
   83..86: begin
             writeln('Grade B');
           end;
   87..89: begin
             writeln('Grade B+');
           end;
   90..92: begin
             writeln('Grade A-');
           end;
   93..96: begin
             writeln('Grade A');
           end;
   else
      writeln('Grade A+');
  end;   {ends the case statement}

  writeln;
  writeln;
  writeln('Press [Enter] To Quit');
  readln;
end.

9. Les tableaux

Ce tutoriel aborde la très importante notion des tableaux.



Sources contenus dans cette vidéo :

program Project1;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes
  { you can add units after this };

var
  FirstName: array[1..5] of string;
  x:integer;

begin
  FirstName[1] := 'Joe';
  FirstName[2] := 'Jim';
  FirstName[3] := 'Jill';
  FirstName[4] := 'Joan';
  FirstName[5] := 'Jan';

  for x:= 1 to 5 do
  begin
    writeln(FirstName[x]);
  end;

  writeln;
  writeln;
  writeln('Press [Enter] To Quit');
  readln();
end.

program Project1;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes
  { you can add units after this };

var
  nums: array[1..6] of integer;
  x:integer;
  sum:integer;

begin
  nums[1] := 5;
  nums[2] := 4;
  nums[3] := 9;
  nums[4] := -1;
  nums[5] := 2;
  nums[6] := 15;

  sum := 0;

  for x := 1 to 6 do
  begin
    sum := sum + nums[x];
  end;

  writeln('The Sum Of The Array Is: ', sum);
  writeln;
  writeln;
  writeln('Press [Enter] To Quit');
  readln();
end.

program Project1;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes
  { you can add units after this };

var
  nums: array[1..6] of integer;
  x:integer;
  sum:integer;

begin
  sum := 0;

  for x := 1 to 6 do
  begin
    write('Enter Integer: ');
    readln(nums[x]);
  end;

  for x := 1 to 6 do
  begin
    sum := sum + nums[x];
  end;

  writeln('The Sum Of The Array Is: ', sum);
  writeln;
  writeln;
  writeln('Press [Enter] To Quit');
  readln();
end.

10. Les tableaux à plusieurs dimensions

La suite logique du chapitre précédent : l'utilisation de tableaux à deux dimensions ou plus.



Source contenu dans cette vidéo :

program Project1;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes
  { you can add units after this };

var
  x:integer;
  y:integer;
  suit:array[1..4] of string;
  rank:array[1..13] of string;
  cards:array[1..4,1..13] of string; {This is the Multi-Dimensional Array}

begin
  suit[1] := 'D'; {Diamonds}
  suit[2] := 'S'; {Spades}
  suit[3] := 'H'; {Hearts}
  suit[4] := 'C'; {Clubs}

  rank[1] := '2';
  rank[2] := '3';
  rank[3] := '4';
  rank[4] := '5';
  rank[5] := '6';
  rank[6] := '7';
  rank[7] := '8';
  rank[8] := '9';
  rank[9] := '10';
  rank[10] := 'Jack';
  rank[11] := 'Queen';
  rank[12] := 'King';
  rank[13] := 'Ace';

  for x := 1 to 4 do
  begin
    for y := 1 to 13 do
    begin
      cards[x,y] := suit[x] + rank[y];
    end;
  end;

  for x := 1 to 4 do
  begin
    for y := 1 to 13 do
    begin
      write(cards[x,y], ' ');
    end;
  end;

  writeln; writeln;
  writeln('Press [Enter] To Quit');
  readln;
end. 

11. les procédures

Cette vidéo montre la nécessité de structurer un programme en procédures. Il aborde les notions de variables globales et locales.



Sources contenus dans cette vidéo :

program ProcedureExample1;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes
  { you can add units after this };


procedure StopProgram;
begin
  writeln;
  writeln;
  writeln('Press [Enter] To Quit');
  readln;
end;   {the end of the StopProgram Procedure}

begin   {main program}
  writeln('5 * 5 = ', 5 * 5);
  StopProgram;
end.

program Project1;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes
  { you can add units after this };

var
  x:integer;

procedure proc1;
begin
  writeln('X In Proc1 = ', x);
end;

procedure proc2;
var
  x:integer;
begin
  x:= 20;
  writeln('X In Proc2 = ' , x);
end;

procedure StopProgram;
begin
  writeln;
  writeln;
  writeln('Press [Enter] To Quit');
  readln();
end;

begin
  x:= 35;
  proc1;
  proc2;
  StopProgram;
end.

12. Les fonctions

Ce chapitre montre comment créer des fonctions et explique la différence entre une procédure et une fonction.



Source contenu dans cette vidéo :

program Project1;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes
  { you can add units after this };

var
  number:integer;

procedure StopProgram;
begin
  writeln;
  writeln;
  writeln('Press [Enter] To Quit');
  readln;
end;

function squared(var x:integer):integer;
begin
  squared := x * x;
end;

function abs (var x:integer):integer;
begin
  if x >= 0 then
    abs := x;
  else
    abs := x * -1;
end;  {function abs}

begin  {main program}
  write('Enter An Integer: ');
  readln(number);
  writeln('The Number Squared Is: ', squared(number));
  writeln('The Absolute Value Is: ', abs(number));
  StopProgram;
end.

13. Les enregistrements

Ce tutoriel explique de manière détaillée, et avec plusieurs exemples, comment utiliser le type Record.



Sources contenus dans cette vidéo :

program Project1;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes
  { you can add units after this };

type
  person = record
           fname, lname: string;
           gender: char;
           wage:real;
           end;

var
  employee:person;

procedure StopProgram;
begin
  writeln;
  writeln;
  writeln('Press [Enter] To Quit');
  readln;
end;

Procedure LoadData;
begin
  employee.fname := 'Joe';
  employee.lname := 'Smith';
  employee.gender := 'M';
  employee.wage := 35000.00;
end;

Procedure PrintData;
begin
  writeln('Name: ', employee.fname, ' ' , employee.lname);
  writeln('Gender: ', employee.gender);
  writeln('Wage: $', employee.wage:0:2);
end;

begin
  LoadData;
  PrintData;
  StopProgram;
end.

program RecordExample1w;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes
  { you can add units after this };

type
  person = record
           fname, lname: string;
           gender: char;
           wage:real;
           end;

var
  employee:person;

procedure StopProgram;
begin
  writeln;
  writeln;
  writeln('Press [Enter] To Quit');
  readln;
end;

Procedure LoadData;
begin
  with employee do
  begin
    fname := 'Joe';
    lname := 'Smith';
    gender := 'M';
    wage := 35000.00;
  end; {with}
end;

Procedure PrintData;
begin
  with employee do
  begin
    writeln('Name: ', fname, ' ' , lname);
    writeln('Gender: ', gender);
    writeln('Wage: $', wage:0:2);
  end; {with}
end;

begin
  LoadData;
  PrintData;
  StopProgram;
end.

program RecordExample2;

{$mode objfpc}{$H+}

uses
  crt,
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes
  { you can add units after this };

type
  person = record
           fname, lname: string;
           gender: char;
           wage:real;
           end;

var
  employee:array[1..3] of person;  {example for 3 employees}

procedure StopProgram;
begin
  writeln;
  writeln;
  writeln('Press [Enter] To Quit');
  readln;
end;

procedure EnterData;
var
  x:integer;
begin
  for x := 1 to 3 do
  begin
    with employee[x] do
    begin
      clrscr(); {needs crt added to the units}
      writeln('Employee Number: ', x);
      writeln;
      writeln;
      write('Enter First Name: ');
      readln(fname);
      write('Enter Last Name: ');
      readln(lname);
      write('Enter Gender M/F: ');
      readln(gender);
      write('Enter Wage: $ ');
      readln(wage);
      writeln;
    end; {with}
  end; {for loop}
end; {procedure}

procedure PrintData;
var
  x:integer;
begin
  for x := 1 to 3 do
  begin
    with employee[x] do
    begin
      writeln('Employee Number: ', x);
      writeln('First Name: ', fname);
      writeln('Last Name: ', lname);
      writeln('Gender: ', gender);
      writeln('Wage: $ ', wage:0:2);
      writeln;
    end; {with}
  end; {for loop}
end; {procedure}

begin  {main program}
  EnterData;
  clrscr();
  PrintData;
  StopProgram;
end.

program rec1;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes
  { you can add units after this };

type
  creature = record
             Name:string;
             Armor, Health, Magic, Power:integer;
             end;
var
  Hero, JellBall:creature;

procedure LoadSettings;   {loads the settings for the hero and monsters}
begin
  with Hero do
  begin
    Name:= 'Sir Bill';
    Armor := 0;
    Health := 10;
    Magic := 2;
    Power := 5;
  end;
  with JellBall do
  begin
    Name:= 'JellBall';
    Armor := 0;
    Health := 1;
    Magic := 0;
    Power := 1;
  end;
end;

procedure PrintSettings;
begin
  with Hero do
  begin
    writeln('Name: ', Name);
    writeln('Armor: ', Armor);
    writeln('Health: ', Health);
    writeln('Magic: ', Magic);
  end;

  writeln;
  writeln;

  with JellBall do
  begin
    writeln('Name: ', Name);
    writeln('Armor: ', Armor);
    writeln('Health: ', Health);
    writeln('Magic: ', Magic);
  end;
end;

procedure StopProgram;
begin
  writeln;
  writeln;
  writeln('Press [Enter] To Quit');
  readln;
end;

begin
  LoadSettings;
  PrintSettings;
  StopProgram;
end.

14. Utilisation des enregistrements pour créer un jeu de rôle

L'utilisation des records a été vue au chapitre précédent. A présent, il s'agit d'appliquer tout cela en concevant un petit jeu de rôle.



Source contenu dans cette vidéo :

program Project1;

{$mode objfpc}{$H+}

uses
  crt, sysutils,
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes
  { you can add units after this };

type
  creature = record
             Name:string;
             Armor, Health, Magic, Power:integer;
             end;
  {armor doesn't do anything in this program
   but you are free add code to make the armor protect the creature}

var
  Hero, JellBall, SmallSpider, LargeSpider, Opponent:creature;
  enemNum:integer;   {EnemyNumber used to select the opponent monster}
  selection:string;  {used for user input}
  score:integer;     {keeps score}

procedure LoadSettings;   {loads the settings for the hero and monsters}
begin
  score := 0;   {start score at 0}

  with Hero do
  begin
    Name:= 'Sir Bill';
    Armor := 0;
    Health := 10;
    Magic := 2;
    Power := 5;
  end;

  with JellBall do
  begin
    Name:= 'JellBall';
    Armor := 0;
    Health := 1;
    Magic := 0;
    Power := 1;
  end;

  with SmallSpider do
  begin
    Name:= 'Small Spider';
    Armor := 0;
    Health := 1;
    Magic := 0;
    Power := 2;
  end;

  with LargeSpider do
  begin
    Name:= 'Large Spider';
    Armor := 0;
    Health := 2;
    Magic := 0;
    Power := 2;
  end;
end;

Procedure GetEnemy;   {gets the enemy to fight}
begin
  randomize;
  enemNum := random(3) + 1;
  if enemNum = 1 then
    Opponent := JellBall
  else if enemNum = 2 then
    Opponent := SmallSpider
  else
    Opponent := LargeSpider;
end;

procedure WriteStats;
begin
  with Hero do
  begin
    writeln(Name, '   Score = ', score);
    writeln('Health = ', Health);
    writeln('Armor = ', Armor);
    writeln('Magic = ', Magic);
    writeln('Power = ', Power);
  end; {with Hero}

  writeln;
  writeln;

  with Opponent do
  begin
    writeln('Opponent: ', Name);
    writeln('Health = ', Health);
    writeln('Armor = ', Armor);
    writeln('Magic = ', Magic);
    writeln('Power = ', Power);
  end; {with Opponent}
end; {procedure}

procedure Menu;
begin
  repeat
    writeln;
    writeln('(F)ight');
    writeln('(M)agic');
    write('Selection: ');
    readln(selection);
    selection := UpperCase(selection);

    randomize;

    if selection = 'F' then
    begin
      Hero.Health := Hero.Health - random(Opponent.Power + 1);
      Opponent.Health := Opponent.Health - random(Hero.Power + 1);
     end
    else if  (selection = 'M') and (Hero.Magic > 0) then
    begin
      Opponent.Health :=  Opponent.Health - 10;
      Hero.Magic := Hero.Magic - 1;
      if Opponent.Health > 0 then
        Hero.Health := Hero.Health - random(Opponent.Power + 1);
    end;
  until (Selection = 'F') or (Selection = 'M'); {until a correct selection is given}
end;

procedure Battle;
begin
   GetEnemy;

   repeat
    clrscr();
    WriteStats;
    Menu;
  until (Hero.Health <= 0) or (Opponent.Health <= 0);  {something is dead}

  if Opponent.Health <= 0 then  {opponent killed}
  begin
    writeln(Opponent.Name, ' Was Killed');
    score := score + Opponent.Power;
    sleep(1000);  {pauses the program for one second}
  end;
end;

begin    {Main Program}
  repeat
    LoadSettings;

    repeat
      Battle;
    until Hero.Health <= 0;   {until hero is killed}

    clrscr();
    writeln(Hero.Name , ' Was Killed');
    writeln('Final Score: ', score);

    repeat
      write('Play Again Y/N: ');
      readln(selection);
      selection := UpperCase(selection);  {convert to uppercase}
    until (selection = 'Y') or (selection = 'N'); {keep asking until correct selection is given}
  until selection = 'N';
end.

15. Programmation GUI Windows, Mac et Linux

Après le défrichage des notions du langage des quatorze précédents chapitres, il est temps de quitter la console et d'entrer dans le vif du sujet : la programmation GUI (Graphical User Interface).
La création d'applications GUI requiert l'utilisation des forms. Le portage d'applications entre Windows, Mac, Linux et FreeBSD est aisé.




16. Evénements et propriétés

Ce tutoriel montre comment utiliser les événements et modifier des propriétés au cours de l'exécution d'une application.




17. Programmer le Sens de la Vie

Mise en application des notions des deux précédentes vidéos, en concevant un petit logiciel à portée philosophico-humoristique.




18. Notation hongroise et création de fenêtre GUI

Cette vidéo est la 1ère partie d'un chapitre complet qui s'achève à la vidéo 21. Les sources sont rassemblés au chapitre 21.
La vidéo détaille l'utilisation de la notation hongroise dans le nommage des composants, propriétés, variables...




19. Conversions de chaînes et calculs

Cette vidéo est la 2ème partie d'un chapitre complet qui commence à la vidéo 18 et s'achève à la vidéo 21. Les sources sont rassemblés au chapitre 21.
Sont présentées les fonctions de conversion suivantes :

  • IntToStr()
  • StrToInt()
  • FloatToStr()
  • StrToFloat()





20. Boutons radio

Cette vidéo est la 3ème partie d'un chapitre complet qui commence à la vidéo 18 et s'achève à la vidéo 21. Les sources sont rassemblés au chapitre 21.
Y est présenté un type de contrôle très répandu : le bouton radio (RadioButton).




21. Gestion d'erreurs : Try...Except

Cette vidéo est la dernière partie d'un chapitre complet qui a débuté à la vidéo 18.
L'application construite sur les vidéos 18 à 20... plante. Dans cette dernière partie, vous apprenez à intercepter les erreurs à l'aide du Try...Except.



Source contenu dans cette vidéo :


22. Timer système

Passage sous Mac OS X sur cette vidéo, où est traitée l'utilisation d'un timer système. Le code est bien sûr portable vers les autres plateformes.



Sources contenus dans cette vidéo :


23. Tableaux parallèles

Dans ce tutoriel, on améliore le programme créé au chapitre 22.



Sources contenus dans cette vidéo :


24. Quick Clock Quizzer : Aperçu

Cette vidéo donne un aperçu de l'application complète, Quick Clock Quizzer, qui va être développée pas à pas jusqu'à la fin du cours.




25. Dessin dans un canvas, crayons, pinceaux et couleurs

Cette vidéo est la 2ème partie du développement de l'application Quick Clock Quizzer.
Dans ce tutoriel, vous apprenez à dessiner dans un canvas.




26. Randomisation des aiguilles de l'horloge

Cette vidéo est la 3ème partie du développement de l'application Quick Clock Quizzer.
Elle montre comment utiliser les routines randomize et random pour générer des nombres aléatoires.




27. Entrées par l'utilisateur

Cette vidéo en deux parties est la 4ème partie du développement de l'application Quick Clock Quizzer.
Sont abordés les contrôles d'entrée par l'utilisateur.






28. Son et musique

Cette vidéo est la 5ème partie du développement de l'application Quick Clock Quizzer.
Elle montre comment utiliser des fichiers wav dans une application.




29. Splash screen

Cette vidéo est la 6ème partie du développement de l'application Quick Clock Quizzer.
Elle montre comment afficher un splash screen, c'est-à-dire une fenêtre de démarrage.




30. Changer les curseurs et couper le son

Cette vidéo est la 7ème partie du développement de l'application Quick Clock Quizzer.
On continue le développement de l'application en ajoutant de nouvelles fonctionnalités.




31. Icônes

Cette vidéo est la 8ème partie du développement de l'application Quick Clock Quizzer.
Ce chapitre montre comment ajouter des icônes à une application.




32. Finalisation et propriétés

Cette vidéo est la dernière partie du développement de l'application Quick Clock Quizzer.
Elle aborde l'interception des erreurs et le réglage des propriétés de l'application.



Sources contenus dans tout le chapitre :



            

Valid XHTML 1.0 TransitionalValid CSS!

Copyright © 2010 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

 
 
 
 
Partenaires

PlanetHoster
Ikoula