JeuWeb - Crée ton jeu par navigateur
Cherche comment développer jeu de cartes - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Cherche comment développer jeu de cartes (/showthread.php?tid=715)



Cherche comment développer jeu de cartes - Z4ng3tsu - 09-05-2008

Salut à tous !

Voilà je voulais savoir si certains avaient déjà développé un jeu de rôle en carte (style Munchkin ou autres pour ceux qui connaissent). Je serais super motivé pour faire mais le truc c'est que c'est mon premier jeu en php. Donc niveau idée pour comment procéder, comment stocker les cartes, les joueurs enfin un peu tout me vient pas encore même si je sens que ma base mysql me servira bien lol.

Donc voilà si certains d'entre vous ont des idées voir de l'expérience et peuvent me conseiller, j'adorerai les écouter et leur répondre.

Merci d'avance !


RE: Cherche comment développer jeu de cartes - Mysterarts - 09-05-2008

Moi je pense que le secret pour débuter c'est deux choses (à condition d'avoir les bases styles du siteduzéro) :
- Ne pas se lancer direct dans le jeu sans avoir essayé de faire des scripts divers et varié pour l'entraînement (news, système de membres etc...) C'est dur de faire des trucs pour rien, mais en réalité, y'a pas mieux pour acquérir le logique d'un langage...
- Avant de lancer le logiciel de progra, prendre papier et crayon et mettre à plat toutes ses idées. Puis sélectionner celle qui sont compatibles entre elles (rien ne sert d'essayer de tout mettre...). Si l'étape 1 a bien été faite, à partir de là les mécanisme du jeux devrai apparaître tout seul... La plupart du temps, on définit entre autres les tables SQL, en partant souvent d'une banal tables de système de membre : d'où l'intéret d'avoir essayer d'en faire un...

Et surtout, se préparer à être patient :p
Après, d'autres questions plus précises te viendront, et ce sera plus facile de te répondre, parce que là, c'est tellement vaste !
Bon courage Wink

Mysterarts


RE: Cherche comment développer jeu de cartes - Harparine - 09-05-2008

C'est un bon exercice de s'amuser à coder un système de jeu de société. Je pense que personnellement, je commencerais par bosser sur un éditeur de cartes de jeu relativement générique (exemple, sur Munchkin, pouvoir sélectionner le type de la carte, le bonus, etc.) permettant d'enregistrer les cartes dans une ou plusieurs tables de la BDD.

Ensuite, je pense que je travaillerais sur un système très orienté objet (vu que les éléments peuvent être manipulés physiquement) avec des classes de type carte, main, etc.

Essaie de bosser sur un jeu aux règles très simples avant (ex : la bataille) pour mettre au point un modèle qui fonctionne. Par contre, le plus adapté à ce genre de truc est une interface flash et un serveur socket parce que tu risques de galérer pour la synchronisation.

Dans tous les cas, tu es obligé d'utiliser une mémoire tampon (un fichier) pour la main en cours. Par exemple, si la méthode jouer() de l'objet joueur envoie la carte jouée au serveur, il faut que la référence de la carte soit enregistrée dans un fichier. Quand le deuxième joueur joue également sa carte, le serveur peut enfin résoudre le
pli en allant chercher la carte du premier joueur dans le fichier. Les sockets sont vraiment adaptées à cette configuration mais tu peux simuler une synchronisation en effectuant des refresh réguliers avec Ajax.
@+ Wink


RE: Cherche comment développer jeu de cartes - Z4ng3tsu - 09-05-2008

Merci déjà pour vos conseils. Il est clair que poser sur papier le projet et utiliser la POO s'impose. J'avoue que j'hésite encore entre faire ce jeu en php ou en C#, voir les deux hé hé...

Je travaillerais sur ce projet avec un collègue probablement donc ce sera pas mal de comparer nos idées. En tout cas je suis pas mal motivé.

Niveau synchronisation, c'est vrai que ça pourrait poser problème. J'ai pensé à l'AJAX mais n'y ayant pas encore touché je vais tester ça. D'ailleurs si jamais quelqu'un a un tuto ou un pas-à-pas, je suis pleinement preneur !

En tout cas merci déjà


RE: Cherche comment développer jeu de cartes - Harparine - 09-05-2008

Ajax s'impose, je pense. Regarde du côté du framework jQuery qui permet d'utiliser Ajax de façon simplifiée.


RE: Cherche comment développer jeu de cartes - Anthor - 10-05-2008

Des petites pistes pour les insomniaques pour la bataille et jQuery

=> http://www.anthor.net/test/batailleJS/index.htm

Code PHP :
<?php 
(function($) {
$.
PlayCards = {};

$.
PlayCards.defaults = {
Cards: [
{
"card":"2 de Coeur", "value":2 },
{
"card":"3 de Coeur", "value":3 },
{
"card":"4 de Coeur", "value":4 },
{
"card":"5 de Coeur", "value":5 },
{
"card":"6 de Coeur", "value":6 },
{
"card":"7 de Coeur", "value":7 },
{
"card":"8 de Coeur", "value":8 },
{
"card":"9 de Coeur", "value":9 },
{
"card":"10 de Coeur", "value":10 },
{
"card":"Valet de Coeur", "value":11 },
{
"card":"Dame de Coeur", "value":12 },
{
"card":"Roi de Coeur", "value":13 },
{
"card":"As de Coeur", "value":15 },
{
"card":"2 de Carreau", "value":2 },
{
"card":"3 de Carreau", "value":3 },
{
"card":"4 de Carreau", "value":4 },
{
"card":"5 de Carreau", "value":5 },
{
"card":"6 de Carreau", "value":6 },
{
"card":"7 de Carreau", "value":7 },
{
"card":"8 de Carreau", "value":8 },
{
"card":"9 de Carreau", "value":9 },
{
"card":"10 de Carreau", "value":10 },
{
"card":"Valet de Carreau", "value":11 },
{
"card":"Dame de Carreau", "value":12 },
{
"card":"Roi de Carreau", "value":13 },
{
"card":"As de Carreau", "value":15 },
{
"card":"2 de Trèfle", "value":2 },
{
"card":"3 de Trèfle", "value":3 },
{
"card":"4 de Trèfle", "value":4 },
{
"card":"5 de Trèfle", "value":5 },
{
"card":"6 de Trèfle", "value":6 },
{
"card":"7 de Trèfle", "value":7 },
{
"card":"8 de Trèfle", "value":8 },
{
"card":"9 de Trèfle", "value":9 },
{
"card":"10 de Trèfle", "value":10 },
{
"card":"Valet de Trèfle", "value":11 },
{
"card":"Dame de Trèfle", "value":12 },
{
"card":"Roi de Trèfle", "value":13 },
{
"card":"As de Trèfle", "value":15 },
{
"card":"2 de Pique", "value":2 },
{
"card":"3 de Pique", "value":3 },
{
"card":"4 de Pique", "value":4 },
{
"card":"5 de Pique", "value":5 },
{
"card":"6 de Pique", "value":6 },
{
"card":"7 de Pique", "value":7 },
{
"card":"8 de Pique", "value":8 },
{
"card":"9 de Pique", "value":9 },
{
"card":"10 de Pique", "value":10 },
{
"card":"Valet de Pique", "value":11 },
{
"card":"Dame de Pique", "value":12 },
{
"card":"Roi de Pique", "value":13 },
{
"card":"As de Pique", "value":15 },
{
"card":"Joker", "value":20 },
{
"card":"Joker", "value":20 }
]
};

$.fn.
extend({
PlayCards: function($settings) {
// Ajout défauts et options passées
$settings = $.extend({}, $.PlayCards.defaults, $settings);

return
this.each(function() {
var
$this = $(this);

createPlayField($settings, $this);

// Number of card submitted
$('.debug ul', $this).prepend('<li>Nombre de Cartes : ' + $settings.Cards.length + '</li>');

// Bind a trigger on begin game
$('.ControlDeck .newgame', $this).click(function(){
BeginGame($settings, $this);
});
});
}
});

function
createPlayField($settings, $this) {
if(
$this.children().length > 0 )
return;

// Create Command Menu
$this.append('<div class="ControlDeck">\
<input type="button" class="newgame" value="Commencer une partie" />\
<input type="button" class="resolveturn" value="Jouer le tour" disabled="true" />\
</div>'
);

// create the players Decks
$this.append('<div class="P1Deck"><ul></ul></div><div class="P2Deck"><ul></ul></div>');

// Create Debug
$this.append('<div class="debug"><ul><li>PlayField initialisé</li></ul></div>');
}

function
BeginGame($settings, $this) {
$settings = $.extend({ "Turn": 0, "Stack": [], "P1Cards": [], "P2Cards": [] }, $settings);

// On vide le terrain de jeu.
$('.P1Deck ul', $this).html('<li><h5>Bienvenue Joueur 1</h5></li>');
$(
'.P2Deck ul', $this).html('<li><h5>Bienvenue Joueur 2</h5></li>');

// On mélange les cartes
RandomizeCards($settings.Cards);

// On distribue les cartes entre les 2 joueurs
for(var i=0; i < $settings.Cards.length; i++)
{
if (
i%2 == 1)
$settings.P1Cards.push($settings.Cards[i]);
else
$settings.P2Cards.push($settings.Cards[i]);
}

// On recherche si le bouton de résolution des tours est présent.
// Supression et recréation plus rapide que bind/unbind
if($('.ControlDeck .resolveturn', $this).length > 0)
$(
'.ControlDeck .resolveturn', $this).remove();

// On récréé un nouveau bouton avec les bons $settings en click
$('.ControlDeck', $this).append('<input type="button" class="resolveturn" value="Jouer le tour" />')
.
find('.resolveturn')
.
click(function(){
ResolveTurn($settings, $this);
});

$(
'.debug ul', $this).html('<li>Démarrage d\'une nouvelle partie</li>');
}

function
ResolveTurn($settings, $this) {
$settings.Turn++;

// Tirage carte du joueur 1
var P1card = $settings.P1Cards.shift();
$(
'.P1Deck ul', $this).html('<li>Vous tirez : <b>'+ P1card.card +'</b></li>');

// Tirage carte du joueur 2
var P2card = $settings.P2Cards.shift();
$(
'.P2Deck ul', $this).html('<li>Vous tirez : <b>'+ P2card.card +'</b></li>');

if(
$settings.Stack.length == 0)
{
// Joueur 1 a une plus grande carte
if ( P1card.value > P2card.value )
{
$settings.P1Cards.push(P1card, P2card);
$(
'.P1Deck ul', $this).append('<li>Vous gagnez : \
<b>'
+ P2card.card +'</b> grace à <b>'+ P1card.card +'</b></li>');
$(
'.P2Deck ul', $this).append('<li>Vous perdez : \
<b>'
+ P2card.card +'</b> face à <b>'+ P1card.card +'</b></li>');
}
// Joueur 2 a une plus grande carte
else if ( P1card.value < P2card.value )
{
$settings.P2Cards.push(P1card, P2card);
$(
'.P1Deck ul', $this).append('<li>Vous perdez : \
<b>'
+ P1card.card +'</b> face à <b>'+ P2card.card +'</b></li>');
$(
'.P2Deck ul', $this).append('<li>Vous gagnez : \
<b>'
+ P1card.card +'</b> grâce à <b>'+ P2card.card +'</b></li>');
}
// Joueur ont tous les deux la même carte
else
{
$settings.Stack.push(P1card, P2card);
ResolveTurn($settings, $this);
return;
}
}
// Descartes sont déjàs placées dans le pot...
if($settings.Stack.length > 0)
{
// Joueur 1 a une plus grande carte
if ( P1card.value > P2card.value )
{
$settings.P1Cards.push(P1card, P2card);
for(var
i=0; i < $settings.Stack.length; i++)
$settings.P1Cards.push($settings.Stack.shift());

$(
'.P1Deck ul', $this).append('<li>Vous gagnez : \
<b>'
+ P2card.card +'</b> grace à <b>'+ P1card.card +'</b>, \
plus '
+ $settings.Stack.length +' cartes d\'égalitées.</li>');
$(
'.P2Deck ul', $this).append('<li>Vous perdez : \
<b>'
+ P2card.card +'</b> face à <b>'+ P1card.card +'</b>, \
plus '
+ $settings.Stack.length +' cartes d\'égalitées.</li>');

$settings.Stack = [];
}
// Joueur 2 a une plus grande carte
else if ( P1card.value < P2card.value )
{
$settings.P2Cards.push(P1card, P2card);
for(var
i=0; i < $settings.Stack.length; i++)
$settings.P1Cards.push($settings.Stack.shift());

$(
'.P1Deck ul', $this).append('<li>Vous perdez : \
<b>'
+ P1card.card +'</b> face à <b>'+ P2card.card +'</b>, \
plus '
+ $settings.Stack.length +' cartes d\'égalitées.</li>');
$(
'.P2Deck ul', $this).append('<li>Vous gagnez : \
<b>'
+ P1card.card +'</b> grâce à <b>'+ P2card.card +'</b>, \
plus '
+ $settings.Stack.length +' cartes d\'égalitées.</li>');

$settings.Stack = [];
}
// Joueur ont tous les deux la même carte
else
{
$settings.Stack.push(P1card, P2card);
ResolveTurn($settings, $this);
return;
}
}

$(
'.P1Deck ul', $this).append('<li>Il vous reste <b>'+ $settings.P1Cards.length +'</b> cartes</li>');
$(
'.P2Deck ul', $this).append('<li>Il vous reste <b>'+ $settings.P2Cards.length +'</b> cartes</li>');

// Un joueur a t-il perdu ?
if( $settings.P1Cards.length == 0 || $settings.P2Cards.length == 0 )
{
GameOver($settings, $this);
}

var
debug_return = '<li>Tour '+$settings.Turn+'\
[ P1 => ( '
+ $settings.P1Cards.length +' cartes /\
'
+GetPlayerPoints($settings.P1Cards)+' points ) | \
P2 => ( '
+ $settings.P2Cards.length +' cartes / \
'
+GetPlayerPoints($settings.P2Cards)+' points ) ]</li>';

$(
'.debug ul', $this).prepend(debug_return);

}

function
GameOver($settings, $this) {
// Suppression du bouton de resolution du tour.
$('.ControlDeck .resolveturn', $this).attr('disabled', true);

// Joueur 1 a perdu
if( $settings.P1Cards.length == 0 )
{
$(
'.P1Deck ul', $this).append('<li><h5>Vous avez perdu en '+$settings.Turn+' tours</h5></li>');
$(
'.P2Deck ul', $this).append('<li><h5>Vous avez gagné en '+$settings.Turn+' tours</h5></li>');
}
// Joueur 2 a perdu
if( $settings.P2Cards.length == 0 )
{
$(
'.P1Deck ul', $this).append('<li><h5>Vous avez gagné en '+$settings.Turn+' tours</h5></li>');
$(
'.P2Deck ul', $this).append('<li><h5>Vous avez perdu en '+$settings.Turn+' tours</h5></li>');
}

$(
'.debug ul', $this).prepend('<li>Partie Terminée</li>');
}

function
GetPlayerPoints($PlayerCards) {
var
points = 0;

for(var
i=0; i < $PlayerCards.length; i++)
points += $PlayerCards[i].value;

return
points;
}

function
RandomizeCards ( myArray ) {
// http://sedition.com/perl/javascript-fy.html
var i = myArray.length;
if (
i == 0 ) return false;
while ( --
i ) {
var
j = Math.floor( Math.random() * ( i + 1 ) );
var
tempi = myArray[i];
var
tempj = myArray[j];
myArray[i] = tempj;
myArray[j] = tempi;
}
}
})(
jQuery);

$(
document).ready(function(){
$(
'#Game').PlayCards();
});

<
div id="Game"></div>

Qui dors pas...