如果错了,我该如何将此游戏中的卡变成其原始位置



var cards = [
  {
    rank: "Queen",
    suit: "Hearts",
    cardImage: "images/queen-of-hearts.png",
    id: 0,
  },
  {
    rank: "Queen",
    suit: "Diamonds",
    cardImage: "images/queen-of-diamonds.png",
    id: 1,
  },
  {
    rank: "King",
    suit: "Hearts",
    cardImage: "images/king-of-hearts.png",
    id: 2,
  },
  {
    rank: "King",
    suit: "Diamonds",
    cardImage: "images/king-of-diamonds.png",
    id: 3
  }
];
//1
function createBoard() {
  for (var i = 0; i < cards.length; i++) {
    var cardElement = document.createElement('img');
    // console.log(cardElement);
    cardElement.setAttribute('src', 'images/back.png');
    cardElement.setAttribute('data-id', i);
    document.getElementById('game-board').appendChild(cardElement);
    cardElement.addEventListener('click', flipCard);
    cardElement.style.width = '210px';
  }
}
createBoard();
//2
function flipCard () {
  var cardId = this.getAttribute('data-id');
  cardsInPlay.push(cards[cardId].rank);
  cardsInPlay.push(cards[cardId].id);
  this.setAttribute('src', cards[cardId].cardImage);
// CHECK FOR MATCH HERE =>
    if (cardsInPlay.length === 2) {
      if (cardsInPlay[0] === cardsInPlay[1]) {
        alert("You found a match!");
      }
      else {
        alert("Sorry, try again.");
        console.log(cardsInPlay);
        cardsInPlay[0].setAttribute('src', 'images/back.png'); // this doesnt work
        cardsInPlay[1].setAttribute('src', 'images/back.png'); // this doesnt work
      }
    }
}
var cardsInPlay = [];
body{
    text-align: center;
    margin: 0;
}
h1 {
    font-family: "Raleway", sans-serif;
    font-weight: 400;
    color: #0d2c40;
    font-size: 45px;
    letter-spacing: 1px;
    margin: 0;
    color: white;
}
p {
  font-family: "Droid Serif", serif;
  line-height: 26px;
  font-size: 18px;
}
a {
    font-family: raleway;
    text-decoration: none;
    color: #F15B31;
    letter-spacing: 1px;
    font-weight: 600;
    font-size: 18px;
}
h2 {
    font-family: raleway;
    font-size: 20px;
    color: #0d2c40;
    letter-spacing: 1px;
    font-weight: 600;
}
header {
    background-color: #F15B31;
    padding: 30px 20px 30px 20px;
}
main {
  width: 850px;
  margin: 35px auto
}
a {
    margin: 0 20px;
    color: white;
}
nav a:hover {
    border-bottom: 2px solid white;
}
nav {
    background-color: #00A6B3;
    padding: 20px 0;
}
img {
    margin: 40px 8px 0 8px;
}
footer {
    text-transform: uppercase;
    padding: 0 20px;
    background-color: #0D2C40;
    color: white;
    letter-spacing: .08em;
    font-weight: 500;
}
.copyright {
    float: left;
}
.message {
    float: right;
}
.clearfix:after {
  visibility: hidden;
  display: block;
  content: " ";
  clear: both;
  height: 0;
  font-size: 0;
}
.name {
   color: #F15B31;
   font-weight: 700;
}
#game-board{
  width: 1200px;
}
<!DOCTYPE html>
<html>
   <head>
      <meta charset="utf-8">
      <link href="css/style.css" rel="stylesheet" type="text/css">
      <title>Memory card game</title>
   </head>
   <body>
      <header>
         <h1>Memory Game</h1>
      </header>
      <nav>
         <p><a href="#">INSTRUCTIONS</a><a href="#"> GAME</a></p>
      </nav>
      <main>
         <h2>INSTRUCTIONS</h2>
         <p>Concentration, also known as Match Match, Memory, Pelmanism, Shinkei-suijaku, Pexeso or simply Pairs, is a card game in which all of the cards are laid face down on a surface and two cards are flipped face up over each turn. The object of the game is to turn over pairs of matching cards.</p>
         <div id="game-board" class="board clearfix"></div>
      </main>
      <footer>
          <div class="clearfix">
          <p class="copyright">Copyright 2017</p>
          <p class="message">Created with &hearts; by <span class="name">GA</span></p>
              </div>
      </footer>
    <script src="js/main.js"></script>
   </body>
</html>

我想知道如何回到其原始位置,这两个与不匹配的卡片。如果有一场比赛,有一个警报说恭喜您获胜,否则请重试,但我希望两张卡在不匹配的情况下返回其原始位置。但是只有一张卡回到其原始位置(带有此的位置,但我认为这两者都指的是)卡片图像不在这里。有人可以帮忙吗?

var cards = [
  {
    rank: "Queen",
    suit: "Hearts",
    cardImage: "images/queen-of-hearts.png",
    id: 0,
  },
  {
    rank: "Queen",
    suit: "Diamonds",
    cardImage: "images/queen-of-diamonds.png",
    id: 1,
  },
  {
    rank: "King",
    suit: "Hearts",
    cardImage: "images/king-of-hearts.png",
    id: 2,
  },
  {
    rank: "King",
    suit: "Diamonds",
    cardImage: "images/king-of-diamonds.png",
    id: 3
  }
];
//1
function createBoard() {
  for (var i = 0; i < cards.length; i++) {
    var cardElement = document.createElement('img');
    // console.log(cardElement);
    cardElement.setAttribute('src', 'images/back.png');
    cardElement.setAttribute('data-id', i);
    document.getElementById('game-board').appendChild(cardElement);
    cardElement.addEventListener('click', flipCard);
    cardElement.style.width = '210px';
  }
}
createBoard();
//2
function flipCard () {
  var cardId = this.getAttribute('data-id');
  cardsInPlay.push(cards[cardId].rank);
  cardsInPlay.push(cards[cardId].id);
  this.setAttribute('src', cards[cardId].cardImage);
// CHECK FOR MATCH HERE =>
    if (cardsInPlay.length === 2) {
      if (cardsInPlay[0] === cardsInPlay[1]) {
        alert("You found a match!");
      }
      else {
        alert("Sorry, try again.");
        console.log(cardsInPlay);
        cardsInPlay[0].setAttribute('src', 'images/back.png'); // this doesnt work
        cardsInPlay[1].setAttribute('src', 'images/back.png'); // this doesnt work
      }
    }
}
var cardsInPlay = [];
body{
    text-align: center;
    margin: 0;
}
h1 {
    font-family: "Raleway", sans-serif;
    font-weight: 400;
    color: #0d2c40;
    font-size: 45px;
    letter-spacing: 1px;
    margin: 0;
    color: white;
}
p {
  font-family: "Droid Serif", serif;
  line-height: 26px;
  font-size: 18px;
}
a {
    font-family: raleway;
    text-decoration: none;
    color: #F15B31;
    letter-spacing: 1px;
    font-weight: 600;
    font-size: 18px;
}
h2 {
    font-family: raleway;
    font-size: 20px;
    color: #0d2c40;
    letter-spacing: 1px;
    font-weight: 600;
}
header {
    background-color: #F15B31;
    padding: 30px 20px 30px 20px;
}
main {
  width: 850px;
  margin: 35px auto
}
a {
    margin: 0 20px;
    color: white;
}
nav a:hover {
    border-bottom: 2px solid white;
}
nav {
    background-color: #00A6B3;
    padding: 20px 0;
}
img {
    margin: 40px 8px 0 8px;
}
footer {
    text-transform: uppercase;
    padding: 0 20px;
    background-color: #0D2C40;
    color: white;
    letter-spacing: .08em;
    font-weight: 500;
}
.copyright {
    float: left;
}
.message {
    float: right;
}
.clearfix:after {
  visibility: hidden;
  display: block;
  content: " ";
  clear: both;
  height: 0;
  font-size: 0;
}
.name {
   color: #F15B31;
   font-weight: 700;
}
#game-board{
  width: 1200px;
}
<!DOCTYPE html>
<html>
   <head>
      <meta charset="utf-8">
      <link href="css/style.css" rel="stylesheet" type="text/css">
      
      <title>Memory card game</title>
   </head>
   <body>
      <header>
         <h1>Memory Game</h1>
      </header>
      <nav>
         <p><a href="#">INSTRUCTIONS</a><a href="#"> GAME</a></p>
      </nav>
      <main>
         <h2>INSTRUCTIONS</h2>
         <p>Concentration, also known as Match Match, Memory, Pelmanism, Shinkei-suijaku, Pexeso or simply Pairs, is a card game in which all of the cards are laid face down on a surface and two cards are flipped face up over each turn. The object of the game is to turn over pairs of matching cards.</p>
         <div id="game-board" class="board clearfix"></div>
      </main>
      <footer>
          <div class="clearfix">
          <p class="copyright">Copyright 2017</p>
          <p class="message">Created with &hearts; by <span class="name">GA</span></p>
              </div>
      </footer>
    <script src="js/main.js"></script>
   </body>
</html>

如果您想将两张卡片翻转回,此代码只会翻转播放" cardsinplay [1]"中的最后一张卡:

this.setAttribute('src', 'images/back.png');

您想要的是翻转" cardsinplay [0]"one_answers" cardsinplay [1]",所以也许这样的人:

else {
    alert("Sorry, try again.");
    console.log(cardsInPlay);
    cardsInPlay[0].setAttribute('src', 'images/back.png');
    cardsInPlay[1].setAttribute('src', 'images/back.png');
  }

编辑:您对this的问题是在JavaScript中关闭。我建议您使用IIFE(用于Ecmascript5)或let关键字(用于Ecmascript6)。在这里阅读更多。

而不是这样做:

function createBoard() {
  for (var i = 0; i < cards.length; i++) {
    var cardElement = document.createElement('img');
    [..]
    cardElement.addEventListener('click', flipCard); << 'this' will refer to last cardElement at the end of the loop

这样做:

function createBoard() {
  for (var i = 0; i < cards.length; i++) {
    var cardElement = document.createElement('img');
    [..]
    cardElement.addEventListener('click', (function(x) {return function() {flipCard(x)}})(i)); // 'i' is immediately evaluated to the correct value
    cards[i].element = cardElement; // Keep association with DOM here

现在您可以轻松地翻转卡。

function flipCard (i) {
  cardsInPlay.push(i);
  // Flip played card
  cards[i].element.setAttribute('src', cards[i].cardImage);
  if (cardsInPlay.length === 1)
    return; // First card: no game resolution yet
  // Second card: give user 1s to see it flipped before flipping back
  setTimeout(function(){
    if (cards[cardsInPlay[0]].rank === cards[cardsInPlay[1]].rank)
      alert("You found a match!");
    else
      alert("Sorry, try again.");
    cardsInPlay.forEach(function(i) {
      cards[i].element.setAttribute('src', 'images/back.png');
    });
    cardsInPlay.length = 0;
  }, 1000);
}

修改以下摘要以实现所需功能!你能检查吗?

var cards = [
  {
    rank: "Queen",
    suit: "Hearts",
    cardImage: "http://via.placeholder.com/350x150?text=QueenHeartsfront"
  },
  {
    rank: "Queen",
    suit: "Diamonds",
    cardImage: "http://via.placeholder.com/350x150?text=QueenDiamondsfront"
  },
  {
    rank: "King",
    suit: "Hearts",
    cardImage: "http://via.placeholder.com/350x150?text=KingHeartsfront"
  },
  {
    rank: "King",
    suit: "Diamonds",
    cardImage: "http://via.placeholder.com/350x150?text=KingDiamondsfront"
  }
];
//1 CREATE BOARD
function createBoard() {
  for (var i = 0; i < cards.length; i++) {
    var cardElement = document.createElement('img');
    // console.log(cardElement);
    cardElement.setAttribute('src', 'http://via.placeholder.com/350x150?text=back');
    cardElement.setAttribute('data-id', i);
    document.getElementById('game-board').appendChild(cardElement);
    cardElement.addEventListener('click', flipCard);
    cardElement.style.width = '210px';
  }
}
createBoard();
var prev = "";
//2 FLIPCARD
function flipCard () {
  var cardId = this.getAttribute('data-id');
  cardsInPlay.push(cards[cardId].rank);
  this.setAttribute('src', cards[cardId].cardImage);
  console.log(cardsInPlay[0]);
  console.log(cardsInPlay[1]);
    if (cardsInPlay.length === 2) {
      if (cardsInPlay[0] === cardsInPlay[1]) {
        alert("You found a match!");
        cardsInPlay = [];
      }
      else {
        alert("Sorry, try again.");
        cardsInPlay = [];
        // cardsInPlay.pop();
        // cardsInPlay.pop();
        // console.log(cardsInPlay);
        try{
        prev.setAttribute('src', 'http://via.placeholder.com/350x150?text=back');
        }catch(e){}
        this.setAttribute('src', 'http://via.placeholder.com/350x150?text=back');
      }
    }
    prev = this;
}
var cardsInPlay = [];
body{
    text-align: center;
    margin: 0;
}
h1 {
    font-family: "Raleway", sans-serif;
    font-weight: 400;
    color: #0d2c40;
    font-size: 45px;
    letter-spacing: 1px;
    margin: 0;
    color: white;
}
p {
  font-family: "Droid Serif", serif;
  line-height: 26px;
  font-size: 18px;
}
a {
    font-family: raleway;
    text-decoration: none;
    color: #F15B31;
    letter-spacing: 1px;
    font-weight: 600;
    font-size: 18px;
}
h2 {
    font-family: raleway;
    font-size: 20px;
    color: #0d2c40;
    letter-spacing: 1px;
    font-weight: 600;
}
header {
    background-color: #F15B31;
    padding: 30px 20px 30px 20px;
}
main {
  width: 850px;
  margin: 35px auto
}
a {
    margin: 0 20px;
    color: white;
}
nav a:hover {
    border-bottom: 2px solid white;
}
nav {
    background-color: #00A6B3;
    padding: 20px 0;
}
img {
    margin: 40px 8px 0 8px;
}
footer {
    text-transform: uppercase;
    padding: 0 20px;
    background-color: #0D2C40;
    color: white;
    letter-spacing: .08em;
    font-weight: 500;
}
.copyright {
    float: left;
}
.message {
    float: right;
}
.clearfix:after {
  visibility: hidden;
  display: block;
  content: " ";
  clear: both;
  height: 0;
  font-size: 0;
}
.name {
   color: #F15B31;
   font-weight: 700;
}
#game-board{
  width: 1200px;
}
<!DOCTYPE html>
<html>
   <head>
      <meta charset="utf-8">
      <link href="css/style.css" rel="stylesheet" type="text/css">
      
      <title>Memory card game</title>
   </head>
   <body>
      <header>
         <h1>Memory Game</h1>
      </header>
      <nav>
         <p><a href="#">INSTRUCTIONS</a><a href="#"> GAME</a></p>
      </nav>
      <main>
         <h2>INSTRUCTIONS</h2>
         <p>Concentration, also known as Match Match, Memory, Pelmanism, Shinkei-suijaku, Pexeso or simply Pairs, is a card game in which all of the cards are laid face down on a surface and two cards are flipped face up over each turn. The object of the game is to turn over pairs of matching cards.</p>
         <div id="game-board" class="board clearfix"></div>
      </main>
      <footer>
          <div class="clearfix">
          <p class="copyright">Copyright 2017</p>
          <p class="message">Created with &hearts; by <span class="name">GA</span></p>
              </div>
      </footer>
    <script src="js/main.js"></script>
   </body>
</html>

最新更新