spacer

Webref WebRef   Sitemap · Experts · Tools · Services · Newsletters · About i.com

home / experts / javascript / column37


JavaScript and Frames, Part II (6)

Sr Instructional Designer D2L-Moodle,Clearance
WSI Nationwide, Inc.
US-NJ-Fort Monmouth

Justtechjobs.com Post A Job | Post A Resume
Developer News
News Flash: Adobe Has iPhone Workaround
Adobe's Flash 10.1 Goes Mobile (Minus iPhone)
A Salute to Visionary CEOs


Revealing A Card

The revealBox() function is the heart of our script. It coordinates all possible actions with a card: revealing, removing, and covering. Here is its listing:

function revealBox(rowFound, colFound) {
  var newLocation = rowFound * dim1 + colFound;
  tobeRevealedLocation = newLocation;
  tobeRevealedRow = rowFound;
  tobeRevealedCol = colFound;
  revealNow();
  if (nowRevealed == false) {
    nowRevealed = true;
    revealedLocation = newLocation;
    revealedRow = rowFound;
    revealedCol = colFound;
  } 
  else {
    if (newLocation == revealedLocation) return;
    blockClicking = true; 
    if (assignAr[revealedLocation] == assignAr[newLocation]) {
      setTimeout("removeCards()", coverPause);
      bingos++;
      if (nowPlaying == "left") {
        leftBingos++;
      }
      else {
        rightBingos++;
      }
      if (players == 2) top.status = "Left: " + leftBingos + 
                                                "   Right: " + rightBingos;
      if (bingos == halfBoardLength) {
        if (players == 2)
          alert("Congratulations! The " + nowPlaying + " won. Left Player: " + 
                  leftBingos + " Right Player: " + rightBingos);
        else alert("Congratulations. You made it in " + attempts);
        initialize();
      }
    }
    else {
      attempts++;
      if (players == 1) 
        if (attempts == 1) top.status = "You have tried one time"
        else top.status = "You have tried " + attempts + " times";
      setTimeout("coverNow()", coverPause);
    }    
  }
}

The function accepts the row and column position of the clicked box, rowFound and colFound. First, the index into the assignAr array is computed:

  var newLocation = rowFound * dim1 + colFound;

Then, the three positional variables, newLocation, rowFound, colFound, are copied to the tobeRevealed trio, tobeRevealedLocation, tobeRevealedRow, and tobeRevealedCol, respectively. We call the revealNow() function to reveal the card.

We need to check next whether the nowRevealed flag is false, and turn it on if it is, copying the three positional variables to the revealed trio:

 if (nowRevealed == false) {
    nowRevealed = true;
    revealedLocation = newLocation;
    revealedRow = rowFound;
    revealedCol = colFound;
  } 

If the nowRevealed flag is already turned on, it means we have just revealed the second card in an attempted match. We need to act promptly on several fronts. First, we need to check if the player did not click the first card again:

    if (newLocation == revealedLocation) return;

Then we need to block any additional clicks by the players until we complete processing the current card, blockClicking = true. Now that we are protected from any disturbances from the players, we can handle the card. We first verify if we have a match. The first card's location in the assignAr array is revealedLocation, while the second one's is newLocation. We check if they are identical images by comparing the assignAr elements:

if (assignAr[revealedLocation] == assignAr[newLocation])

The script becomes very busy in case a match is found. First, we call the removeCards() function after a delay of coverPause. (After all, we do want the player to see the matched cards before removing them.) Then, we deal with the game counters. The number of bingos is incremented, as well as leftBingos (if nowPlaying = "left") or rightBingos (if nowPlaying = "right"). If there are two players, the new score is sent to top.status. Once a game, there is a chance that the current match is the winning one. If the nubmer of matches is equal to halfBoardLength, we print a message to the players and call the initialize() function to start a new game. Notice how the message is tailored to either one or two players. The two-players message includes the winning side and the number of matches that each player had achieved. The single-player message includes only the number of unsuccessful attempts.

The last section of the revealBox() function deals with the case that there is no match between the two cards. First, we increment the number of attempts. Then, if there is only one player, we update the message at the status bar, top.status, with the correct number of attempts. Finally, we call the coverNow() function after a delay of coverPause milliseconds. (The purpose of the delay is to show the player that the cards are not identical, before covering them back.)


http://www.internet.com

Produced by Yehuda Shiran and Tomer Shiran

internet.commediabistro.comJusttechjobs.comGraphics.com

Search:

WebMediaBrands Corporate Info

Legal Notices, Licensing, Reprints, Permissions, Privacy Policy.
Advertise | Newsletters | Shopping | E-mail Offers | Freelance Jobs

webref The latest from WebReference.com Browse >
Building a Banking Application Home Page with OOP · Mixing Scripting Languages · Review: phpFox, a Social Networking CMS with all the Bells and Whistles
Sitemap · Experts · Tools · Services · Email a Colleague · Contact FREE Newsletters 
 The latest from internet.com
Enterprise 2.0: Social Networking in the Cloud · BroadSoft Marketplace Hastens Pace of Telephony Innovation · Review: HTC Hero for Sprint


Created: April 5, 1999
Revised: April 5, 1999

URL: http://www.webreference.com/js/column37/reveal.html