Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1071 connectés 

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Suivante
Auteur Sujet :

[Ada][Warborg] un wargame avec GtkAda

n°2200903
Profil sup​primé
Posté le 27-08-2013 à 16:02:09  answer
 

Reprise du message précédent :
Bonjour, Enjoy !
 
Un nouvelle journée nous amène à une nouvelle production, vous trouverez sur Sourceforge la dernière version de Warborg  ici : https://sourceforge.net/projects/warborg/.
 
Je n'ai pas pu compiler sur Gnu/Linux donc, vous avez les source qui compile avec Gtkada 2.14.
 
J'ai introduit la chose différemment avec Joshua, je vous laisse découvrir.
J'ai aussi augmenter la capacité en missiles ennemis recevable.
J'ai modifier la procédure d'acquisition des ennemis pour que l'ensemble des missiles reçus ne soit pas ciblé uniquement sur les premier loggé au serveur.
C'est mélangé quoi. Enfin toute la doc nécessaire à votre amusement dans le paquet Warborg_win_src+bin_2013-1.1.16a.zip
 
Registered Fritures :

Citation :


  •    Wopr LOGON
  •    Joshua introduction
  •    Speach with Joshua
  •    Select your Side
  •    Placing you Wopr
  •    Choose you defensive/attack strategy
  •    Enterring Launch code to get alternative world
  •    Reborg recall you while you are Win
  •    Say Game Over else.



 
 
Good luck.


Message édité par Profil supprimé le 27-08-2013 à 16:07:12
mood
Publicité
Posté le 27-08-2013 à 16:02:09  profilanswer
 

n°2201291
Profil sup​primé
Posté le 30-08-2013 à 14:58:33  answer
 

Bonjour, Je reviens ici avec une augmentation de version en 1.2.0b que j'ai compilé sur Gnu/Linux et sur Windows avec la bibliothèque gtkada-2.18.sur Gnu/Linux et 2.X je sais pas vvraiment c'est gtkada2010 je crois sur Windows.
 
Nouvelles Fritures, un principal : la comptabilisation des missiles détruit dans les points.
D'autres nouveautés vous attente pour un jeux jouable de 2 à 500 voir 1000.

n°2201823
Profil sup​primé
Posté le 04-09-2013 à 23:02:05  answer
 

Bonsoir, je recommence l'implémentation de Warborg.
Nouvelle vue nouvelle méthode, nouvelle fonctionnalité, et surtout nouveau code. Donc pages blanche à gogo.
Voici par quoi j'ai commencé.
A+
 

Code :
  1. package Warborg is                                                                                       |package Warborg.Individu is
  2.                                                                                                         |
  3.   pragma Pure (Warborg);                                                                                |   type Individu_Type is tagged private;
  4.                                                                                                         |
  5. end Warborg;                                                                                             |   procedure Initialize(Individu : out Individu_Type'Class;
  6.                                                                                                         |                        Logname  : in String;
  7.                                                                                                         |                        Address  : in String);
  8.                                                                                                         |
  9.                                                                                                         |   function Address(Individu : in Individu_Type'Class) return String;
  10.                                                                                                         |   function Logname(Individu : in Individu_Type'Class) return String;
  11.                                                                                                         |
  12.                                                                                                         |
  13.                                                                                                         |
  14.                                                                                                         |   procedure Set_logname(Individu : in out Individu_Type'Class;
  15.                                                                                                         |                         Logname  : in String);
  16.                                                                                                         |   procedure Set_address(Individu : in out Individu_Type'Class;
  17.                                                                                                         |                         Logname  : in String;
  18. -UU-:----F1  warborg.ads    All (2,3)      (Ada)--22:58 1.59---------------------------------------------|                         Address  : in String);
  19. package Warborg.I18n is                                                                                  |private
  20.                                                                                                         |   type Individu_Type is tagged
  21.   type Lang_Type is (En, Fr);                                                                           |      record
  22.                                                                                                         |         Logname : access String;
  23. end Warborg.I18n;                                                                                        |         Address : access String;
  24.                                                                                                         |      end record;
  25.                                                                                                         |
  26.                                                                                                         |
  27.                                                                                                         |end Warborg.Individu;
  28.                                                                                                         |
  29.                                                                                                         |
  30.                                                                                                         |
  31.                                                                                                         |
  32.                                                                                                         |
  33.                                                                                                         |
  34.                                                                                                         |
  35.                                                                                                         |
  36.                                                                                                         |
  37. -UU-:----F1  warborg-i18n.ads   All (1,0)      (Ada)--22:58 1.59-----------------------------------------|-UU-:----F1  warborg-individu.ads   All (1,0)      (Ada)--22:58 1.59--------------------------------------
  38. with Gnat.Md5;                                                                                           |with Warborg.I18n;
  39. use Gnat.Md5;                                                                                            |use Warborg.I18n;
  40. package Warborg.Individu.User is                                                                         |package Warborg.Individu.User.Player is
  41.                                                                                                         |
  42.   type User_type is new individu_Type with Private;                                                     |   type Player_type is new User_Type with Private;
  43.                                                                                                         |   procedure Initialize(Player : out Player_Type'Class;
  44.   procedure Initialize(User   : out User_Type'Class;                                                    |                        Lang   : in Lang_Type);
  45.                        Passwd : in Message_Digest);                                                     |   function Lang(Player : in Player_Type'Class) return Lang_Type;
  46.                                                                                                         |   procedure Set_Lang(Player : in out Player_Type;
  47.   function Passwd(User : in User_Type'Class) return Message_Digest;                                     |                      Lang : in Lang_Type);
  48.                                                                                                         |private
  49.   procedure Set_passwd(User : in out User_Type'Class;                                                   |   type Player_Type is new User_Type with
  50.                        Passwd  : in Message_digest);                                                    |      record
  51. private                                                                                                  |         Lang : Lang_Type;
  52.   type User_Type is new Individu_Type with                                                              |      end record;
  53.      record                                                                                             |
  54.         Passwd : Message_Digest;                                                                        |end Warborg.Individu.User.Player;
  55.      end record;                                                                                        |
  56.                                                                                                         |-UU-:----F1  warborg-individu-user-player.ads   All (16,3)     (Ada)--22:58 1.59--------------------------
  57.                                                                                                         |generic
  58. end Warborg.Individu.User;                                                                               |   type Usr_Type private;
  59.                                                                                                         |   with function Heuristic (Usr : in Usr_Type) return Float;
  60.                                                                                                         |   with function Uniform (Usr : in Usr_Type) return Float;
  61.                                                                                                         |package Warborg.Individu.User.Player.Game.Solver is
  62.                                                                                                         |   type Self_Game is new Game_Class with private;
  63.                                                                                                         |   type Option_Type is access function (Usr : in Usr_Type) return Usr_Type;
  64.                                                                                                         |private
  65.                                                                                                         |   type Self_Game is new Game_Type with
  66.                                                                                                         |      record
  67.                                                                                                         |
  68.                                                                                                         |
  69.                                                                                                         |end Warborg.Individu.User.Player.Game.Solver;
  70.                                                                                                         |
  71.                                                                                                         |
  72.                                                                                                         |
  73.                                                                                                         |
  74.                                                                                                         |


jovalise


Message édité par Profil supprimé le 04-09-2013 à 23:03:54
n°2201936
Profil sup​primé
Posté le 05-09-2013 à 21:13:14  answer
 

Voici ce que donne l'algo principal suivant l'idée ci-dessus.
 

Code :
  1. with Warborg.I18n;
  2. use Warborg.I18n;
  3.  
  4. with Warborg.Individu.User.Player.Game;
  5.  
  6. use  Warborg.Individu.User.Player.Game;
  7. use Warborg.Individu.User.Player;
  8. use Warborg.Individu.User;
  9. use Warborg.Individu;
  10.  
  11. with Warborg.Wargames;
  12. use Warborg.Wargames;
  13. with Gnat.Md5;
  14.  
  15. with Ada.Text_Io;
  16. use Ada;
  17.  
  18. package body Warborg.Joshua is                                      
  19.      
  20.  
  21.   procedure New_Game is      
  22.      Lang   : Lang_Type := Fr;
  23.      Current_Player : Player_Type;
  24.      Norad  : Wargame_Type;      
  25.      Individu_Number : positive := 1;
  26.   begin
  27.      
  28.      Norad.Initialize;
  29.      for I in 1..10 loop
  30.         Individu_Number := I;
  31.         -- Add One Player.
  32.         Individu_Type(Current_Player).Initialize("player" & Natural'Image(Individu_Number), "null address" );
  33.         User_Type(Current_Player).Initialize(Gnat.Md5.Digest("" ));
  34.         Current_Player.Initialize(Lang, Initial_points);                      
  35.         Player_Add(Norad, Current_Player);                  
  36.      end loop;
  37.      
  38.      while not Exhausted(Norad) loop
  39.         Print(Norad);
  40.         Text_Io.Put("Next player is " );
  41.         warborg.Wargames.To_Play(Norad);        
  42.      end loop;
  43.      
  44.   end New_Game;
  45.      
  46. end Warborg.Joshua;


 
Et voici le code sous-jacent :
 

Code :
  1. procedure To_Play(Wargame : in out Wargame_Type) is
  2.  
  3.      Player : constant Player_Type := First_element(Wargame.Multi_Player.all);
  4.      
  5.      Save   : Wargame_Type := Wargame;
  6.   begin                  
  7.      declare
  8.         package Wargame_Solver is new Warborg.Individu.User.Player.Game.Solver(Wargame_Type, Heuristic, Uniform, Warborg.Wargames.Initialize, Exhausted, Right_Options, Left_Options, Print);
  9.         Joshua : Wargame_Solver.Self_Type;
  10.         Joshua : Wargame_Solver.Self_Type;
  11.      begin
  12.        
  13.         Text_Io.Put_line("player named : " & Individu.Logname(Individu_type(Player)) & ", play!" );                      
  14.         Text_Io.Put_Line("Gains        : " & Float'Image(Wargame.Uniform(Save) - Wargame.Heuristic(Save)));
  15.         Wargame.Points_Add(Wargame.Uniform(Save) - Wargame.Heuristic(Save), Player);
  16.         Text_Io.Put_Line("Total_Points : " & Float'Image(Wargame.Total(Player)));                                      
  17.  
  18.         Wargame_Solver.Self_Play(Joshua, wargame);
  19.         Wargame := Wargame_Solver.Usr(Joshua);                  
  20.         Errno := System(To_C("clear" ));
  21.         Chess.Jouer(Wargame.Echiquier);                
  22.         Text_Io.Put_Line("Gains        : " & Float'Image(Wargame.Uniform(Save) - Wargame.Heuristic(Save)));
  23.         Wargame.Points_Add(Wargame.Uniform(Save) - Wargame.Heuristic(Save), Player);
  24.         Text_Io.Put_Line("Total_Points : " & Float'Image(Wargame.Total(Player)));                                      
  25.  
  26.      end;
  27.      
  28.      Player_Vectors.Delete_First(Vector(Wargame.Multi_Player.all));
  29.      if Wargame.Total(Player) >= 0.0 then
  30.         Player_Vectors.Append(Vector(Wargame.Multi_Player.all), Player);
  31.      end if;
  32.      
  33.      
  34.      
  35.      
  36.      
  37.      declare
  38.         package Wargame_Solver is new Warborg.Individu.User.Player.Game.Solver(Wargame_Type, Heuristic, Uniform, Warborg.Wargames.Initialize, Exhausted, Left_Options, Right_Options, Print);
  39.         Joshua : Wargame_Solver.Self_Type;
  40.      begin
  41.         Print(Wargame);
  42.         Text_Io.Put_line("Computer play! " );
  43.        
  44.        
  45.        
  46.         Wargame_Solver.Self_Play(Joshua, wargame);
  47.         Wargame := Wargame_Solver.Usr(Joshua);          
  48.         Chess.Jouer(Wargame.Echiquier);        
  49.      end;
  50.      
  51.   end To_Play;


 
Vous trouverez les source de la version 0.0.3a sur sourceforge.net dans le projet Warborg donc. WWWWWWWWWWWW
 
 
Ah, j'oubliais, j'ai un problème de fuite de mémoire encore.


Message édité par Profil supprimé le 05-09-2013 à 21:15:36
n°2202414
Profil sup​primé
Posté le 10-09-2013 à 10:08:18  answer
 

Bonjour, j'espère que tout le monde va bien, ou relativement bien.
Je viens voir si vous auriez un avis sur l'agencement de la prochaine version de Xborg, je programme client de Warborg,
 
Voici le nouveau screenshot, sur fond de terminal de connection.
 
http://hfr-rehost.net/thumb/self/bc26c99f6d19ac715ae1f9a45d832e6486690b23.png
 
Je trouve pas mal avec l'image de defcon en haut à gauche pour changer. j'hésite à mettre les spin button dans la même colonne.
 
Détail mais comme ça vous participez.  :D

n°2202452
Profil sup​primé
Posté le 10-09-2013 à 13:57:32  answer
 

En attendant, je vous donne envie. C'est la même intro que la version 2013 à peut près.

:~/Warborg$ ./bin/WOPR localhost



 
logname : Manuel
 
 
Enter passwd  
envoie commandeenvoie lognameenvoie SHA1attend responseVerify :  
 
LOGON: Joshua
Greetings, Professor Falken.
 
Why we do have deleted your account Avril 22, 1970?
Sorry!
 
Shall we play a game?  
Global Thermonuclear War
Wouldn't you prefer a good game of chess?  
No, I prefer a Global Thermonuclear War!
Excellent...
 
    United States                  Soviet Union
     /----------\                  /-----------\
    /            \                /             \
   /              \              /               \
  /                \            /                 \
 |                 |           |               ____|
 |                 |           |              /
 \_________________/           \_____________/
 
 
WHICH SIDE DO YOU WANT?
 
 
1. UNITED STATES
2. SOVIET UNION
 
 
PLEASE CHOOSE ONE: UNITED STATES
                      AWAITING FIRST STRIKE COMMAND
================================================================================
    United States                  Soviet Union
     /----------\                  /-----------\
    /            \                /             \
   /              \              /               \
  /                \            /                 \
 |                 |           |               ____|
 |                 |           |              /
 \_________________/           \_____________/
         You                          Joshua
 
 
 
PLEASE LIST PRIMARY TARGETS BY
CITY AND/OR COUNTY NAME:
Moscou


 
 
 

n°2202635
Profil sup​primé
Posté le 11-09-2013 à 19:24:20  answer
 

Warborg  redeviens jouable à partir de la version 2014-3.0.2, mais subsiste une grosse partie de l'ancien code, certainement bourrée d'erreur.  [:opus dei]  
Je commence la journée alors, bonjour. Je vais comptabiliser la population touchée par les tir de missiles et en tester la possibilité d'affichage.  [:urd]  
J'hésite à faire un joueur virtuel pour pouvoir jouer tout seul ou à plusieurs contre 1 ou plusieurs contre plusieurs.  [:canaille]  
En fait va encore falloir, non pas tout ré- écrire mais remodeler en profondeur quand même. :bounce:  
Par contre ça ne joue toujours pas ni au échecs ni au morpion. :/

n°2202717
Profil sup​primé
Posté le 12-09-2013 à 15:14:52  answer
 

Salutations,
 
 
Je donne une image archivée sur hfr-rehost, avec l'affichage de 5548 item de population.
J'ai donc compter les population à l'est et à l'ouest de Greenwich./.
Comme vous pouvez le constaté une bonne partie de petit carrés bleu correspondants se trouvent à l'eau, mais c'est pas grave.  :whistle:  
http://hfr-rehost.net/thumb/self/c16c3d6f7e2746f158346bd9e7f55408a5cd2b53.png
 
J'ai prix la source d'information sur la population chez geonames. Mais j'ai plus de 1000 erreurs de position de données.

n°2202785
Profil sup​primé
Posté le 13-09-2013 à 02:25:59  answer
 

Le final pour aujourd'hui, ça comptabilise les population, par contre ça deviens longuet.
 
J'ai changé d'image de fond pour coller d'avantage à la distribution GPS des population, même si j'ai mis l'image dans le bon sens, j'ai des population à l'eau.
 
https://a.fsdn.com/con/app/proj/warborg/screenshots/Warborg-%202014.png

n°2202954
Profil sup​primé
Posté le 15-09-2013 à 00:52:55  answer
 

Salutations,
 
J'ai encore changé l'image de fond, plus grande pour un plus grand intérêt du jeu, j'ai fixé les pourcentage d'offensive et la charge max des missile qui vont ensemble avec le facteur_charge.
Dispo, la version 3.0.6 Gnu/Linux et Windows.
 
Nouveau screenshot.https://a.fsdn.com/con/app/proj/warborg/screenshots/Warborg%20-%202014%20-%203.0.6.png/182/137
On doit pourvoir jouer à 100 maximum.

mood
Publicité
Posté le 15-09-2013 à 00:52:55  profilanswer
 

n°2202994
Profil sup​primé
Posté le 15-09-2013 à 17:34:05  answer
 

Bonjour, malheureusement, la version finale n'est pas terminée.
Il manque une instruction côté seveur:
 

Code :
  1. Launched_Missile_Attributes.Cible := To_Map_Coordonates(Launched_Missile_Attributes.Target);


Pas des moindre.  :(

n°2203196
Profil sup​primé
Posté le 16-09-2013 à 20:24:26  answer
 

Bonjour,
 
Je suis passé à la version 3.0.8 mais dans cette version, il faut fixer le facteur de charge dans warborg-database.adb pour jouer plus ou moins facilement.
La il doit être à 20, c'est un peu long, après 15 heurs de jeu à deux pas de perdant.
 
Si j'ai annoncé la version finale c'est surtout pour m'avancer sur l'année 2015 qui devrai sortir mi 2014.
L'objet de la ré- écriture n'est pas l'augmentation du soft mais un remodelage du code avant tout. Pour mieux faire.
Donc rendez vous au printemps prochain, à moins que je rencontre des problème au cas où je viendrais poster sur ce fil.
Merci pour vos retours, critiques et contributions entre temps.

n°2204009
Profil sup​primé
Posté le 24-09-2013 à 20:20:04  answer
 

Bonjour,
 
Si la fonction Is_In dans warborg-database.adb était implémentée on pourrait jouer à Warborg en mode manuel avec la version 2015 5.0.9a.
Je dit ça je dis rien.

n°2204015
antiseptiq​ueincolore
Posté le 24-09-2013 à 20:53:43  profilanswer
 

[:prab]

n°2204043
Profil sup​primé
Posté le 24-09-2013 à 22:37:33  answer
 

Et, t'es qui toi ? [:dawa_neowen]

n°2204054
Profil sup​primé
Posté le 24-09-2013 à 23:08:02  answer
 

Et voilà, avec la version 5.1.0 vous pouvez réellement rejouer.
Peut-être quelque ajustement des paramètres.
Aussi toute les fonctionnalité ne sont pas encore implémentées, mais c'est comme si vous jouiez sur une ancienne version mais en mode manuel.
 
Ma fonction Is_In :
 

Code :
  1. function Is_in(Target : Gps_Coordonates_Type; item : Gps_Coordonates_Type; Distance : Float) return Boolean is
  2.      
  3.      
  4.      function Longitude (X : Longitude_Coordonate_Type) return Decimal_Longitude_Type is
  5.      begin
  6.      return Decimal_Longitude_Type(X.Degr_Lon + (X.Minu_Lon / 60.0) + (X.Seco_Lon / 3600.0));
  7.      end Longitude;
  8.      
  9.      function latitude (Y : Latitude_Coordonate_Type) return Decimal_Latitude_Type is
  10.      begin
  11.         return Decimal_Latitude_Type(Y.Degr_Lat + (Y.Minu_Lat / 60.0) + (Y.Seco_lat / 3600.0));
  12.      end Latitude;
  13.      
  14.      
  15.      --  Formule À Appliquer Pour Calculer Une Orthodromie : Cos P = (Sin LA . Sin LB) + (Cos LA . Cos LB . Cos G)
  16.      
  17.      LA, LB, G, P : Float;
  18.         --    LA Correspond À La Latitude Du Point A.
  19.         --    LB Correspond À La Latitude Du Point B.
  20.         --    G Correspond À La Différence De Longitude Entre Le Point A Et Le Point B.
  21.      
  22.  
  23.   begin  
  24.      La := Latitude(Target.Latitude);
  25.      Lb := Latitude(Item.Latitude);      
  26.      G  := abs(Longitude(Target.Longitude)) - abs (Longitude(item.Longitude));
  27.      
  28.      P := 60.0 * Arccos(((Sin(La) * Sin(Lb)) + (Cos(La) * Cos(LB) * Cos(G))));
  29.      
  30.      if  P - Distance > 0.0 then
  31.         return False;
  32.      else
  33.         return True;
  34.         Text_Io.Put_Line("TRUE" );
  35.      end if;
  36.   end Is_in;

n°2204195
Profil sup​primé
Posté le 25-09-2013 à 19:48:26  answer
 

Bonjour,
Dans la continuité des chose il était tout à fait normal que je mette en place un serveur Warborg version 2015 version 5.
Vous trouverez la suite ici
 
La version 5.1.2b sera bientôt disponible, mais vous pouvez déjà jouer en mode manuel à Warbog avec la version 5.
Le principe reste le même, sauf que ce n'est plus automatique.
 
Pour jouer,  il faut d'abord compiler les sources avec Gnat et Gtkada  2012  
Démarrez le programme
Allez dans le menu Network et choisissez login.
Entrez l'adresse du serveur votre nom d'utilisateur et votre mot de passe. Clickez Ok.
Allez dans le menu game et choisissez start.
Entrez les coordonée... Ainsi de suite.
 
Seulement l'algo Random est disponible pour la recherche de la cible.
Good luck

n°2204533
Profil sup​primé
Posté le 28-09-2013 à 23:29:23  answer
 

La version 5.2.2b tout automatisable est dans le bac.
 
Peut-être sera - t - il judicieux de rajouter un peu de delay dans les tache deamon si vous jouez sur le serveur.
 
Vous trouverez un serveur uniborg à cette adresse IP : http://88.189.147.62/

n°2204777
Profil sup​primé
Posté le 01-10-2013 à 03:04:33  answer
 

:hello: Hello evry body.
 
That's right ?
 
 
I'm going to play to Warborg 5.3.6a, because you are my friends, you are right to play with me.
 
Ok, good luck.
 

Spoiler :

Je plaisante.


 
Je suis près à jouer à Warborg en version 5.3.6a, parce que vous être mes amis vous être d'accord pour jouer avec moi.
 
Zero morts. Bonne chance.
 

Spoiler :

I'm kidding


 
 
Comme ça au cas ou ça intéresse quelqu'un, j'utilise les vecteurx Ada dans warborg-database. C'est plus keel.
 
Il y a deux algo de recherche, un linéaire, et random, exactement le contraire l'un de l'autre.
 
Il reste des anomalie, j'entreprendrais demain.
 
 
Donc, c'est écris du mieux que j'ai pu. Manque beaucoup de commentaires. j'aurais aimé faire autrement, mais j'ai pas su, ou j'ai eu la flemme, je voulais un résultat immédiat.
Pour la doc, ben comme d'hab, je sais pas par quoi commencer c'est trop fastidieux à regarder comme ça, je manque de motivation du coup.
 
Ah tien, je vais mettre le copyright, et la licence. A demain.


Message édité par Profil supprimé le 01-10-2013 à 03:06:30
n°2204778
Profil sup​primé
Posté le 01-10-2013 à 05:30:47  answer
 

Ah, ça a pas planté.

n°2204780
Profil sup​primé
Posté le 01-10-2013 à 06:40:51  answer
 

C'est long parfois à tester.
 
Faut que ça passe l'étape du game over.
 
Je vous tiens au courant ou comme d'hab sur sourceforge.

n°2204972
Profil sup​primé
Posté le 01-10-2013 à 19:39:47  answer
 

Depuis deux jours, je cherche les raison d'un dysfonctionnement.
En effet, lors de la perte d'un WOPR, la procedure Get_Wopr ne retourne pas.
 
Dans Warborg.Database :
 

Code :
  1. --   Anciennement une entry.
  2.     procedure Get_Wopr(Logname : in Logname_Type;
  3.                         Wopr : in out Wopr_Type;
  4.                         Success : out boolean) is
  5.  
  6.      begin
  7.  
  8.         Success := False;
  9.         Text_Io.Put_Line("Getting wopr for " & Logname);
  10.         if not Wopr_Manager.Is_Empty(Woprs) then
  11.            for I in 1..Wopr_Manager.Last_Index(Woprs) loop
  12.               declare
  13.                  Local : Wopr_Type := Wopr_Manager.Element(Woprs, I);
  14.               begin
  15.                  Text_Io.Put_Line("Check wopr for " & local.Logname);
  16.                  if local.logname = Logname then
  17.                     Wopr := Local;
  18.                     Success := True;
  19.                     exit;
  20.                  end if;
  21.               end;
  22.            end loop;
  23.         end if;
  24.      end Get_Wopr;


 
Dans Warborg.Uniborg :

Code :
  1. --
  2.              when Wopr_get =>
  3.                  declare
  4.                     Wopr : wopr_Type;
  5.                     Success : Boolean := False;
  6.                  begin
  7.                     Text_Io.Put_Line("Getting wopr in database" );
  8.                     Sgbd.Get_Wopr(Logname, Wopr, Success);
  9.                     Boolean'Output(Channel, success);
  10.                     if Success then
  11.                        Text_Io.Put_Line("Getting wopr success" );
  12.                        --Text_Io.Put_Line("after get in database  length :" & natural'Image(Natural (Nation_Manager.Last_Index(Wopr.Populations))));                                                              
  13.                        Wopr_Type'Output(Channel, Wopr);
  14.                        Text_Io.Put_Line("Wopr Sended" );
  15.                     end if;
  16.                  end;


 
L'appel dans Warborg.Norad :

Code :
  1. --
  2.             accept Get(Wopr : in out Wopr_Type; Success : out Boolean) do
  3.  
  4.  
  5.               Command_type'Output(Channel, Wopr_get);
  6.               Text_Io.Put_Line("Getting success" );
  7.               Success := Boolean'Input(Channel);
  8.               Text_Io.Put_Line("Getting success done" );
  9.               if Success then
  10.                  Text_Io.Put_Line("Getting WOPR success" );
  11.                  Wopr := Wopr_Type'Input(Channel);
  12.               end if;
  13.            end Get;


 
Ici success n'est pas reçu lorsque le Wopr n'est pas dans le vecteur Woprs.

n°2205303
Profil sup​primé
Posté le 04-10-2013 à 03:25:19  answer
 

Nouvelle version que Warborg avec le listing des populations détruites.
 
Avec les bugs du commencement, il sont toujours là.

n°2280927
Profil sup​primé
Posté le 07-05-2016 à 16:10:21  answer
 

Bonjour,
 
J'ai décidément un problème avec cette fonction is_in :
J'ai fait une partie seul et j'ai décimé la population entière.
 
la fonction is_in :

Code :
  1. function Is_in(Target : Gps_Coordonates_Type; item : Gps_Coordonates_Type; Distance : Float) return Boolean is
  2.          
  3.          
  4.          function Longitude (X : Longitude_Coordonate_Type) return Decimal_Longitude_Type is
  5.          begin
  6.          return Decimal_Longitude_Type(X.Degr_Lon + (X.Minu_Lon / 60.0) + (X.Seco_Lon / 3600.0));
  7.          end Longitude;
  8.          
  9.          function latitude (Y : Latitude_Coordonate_Type) return Decimal_Latitude_Type is
  10.          begin
  11.             return Decimal_Latitude_Type(Y.Degr_Lat + (Y.Minu_Lat / 60.0) + (Y.Seco_lat / 3600.0));
  12.          end Latitude;
  13.          
  14.          
  15.          --  Formule À Appliquer Pour Calculer Une Orthodromie : Cos P = (Sin LA . Sin LB) + (Cos LA . Cos LB . Cos G)
  16.          
  17.          LA, LB, G, P : Float;
  18.             --    LA Correspond À La Latitude Du Point A.
  19.             --    LB Correspond À La Latitude Du Point B.
  20.             --    G Correspond À La Différence De Longitude Entre Le Point A Et Le Point B.
  21.          
  22.    
  23.       begin  
  24.          La := Latitude(Target.Latitude);
  25.          Lb := Latitude(Item.Latitude);      
  26.          G  := abs(Longitude(Target.Longitude)) - abs (Longitude(item.Longitude));
  27.          
  28.          P := 60.0 * Arccos(((Sin(La) * Sin(Lb)) + (Cos(La) * Cos(LB) * Cos(G))));
  29.          
  30.          if  P - Distance > 0.0 then
  31.             return False;
  32.          else
  33.             return True;
  34.             Text_Io.Put_Line("TRUE" );
  35.          end if;
  36.       end Is_in;


 
 
Si quelqu'un sait la corriger merci.

n°2280935
Totoche17
Posté le 07-05-2016 à 20:58:00  profilanswer
 


 
 
Je t'ai déjà donné la réponse il y a 3 ans mais t'en as pas tenu compte manifestement
 

Totoche17 a écrit :

Les paramètres de toutes les fonctions trigo doivent être exprimées en rad.


n°2280936
Profil sup​primé
Posté le 07-05-2016 à 21:15:19  answer
 

Ben c'est inspiré d'un algo qu'est comme ça !

n°2280973
Totoche17
Posté le 09-05-2016 à 09:19:27  profilanswer
 

J'insiste pas, tu m'as l'air beaucoup plus calé que moi sur le sujet.   :o

n°2280991
Profil sup​primé
Posté le 09-05-2016 à 11:29:17  answer
 

Ben ça resemble à ça :  
 
http://www.lacosmo.com/ortho/img22.gif
Source : http://www.lacosmo.com/ortho/ortho.html

n°2281003
h3bus
Troll Inside
Posté le 09-05-2016 à 14:07:31  profilanswer
 

Ce que te dis Totoche c'est qu'il faut convertir en radian tes latitudes/longitudes.


---------------
sheep++
n°2281016
rufo
Pas me confondre avec Lycos!
Posté le 09-05-2016 à 17:04:23  profilanswer
 

+1 pour la conversion en radians des latitudes et longitudes.
 
Edit : https://fr.wikipedia.org/wiki/Ortho [...] rthodromie
 
Le truc, c'est que les fonctions trigo des langages de programmation veulent des radians en entrée et pas des degrés. Du coup, il ne faut pas appliquer ce qui est indiqué avec le coeff 60.0.


Message édité par rufo le 09-05-2016 à 17:14:59

---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2281261
Profil sup​primé
Posté le 12-05-2016 à 01:45:25  answer
 

Je comprends bien ce que vous dites, mais l'algo, c'est pour calculer à partir de mesures decimales.
 
D'ailleur je me suis donné du mal pour le faire.
 
Enfin.
 
Voilà mon code.
 

Code :
  1. -- GPS define --
  2.  
  3.   type Double_Access is access all Double;
  4.  
  5.   function Modf (X : in Double; Iptr : in Double_access) return Double;
  6.   pragma Import(C, Modf, "modf" );


 

Code :
  1. function Longitude (X : in Longitude_Coordonate_Type) return Decimal_Longitude_Type is              
  2.   begin
  3.      
  4.      if X.Degr_Lon < 0.0 then
  5.      return -Decimal_Longitude_Type(abs(X.Degr_Lon) + (abs(X.Minu_Lon) / 60.0) + (abs(X.Seco_Lon) / 3600.0));
  6.      else
  7.         return Decimal_Longitude_Type(abs(X.Degr_Lon) + (abs(X.Minu_Lon) / 60.0) + (abs(X.Seco_Lon) / 3600.0));
  8.      end if;
  9.   end Longitude;


Code :
  1. function latitude (Y : in Latitude_Coordonate_Type) return Decimal_Latitude_Type is
  2.   begin
  3.      
  4.      if Y.Degr_Lat < 0.0 then
  5.      return -Decimal_Latitude_Type(abs(Y.Degr_Lat) + (abs(Y.Minu_Lat) / 60.0) + (abs(Y.Seco_Lat) / 3600.0));
  6.      else
  7.      return Decimal_Latitude_Type(abs(Y.Degr_Lat) + (abs(Y.Minu_Lat) / 60.0) + (abs(Y.Seco_Lat) / 3600.0));
  8.      end if;          
  9.   end Latitude;


Code :
  1. function Is_in(Target : in Gps_Coordonates_Type; item : in Gps_Coordonates_Type; Distance : in Float) return Boolean is
  2.            
  3.                         
  4.      --  Formule À Appliquer Pour Calculer Une Orthodromie : Cos P = (Sin LA . Sin LB) + (Cos LA . Cos LB . Cos G)      
  5.      LA, LB, G: Float := 0.0;
  6.      P : Float := 0.0;
  7.      --    LA Correspond À La Latitude Du Point A.
  8.      --    LB Correspond À La Latitude Du Point B.
  9.      --    G Correspond À La Différence De Longitude Entre Le Point A Et Le Point B.      
  10.      Cos_Produit : Float := 0.0;
  11.      sin_Produit : Float := 0.0;
  12.      Sum_Produit : Float := 0.0;
  13.   begin  
  14.      
  15.      La := Float'Rounding(Latitude(Target.Latitude) * 10000.0) / 10000.0;
  16.      
  17.      Lb := Float'Rounding(Latitude(Item.Latitude) * 10000.0) / 10000.0;
  18.      
  19.      G  :=  Float'Rounding(Longitude(item.Longitude) * 10000.0) / 10000.0 - Float'Rounding(Longitude(Target.Longitude) * 10000.0) / 10000.0;
  20.      
  21.      Cos_Produit := (Float'Rounding((Cos(La) * Cos(Lb) * Cos(G)) * 10000.0) /10000.0);
  22.      
  23.      sin_Produit := (Float'Rounding((Sin(La) * Sin(Lb))  * 10000.0) /10000.0);      
  24.      
  25.      Sum_Produit := (Float'Rounding((Cos_Produit + Sin_produit) * 10000.0) /10000.0);      
  26.  
  27.      P := Arccos(Sum_Produit);
  28.      
  29.      P := P * 6366.0;
  30.      
  31.      if  P - Distance > 0.0 then
  32.      --Text_Io.Put_Line("False" );
  33.      return False;
  34.      else
  35.      --Text_Io.Put_Line("TRUE" );
  36.     
  37.      return True;
  38.      end if;
  39.      
  40.   exception
  41.      when others =>
  42.      Print(Target);
  43.      Print(Item);
  44.      Text_Io.Put_Line("cos_produit"  & Float'Image(cos_produit));
  45.      Text_Io.Put_Line("sin_produit"  & Float'Image(sin_produit));
  46.      Text_Io.Put_Line("sum_produit"  & Float'Image(sum_produit));
  47.      Text_Io.Put_Line("P = " & Float'Image(P));
  48.      raise;
  49.   end Is_in;


Docn la question est de quelle unité dois-je convertir vers des radians ?


Message édité par Profil supprimé le 12-05-2016 à 08:28:33
n°2281265
h3bus
Troll Inside
Posté le 12-05-2016 à 08:07:07  profilanswer
 

Degrés vers radian
Rad = Deg*π/180


---------------
sheep++
n°2281268
Profil sup​primé
Posté le 12-05-2016 à 08:25:52  answer
 

h3bus a écrit :

Degrés vers radian
Rad = Deg*π/180


Merci h3bus.
 
Et du coup ton algo c'est quoi ?

n°2281272
rufo
Pas me confondre avec Lycos!
Posté le 12-05-2016 à 10:38:00  profilanswer
 

On te dit de convertir tes longitudes et latitudes qui sont exprimées en degrés en radians car les fonctions trigo cos(), sin()... des langages de prog attendent des radians en entrée et non des degrés. Du coup, les fonctions renvoient de mauvais résultats. A noter que la plupart des langages disposent des fonctions de conversions deg2rad et rad2deg ;)


Message édité par rufo le 12-05-2016 à 10:38:43

---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2281275
Profil sup​primé
Posté le 12-05-2016 à 11:31:10  answer
 

Mes fonction trigo attendent des Float.
Bref.
Je suis en train de tester avec une conversion en radians.
 
Paris à déjà morflé. Mais Paris c'est presque à l'est.
Par contre j'ai un New Orleans dans les citées en ruine, je sais pas si c'est proche du japon par contre.

n°2281277
rufo
Pas me confondre avec Lycos!
Posté le 12-05-2016 à 11:50:49  profilanswer
 


Oui, mais des float qui sont des radians.
 
"Paris c'est presque à l'est" :??:
"New Orleans dans les citées en ruine, je sais pas si c'est proche du japon"  :pt1cable:


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2281278
Profil sup​primé
Posté le 12-05-2016 à 11:56:03  answer
 

rufo a écrit :


Oui, mais des float qui sont des radians.
 
"Paris c'est presque à l'est" :??:
"New Orleans dans les citées en ruine, je sais pas si c'est proche du japon"  :pt1cable:


 
 
Toi t'as jamais testé Warborg !
 
Tu devrais.
 
 
A part ça je pense que j'ai un problème à la lecture du fichier de localisation.
Ca peut y faire aussi.

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Suivante

Aller à :
Ajouter une réponse
 

Sujets relatifs
gérer N partie avec des données partagées pour un wargame.[GtkAda] Image de fond pour un canvas avec Gtkada
[Ada Project] Anothers Implementation Of Artificial Intelligence[Ada][Programmation Orienté Objet] déclaration de procédure abstraite.
[Ada] Application graphique := comment séparer graphisme et service ?Compilation ADA+OpenGl avec GNAT GPS
[Ada+Gtk] Gtkada Ctree ou Tree Folder.... difficultésProblème de généricité avec Ada
Encore un problème avec les Socket avec Ada 
Plus de sujets relatifs à : [Ada][Warborg] un wargame avec GtkAda


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR