Jeux sur les abdos pascal. Size1, Size2, Size3, Size4 sont des variables de type entier qui stockent la zone allouée aux variables dynamiques. Plusieurs captures d'écran du programme, avec une brève description

Un article de nostalgie pour les jouets que nous avons écrits pour nous-mêmes dans notre enfance.
En parcourant l'App Store, à la recherche d'un autre jouet pour mon iPad, je suis tombé sur le vieux jouet « Pilot Brothers ». Je l'ai immédiatement acheté, installé et terminé en une seule fois (probablement 3 fois déjà). Mais je me suis surtout attardé sur l'épisode du réfrigérateur. Cette énigme me dérange vraiment.

Et soudain, je me suis souvenu que pendant mes années d'école, après avoir fouillé le réfrigérateur, le puzzle m'avait tellement submergé que j'ai écrit mon propre jouet en Pascal - un émulateur de puzzle. Mais il ne se contentait pas de répéter le jeu original, il vous permettait de choisir la taille du terrain, disposait d'une aide, de la possibilité de sauvegarder et de continuer le jeu à partir de l'endroit précédent après la sortie.

Après avoir récupéré d'anciennes sauvegardes, j'ai retrouvé le jeu original. Je l'ai lancé dans dosbox et j'ai disparu du monde extérieur pendant quelques heures.


Puzzle original, notez la colonne de gauche ouverte et la position des portes

À quoi ça sert ?

L’essence du puzzle est assez simple. Il y a un champ de vannes 4 par 4 pièces ; il faut mettre toutes les vannes du réfrigérateur en position horizontale. "Mais il y a une nuance"(c) : lorsque vous tournez une vanne, toutes les vannes de la colonne et de la rangée dans laquelle se trouve cette vanne tournent avec elle. Et c'est là que le plaisir commence !
Lorsque je me suis assis pour la première fois pour jouer à ce puzzle dans la quête originale, en le jouant à l'école, j'ai probablement mis 40 minutes pour le terminer, rien de moins. Mais je l'ai tellement aimé que je l'ai joué, joué et joué...
Mais je voulais plus : la possibilité de sauvegarder le gameplay, de générer différents niveaux et de modifier la taille du champ afin de comprendre l'algorithme du jeu.
Puis j’ai réalisé que si j’aime le puzzle et que je veux essayer différentes échelles de terrain de jeu, alors je ne devrais pas attendre la météo au bord de la mer. Il n'y a qu'une seule issue : mettre en œuvre ce jeu vous-même.

Eh bien, commençons !

Je ne pourrai pas préciser la date exacte de la création du jeu, mais c’est bel et bien la fin de l’école, le début de l’université. Dans ces années-là, je parlais couramment Pascal. À l'institut, j'ai résolu des problèmes pour de l'argent, aidé à rédiger des cours et, en général, c'était un merveilleux langage logique. Par conséquent, il a été décidé d’écrire le jouet dessus.
Malgré le fait que je savais comment implémenter des graphiques sous DOS, j'ai décidé de ne pas créer d'application graphique. Cela est dû au fait que ce serait terriblement bogué et lent car, premièrement, je voulais implémenter cette application le plus rapidement possible, et l'implémentation des graphiques prendrait beaucoup de temps ; et deuxièmement, j'aime mieux la vue texte. Cependant, avec le recul, il me semble que j'aurais fait mieux avec des graphiques et une prise en charge supplémentaire de la souris.
La tâche était simple : créer un jeu simple et élégant qui ne serait pas gênant à montrer. Parmi les fonctionnalités : l'aide, la possibilité de sauvegarder et après le démarrage du jeu de continuer à partir du moment où il a été arrêté, la possibilité de modifier la taille du terrain de jeu. Plus un peu de couleur et de grâce.

Mise en œuvre

Je n'analyserai pas complètement le code source et la logique de l'ensemble du programme, car ils sont évidents, et ce qui ne l'est pas ressort clairement du code. Mais je m'attarderai sur quelques points plus en détail.
La base du jeu est un tableau de texte d'éléments NxN, où N peut être égal à 2, 4, 8 et 16. Le tableau est rempli de seulement deux caractères X et Y. La position du curseur est la position de l'élément actuel du tableau. moi et j. Lors de l'inversion d'un élément du tableau, X est remplacé par Y et Y par X dans la colonne et la ligne du tableau. Eh bien, en plus, il existe des raccourcis clavier (F1-F4, F10) qui vous permettent d'appeler Aide, Enregistrer/Charger, Créer et Quitter. Tout est clair ici, et comment le mettre en œuvre est simple et nous n'y reviendrons pas en détail.

Le plus grand intérêt, d’un point de vue pédagogique, est la procédure ÉCRITURE.*

* - notez pourquoi c'est une erreur

À cette époque, pour économiser de l’argent, les messages SMS étaient rédigés en translittération. Comment se souvient-on de la lettre " Ch" est remplacé par la combinaison " merde", mais pour gagner de la place, je l'ai remplacé par une lettre inutilisée avec une orthographe similaire " W" C'est de là que vient le nom Frappe(Fonte). De même la lettre « X” (X) a remplacé la lettre « X» (russe « Ha”).

Depuis que j'ai décidé d'utiliser le mode texte pour le jeu, j'avais besoin d'une lettre pour remplacer la valve. Qu'est-ce que cela a à voir avec une lettre qui montrerait la vanne en position verticale et horizontale ? Les seuls candidats adaptés à ces fins sont les lettres latines « N » et « Z ». La lettre « Z » ressemble à la lettre N posée sur le côté, seulement étirée.
J'ai essayé cette option et je n'en étais pas satisfait. Et j’ai réalisé que je devais faire quelque chose par moi-même, une sorte de solution alternative. Je pensais déjà écrire une version graphique lorsque je suis tombé sur le programme Pascal « Matrix » de l'auteur Abrarov A.M. . Le programme commence de la même manière que le premier "Matrix" - en affichant une ligne sur l'écran, en recherchant du code. Et puis les symboles hiéroglyphiques commencent à pleuvoir. De plus, ceci n'est implémenté qu'en mode texte.

Un petit programme pédagogique sur le programme Matrix.pas

Le programme était très beau et élégant pour l’époque. Et puis ça m’a fait beaucoup de plaisir. Le plus intéressant, c'est que la police complète y est implémentée, pour 208 caractères ! Mais je suppose que l'auteur a pris la mise en œuvre d'un programme comme notre "russifier", uniquement pour les hiéroglyphes, et l'a refait pour lui-même.

Certes, maintenant, pour que le programme fonctionne normalement, même dans dosbox, vous devez réduire tous les délais de 10 fois (délai), sinon vos petits-enfants attendront la fin des travaux. Comme j'ai la flemme de refaire le programme, il a un intérêt purement académique. Ou peut-être que quelqu'un le refaire et le montrer au monde, le logiciel est magnifique (d'autant plus que je donne un lien vers les sources). Et si tout à coup son auteur lit ce post, alors je lui transmets mes mots de gratitude.

Le plus important est que dans ce programme, « krakozyabr » a sa propre police ! Et c'est chargé. J'ai emprunté cette procédure de chargement, en la modifiant bien sûr un peu.
Quelques mots sur le travail avec les polices.

Sous MS-DOS, le BIOS prend en charge l'utilisation des polices bitmap. Les fonctions du BIOS vous permettent d'obtenir et d'installer des polices personnalisées, ainsi que d'obtenir des polices à partir du générateur de caractères de la carte vidéo. Toutes les polices installées ont la même largeur de 8 points et la hauteur peut avoir trois valeurs fixes - 8, 14 ou 16 points. La valeur spécifique de la hauteur de police est déterminée par le mode vidéo pour lequel la police est chargée. Une hauteur de police de 8 points correspond au mode vidéo 50/43 lignes, une hauteur de police de 14 points correspond au mode vidéo 25 lignes pour EGA et une hauteur de police de 16 points correspond au mode vidéo VGA 25 lignes.

Nous utiliserons le mode vidéo 16 couleurs 40x25 caractères. Dans ce mode vidéo, chaque caractère est un tableau de 8x16 points. En termes simples, chaque caractère représente 16 octets, où dans un octet un bit défini sur un signifie qu'il est de couleur noire. Si vous avez la tête en désordre en ce moment, ne vous inquiétez pas, cela deviendra plus clair plus tard.
Pour désigner une vanne fermée (verticale), la lettre « X » (lettre majuscule latine « X ») a été choisie et pour une vanne horizontale ouverte, la lettre « Y » (lettre majuscule latine « Y ») a été choisie. Ces lettres ont été choisies pour plusieurs raisons. Premièrement, ils sont familiers grâce au programme scolaire et à l’oreille. Deuxièmement, et c'est plus important, ils sont alignés dans la table de caractères ASCII (position 88d et 89d, respectivement), ce qui simplifie leur remplacement. Et les latins ont été choisis pour que le menu puisse être réalisé en russe, sans retélécharger la police.
Nous avons donc décidé des symboles, passons maintenant à leurs vêtements, c'est-à-dire la police. Nous prenons une feuille de papier dans une cage, créons un champ 8x16 dessus et commençons à dessiner un symbole pour une vanne horizontale puis verticale. Puisque la porte doit être la même dans les états vertical et horizontal, nous n’utiliserons que les 8 premières lignes pour obtenir le carré. Et puis on dessine deux valves dans ce champ, verticalement et horizontalement. Cela devrait donner quelque chose comme ça


Police à deux valves

Ensuite, nous notons le carré noir par un et le blanc par zéro. Et nous formons 8 octets. Ensuite, nous les convertissons au format décimal et formons un tableau. D'abord 8 octets d'un caractère, puis 8 octets de zéros (nous avons laissé le sous-sol vide), répétez cette procédure pour le deuxième caractère.


Tableau de codes binaires, et converti au format décimal

En conséquence, nous obtenons l’en-tête de procédure suivant :

Procédure WRIFT ; (Zagruzka shrifta ("pesochnye chasy")) Const Font: tableau d'octets = (129,195,231,153,153,231,195,129,0,0,0,0,0,0,0,0, 255,102,36,24,24,36,102,255,0,0, 0,0,0,0,0,0); Var SegScr : Mot ;

OfsScr:Mot; screen1 : Tableau de polices absolues d’octets ; La police est un tableau de deux caractères de porte (chaque caractère sur sa propre ligne). La variable la plus intéressante est le tableau screen1 - un tableau qui se situe à l'adresse absolue de la variable Font (directive

absolu

Comme le montrent clairement les lignes ci-dessus, nous chargeons le segment ES dans le registre ES et le décalage d'adresse de l'emplacement de notre police dans le registre BP. Avec la commande mov bx,1000h nous disons que nous avons 16 lignes dans la police (le nombre 10h=16d est chargé dans BH, et BL=0 Ensuite, nous chargeons le numéro du caractère dans le registre DX, à partir duquel nous partons). pour changer la police. Et en CX - le nombre de caractères à remplacer. Nous chargeons le registre AX dans le numéro de fonction du BIOS pour modifier la police et appelons l'interruption du BIOS. Ensuite, nous restaurons le registre BP et définissons le mode de la carte vidéo de la même manière. Plus de détails sont décrits ici : shackmaster.narod.ru/fonts.htm. Pour une meilleure compréhension de la structure des polices, il serait préférable de lire ce site.

De cette manière simple, vous pouvez remplacer la police entière sous DOS par la vôtre. Pour décharger une police, utilisez la procédure de restauration :

Restauration de la procédure ; (Sbros shrifta) Début asm mov ax,3 int 10h Fin ; Fin ; (Restaurer)

Qui est exécuté lorsque le menu est affiché et que le programme se termine.

À propos, pour référence, les soi-disant « Russifiers » fonctionnaient sous DOS de la même manière. Ils ont simplement remplacé la police actuelle par une police avec des lettres russes.

Une des blagues

Un de mes amis, plus précisément alors qu'il étudiait la programmation en Borland C++, a créé une police sous la forme MPH, en utilisant également un exemple de « The Matrix ». Ceux. J'ai simplement remplacé tous les caractères par un caractère MPH. Norton Commander avait l'air effrayant ! C'est dommage qu'il n'y ait plus de photos de cette époque.
Si un tel lien de programme pouvait être lancé en informatique, l'enseignant en serait heureux.

Modifications aujourd'hui

En fait, je ne propose pas le jeu sous la forme dans laquelle il a été écrit il y a de nombreuses années. Il a révélé quelques bugs très désagréables :
1. Le programme plantait simplement si le fichier GAME.SAV n'était pas détecté ;
2. Le générateur de nombres aléatoires n’a pas été initialisé, il génère donc constamment le même niveau.
De plus, en raison de problèmes d'encodage, j'ai créé une deuxième version du jeu, entièrement en anglais. Et si vous lisez le code source dans un éditeur non compatible DOS, je vous recommande d'utiliser ses sources - il n'y aura aucun problème d'encodage.

C’est tellement gratifiant que DOSbox soit partout ; j’ai personnellement édité la majeure partie du programme sur un iPad dans le métro. Pouvez-vous imaginer à quel point Pepper est drôle avec un iPad et Borland Pascal ouvert dessus ?


Le bon vieux Borland Pascal sur iPad

Les montants ont donc été rapidement corrigés.

Plusieurs captures d'écran du programme, avec une brève description

Pour ceux qui n’ont pas l’opportunité ou l’envie de jouer au jeu, voici quelques captures d’écran clés du jeu.
Après le lancement, le terrain de jeu s'ouvre avec la dernière partie sauvegardée


Commencer

Le curseur est mis en surbrillance et clignote.

Si vous appuyez sur F1, vous pouvez obtenir cette aide simple




Aide

Pour générer un niveau, appuyez sur F4 et entrez dans ce menu


Menu de génération de niveau

Eh bien, après la victoire, le jeu vous félicitera


Félicitations pour votre victoire

Et il attendra qu’une touche soit enfoncée. Dans ce cas, la progression du jeu n'est pas enregistrée.

Comment installer et jouer

En raison des particularités et de l'application du chargement des polices, le jouet ne fonctionne qu'en tube DOS pur. Par conséquent, pour que cela fonctionne, vous devez utiliser dosbox ou un programme similaire.
L'installation est triviale. Téléchargez l'archive avec le programme. Installer boîte à dos. Et, si vous le souhaitez, vous pouvez le russifier, la méthode pour Linux est ici : old-game.org/?p=1717.
En principe, tous ces fichiers peuvent être utilisés pour Windows : pour ce faire, le fichier russian.txt est placé dans le dossier contenant le programme et la configuration, et le raccourci pour Dosbox est modifié. Le chemin de raccourci devrait ressembler à : " "C:\Program Files\DOSBox-0.74\DOSBox.exe" -userconf" Nous supprimons "-userconf" et votre configuration fonctionnera.

Dans Ubuntu, je fais un clic droit sur le programme et je sélectionne l'exécuter dans dosbox, mais je ne sais pas comment le faire sous Windows, car aucune des machines ne l'a. Eh bien, en dernier recours, le chemin d'accès au jeu est monté à l'aide de la commande mount path.
Vous avez le choix entre les versions russe et anglaise. Vous n'avez pas à vous soucier de la russification et des hémorroïdes avec les configurations, mais tirez simplement sur la version anglaise. Il n'y a pratiquement aucune différence entre eux. Bien que personnellement, en tant qu'auteur, je préfère la version russe.
Le contrôle s'effectue à l'aide des flèches du clavier, la sélection et l'inversion à l'aide de la touche insertion ou d'un double-clic sur la barre d'espace (oui, il y a un montant ici). Si la position reste soudainement bloquée, appuyez une fois sur la barre d'espace.

N'oubliez pas que la dernière partie sauvegardée est chargée à chaque fois. Pour en générer un nouveau, appuyez sur F4. Je recommande de commencer avec un terrain 4x4. Je joue actuellement en 8x8, et j'ai toujours peur de passer au 16x16. Parce que je termine un 4x4 en moins d'une minute, 8x8 minutes en 7-10, et j'ai même peur d'imaginer 16x16.
N'oubliez pas que le champ de chargement avec l'inscription HABR et mon pseudo (photo dans l'entrée de l'article) disparaîtra après avoir sauvegardé ou quitté légalement. Il est stocké dans un fichier JEU.SAV. Si vous souhaitez restaurer, remplacez ce fichier par le fichier de l'archive.

Champ spécifiquement pour habr

Je ne voulais pas simplement lancer le jeu, même s’il était terminé et terminé pour le hub. Je voulais une sorte de truc. Et j'ai décidé de faire une inscription dans le plus grand champ 16x16.
Le format du fichier de sauvegarde est simple : vient d'abord la taille du champ, par exemple le chiffre 16, retour chariot, puis 256 (pour un champ 16x16) caractères X et Y qui composent le motif du champ, et à la fin le nombre de Y dans le champ (une sorte de somme de contrôle).
Pour ce faire, j'ai créé un tel champ dans OF Calc et fait une inscription dans les cellules en couleur. Et puis il a inscrit les lettres X et Y en conséquence.

Préparation pour le terrain.

Ensuite, je l'ai enregistré au format CSV. Suppression de tous les séparateurs. J'ai calculé le montant de Y (c'est très simple, vous faites une recherche dans OF Writer, remplacez par et remplacez Y par quelque chose, il vous indique le nombre de remplacements - c'est le nombre que vous recherchez). J'ai d'abord mis le chiffre 16, le retour chariot et à la fin le nombre de joueurs. Vous pouvez juger vous-même du résultat :).

Inconvénients de la version actuelle du programme.

J'ai écrit la version actuelle... Il est peu probable que je réécrive le programme et l'améliore, car il est déjà terriblement obsolète. Mais d'un autre côté, dosbox peut désormais être placé presque sur une lampe de poche, afin qu'il puisse trouver une nouvelle vie, et peut-être qu'il est logique de réécrire et de corriger les principales lacunes.

Donc:
1. Le premier inconvénient, et le plus désagréable, réside dans les mauvais contrôles. Tout d'abord, l'inversion se fait à l'aide de la touche Inser ou de la double barre d'espace. De plus, si vous appuyez sur la barre d'espace un nombre impair de fois, le programme « colle » jusqu'à ce que vous fassiez un nombre pair d'appuis. C'est ennuyeux.
2. Le deuxième inconvénient majeur est le rendu de l'intégralité du jeu à l'aide des fonctions write/writeln. A chaque événement, l'écran est redessiné. Lorsqu'on joue sur un terrain 16x16, des ralentissements et des flashs de rendu sont déjà perceptibles. De plus, cette approche a compliqué la logique du programme et sa résolution constitue désormais un énorme problème.
Il était nécessaire d'implémenter le rendu à l'aide de la fonction goto(x;y) ; Il serait alors possible de modifier un seul caractère sans redessiner tout l'écran.
3. Le jeu demande simplement la prise en charge de la souris. Encore une fois, la prise en charge de la souris doit être implémentée conjointement à l'étape 2, afin que vous puissiez « capturer » avec précision les coordonnées.
4. Un bug mineur qui découle du point 2 - lorsque vous descendez dans le coin inférieur droit, un symbole sort du cadre. J'ai essayé de le réparer et j'ai réalisé qu'il était plus facile de réécrire complètement cet emplacement de rendu que de comprendre comment il fonctionne.

Qu'aimeriez-vous faire

Bien sûr, j'aimerais une telle application pour Android ou iPad. Pour que vous puissiez y jouer avec votre doigt. Ou, si ce n’est pas une application, alors un jouet basé sur un navigateur (mais qui fonctionne sous Android et iOS). Pour qu'il y ait un beau menu et une navigation facile. Il y avait un tableau des dossiers. Il y avait un compteur de temps que vous pouviez afficher avec vos amis. Il y avait également des statistiques permettant d'estimer le temps et la vitesse moyens de l'habileté.
En général, une énorme envolée pour la créativité, avec un manque total de temps libre pour étudier la programmation de ces appareils. D'un autre côté, dosbox est partout, et il sera probablement difficile d'atteindre une portabilité plus universelle, et peut-être est-il logique de terminer ce programme ? Comment pensez-vous?

Résultats...

Le but de l'article n'est pas de montrer à quel point je suis génial, mais simplement de me rappeler comment c'était. Presque chacun d’entre nous a sûrement écrit quelque chose comme ça dans son enfance. Ce n’est pas un programme très compliqué et chaque élève peut l’écrire avec suffisamment de persévérance. Il s'agit plutôt d'un article de réminiscence.
J'utilisais beaucoup l'assembleur dans les programmes. J'aimais « parler » directement au matériel, sans intermédiaires. Je sentais mieux la voiture. Et même alors, pour AVR j'ai écrit exclusivement en assembleur. Et maintenant, je ne comprends pas comment fonctionne un ordinateur. Bien sûr, j’imagine les blocs de base, etc., mais je ne connais pas le détail, et le plus drôle, c’est que personne ne le sait !
Et maintenant... Les langages d'un niveau d'abstraction élevé et ultra-élevé nous obligent généralement à ne pas réfléchir à comment et où le code est exécuté. C'est sans aucun doute une bonne chose, car cela vous permet de vous concentrer directement sur la tâche, mais d'un autre côté, ce charme chaleureux de lampe du travail avec du matériel disparaît...

Liste de références et liens :
1. Description de la façon de télécharger une police pour DOS shackmaster.narod.ru/fonts.htm
2. Un excellent ouvrage de référence sur l'assembleur, qui m'a permis de comprendre comment travailler avec les fonctions du BIOS, et bien sûr avec le matériel informatique : « Programmation au niveau matériel : un ouvrage de référence spécial ». Koulakov
3. Émulateur DOS dosbox www.dosbox.com/download.php?main=1
4. Programme et sources narod.ru/disk/65499856001.6f143511c7c3c2ad7866f07008d8db29/INVERTOR.zip.html
5. Sources du programme « Matrix » narod.ru/disk/65499898001.a6c953f20e2ee023bd00e3518e22fea8/Matrix.pas.html

P.S. Ouf, j'ai probablement passé quelques jours à me souvenir et à rechercher sur Google comment j'ai créé cette police. Il y a un code, ça marche, mais je ne me souviens pas et je ne comprends pas comment.
P.P.S. Si les gens sont intéressés, j'ajouterai une vidéo montrant comment je termine un champ 4x4 en moins d'une minute (en utilisant le réfrigérateur Pilot Brothers comme exemple).
P.P.P.S. J'apprécierais tout commentaire sur l'orthographe et la ponctuation envoyé par message privé !

Seuls les utilisateurs enregistrés peuvent participer à l'enquête. Veuillez vous connecter.

Un programmeur débutant ne devrait pas immédiatement commencer à écrire un programme de jeu complexe à plusieurs niveaux en Pascal. Vous devriez commencer par un jeu de logique ou de mathématiques avec une interface texte. En acquérant progressivement de l'expérience, vous pouvez passer à travailler sur des projets plus importants.

Instructions

  • Commencez à travailler sur le programme avec le titre et la liste des plug-ins utilisés : programme reshiprimer utilise crt ;
  • Indiquez au compilateur quelles variables seront incluses dans le programme :vara,b,c:integer;d:string;Ici a et b sont des termes, c est la somme, d est la réponse à la question de savoir si l'utilisateur souhaite continuer jouant.
  • Marquez le début du programme et la boucle infinie, et initialisez le générateur de nombres aléatoires : beginrandomize ; while 0=0 dobegin
  • Programmez la génération de deux nombres aléatoires compris entre 0 et 1000 :a:=round(random(1000));b:=round(random(1000));
  • Montrez à l'utilisateur un exemple qu'il doit résoudre, puis demandez le résultat : writeln("Combien cela coûtera"),a,("+"),b,("?");readln(c);
  • Dites à l'utilisateur s'il a résolu l'exemple correctement : if a+b=c then writeln("Correct!") else writeln("Wrong!);
  • Demandez à l'utilisateur s'il souhaite jouer davantage : writeln("Allons-nous jouer plus loin ?"); readln(d);
  • Si la réponse est négative, terminez le programme : if upcase(d)"Y" then halt(0);
  • Terminez d'abord la boucle, puis le programme lui-même : endend Faites attention au point après la deuxième instruction de fin.
  • Lancez le programme en appuyant sur Ctrl+F9. Le premier exemple sera affiché à l'écran. Faites le calcul dans votre tête et entrez la réponse. La machine vous dira immédiatement si le problème est résolu correctement. Il vous sera alors demandé si vous souhaitez continuer à jouer. Répondre Y ou y entraînera l'affichage de l'exemple suivant et la saisie de toute autre lettre mettra fin au programme.
  • Une fois que le jeu fonctionne correctement, commencez à l’améliorer. Par exemple, ajoutez un effacement d'écran avant que chaque nouvel exemple ne soit affiché avec la commande cls. À l’aide de la procédure textcolor, faites apparaître le texte dans différentes couleurs. Réfléchissez à la manière dont vous pouvez forcer le programme à modifier automatiquement la complexité des exemples : si les réponses sont correctes, compliquez-les, et si elles sont incorrectes, simplifiez-les. Pour diversifier le jeu, ajoutez une fonction permettant de générer des exemples pour diverses opérations mathématiques.
  • Aujourd’hui, les jeux simples, sans graphismes ni effets sonores, connaissent une renaissance. En les jouant, l'utilisateur se concentre sur l'intrigue et non sur les techniques artistiques. Le langage Pascal est bien adapté pour créer de tels jeux.

    Instructions

  • Téléchargez le compilateur du langage Pascal à partir de la page suivante - http://edn.embarcadero.com/article/20803. Lisez les conditions d'utilisation de ce progiciel, puis installez-le.
  • Essayez de créer un jeu dans lequel le joueur doit deviner un nombre compris entre 0 et 100. Tout d'abord, entrez le nom du programme : programme ugadayka ;
  • Connectez le module CRT : utilise crt ;
  • Notons les variables comme suit :var
  • zagadka,mnenie,popytki:entier;

  • Démarrez le programme en effaçant l'écran et les variables, et en attribuant une valeur pseudo-aléatoire au nombre masqué : commencer
  • zagadka:=int(rnd*100);

  • Demandez à l'ordinateur de demander à l'utilisateur ce qu'il pense être le numéro caché jusqu'à ce qu'il le devine : while not mnenie=zagadka do
  • popytki:=popytki+1;

    writeln("Numéro de tentative ",popytki,".");

    write("Selon vous, quel numéro est caché ?");

    if zagadka>mnenie then writeln("Non, le nombre caché est plus grand !")

    else writeln("Non, le nombre caché est inférieur !")

  • Une fois le nombre deviné, la répétition automatique des événements ci-dessus s'arrêtera. Les lignes suivantes du programme commenceront à s'exécuter. Dans ceux-ci, faites en sorte que la machine affiche des informations indiquant que l'utilisateur a deviné le numéro : writeln("Félicitations ! Vous avez deviné le numéro sur le numéro d'essai ",popytki." Il est en réalité égal à ",zagadka,".");
  • bouton :=clé de lecture

  • Entrez l'instruction pour terminer le programme : end.
  • Enregistrez le programme sous le nom de votre choix en utilisant le fichier des éléments de menu -> Enregistrer sous. À l'avenir, après chaque modification, enregistrez-la en appuyant sur la touche F2.
  • Pour exécuter le programme, appuyez simultanément sur les touches Contrôle et F9.
  • Après avoir terminé le programme, afin de voir ce qu'il a affiché à l'écran juste avant, appuyez simultanément sur les touches Alt et F5. Pour revenir à l'éditeur, appuyez à nouveau sur la même combinaison de touches.
  • Soumettre votre bon travail à la base de connaissances est facile. Utilisez le formulaire ci-dessous

    Les étudiants, étudiants diplômés, jeunes scientifiques qui utilisent la base de connaissances dans leurs études et leur travail vous seront très reconnaissants.

    Publié le http://www.allbest.ru/

    Publié le http://www.allbest.ru/

    Introduction

    1. Énoncé du problème

    2. Description des données

    3. Algorithmes et organigrammes

    4. Programme Pascal avec commentaires

    Conclusion

    Liste de la littérature utilisée

    INTRODUCTION

    L'objectif principal de ce projet de cours est de consolider et de démontrer les connaissances acquises lors de l'étude du cours d'informatique.

    La réalisation du travail nécessite une approche créative et l'application de connaissances supplémentaires dans le domaine du graphisme. Le projet de cours n'implique pas une utilisation commerciale ultérieure de ce produit logiciel.

    1. Énoncé du problème

    Il est nécessaire de créer un jeu dont l'idée principale est qu'un objet d'un type (« Avion ») se déplace dans une partie de l'écran, et dans l'autre partie de l'écran il y a un objet d'un type différent (« Arme de défense anti-aérienne »), et « Arme de défense aérienne » doit abattre « Avion".

    a) Sélection, justification et présentation de la méthode de résolution du problème.

    J'ai préféré utiliser la mémoire dynamique, en dessinant des textures dans une procédure distincte.

    Avec la mémoire dynamique, dans ce cas, il est très pratique d'organiser le mouvement simultané d'objets dynamiques sur l'écran avec un scintillement minimal de l'écran.

    Dessiner des textures dans une procédure distincte est pratique car, si vous le souhaitez, il est possible de dessiner un objet en mouvement sans approfondir les spécificités du programme.

    b) Construction d'un algorithme pour le problème.

    Le programme commence par un menu, mais si le choix s'est porté sur le menu « Démarrer le jeu », alors d'abord les carrés d'écran « propres » sont entrés dans la mémoire dynamique, puis les images d'objets dynamiques sont affichées séquentiellement à l'écran et entrées séquentiellement dans la mémoire dynamique. . Des carrés « propres » sont superposés sur la zone esquissée de l'écran, de sorte qu'il n'y ait aucune confusion lors de la numérisation des images suivantes.

    c) Créer et déboguer un programme.

    La création du programme comprenait trois étapes : la création d'un menu, la création du corps principal du jeu en tant que procédure distincte sans dessiner de textures et le dessin final des textures.

    d) Préparation d'une note explicative et soutenance du projet de cours.

    2. Description des données :

    Size1, Size2, Size3, Size4 sont des variables de type entier qui stockent la zone allouée aux variables dynamiques.

    Pustota, Sam1, Rocket, F16 sont des variables dynamiques qui stockent des objets de jeu.

    Key est une variable booléenne qui prend la valeur TRUE lorsqu'une touche est enfoncée.

    Nom, Head, Cl - variables de chaîne écrites dans le fichier :

    NOM - stocke le nom du joueur saisi au clavier ;

    HEAD et CL - contiennent une chaîne représentant un ensemble de descripteurs de langage HTML qui, après avoir écrit dans un fichier, le convertissent en page HTML.

    F1 - variable de fichier

    Événement - variable décrivant les événements (type : Tevent) ;

    3. Schéma fonctionnel

    4. Programme Pascal avec commentaires

    Utilise Crt, App, Boîtes de dialogue, Objets, Pilotes, Vues, ​​Graphique ;

    Procédure Super_Mega_Game ;

    Étiquette b1 ;

    var Driver1,Mode,Size,Size2,x,y,size3,n,xs,d2,d11,d12,m,xt,p,h,Size4:Integer; s:char; Pustota, Sam1, Rocket, F16 : Pointeur ; clé : booléenne ; Nom, Tête, Cl : Chaîne ; F1 : Texte ;

    commencer

    Randomiser;

    xs :=1 ;

    Pilote1 :=Détecter ;

    Mode :=Détecter ;

    InitGraph(Pilote1,Mode,"");

    Effacer le périphérique ;

    SetBkColor(3);

    Taille:=TailleImage(0,0,53,53);

    GetMem(Pustota,taille);

    GetImage(0,0,53,53,Pustota^);

    Taille2:=TailleImage(640,0,600,40);

    GetMem(Sam1,Taille2);

    Définir la couleur (jaune);

    Ligne(605,35,630,35);

    LIGNE(630,35,635,40);

    Ligne(600,40,605,35);

    Ligne(600,40,635,40);

    Ligne(615,35,615,29);

    Ligne(615,29,620,35);

    DéfinirCouleur(6);

    Ligne(610,32,620,24);

    Ligne(610,29,620,21);

    Définir la couleur (rouge);

    Ligne(620,24,624,20);

    Ligne(620,21,624,20);

    Arc(610,30,0,90,2);

    GetImage(640,0,600,40,Sam1^);

    Taille4 :=TailleImage(100 100 150 150 );

    GetMem(F16,Taille4);

    (CADRE)

    DéfinirCouleur(6);

    Ligne(105 120 135 120 );

    Ligne (105 114 130 114 );

    (CABINE)

    Définir la couleur (bleu);

    Arc(131,117,0,90,3);

    Définir la couleur (6);

    Ligne(134 117 144 118 );

    Ligne(134 120 144 118 );

    (PREMIÈRE AILE)

    Ligne(115,119,113,130);

    Ligne(113 130 117 130 );

    Ligne(117 130 121 119 );

    Ligne(115 119 121 119 );

    (QUEUE)

    Ligne(105 114 101 110 );

    Ligne (101 110 105 120 );

    (DEUXIÈME AILE)

    Ligne(119 114 117 109 );

    Ligne(117 109 113 109 );

    Ligne(113,109,114,114);

    GetImage(100,100,150,150,F16^);

    PutImage(100,100,Pustota^,NormalPut);

    Taille3:=TailleImage(640,0,600,40);

    GetMem(Rocket,Taille3);

    DéfinirCouleur(6);

    Ligne(610,32,620,24);

    Ligne(610,29,620,21);

    Définir la couleur (rouge);

    Ligne(620,24,624,20);

    Ligne(620,21,624,20);

    Arc(610,30,0,90,2);

    GetImage(640,0,600,40,Rocket^);

    Définir la couleur (6);

    Ligne(1 460 640 460) ;

    x:=6;

    y :=400 ;

    n:=0;

    m:=0;

    xt:=5;

    p:=1;

    h:=0;

    PutImage(585,10,Pustota^,NormalPut);

    RepeatRepeatif p=1 puis commencez Delay(100); PutImage(xt,100,F16^,NormalPut); xt:=xt+1; h:=h+1; si h=550 alors p :=0 ; fin; si p = 0 alors commence le délai (100); PutImage(xt,100,F16^,NormalPut); xt:=xt-1; h:=h-1; si h=0 alors p:=1 ; end;key:=KeyPressed;if (key=True) then goto b1;jusqu'à s=chr(27);

    b1 :

    s:=LireClé;

    si s=chr(77) alors x :=x+4 ;

    si s=chr(75) alors x :=x-4 ;

    si s=chr(72) alors commencez à répéter PutImage(x+51+n,y-35-n,RocKet^,NormalPut); inc(n); PutImage(x+51+n,y-35-n,Pustota^,NormalPut); si (x+51+n)=550 alors n :=300 ; jusqu'à n=300 ; PutImage(x+n,y-35-n,Pustota^,NormalPut); si ((y+51+n)>100) et ((x+51+n)>(xt-10)) et ((x+51+n)<(xt+60)) then begin OutTextXY(250,200,"F16-vipe out!!!"); s:=chr(27); end; n:=0; end;

    PutImage(x-4,y,Pustota^,NormalPut);

    PutImage(x,y,Sam1^,NormalPut);

    jusqu'à ce que s=chr(27);

    lire;

    FermerGraphique ;

    Couleur du texte (vert);

    Write("Saisissez votre nom : ");

    Readln(Nom);

    Tête :="
    Gagnant !!!

    ";

    Cl:="


    ";

    Tête:=concat(Tête," MegaMen : ",nom,cl);

    attribuer(F1,"Namer.htm");

    Réécrire(f1);

    Écrire(f1,tête);

    Fermer(f1);

    fin;

    taper

    PProg=^TProg;

    TProg=objet(TApplication)

    ConstructeurInit ;

    fin;

    Pdial=^TDial;

    TDial=objet(Tdialog)

    Procédure HandleEvent (var Event:TEvent);

    Virtuel;

    fin;

    constcmPrint = 100 ;

    Constructeur TProg.Init ;

    varR:TRect;Dia:Pdial;g:char;

    commencer

    Init hérité ;

    R.assign(20,9,60,17);

    Dia:=Nouveau(PDial,Init(R,""));

    R.assign(3,4,22,6);

    Dia^.Insert(New(PButton,Init(R,"Démarrer le jeu",cmPrint,bfDefault)));

    R.assign(23,4,35,6);

    Dia^.Insert(New(PButton,Init(R,"Quit",cmCancel,bfNormal)));

    si execView(Dia)=cmPrint alors commencez Super_Mega_Game ; Writeln("Appuyez sur "b" pour revenir au menu principal"); répéter g:=ReadKey; si g="b" alors commencez clrscr; fin; jusqu'à g="b"; Writeln("Appuyez sur "Alt-x" pour quitter"); fin;

    fin;

    Procédure TDial.HandleEvent (var Event:TEvent);

    commencer

    Hérité de HandleEvent(Event);

    if (Event.What=evCommand) et (Event.Command=cmPrint) then EndModal(cmPrint);

    fin;

    Procédure Batva ;

    var

    Prog:TProg;

    commencer

    Prog.Init ;

    Prog.Exécuter ;

    Prog.Terminé ;

    fin;

    commencer

    batva;

    fin.

    5. Guide de l'utilisateur pour l'utilisation du programme

    Lorsque vous démarrez le programme, un menu apparaît offrant un large choix d'options.

    Le curseur est déplacé à l'aide des touches curseur, la sélection s'effectue avec la touche ENTER.

    Lorsque vous sélectionnez un élément de menu, un message correspondant apparaît, cependant, lorsque vous sélectionnez l'élément « Programme », le jeu lui-même démarre directement.

    L'essence du jeu est d'abattre des avions en utilisant la défense aérienne.

    Le système de défense aérienne peut se déplacer horizontalement sur l'écran à l'aide d'un curseur. Lorsque vous appuyez sur la barre d'espace, l'arme de défense aérienne tire un coup de feu. Si un obus touche, le message « F-16 wipe out » apparaît. Une fois l’avion abattu, il vous est demandé d’écrire votre nom, puis d’appuyer sur « b » – ce qui vous amène à un écran où, lorsque vous appuyez sur ALT+X, cela vous fait quitter le programme.

    programme de texture de jeu informatique

    Conclusion

    Au cours du processus de débogage du programme, des difficultés sont survenues du fait que lors de l'analyse du plein écran puis de l'utilisation de cet objet, le programme a commencé à ralentir fortement sa vitesse. Pour surmonter cet obstacle, il fallait scanner de petites parties de l'écran, puis les utiliser.

    Le processus de dessin détaillé des graphiques est également long.

    Il faut que dans le dossier où se trouve ce programme il y ait un fichier egavga.bgi. Ce fichier est disponible dans de nombreuses versions de TP dans le dossier bin ; il est responsable de l'initialisation des graphiques.

    Liste de la littérature utilisée.

    1. Mejenny O.A. "Turbo Pascal - apprendre à programmer" ; Moscou-S. Saint-Pétersbourg-Kyiv ; "Dialectique"; 2001 ; 448p.

    2. Babouchkine I.A. ; « Atelier sur TR » - un manuel pour les cours IVT ; Moscou, 1998.

    3. http://www.freepascal.org ;

    4. http://www.geocities.com/~franzglaser/tp.htm ;

    5. http://www.garbo.uwasa.fi/pc/turboobj.html ;

    Publié sur Allbest.ru

    Documents similaires

      Développement et implémentation du jeu informatique "Snake" en utilisant le langage de programmation Pascal et le module CRT. Élaboration d'un algorithme général du programme, mettant en évidence ses parties fonctionnelles. Développement de cas de tests. Utilisation de fichiers tapés.

      travail de cours, ajouté le 23/02/2011

      Caractéristiques du système informatique et des outils de développement. Programmation en Pascal dans l'environnement Turbo Pascal et en Pascal Objet dans l'environnement Delphi. Utilisation de procédures, fonctions, tableaux, recherche binaire. Création d'une base de données sous forme de fichier.

      rapport de pratique, ajouté le 02/05/2014

      Histoire du développement du langage de programmation Java. L'histoire de Tetris - un jeu informatique culte inventé en URSS. Règles du jeu, caractéristiques du score. Création de l'interface du programme, son implémentation dans l'environnement Java, codage, tests.

      travail de cours, ajouté le 27/09/2013

      Représentation algorithmique et description des règles du jeu "Evolution". Construction d'un diagramme de cas d'utilisation. Développement d'interface utilisateur graphique. Implémentation de l'interface dans l'environnement Unity. Structure du fichier de sauvegarde du jeu. Concevoir le comportement d'un ordinateur.

      thèse, ajoutée le 18/02/2017

      Description des règles du jeu "Sea Battle". Caractéristiques des ordinateurs modernes et de l'intelligence artificielle. Création d'un schéma fonctionnel général du programme, son apparence. Variables, procédures et fonctions requises. Caractéristiques des objets utilisés dans l'application.

      travail de cours, ajouté le 11/05/2012

      Développement d'un programme pour un jeu logique de "tic-tac-toe" cinq à la suite sur un champ de taille 15x15 cellules utilisant des graphiques en Pascal en utilisant une programmation orientée objet. La structure de l'algorithme du programme et la description de son fonctionnement.

      travail de cours, ajouté le 13/02/2012

      Bases du travail dans le langage de haut niveau Turbo Pascal. Équipement et logiciels de base. Opérateurs devant travailler dans l'environnement graphique Turbo Pascal. Démarrez le mode graphique. Texte du programme dans l'environnement graphique Turbo Pascal.

      travaux de laboratoire, ajouté le 14/05/2011

      Développement d'un programme pour le jeu casual "Zuma Deluxe" en C\C++. Utilisant le style des anciens Incas et Aztèques, les capacités du moteur graphique HGE version 1.53. Objectif des classes principales du jeu. Manuel d'utilisation, contenu du menu principal.

      travail de cours, ajouté le 28/10/2014

      Langage de programmation Pascal et son turbo shell. Revue analytique des logiciels de jeux. Fonctions du module Crt. Énoncé du problème de création d'un programme de jeu simple "Turbosnake", algorithme d'implémentation et description de l'interface utilisateur.

      travail de cours, ajouté le 15/05/2014

      Implémentation de structures algorithmiques de base. Déclarations conditionnelles et de sortie tronquées. Boucle avec un paramètre (boucle de comptage). Impression des tableaux de fonctions. Outils de développement de programmes en Free Pascal. Développement de l'application de jeu "Taureaux et Vaches".



    Des questions ?

    Signaler une faute de frappe

    Texte qui sera envoyé à nos rédacteurs :