2015-04-29 47 views
-1

我已經創建了一個Erase-A-Man遊戲,當我在主要點的移動設備上查看它時。總是有滾動看到其他的字母,我試圖使頁面適合所有手機屏幕尺寸,以便無需向上或向下滾動查看整個遊戲。任何幫助將不勝感激。讓遊戲/網站適合屏幕而不滾動?

HTML

<div id="home" data-role="page"> 
<p> 

    <p id="warning">JavaScript must be enabled to play this game.</p> 

    <div role="main" class="ui-content"> 
    <p> 
    <div id="help"></div> 
    <div id="helptext"> 
     <h2>How to Play</h2> 
     <div id="close"></div> 
     <p>Hangman is a word-guessing game. Click or tap New Game to display the letters of the alphabet and a row of dashes indicating the number of letters to be guessed. Click or tap a letter. If it's in the word, it replaces the dash(es). Each wrong guess results in a stroke being added to a gallows and its victim. Your role is to guess the word correctly before the victim meets his grisly fate.</p> 
    </div> 
    </p> 
    </div> 

    <p id="loading">Game loading. . .</p> 

    <canvas id="stage" width="200" height="200">Sorry, your browser needs to  support canvas for this game.</canvas> 

    <div role="main" class="ui-content"> 
     <p><div id="play">New Game</div> <div id="clear">Clear Score</div></p> 
    </div> 

    <p id="word"></p> 

    <div id="letters"></div> 

    <!--<div align="center"><img src="images/cactus-sslandscape_00152016.jpg"        class="bg"></div> --> 

</p> 
</div> 

</body> 

的Javascript

// Global variables 
var canvas = document.getElementById('stage'), 
word = document.getElementById('word'), 
letters = document.getElementById('letters'), 
wordToGuess, 
wordLength, 
badGuesses, 
correctGuesses; 

function init() { 
var helptext = $('#helptext'), 
    w = screen.availWidth <= 800 ? screen.availWidth : 800; 

// Hide the loading message and display the control buttons 
$('#loading').hide(); 
$('#play').css('display', 'inline-block').click(newGame); 
$('#clear').css('display', 'inline-block').click(resetScore); 
$('#help').click(function(e) { 
    $('body').append('<div id="mask"></div>'); 
    helptext.show().css('margin-left', (w-300)/2 + 'px'); 
}); 
$('#close').click(function(e) { 
    $('#mask').remove(); 
    helptext.hide(); 
}); 

// Rescale the canvas if the screen is wider than 700px 
if (screen.innerWidth >= 700) { 
    canvas.getContext('2d').scale(1.5, 1.5); 
} 
// Initialize the scores and store locally if not already stored 
if (localStorage.getItem('hangmanWin') == null) { 
    localStorage.setItem('hangmanWin', '0'); 
} 
if (localStorage.getItem('hangmanLose') == null) { 
    localStorage.setItem('hangmanLose', '0'); 
} 
showScore(); 
} 

// Display the score in the canvas 
function showScore() { 
var won = localStorage.getItem('hangmanWin'), 
    lost = localStorage.getItem('hangmanLose'), 
    c = canvas.getContext('2d'); 
// clear the canvas 
canvas.width = canvas.width; 
c.font = 'bold 24px stencil, Arial, Helvetica, sans-serif'; 
c.fillStyle = 'black'; 
c.textAlign = 'center'; 
c.fillText('YOUR SCORE', 100, 50); 
c.font = 'bold 18px Optimer, Arial, Helvetica, sans-serif'; 
c.fillText('Won: ' + won + ' Lost: ' + lost, 100, 80); 
} 


// Start new game 
function newGame() { 
var placeholders = '', 
    frag = document.createDocumentFragment(), 
    abc =   ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T' ,'U','V','W','X','Y','Z']; 
badGuesses = 0; 
correctGuesses = 0; 
wordToGuess = getWord(); 
wordLength = wordToGuess.length; 
// create row of underscores the same length as letters to guess 
for (var i = 0; i < wordLength; i++) { 
    placeholders += '_'; 
} 
word.innerHTML = placeholders; 
// create an alphabet pad to select letters 
letters.innerHTML = ''; 
for (i = 0; i < 26; i++) { 
    var div = document.createElement('div'); 
    div.style.cursor = 'pointer'; 
    div.innerHTML = abc[i]; 
    div.onclick = getLetter; 
    frag.appendChild(div); 
} 
letters.appendChild(frag); 
drawCanvas(); 
} 

// Get selected letter and remove it from the alphabet pad 
function getLetter() { 
checkLetter(this.innerHTML); 
this.innerHTML = '&nbsp;'; 
this.style.cursor = 'default'; 
this.onclick = null; 
} 

// Check whether selected letter is in the word to be guessed 
function checkLetter(letter) { 
var placeholders = word.innerHTML, 
    wrongGuess = true; 
// split the placeholders into an array 
placeholders = placeholders.split(''); 
// loop through the array 
for (var i = 0; i < wordLength; i++) { 
    // if the selected letter matches one in the word to guess, 
    // replace the underscore and increase the number of correct guesses 
    if (wordToGuess.charAt(i) == letter.toLowerCase()) { 
     placeholders[i] = letter; 
     wrongGuess = false; 
     correctGuesses++; 
     // redraw the canvas only if all letters have been guessed 
     if (correctGuesses == wordLength) { 
      drawCanvas(); 
     } 
    } 
} 
// if the guess was incorrect, increment the number of bad 
// guesses and redraw the canvas 
if (wrongGuess) { 
    badGuesses++; 
    drawCanvas(); 
} 
// convert the array to a string and display it again 
word.innerHTML = placeholders.join(''); 
} 

// Draw the canvas 
function drawCanvas() { 
var c = canvas.getContext('2d'); 
// reset the canvas and set basic styles 
canvas.width = canvas.width; 
c.lineWidth = 3; 
c.strokeStyle = 'green'; 
c.font = 'bold 24px Optimer, Arial, Helvetica, sans-serif'; 
c.fillStyle = 'red'; 
// draw the ground 
drawLine(c, [20,172], [180,172]); 
c.strokeStyle = 'black'; 
// draw head 
     c.beginPath(); 
     c.moveTo(115, 45); 
     c.arc(100, 45, 15, 0, (Math.PI/180)*360); 
     c.stroke(); 
// draw Left eye 
     c.beginPath(); 
     c.moveTo(97, 39); 
     c.arc(95, 40, 2, 0, (Math.PI/180)*360); 
     c.stroke(); 
// draw right eye 
     c.beginPath(); 
     c.moveTo(103, 39); 
     c.arc(105, 40, 2, 0, (Math.PI/180)*360); 
     c.stroke(); 
// draw mouth 
     drawLine(c, [92,53], [108,50]); 
// draw body 
     drawLine(c, [100,60], [100,130]); 
// draw left arm 
     drawLine(c, [100,80], [65,90]); 
// draw right arm 
     drawLine(c, [100,80], [135,90]); 
// draw left leg 
     drawLine(c, [100,130], [85,170]); 
// draw right leg and end game 
     drawLine(c, [100,130], [115,170]); 

// start building the gallows if there's been a bad guess 
if (badGuesses > 0) { 
    // erase the right arm 
    c.lineWidth = 6; 
    c.strokeStyle = '#E6E6E6'; 
     drawLine(c, [100,80], [135,90]); 
    if (badGuesses > 1) { 
     // Erase left leg 
     drawLine(c, [100,130], [85,170]); 
    } 
    if (badGuesses > 2) { 
     // Erase left arm 
     drawLine(c, [100,80], [65,90]); 
    } 
    if (badGuesses > 3) { 
     // Erase right leg 
     drawLine(c, [100,130], [115,170]); 
    } 
    if (badGuesses > 4) { 
     // Erase body 
     drawLine(c, [100,60], [100,130]); 
    } 
    if (badGuesses > 5) { 
     // Erase mouth 
     drawLine(c, [92,53], [108,50]); 
    } 
    if (badGuesses > 6) { 
     // Erase head 
     c.beginPath(); 
     c.moveTo(115, 45); 
     c.arc(100, 45, 15, 0, (Math.PI/180)*360); 
     c.stroke(); 
    } 
    if (badGuesses > 7) { 
     // Erase Right eye 
     c.beginPath(); 
     c.moveTo(103, 39); 
     c.arc(105, 40, 2, 0, (Math.PI/180)*360); 
     c.stroke(); 
    } 
    if (badGuesses > 8) { 
     //Erase Left eye 
     c.beginPath(); 
     c.moveTo(97, 39); 
     c.arc(95, 40, 2, 0, (Math.PI/180)*360); 
     c.stroke(); 
     c.fillText('Game over', 45, 110); 
     // remove the alphabet pad 
     letters.innerHTML = ''; 
     // display the correct answer 
     // need to use setTimeout to prevent race condition 
     setTimeout(showResult, 200); 
     // increase score of lost games 
     localStorage.setItem('hangmanLose', 1 +  parseInt(localStorage.getItem('hangmanLose'))); 
     // display the score after two seconds 
     setTimeout(showScore, 2000); 
    } 
} 
// if the word has been guessed correctly, display message, 
// update score of games won, and then show score after 2 seconds 
if (correctGuesses == wordLength) { 
    letters.innerHTML = ''; 
    c.fillText('You won!', 45,110); 
    // increase score of won games 
    // display score 
    localStorage.setItem('hangmanWin', 1 + parseInt(localStorage.getItem('hangmanWin'))); 
    setTimeout(showScore, 2000); 
} 
} 

function drawLine(context, from, to) { 
context.beginPath(); 
context.moveTo(from[0], from[1]); 
context.lineTo(to[0], to[1]); 
context.stroke(); 
} 

// When the game is over, display missing letters in red 
function showResult() { 
var placeholders = word.innerHTML; 
placeholders = placeholders.split(''); 
for (i = 0; i < wordLength; i++) { 
    if (placeholders[i] == '_') { 
     placeholders[i] = '<span style="color:red">' +  wordToGuess.charAt(i).toUpperCase() + '</span>'; 
    } 
} 
word.innerHTML = placeholders.join(''); 
} 

// Reset stored scores to zero 
function resetScore() { 
localStorage.setItem('hangmanWin', '0'); 
localStorage.setItem('hangmanLose', '0'); 
showScore(); 
} 

// Select random word to guess 
function getWord() { 
var a = new  Array('a','we','you','will','he','to','bed','ton','tin','tan','can','see','run', 'the','in','so','no','now','man','ten','me','do','and','go','at','on','a','it','is','she'); 
return a[parseInt(Math.random()* a.length)]; 
} 

再次感謝

回答

0

應該是可行的CSS。

#home { 
    overflow: hidden; 
} 

或者,您可以使用javascript設置屬性。我還沒有使用過jquery,但我知道它有可能設置它的元素屬性,所以你可能想查找它。

0

如果您不希望字母離開屏幕底部,您應該將標記保存爲<span> s。

只是改變:

var div = document.createElement('div'); 

var div = document.createElement('span');