|
Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
Sujet : Programmation événementielle [ Divers / Trucs & Astuces ] (Kite37)
Informations & options pour cette discussion
vendredi 27 juin 2008 à 19:24:15 |
Programmation événementielle

Kite37
|
Bonjour !
Je suis actuellement en train de développer un petit jeu fonctionnant via socket en mode asynchrone, et afin de gagner en automatisme tout en gardant une classe de moteur de connexion réutilisable je m'intéresse à la création d'événements.
Quelques petites questions me sont venues alors à l'esprit :
- le application.doevents agit-il aussi pour les événements personnalisés?
- une fonction/sub qui envoie un événement via raiseEvent attend-elle la fin de la sub de gestion de l'événement pour se terminer/continuer?
Le dernier point est celui qui m'intéresse le plus : en effet, la sub que je cherche à démarrer par événement est la boucle globale du jeu, lorsque le client se connecte au joueur serveur, et cela serait génant si l'application se mettait a freezer ...
Voilà, en attente de vos réponses, merci d'avance !
Cordialement, KiTe
ps : je posterais par la suite sur ce post les problèmes rencontrés, afin d'éviter de créer 50 sujets .. on ne sait jamais ^ ^
|
|
|
vendredi 27 juin 2008 à 19:49:12 |
Re : Programmation événementielle

PCPT
|
salut, - le application.doevents(...)oui - une fonction/sub qui envoie un événement(...)oui. plus précisément c'est pas qu'elle "attend", c'est que ce n'est juste plus son tour ^^ - la sub que je cherche à démarrer (...)oh çà sent mauvais çà ^^ tu ne devras pas démarrer une sub qui va tourner en boucle une sub va déclencher la connexion, tu va traiter une suite logique (identification, validation etc..) jusqu'à arriver au traitement dans le _DataArrival (ou équivalent en dotnet...) surtout pas de boucle qui ne s'interrompt que par la fermeture!! par contre tu dis au départ jeu fonctionnant via socket en mode asynchrone, ummm çà veut dire que le joueur 2 peu jouer avant la réponse qu'il attend? plusieurs threads? pour un jeu à mon avis il faut que çà soit une connexion synchrone... ++ Prenez un instant pour répondre à ce sondage svp 
|
|
|
vendredi 27 juin 2008 à 20:20:07 |
Re : Programmation événementielle

Kite37
|
Merci pour tes réponses =)
Le jeu est synchrone, seul le mode de connexion et de réception des données ne l'est pas.
Et bien oui, une boucle ça pue, je l'ai remarqué il y a bien longtemps déjà, mais je n'arrive pas a m'en séparer..
En effet, voici le fonctionnement globale de mon jeu, un jeu de carte type tetra master, (version J vs IA) :
Lorsqu'un des joueurs joue, passe son tour ou se défausse de sa main, j'appelle une fonction de vérification globale, qui gère les informations affichées dans l'interface de jeu (points de vie, points d'action pour jouer des cartes, cartes sur le plateau, etc) et qui fait jouer l'IA si besoin. Ici est de problème.
En effet, si l'IA joue, alors la fonction de vérification est de nouveau appelée, sans qu'elle ne se soit terminée précédement... La fonction de vérification peut alors etre appelée 2,3 de manière récurrente.
De même, si je fais une fonction de vérification de l'IA séparée de la vrification globale.
Ce problème était réglé dans le fait de faire une boucle globale, ne s'achévant qu'à la fin de la partie (et non fermeture du programme) :
Public Shared Sub BoucleGlobale() While _gameOver = False If Not _gameType = TypeGame.Remote And _playerTour = PlayerType.Adversaire Then IAVerif() End If Application.DoEvents() verif() Application.DoEvents() End While ClearGame() End Sub 'BoucleGlobale
Dans ce cas ci, vérfi et IAverif sont totalement indépendantes, donc plus de récurrences, plus de problèmes ... Je pense que si j'arrive a régler ça, alors les problèmes liés au socket se régleront aisément.
J'ai bien réussi a régler le problème version bidouille, mais je n'aime pas ça ... (un jeu de variable booléenne, c'est bof =/ )
Voilà, si il y a des idées.. Cordialement, KiTe
|
|
|
vendredi 27 juin 2008 à 20:49:51 |
Re : Programmation événementielle

PCPT
|
des idées, peut-être sur le principe oui (attention, à traduire mentalement de vb6 vers dotnet ^^) J vs IA, ou J vs J, exactement pareil le principe réside dans "où j'en suis", à savoir "à quelle étape du jeu" en gros on a quoi.... [***] *ouverture appli *connexion (vers serveur, ou écoute pour attente client, ou appel de l'IA) *début de partie, init tout à 0 + "qui est le premier à jouer" et à partir de ce premier coup, il n'y a plus d'étape. donc tu n'as rien à attendre **jusqu'à -> victoire/défaite/null çà s'arrêtera comment alors? [---] *je (serveur) déconnecte (je fais 'quitter', ou 'recommencer', déco adsl naturelle, ou je prends un tournevis pour démonter mon modem sans raison ^^) *idem pour mon adversaire (client) si J vs J *coupure de courant chez l'un ou l'autre (çà reste toujours du même ordre = erreur à gérer) *je perds la partie *je gagne la partie *selon le jeu on est dans une impasse, bloqués qui impliquera un match NULL un peu plus concrêtement çà PEUT donner une sorte d'enum selon ce qu'on vient de dire, et arrivé à l'avant dernière étape, tu reçois juste les data à analser, et donc fais tes calculs (score, bouger des pièces, etc...) uniquement là (donc si mStep = GameRunning dans le _DataArrival) + gestion déco etc...., + perdant gagnant qu'en dis-tu? (pas super facile à expliquer à l'écrit....) Prenez un instant pour répondre à ce sondage svp 
|
|
|
vendredi 27 juin 2008 à 21:14:53 |
Re : Programmation événementielle

Kite37
|
J'ai exactement ça : en gros on a quoi.... [...] **jusqu'à -> victoire/défaite/null
Et tout les cas d'arrêt de jeu que tu énonces sont gérés (plantage de la connexion entre client et serveur, ou fin de partie)
Pour ce qui est du traitement des données je fais comme ça :
-cas JvJ remote : on reçoit les datas par socket, on les analyse dans une fonction prévues pour, et en fonction de ce qu'on reçoit on agit (pose de carte, perte de PV, etc), mais le tout en MEMOIRE Puis une fonction de vérification est appelée, et transcrit tout ce qui est en mémloire (Pv, etc) dans l'interface visuelle. Seules les cartes sont posées directement a l'analyse des datas.
coté J v IA, c'est en gros la même chose, sauf que ya pas de socket.
Donc a lire tes conseil, la structure globale du jeu est bien respectée, reste juste a virer cest sub de vérification et a inclure les modification visuelle directement dans les fonction d'analyse... Cependant le problème de récurrence reste le même, il faut bien faire jouer l'IA, qui ré-appelle ces sub d'analyse avant leur fin =S
Où que je regarde, ce pb de récurrence reste, je vais essayer de faire avec, en bidouillant un peu et en réfléchissant a comment limiter cela.. Ca restera tjrs plus économique qu'une boucle barbare..
|
|
|
vendredi 27 juin 2008 à 22:12:34 |
Re : Programmation événementielle

PCPT
|
du peu que j'ai lu en dotnet et de "comment je ferais en vb6", tu ne peux pas plutôt gérer dans ton appli un objet USER (donc forcément 2) régit soit par une data venant d'une IA, soit de certaines touches d'un clavier, soit d'un socket? c'est dans ce sens que j'entendais " J vs IA, ou J vs J, exactement pareil" tu as tes 2 SEULS users, avec leurs évènements "identiques" mais respectifs, qui renvoient leurs actions à ton appli. actions elles régient soit par ton fonctionnement IA, soit par pression clavier, soit par réception de data enfin çà me semble le plus propre..., je ne vois pas quel intérêt ton appli peut avoir à différencier "de quoi ou comment ou d'où" les data arrivent... Prenez un instant pour répondre à ce sondage svp 
|
|
|
Cette discussion est classé dans : programmation, jeu, événement, intéresse, événementielle
Répondre à ce message
Sujets en rapport avec ce message
Access, problème d'enregistrement en programmation [ par DarkSchneider ]
Bonjour, le problème qui se pose est le suivant :On m'a dit qu'il était possible d'enregistrer un jeu d'enregistrement sans qu'il y est au préalable d
Jeu de carte multijoueur en ligne [ par zaptfire ]
Bonjour, Je souhaite monter un projet de jeu de carte multijoueur via le net réference : http://www.urban-rivals.com (avec un autre systeme de jeu) j
Programmation événement click dasn un état [ par Pagodvd ]
Bonjour,j'ai créer une requte par sql, ensuite j'aimerais créer un état en découlant, par programmation,maintenant on voit que l'état pour afficher le
Rien à voir avec la programmation !! [ par Kristof_Koder ]
Si comme moi vous adorez coder en musique, allez-donc faire un tour sur http://www.deezer.com ! C'est gratuit, légal, et il y a des dizaines de milli
Problème KeyDown [ par turchi ]
Bonjour à tous, Je vais essayer d'être le plus possible possible : j'essaie de créer un controle en VB 2005 Express. ma classe hérite donc de "Syste
détéction d'événement windows [ par sephiroth27 ]
bonjour a tous,voila je cherche le moyen via les événements windows ou autre, une solution pour que mon programme lance une instruction (controle d'in
Connaitre la couleur d'un pixel [ par Razor_rws1 ]
Salut, ça fais 3 fois que je pose la même question mais sans succès. Pourtant, il me semble que la question ne sois pas si compliqué. J'imagine que je
API [ par gokudo ]
j'ai besoin d'un tutorial detaillé sur les API, je commance en programmation 32bit et j'aimerai bien avoir le max d'information si qq'1 a un site ou j
débuter jeu de l'oie ou bonne paye [ par e1huet ]
Je suis débutant en vba et je dois développer un jeu sur le principe d'un jeu de plateau (jeu de l'oie, bonne paye) mais je ne sais vraiment pas comm
jeu de domino [ par Truande ]
Salut,je suis sur un projet sur les jeu de domino en c sur linux.Je susi étudiante en master science cogntive mais j'ai de grosses difficultés en c.L
Livres en rapport
|
Téléchargements
Logiciels à télécharger sur le même thème :
Comparez les prix Nouvelle version

LG KP501
Entre 9€ et 159€
|