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 :

Jeu "Typing Maniac" [Turbo Pascal]


Sujet :

Turbo Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2010
    Messages : 5
    Par défaut Jeu "Typing Maniac"
    Bonjour,

    J'ai un projet scolaire à faire pour la semaine prochaine (bien sûr, il faut toujours être dernière minute) sur Turbo Pascal. J'ai décidé de faire un jeu semblable à Typing Maniac sur Facebook.

    http://apps.facebook.com/typing-maniac/

    En résumé, un mot défile d'en haut jusqu'en bas et il faut taper le mot avant qu'il touche le bas. Pour faire moins compliqué, j'ai décidé de seulement faire défiler une lettre plutôt qu'un mot.

    Pour faire une lettre random:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    var s,lettre:string;
         num,a,b,c,:integer;
     
    procedure lettrerandom;
     
    begin
     
    randomize;
    s:=``;
    num:=random(26);
    lettre:=chr(ord(`A`)+num);
    s:=s+lettre;
    end;
    Lettre qui défile:
    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
    procedure jeu;
     
    repeat
     
    lettrerandom;(*générer la lettre random*)
    randomize;
    a:=random(500); (*l'axe des x random pour la lettre*)
    b:=50; (*l'axe des y*);
    c:=0; (*nombre de fois que le jeu répète*)
     
    repeat
     
    delay(10);
    clrscr;
    a:=a;
    b:=b+5;
    gotoxy(a,b);
    write(s); (*lettre générée*)
    m:=readkey;
     
    if m=s then b:=430 and clrscr; (*la lettre disparait et on recommence*)
     
    until b=430;(*la lettre atteint le bas de l'écran*)
     
    c:=c+1; 
     
    until c:=10; (*le jeu se fait 10 fois*)
     
    until c=10;
    Problème

    1) Je ne peux pas faire défiler la lettre car le readkey demande de taper une letttre.

    2) Incapable de faire défiler plusieurs lettres à la fois sur l'écran.

    3) Le m=s ne fonctionne pas. Incapable de faire readkey pour la lettre générée.

    Je réalise maintenant que mon programme est très complexe...

    Des solutions?

  2. #2
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    bonjour,

    pense à ajouter des balises "code" autour de ton code

    alors ça fait longtemps que j'ai pas touché à TP mais tu dois avoir la fonction Keypressed qui te permet de savoir si une touche a été pressée avant de faire appel à Readkey...et si mon souvenir est bon ReadKey renvoie #0 lors de la première lecture si c'est une touche "étendue" genre F1...et il faut alors faire une seconde lecture.

    dans ton code "m" ne semble pas être déclaré

    "s" devrait être un Char et non un string

    pour faire défiler plusieurs lettres c'est le même principe avec des tableaux à la place des variables simples et une boucle sur la longueur du tableau pour traiter chaque lettre

    d'autre part, je n'utiliserais pas un clrscr mais je mettrais juste un espace à l'ancienne position de la lettre...car c'est tout ce dont tu as besoin pour effacer l'écran ça te permet même d'afficher un score ou un titre sans qu'il soit effacé à chaque fois
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2010
    Messages : 5
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message

    alors ça fait longtemps que j'ai pas touché à TP mais tu dois avoir la fonction Keypressed qui te permet de savoir si une touche a été pressée avant de faire appel à Readkey

    "s" devrait être un Char et non un string

    pour faire défiler plusieurs lettres c'est le même principe avec des tableaux à la place des variables simples et une boucle sur la longueur du tableau pour traiter chaque lettre

    d'autre part, je n'utiliserais pas un clrscr mais je mettrais juste un espace à l'ancienne position de la lettre...car c'est tout ce dont tu as besoin pour effacer l'écran ça te permet même d'afficher un score ou un titre sans qu'il soit effacé à chaque fois
    Ok bon...je sais que c'est beaucoup demander mais pourriez-vous tout simplement retranscrire le code dont j'ai besoin? J'ai montré votre post à mon professeur de TP, mais il est naze donc il comprend pas chose. Si je fais "if Keypressed..." alors la touche reste enfoncée donc la boucle va toujours se terminer aussitôt

    Ensuite, pourquoi mettre un "s" en char? Et je ne peux pas write un Char non plus, non? Je ne comprends pas non plus bien le tableau de variables et le Clrscr qu'on peut remplacer par un espace dans l'ancienne position?

    Bref, quelques codes me seront bien utiles.

    Merci d'avance!

  4. #4
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    Citation Envoyé par halfguru Voir le message
    Ok bon...je sais que c'est beaucoup demander mais pourriez-vous tout simplement retranscrire le code dont j'ai besoin? J'ai montré votre post à mon professeur de TP, mais il est naze donc il comprend pas chose. Si je fais "if Keypressed..." alors la touche reste enfoncée donc la boucle va toujours se terminer aussitôt

    Ensuite, pourquoi mettre un "s" en char? Et je ne peux pas write un Char non plus, non? Je ne comprends pas non plus bien le tableau de variables et le Clrscr qu'on peut remplacer par un espace dans l'ancienne position?

    Bref, quelques codes me seront bien utiles.

    Merci d'avance!
    et quelques efforts également
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  5. #5
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Par défaut
    Citation Envoyé par halfguru Voir le message
    Je réalise maintenant que mon programme est très complexe...

    Des solutions?


    Tu as des problemes de syntaxe dans ton programme actuel. L'acffectation se fait avec l'operateur :=, et l'operateur = est utilisé pour les tests.


    L'instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if m=s then b:=430 and clrscr;
    s'ecrit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if (m=s) then
     begin
      b := 430;
      clrscr;
     end;
    La procedure lettrerandom serait mieux en fonction pour eviter des effets de bord éventuels.

    Sinon pour les reste, c'est comme l'a dit Paul TOTH.

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2010
    Messages : 5
    Par défaut
    Ok! J'ai mis "s" comme une variable Char comme vous me l'avez conseillé. De plus, j'ai utilisé le Keypressed et la lettre défile comme prévu!


    Lettre qui défile:
    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
    procedure jeu;
     
    repeat
     
    lettrerandom;(*générer la lettre random*)
    randomize;
    a:=random(500); (*l'axe des x random pour la lettre*)
    b:=50; (*l'axe des y*);
    c:=0; (*nombre de fois que le jeu répète*)
     
    repeat
     
    delay(10);
    clrscr;
    a:=a;
    b:=b+5;
    gotoxy(a,b);
    write(s); (*lettre générée*)
     
    delay(20);
    setcolor(0);
    write(s);
     
    if Keypressed then
     
    begin
     
    m:=readkey;
     
    if (m=s) then 
     
    begin
    b:=430; 
    clrscr; (*la lettre disparait et on recommence*)
    end;
    end;
    until b=430;(*la lettre atteint le bas de l'écran*)
     
    c:=c+1; 
     
    until c:=10; (*le jeu se fait 10 fois*)
     
    until c=10;
    Il ne me reste plus qu'à savoir comment faire pour détecter les lettres majuscules et minuscules. Deusio, je veux mettre maintenant un scoreboard, mais le Clrscr gâche tout. Pour l'instant, j'utilise une petite astuce qui consiste à réécrire par-dessus le texte avec la couleur du background (noir) mais cela crée un petite clignotement désagréable xD. J'aimerai effectuer ce qu'on m'a recommander mais, je n'ai pas bien saisi:

    d'autre part, je n'utiliserais pas un clrscr mais je mettrais juste un espace à l'ancienne position de la lettre...car c'est tout ce dont tu as besoin pour effacer l'écran ça te permet même d'afficher un score ou un titre sans qu'il soit effacé à chaque fois
    Comment est-ce possible de déplacer l'ancienne position d'un write(s)? Pourquoi ça n'existe pas un Clrscr dans un zone précise!? XD

    Et aussi, je suis désolée d'avoir été profiteur en vous demandant de tout faire le travail.

  7. #7
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    //clrscr;
    // a:=a; ???!!!
    gotoxy(a,b);
    write(' '); (* ancienne lettre effacée*)
    b:=b+5;
    gotoxy(a,b);
    write(s); (*lettre générée*)
    sinon il y a la fonction Window()
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2010
    Messages : 5
    Par défaut
    Ça ne fonctionne pas avec OutTextXY(a,b,s)

  9. #9
    Membre Expert
    Avatar de krachik
    Inscrit en
    Décembre 2004
    Messages
    1 964
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 964
    Par défaut
    OutTextXY s'utilise en mode graphique, pas en mode texte

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2010
    Messages : 5
    Par défaut
    J'ai remis mon travail aujourd'hui

    Merci beaucoup les gars pour votre aide!!

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

Discussions similaires

  1. Alias avec différents types de quote ?
    Par Djobird dans le forum Administration système
    Réponses: 2
    Dernier message: 14/02/2011, 17h37
  2. UPDATE en ajoutant un 0 sur un champ de type "char"
    Par doum2 dans le forum Requêtes
    Réponses: 1
    Dernier message: 08/03/2006, 14h22

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