Bonjour,

Je travaille sur un projet, qui est la base du "Bonneteau" (2cartes perdantes, 1 gagnantes)
Sauf que je souhaite le faire avec 5 cartes (3perdantes, 2gagnantes avec images différentes).

J'ai bien avancer, j'arrive a obtenir une carte aléatoire gagnantes mais pas 2.
Je souhaite donc savoir si quelqu'un pourrai m'aider, cela fait 3 semaines que je bloque ...
Malgrès toutes mes recherches, je ne trouve pas comment faire. Merci d'avance
HTML:
<!doctype html>
<html>
    <head>
        <title>Snake Family</title>
        <!-- Lier la page html au css -->
        <link rel="stylesheet" type="text/css" href="css/styles.css">
    </head>

<!-- Corp de la page -->
    <body>
        <h1>Bonnetau Of Snake Family</h1>
        <div class="container">
            <div class="cards">
                <div class="card" onclick="flip(event)">
                    <div class="front">
                        <img class="card-img" src="images/image2.png" width="200">                
                    </div> 
                    <div class="back"></div>
                </div>
                <div class="card" onclick="flip(event)">
                    <div class="front">
                        <img class="card-img" src="images/image2.png" width="200">                
                    </div> 
                    <div class="back"></div>
                </div> 
                <div class="card" onclick="flip(event)">
                    <div class="front">
                        <img class="card-img" src="images/image2.png" width="200">                
                    </div> 
                    <div class="back"></div>
                </div>  
                <div class="card" onclick="flip(event)">
                    <div class="front">
                        <img class="card-img" src="images/image2.png" width="200">                
                    </div> 
                    <div class="back"></div>
                </div> 
                <div class="card" onclick="flip(event)">
                    <div class="front">
                        <img class="card-img" src="images/image2.png" width="200">                
                    </div> 
                    <div class="back"></div>
                </div>                 
            </div>            
        </div>
        <script src="js/scripts.js"></script>
    </body>
</html>

body{
    text-align: center;
    margin: 0;
    min-height: 100vh;
    background-image: url("../images/fond.png");
    background-position: center center;
    background-size: cover;
    animation-name: back;
    animation-duration: 20s;
    animation-iteration-count: infinite;
    animation-timing-function: ease-in-out;
}
@keyframes back {
    0%{background-size: 100% auto;}
    50%{background-size: 120% auto;}
    100%{background-size: 100% auto;}
}
h1 {
    font-size: 100px;
    margin: 0;
    padding: 20px;
    border-bottom: solid 1px rgba(255,255,255,0.4);
    color: black;
    background-color: rgba(0, 0, 0, 0.2);
}
div.container {
    display: flex;
    justify-content: center;
    align-items: center;
    flex-direction: column;
}
div.cards {
    display: flex;
    justify-content: center;
    align-items: center;
    width: 100%;
    height: 100%;
    margin: 5%;
    perspective: 1000px;
}
div.card {
    transition: 1s;
    width: 200px;
    height: 300px;
    margin: 10px;
    transform-style: preserve-3d;
}

.front, .back {
    position: absolute;
    backface-visibility: hidden;
    height: 200px;
}
.front {
    background: url(../images/image2.png);
    background-size: 00px;
    width: 200px;
    transform: rotateY(180deg);
}
.back {
    background: url(../images/dos.png);
    background-size: 200px;
    width: 200px;
}
.back:hover {
    transition: 0.3s;
    box-shadow: 0px 0px 20px 3px #000;
}

function flip(event){
    let element = event.currentTarget;
    if (element.className === "card"){
        if(element.style.transform == "rotateY(180deg)"){
            element.style.transform = "rotateY(0deg)";
        }
        else{
            element.style.transform = "rotateY(180deg)";
        }
    }
}
let redcard = 0

shuffle()

function shuffle() {
    let allcards = document.getElementsByClassName("card-img");
    allcards[redcard].setAttribute('src', "images/image2.png")
    let random = Math.floor(Math.random() * allcards.length); // un nombre au hasard
    let card = allcards[random];
    card.setAttribute('src', "images/image1.png")
    redcard = random
}
Pour les image :
- image1.png = 1er gagnante
- image2.png = perdu
- image3.png = 2eme gagnante

Merci pour tout aide
Modérateur
Salut !

Alors j'ai plusieurs petites questions/remarques sur ton code avant d'aller plus loin :

1/ Pourquoi re-définir les face perdantes des cartes dans le baground-image .front alors qu'elle sont déjà en img ? On peut aussi reformuler, pourquoi s'embêter avec les img et ne pas tout gérer en CSS ?

2/ pourquoi re-re-définir image2 dans le js mais seulement pour la première (redcard=0) carte alors que le src est déjà ainsi (et le CSS) ?

3/ pourquoi faire redcard = random à la fin ?

4/ aucune trace de image3 dans ton code ?

Bonus/ le onclick="flip(event)" ne se fait plus trop comme ça on passe plutot par les EventListener https://www.w3schools.com/js/js_htmldom_eventlistener.asp mais c'est qu'un détail, ne t'embête pas avec ca maintenant... ca marche bien comme ça pour le moment

Une fois tout ça plié tu veux juste tirer 2 chiffres aléatoires entre 1 et 5 mais qui ne soit pas les même. On peut imaginer retirer la première carte du tableau allcards avec splice() et relancer le random sur le reste :


function shuffle() {
    let allcards = Array.from(document.getElementsByClassName("card-img"));
    let random = Math.floor(Math.random() * allcards.length);
    allcards[random].setAttribute('src', "images/image1.png");
    allcards.splice(random,1);
    random = Math.floor(Math.random() * allcards.length);
    allcards[random].setAttribute('src', "images/image3.png");
}


C'est largement perfectible mais c'est un POC

Bonne soirée
Modifié par _laurent (15 Nov 2022 - 21:50)
Bonjour, Laurent !

Je te remercie beaucoup d'avoir pris du temps pour me répondre.
J'ai utiliser cce code html, css, et js avec l'aide d'une vidéo sur le jeu du bonneteau
qui me semblait superb. (la vidéo date de 2 ans)

Je n'y connais vraiment pas grand chose à tout cela, d'ou le fait que je suis
inspiré a 98% de cette vidéo.

J'ai essayer le code JS que tu m'a laisser, mais cela ne fonctionne pas.
Les cartes sont toutes perdantes ...
Lorsque je rafraichi la page, et que j'inspecte la page, la console y est bien notifier
mais rien ne s'affiche dedans...
Modérateur
Salut,

J'avais fais un petit test avec ton code et ca marchait plutôt bien. Tu as eu du mal a l'intégrer.
https://jsfiddle.net/undless/nywhga6c/

Quel est le contexte de ton projet ? C'est perso ? C'est un cours ? Je ne veux pas que tu le prenne mal hein mais j'ai un peu de mal à comprendre la plupart des personnes qui se lance dans un dev comme celui la sans avoir aucune base ni en CSS ni en HTML ni en Js. Tu n'as pas suivi de cours avant ça pour apprendre les bases ?

Le projet n'est pas très compliqué mais sans les bases il y a beaucoup de petits détails à revoir.
Meilleure solution
Le contexte de mon projet et plus communautaire. Mon mari fait des Lives sur un jeu, et ce petit "bonneteau" serait un bonus pour fidéliser nos viewers.

Je ne prend pas mal du tout ta remarque sur le fait que je suis incompétante dans le sujet !
tu as entierement raison ! Mais je me suis dit que avec un peut de compréhension j'aurai pu réussir ... bon on est loin de la !

J'ai tenter de suivre plusieurs "tutos" sur les bases, mais j'avoue que d'une personne a une autre ce n'est plus aussi simple ..

A la base j'avais creer seulement un tableau entier grâce à Genially avec les cartes qui se retourner, mais le fait que celui ci ne se mélange pas été compliqué !
Je comprendrais si tu me disait que le mieux est de suivre des cours d'abord et de revenir dessus par la suite.

Je te remercie comme meme du temps consacré !
J'ai réussi les cartes gagnantes sont bien aléatoire, je m'étais tromper sur une ligne..

Je te remercie encore beaucoup pour ton aide !
Je prend également en compte ton message sur le fait de cce lancer sans aucune base ...

Merci du temps consacré ! Tres bonne continuation ! Smiley ravi
Modérateur
Mimi28 a écrit :
Le contexte de mon projet et plus communautaire. Mon mari fait des Lives sur un jeu, et ce petit "bonneteau" serait un bonus pour fidéliser nos viewers.

Cool comme projet !

Mimi28 a écrit :
Je ne prend pas mal du tout ta remarque sur le fait que je suis incompétante dans le sujet ! tu as entierement raison ! Mais je me suis dit que avec un peut de compréhension j'aurai pu réussir ... bon on est loin de la !

Alors je ne faisait pas une remarque comme quoi tu était incompétente (je ne le pense pas) mais plutôt que le sujet était un peu trop haut par rapport à tes connaissances actuelles.

Et encore, ce projet n'est pas trop dur il peut être bien pour commencer si j'y pense bien.

Avec un peu de compréhension le code aurait été plus propre surtout je pense. Que tu réussisse ou pas c'était pas certain et on est la pour aider Smiley smile Mes remarques portait plus sur les petites incohérences autour, sinon le code que tu as suivi était plutôt bien appliqué. c'est juste que quand il n'y avait plus d'exemple tu étais perdue. Smiley smile

Mimi28 a écrit :
J'ai tenter de suivre plusieurs "tutos" sur les bases, mais j'avoue que d'une personne a une autre ce n'est plus aussi simple ..

Oui c'est clair c'est pas le plus fun. C'est souvent un mal nécessaire comme pour tout métier.

Mimi28 a écrit :
A la base j'avais creer seulement un tableau entier grâce à Genially avec les cartes qui se retourner, mais le fait que celui ci ne se mélange pas été compliqué !
Je comprendrais si tu me disait que le mieux est de suivre des cours d'abord et de revenir dessus par la suite.

Bah tu peux toujours lire et apprendre des choses sur le tas et en parallèle, maintenant que tu es lancée, ne t'arrête pas ! Smiley lol


Mimi28 a écrit :
J'ai réussi les cartes gagnantes sont bien aléatoire, je m'étais tromper sur une ligne..

Super si ca marche alors.

Mimi28 a écrit :
Je te remercie encore beaucoup pour ton aide !
Je prend également en compte ton message sur le fait de cce lancer sans aucune base ...

En vrai c'est hyper bien de se lancer hein ! je ne veut absoluement pas décourager tout ceux qui le ferait, mais souvent les gens se lance dans un projet avec une certaine difficulté qui mélange plusieurs langages et des concepts avancés au lieu de commencer plus doucement.

Si je peux faire une micro parenthèse c'est un vrai questionnement en fait, je ne sais pas si c'est un faux effet de simplicité lié à l'accessibilité qui donne l'impression qu'on peut tout faire facilement dans le web ou autre chose. J'ai parfois l'impression que c'est lié à la dévalorisation de nos métiers dans le sens ou un client a du mal a payer cher un site internet car il se dit qu'il peut le faire seul en 1 weekend. Alors qu'il y a quand même des connaissances et un savoir faire derrière comme n'importe quel métier. Je me vois mal aller acheter des parpaing du béton et des planches chez leroy merlin et décider de construire une maison sans jamais avoir bricolé de ma vie Smiley lol (et je ne rechigne pas non plus quand un artisan me demande 1k€ pour couler un dalle en béton).
// Fin de la parenthèse philo-relou haha

Mimi28 a écrit :
Merci du temps consacré ! Tres bonne continuation ! Smiley ravi

Avec plaisir, tu peux rester dans le coin pour améliorer ce code si tu veux. Je peux te donner plein de pistes pour consolider ça. Smiley smile

Bonne journée
Je te remercie dde ton encourragement !

En effet, si je peut apprendre et m'améliorer je ne refuse pas !
Je demande pas a etre une experte ! Mais l'informatique et tout ce qui se rapproche
m'as toujours attiré !

Si tu as des conseilles a partagé, cela sera avec un très grand plaisir !