Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Projets de programmation


Index du Forum » Projets de programmation » Le jeu de la coopération
Cyatophilum Hors ligne Membre Points: 11 Défis: 0 Message

Le jeu de la coopération

Posté le 09/06/2012 14:40

C'est un jeu à deux joueurs qui a pour but d'étudier les processus de décision.
On choisit un nombre de manches. A chaque manche, les deux joueurs choisissent secrètement soit de coopérer soit de trahir. Chaque manche rapporte un certain nombre de points, selon le tableau suivant.


Imaginons qu’avec un même partenaire, vous jouiez 100 manches d'affilée. Il vous faut choisir une stratégie, c’est-à-dire une méthode permettant pour chaque tour de décider de votre prochain coup, en fonction de ce qui s’est passé les tours précédents.

A vous de proposer des stratégies que vous pensez gagnantes, lorsque les deux premières stratégies seront données, je les opposerait sur un centaine de manche et vous donnerais les résultats, et ainsi de suite !
A vous de trouver La Stratégie Gagnante !


Cyatophilum Hors ligne Membre Points: 11 Défis: 0 Message

Citer : Posté le 10/06/2012 19:09 | #


Tous les joueurs ne peuvent rencontrer qu'un seul joueur à la fois. On garde le même tableau de points. Chaque joueur ne tombe plus en face d'un seul joueur mais de plusieurs au fil des manches. Voila pourquoi trahir à tous les coups ne rapportera pas le maximum de points.

Je me demandais juste comment organiser équitablement la rencontre entre les joueurs...

Je posterai mon code plus tard, car en basic il change à chaque fois que les stratégies changent. Je vais plutôt programmer le tout en C, pour les variables ça sera plus simple.

Edit: Voila comment je pense programmer le jeu: (je débute en C)


Début programme:

Chaque stratégie logera dans un fonction:
Fonction 1, stratégie 1 renvoie une valeur qui correspond à trahir ou coopérer.
Fonction2, stratégie 2... etc.

For 1-> NuméroManche To NombreDeManches
For 1-> NuméroJoueur To NombreDeJoueurs
Le joueur n°(valeur de la variable NuméroJoueur) rencontre 1 des 3 autres joueurs aléatoirement. Il choisit alors de coopérer ou non grâce au fonctions correspondantes.
Attribution des points
Next
Next
Afficher le score.

Dites moi ce que vous en pensez
Louloux Hors ligne Ancien administrateur Points: 7035 Défis: 61 Message

Citer : Posté le 11/06/2012 18:59 | #


Le problème de le faire en C est que tu devrais recompiler pour chaque stratégie...
Au passage, tu es au courant que ton code ressemble à tout sauf du C ?
Cyatophilum Hors ligne Membre Points: 11 Défis: 0 Message

Citer : Posté le 11/06/2012 19:15 | #


Louloux a écrit :

Le problème de le faire en C est que tu devrais recompiler pour chaque stratégie...
Au passage, tu es au courant que ton code ressemble à tout sauf du C ?


Bien sur, mais comme on est sur un forum ou la majeure partie des gens programment en basic j'ai écrit mon programme en français, pas directement en C.
Si tu as une idée pour éviter de recompiler le programme...
Louloux Hors ligne Ancien administrateur Points: 7035 Défis: 61 Message

Citer : Posté le 11/06/2012 19:29 | #


Le C est entièrement constitué de fonctions...
Autant mettre "pour" que mettre un faux mot clé en anglais.

Ajouté le 11/06/2012 à 19:30 :
Au fait, si vous coulez pas mon idée de 4 joueurs en même temps, vous voulez faire comment ? C\'est pas mal mon idée, ça met du piquant. Parce qu\'avec la règle à 2 si tu trahis tu ne peux pas perdre...
Nitrosax Hors ligne Ancien rédacteur Points: 1061 Défis: 17 Message

Citer : Posté le 12/06/2012 09:47 | #


Eh bah si !

Cyatophilum propose de faire une sorte de tournois où les IA s'affrontent aléatoirement.

Si un joueur trahit à chaque fois, il risque de ne gagner dans certains cas qu'un seul point par manche. Au même tour, les autres joueurs s'affrontent. S'ils coopèrent tous les deux, ils repartent avec trois points chacun.

Dans ce cas là, la stratégie de Cartix n'est forcément avantageuse.

@Cyatophilum : je te conseille de coder le programme en basic. Ce sera nettement plus simple
Cyatophilum Hors ligne Membre Points: 11 Défis: 0 Message

Citer : Posté le 12/06/2012 11:01 | #


Nitrosax a écrit :

Eh bah si !

Cyatophilum propose de faire une sorte de tournois où les IA s'affrontent aléatoirement.

Si un joueur trahit à chaque fois, il risque de ne gagner dans certains cas qu'un seul point par manche. Au même tour, les autres joueurs s'affrontent. S'ils coopèrent tous les deux, ils repartent avec trois points chacun.

Dans ce cas là, la stratégie de Cartix n'est forcément avantageuse.

@Cyatophilum : je te conseille de coder le programme en basic. Ce sera nettement plus simple


Tu as compris ce que je voulais dire
Vu qu'en ce moment je révise le bac, je vais rester sur du Basic pour le moment.
Je vous envoye le code dès que ça ressemble à quelque chose.
(En C, rien que pour tirer un chiffre entre 1 et 4 aléatoirement ... )
Totoyo Hors ligne Membre d'honneur Points: 16093 Défis: 102 Message

Citer : Posté le 12/06/2012 12:04 | #


La fonction de base pour générer un nombre aléatoire est buggé. Pierrotll et Eiyeron m'avait fourni un code fonctionnel (impossible de remettre la main dessus )
Eiyeron Hors ligne Ancien modérateur Points: 5525 Défis: 57 Message

Citer : Posté le 12/06/2012 12:13 | #


C'est à dire? Toto, si tu précises, je peux peut-être le retrouver
.
Totoyo Hors ligne Membre d'honneur Points: 16093 Défis: 102 Message
Eiyeron Hors ligne Ancien modérateur Points: 5525 Défis: 57 Message

Citer : Posté le 12/06/2012 13:44 | #


En quoi elle est buguée?
Totoyo Hors ligne Membre d'honneur Points: 16093 Défis: 102 Message

Citer : Posté le 12/06/2012 16:16 | #


Bah, Pierrotll m'a dit qu'elle générait mal un nombre aléatoire. En fait, ce n'était pas aussi aléatoire que ça...
Pierrotll Hors ligne Ancien administrateur Points: 5488 Défis: 41 Message

Citer : Posté le 12/06/2012 17:02 | #


Quoi ?
J'ai du mal me faire comprendre parce que je ne vois pas de quoi tu parles.
Les fonctions standards rand et srand fonctionnent normalement.
Totoyo Hors ligne Membre d'honneur Points: 16093 Défis: 102 Message
Louloux Hors ligne Ancien administrateur Points: 7035 Défis: 61 Message

Citer : Posté le 12/06/2012 18:19 | #


Il est vrai que rand() a un "bug" : les nombres pseudo-aléatoires sont les mêmes à chaque fois que tu relances le programme. D'où l'utilité de srand().
Eiyeron Hors ligne Ancien modérateur Points: 5525 Défis: 57 Message

Citer : Posté le 12/06/2012 18:22 | #


le srand pour initialiser le générateur d'aléatoires, tu l'initialises avec le RTC afin d'avoir à chaque lancement des nombres différents
Pierrotll Hors ligne Ancien administrateur Points: 5488 Défis: 41 Message

Citer : Posté le 12/06/2012 18:31 | #


C'est la fonction time qui n'est pas implémentée (et qu'on remplace par RTC_GetTicks), rand et srand sont tout à fait normales
Totoyo Hors ligne Membre d'honneur Points: 16093 Défis: 102 Message
Purobaz Hors ligne Membre d'honneur Points: 2690 Défis: 110 Message

Citer : Posté le 12/06/2012 20:36 | #


Pourquoi programmer ce jeu en C, pour quelque chose de si simple ?
Pour la gestion des variables, utilise les listes. Je vais essayer en basic...
I'll be back !
pour plus de fun
mes programmes fun
de technique
mes projets
et de Swag
les projets que je soutiens
Cyatophilum Hors ligne Membre Points: 11 Défis: 0 Message

Citer : Posté le 12/06/2012 21:46 | #


Ouais finalement je vais le programmer en Basic. Et je vais avoir besoin de votre aide =S.
Purobaz : ça à l'air simple.. en effet ...
J'ai commencé mais il reste pas mal de boulot.

Les action ( trahir=0 , coopérer = 1 ) seront stockées dans List n [1]
Les scores seront stockés dans List n [3]
n correspond au numero de la stratégie.

Début du programme:

1 -> List 1 [1]  // Stratégie 1 coopére au début.//
1 -> List 2 [1]
0 -> List 3 [1]
1 -> List 4 [1]
0 -> List 1 [3]  // Les scores sont mis à zéro//
0 -> List 2 [3]
0 -> List 3 [3]
0 -> List 4 [3]
1 -> Z
// Manche Z //
// La stratégie 1 rencontre une des 3 autres stratégies.//
Do
Int 4 Ran# +1 -> A
LpWhile A =1
// cas où la elle rencontre la 2ème stratégie//
    if A = 2 : then if List 1 [1] = 1
then List 1 [3] +3 -> List 1 [3]
       List 2 [3] +3 -> List 2 [3]
else List 1 [3] +5 -> List 1 [3]
ifend : 1 -> List 1 [1] : if end
// cas où la elle rencontre la 3ème stratégie//
    if A = 3 : then if List [1] = 1
then List 3 [3] + 5 -> List 3 [3]
else List 1 [3] + 1 -> List 1 [3]
       List 3 [3] + 1 -> List 3 [3]
ifend : 0 -> List 1 [1] : ifend
// cas où la elle rencontre la 4ème stratégie//
    if A = 4
then if Frac (Z/2) = 0
       then if List 1 [1] = 1
               then List 1 [3] + 3 -> List 1 [3]
                      List 4 [3] + 3 -> List 4 [3]
               else List 1 [3] + 5 -> List 1 [3]
             ifend
       else if List 4 [1] = 0 And List 1 [1] = 0
              then List 1 [3] + 1 -> List 1 [3]
                     List 4 [3] + 1 -> List 4 [3]
       else if List 4 [1] = 0 And List 1 [1] = 1
              then  List 4 [3] + 5 -> List 4 [3]
       else if  List 4 [1] = 1 And List 1 [1] = 0
              then  List 1 [3] + 5 -> List 1 [3]
       else if List 4 [1] = 1 And List 1 [1] = 1
              then  List 1 [3] + 3 -> List 1 [3]
                      List 4 [3] + 3 -> List 4 [3]
       ifend
ifend


En gros, je me suis arrêté à la première manche, et celle-ci n'est pas terminée.
Car la stratégie 1 rencontre 1 des 3 autre stratégies. Mais j'ai un problème:
-> Un stratégie peut rencontrer plusieurs stratégies pendant la même manche ( si je continue mon code pour les autres stratégies).
-> Le code est trop long, comment faire pour le raccourcir ? Y-a t-il des erreurs ?


Eiyeron Hors ligne Ancien modérateur Points: 5525 Défis: 57 Message

Citer : Posté le 12/06/2012 21:57 | #


Pas meiux avec une balise code?
Pierrotll Hors ligne Ancien administrateur Points: 5488 Défis: 41 Message

Citer : Posté le 13/06/2012 00:02 | #


Do
Int 4 Ran# +1 -> A
LpWhile A =1
Int 3 Ran#+2->A

Je ne comprends vraiment pas pourquoi tu fais un code aussi compliqué pour si peu de choses. Le nombre de points gagnés dans telle ou telle situation est écrit plein de fois à plein d'endroits différents. Le cas où le joueur 1 rencontre le joueur 2 ne dépend pas du contenu de la liste 2, à quoi sert la liste 2?

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 78 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd