IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Turbo Pascal Discussion :

[TP]dégradé de couleur


Sujet :

Turbo Pascal

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 20
    Points : 8
    Points
    8
    Par défaut [TP]dégradé de couleur
    bonjour tout le monde. J'ai essayé de refaire un truc qui correspondrait à demopal.pas d'haypo, mais je n'arrive pas à afficher sur l'écran 2 gammes différentes de couleur. Qd je change la couleur, toutes les couleurs se changent en même temps, ce qui est embêtant si j'ai envie, plus tard de faire un dégradé avec 3 couleurs.
    Pour l'instant, voila ce que j'ai : 8)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    uses crt;
     
    var  x,y,c,coeffr,coeffg,coeffb,ra,ga,ba,rouge,vert,bleu:integer;
     
     
    procedure SetColor(col,r,g,b:byte);
    begin
      port[$3c8]:=col;
      port[$3c9]:=r;
      port[$3c9]:=g;
      port[$3c9]:=b;
    end;
     
    procedure nouvellecouleur;
    var i:integer;
    begin
    if ra >2 THEN ra:=0;
    if ga >2 THEN ga:=0;
    if ba >2 THEN ba:=0;
    ra:=ra+1;
    ba:=ba+1;
    ga:=ga+1;
    coeffr:=4-ra;
    coeffg:=4-ga;
    coeffb:=4-ba;
    if coeffr>1 THEN coeffr:=0;
    if coeffg>1 THEN coeffg:=0;
    if coeffb>1 THEN coeffb:=0;
     
    end;
     
     
    begin
    asm
    mov ax, 13h
    int 10h
    end;
    ba:=1;
    ga:=2;
    ra:=3;
    repeat
    if x=319 THEN
    begin
    x:=0;
    y:=y+1;
    end;
    x:=x+1;
    if y=200 THEN y:=0;
    MEM[$a000:x+Y*320]:=X;
    if c= 62 THEN nouvellecouleur;
    c:=c+1;
    bleu:=c*coeffb;
    rouge:=c*coeffr;
    vert:=c*coeffg;
    SetColor(x,rouge,vert,bleu);
    until keypressed;
    readln;
    end.
    Merci d'avance

  2. #2
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 465
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 465
    Points : 4 312
    Points
    4 312
    Par défaut
    Il fait que tu divises 256 par le nombre de palettes que tu veux et tu obtiens le nombre de couleurs dans chaque palette. Ca veut dire que si tu veux deux dégradés, il te faut deux palettes et donc 128 couleurs par palettes. Ensuite il te faut faire le dégradé sur ces 128 couleurs.
    a+

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 20
    Points : 8
    Points
    8
    Par défaut oups
    heu... pas tré bien compris... Pourrais tu préciser par un exemple?

  4. #4
    Membre expert
    Avatar de Eric Sigoillot
    Inscrit en
    Mars 2002
    Messages
    1 212
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 212
    Points : 3 369
    Points
    3 369
    Par défaut
    Le fait est que tu utilises un mode en 256 couleurs, donc qui utilise une palette.

    Or, comme tout mode dit indexé, lorsque tu change une couleur dans la palette, le changement se reflète directement à l'écran. Ca a ses avantages (notamment pour les fondus), mais aussi pas mal d'inconvénients.

    Tu rencontres ici le principal ! Comment se limiter à 256 couleurs. Tu veux créer un dégradé. Pourquoi pas. Mais ton dégradé devra se limiter à 256 couleurs.

    Ce que voulait te dire Wormful, c'est que si tu veux créer deux dégradés en même temps, qui n'utilisent pas les même couleurs, alors il va falloir qu'ils se partagent la palette, et les 256 couleurs qui vont avec.

    Donc, pour deux dégradés qui ne se battent pas, il faudra te limiter à 128 couleurs par dégradé, car 128 * 2 = 256 !

    Il faut faire bien attention à te limiter à 256 couleurs lorsque tu crées ton dégradé, ou bien que tu crée une procédure qui ajoute des couleurs à la palette si le besoin se fait sentir. Ou alors que tu passes à un mode haute résolution !

    A+

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 20
    Points : 8
    Points
    8
    Par défaut merci
    ok merci beaucoup

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 20
    Points : 8
    Points
    8
    Par défaut neige
    De toute façon , j'ai reussi à faire un autre truc avec ce que j'avais déjà : je fais tomber la neige!!!!!. 8) Je m'explique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    uses crt;
     
    TYPE neige=record
    x,y:integer;
    i:byte;
    end;
     
    var   vitesse,b,v:integer;
          depla:array[1..10000]of neige;
     
     
    procedure parametre;
    begin
    asm
    mov ax, 03h
    int 10h
    end;
    WRITEln('vitesse? (10:trŠs rapide, 20:rapide, 30:moyen, 40:lent...');
    READln(vitesse);
    writeln('baromŠtre? (500:petite chutte, 1000:tempˆte, 2000:blizzar...');
    readln(b);
    writeln('vent de c“t‚?: (1:faible, 2:moyen, 3:‚lev‚...');
    readln(v);
    end;
     
     
     
     
    procedure position(x,y:integer;i:byte);
    begin
    mem[$a000:x+y*320]:=i;
    end;
     
    procedure setcolor(i,r,g,b:byte);
    begin
    port[$3c8]:=i;
    port[$3c9]:=r;
    port[$3c9]:=g;
    port[$3c9]:=b;
    end;
     
    procedure assigncolor;
    var j:integer;
    begin
    for j:=1 to 240 do setcolor(j,j,j,j);
    for j:=1 TO b do with depla[j] do
    begin
    x:=random(320);
    y:=random(200);
    i:=random(250);
    position(x,y,i);
    end;
    end;
     
    procedure deplace;
    var j:integer;
    begin
    for j:= 1 TO b DO WITH depla[j] DO
    begin
    position(x,y,0);
    if i<50 THEN
    BEGIN
    y:=y+1;
    x:=x+v;
    end
    else
     
     
     
     
    if i<100 THEN
    BEGIN
    Y:=Y+2;
    x:=x+v;
    end
    else
     
     
     
    if i<150 THEN
    begin
    Y:=Y+3;
    x:=x+v;
    end
    else
     
    if i<200 THEN
    begin
    Y:=Y+4;
    x:=x+v+1;
    end
    else
    begin
    y:=y+5;
    x:=x+v+1;
    END;
    if y> 199 THEN inc(y,0);
    Position(x,y,I);
    end;
    end;
     
     
    begin
    parametre;
    asm
    mov ax, 13h
    int 10h
    end;
    RANDOMIZE;
    assigncolor;
    repeat
    deplace;
    delay(vitesse);
    until keypressed;
    end.


    pas mal? hein 8)

  7. #7
    Membre averti Avatar de charly
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 329
    Points : 358
    Points
    358
    Par défaut
    pas mal du tous , bravo !!!!
    mainteant un detaille ou deux , esseye de faire une inerface diretemment sans passer par se genre de question genre +- pour le vent <-->pour la direction ect .... avec un text qui indique tous sa ... enfin c est un avie perso !!
    sinon , une question , je n arrive pas a voire comment tu rafraichis ton ecran ...

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 20
    Points : 8
    Points
    8
    Par défaut ecran
    pkoi raffraichir l'écran? Il a été Initialiser, en quoi consiste le rafraichissage( ça sonne bizzare ce que g ecri)
    par contre ça me fait très plaisir que tu as trouvé ça bien ): . Ya pas 2 semaines je connaissais presque rien de ce que je viens de faire, et si j'avais regardé mon code, j'au rai rien compris...

    ok c bon j'ai reussi
    merci pour ton conseil

  9. #9
    Membre expert
    Avatar de Eric Sigoillot
    Inscrit en
    Mars 2002
    Messages
    1 212
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 212
    Points : 3 369
    Points
    3 369
    Par défaut
    Le rafraîchissement se fait dans Deplace. Il réaffiche tout l'écran en changeant la couleur.
    Comme la palette a été initialisée au départ, il suffit de placer un pixel noir.

    A+

  10. #10
    Membre actif

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    107
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 107
    Points : 279
    Points
    279
    Par défaut
    pour le premier programme, il est pas mal !!!

    surtout en bidouillant, et en changeant des trucs au niveau du :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SetColor(x,rouge,vert,bleu);
    quand on fait rouge+150, vert+200, bleu+500
    ça donne un bon resultat , en tout cas, j'aime ces couleurs :-P

    @++ Mathieu

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 20
    Points : 8
    Points
    8
    Par défaut moi aussi
    moi aussi mon premier programme m'a beaucoup plut, (Mais je suis tombé dessus par un bon coup de chance) lol

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Une erreur 233 de ms sql server
    Par Hokage dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 05/10/2009, 18h40
  2. Erreur 233 sous sql server
    Par brajae85 dans le forum Oracle
    Réponses: 3
    Dernier message: 18/05/2009, 17h12
  3. Réponses: 2
    Dernier message: 05/10/2004, 23h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo