IFT6802 - TP3: Casino avec JADE (15% de note finale) ------------------------------------------------------ (version 1.1 : 14 fev. ) Echeance: mardi 16 mars. 2004 avant le debut du cours. On vous demande de programmer 3 agents JADE qui peuvent interagir dans un environnement "ouvert" c'est a dire que vos agents doivent pouvoir collaborer avec les agents des autres participants. Chaque casino implante un JEU (a somme nulle) ou les clients jouent contre le casino et chacun a deux actions possibles (1 ou 2). Vous devez choisir aleatoirement les "payoffs" pour le client Durant l'initialisation, vous calculez avec un generateur aleatoire les gains (pour le client) associes a chaque combinaison d'actions. Les gains doivent etre dans l'intervalle -5 a +5. Cette matrice restera la meme pour la duree de la simulation et ce sera au joueurs a decouvrir la valeur des cases et elaborer une strategie pour en tirer le benefice maximum. Les joueurs jouent a credit. A leur premiere intraction, le casino ouvre un compte de 100 Zlots (Unite monetaire de Zenda, paradis fiscal bien connu). Tant que le solde est positif, les joueurs peuvent continuer a jouer. Tout systeme qui implique des transactions monetaires doit faire attention aux problemes de securite et d'integrite. Pour illustrer ce contexte, nous vous demandons d'utiliser notre environnement cryptographique simule base sur les classes Crypto et Keys. Ces classes ne pretendent pas etre securitaire ou meme difficilement crackable; elles sont la pour montrer la fonctionalite de librairies crypto graphiques comme JCE de Java. Keys est une classe ou chaque instance genere aleatoirement 2 cles complementaires utilisable avec la classe Crypto. Voici l'usage: Keys k = new Keys(); int k1 = k.getPrivateKey(); int k2 = k.getPublicKey(); La classe Crypto regroupe des methodes utiles pour encrypter et decrypter du texte et des entiers ainsi que pour signer des chaines. Au depart vos agents, devront s'enregistrer avec le DF et y inscrire leur "type" et la valeur de leur cle publique. Ci-dessous, on vous donne une partie du code requis: DFAgentDescription dfd = new DFAgentDescription(); ServiceDescription sd = new ServiceDescription(); sd.setType( "Casino" ); // ou "Joueur" dfd.addServices(sd); ServiceDescription crypto = new ServiceDescription(); crypto.setType( "publicKey" ); crypto.setName( "K" + keys.getPublicKey()); // <<< Lire plus bas dfd.addServices(crypto); DFService.register(this,dfd); On prefixe la CLE avec un caractere quelconque (ici "K") car autrement JADE va l'encadrer de guillements. Joueurs: Les joueurs doivent choisir un des casinos disponibles. Dans notre environnement, il peut y en avoir plusieurs - pas necessairement celui que vous avez cree. Il jouent jusqu'a ce que leurs fonds soient epuises ou la terminaison de la simulation. Terminateur: Un agent dont la seule tache est d'expedier un REQUEST de terminer a tous les participants. Messages ========= Vous utiliserez les categories de messages: REQUEST, REFUSE, INFORM et le contenu de ces messages sera du texte ou les champs seront delimites par des virgules. Le premier champs du contenu indiquera le type du message et sera toujour en clair (non-crypte) Il y a 2 types de conversations: le deroulement d'un PARI et la demande du SOLDE. Chacune est initiee par le joueur qui devra choisir un CID, CONVERSTION_ID, unique pour chaque conversation. Deroulement d'un pari: ---------------------- Ici les deux parties vont fournir a l'autre leur coup encrypte afin que ni l'un ni l'autre puisse changer d'idee en voyant le coup de l'autre. Une fois les deux coups recus, il s'echangerons les cles de decryptage. Ces cles sont differentes pour chaque coup. m1) Joueur -> Casino REQUEST: COUP,, C'est a dire un REQUEST dont le contenu est la chaine: "COUP,," - le coup, "1" ou "2", est encrypte avec une cle qui change a chaque coup - le CID est crypte avec la cle privee du joueur. Le casino utilisera la cle publique (du DF) du joueur pour decoder ce champ et si le contenu est egal au CID, il sait que le message vient bien du joueur. m2a) Joueur <<- Casino REFUSE: 1,Fonds insuffisants m2b) Joueur <<- Casino INFORM: COUP,, m3) Joueur -> Casino INFORM: KEY, m4) Joueur <<- Casino INFORM: RESULTAT,, Demande de solde: ----------------- m5) Joueur -> Casino REQUEST: SOLDE m6) Joueur <<- Casino INFORM: SOLDE, Terminaison: m7) Terminator ->> TOUS (Joueurs & Casinos) REQUEST: TERMINER TRACE ====== On vous demande de prevoir, soi une trace, soi une interface graphique permet de suivre le d/roulement de la simulation et d'evaluer la performance des joueurs et casinos. Fin de simulation ================== Les joueurs devront imprimer leurs gains. Les casinos doivent imprimer le sole pour chaque joueur.