- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在做一个编码练习,使用 jQuery/Javascript 制作刽子手游戏。我的游戏的大部分功能都有效:获取新词、更新猜测等。但是问题出在 函数 reviewLives() 中,涉及 if 语句和调用的绘制函数。这是代码:
//Draw functions
function drawHead() {
$('.draw-area').append($('<div>').addClass("body-part head"));
}
function drawTorso() {
$('.draw-area').append(
$('<div>').addClass("body-part armbox").append(
$('<div>').addClass("body-part torso")));
$('.draw-area').append(
$('<div>').addClass("body-part legbox").append(
$('<div>').addClass("body-part pelvis")));
}
function drawLeftArm(){
$('.armbox').prepend($('<div>').addClass('body-part leftarm'));
}
function drawRightArm(){
$('.armbox').prepend($('<div>').addClass('body-part rightarm'));
}
function drawLeftLeg(){
$('.legbox').prepend($('<div>').addClass('body-part leftleg'));
}
function drawRightLeg(){
$('.legbox').prepend($('<div>').addClass('body-part rightleg'));
}
var drawSequence = [drawHead,drawTorso,drawLeftArm,drawRightArm,drawLeftLeg,drawRightLeg];
//
var wordlist = ['tree', 'mail', 'male', 'female'];
var guesses = [];
var targetWord = '';
var maxLives = 7;
function newWord() {
targetWord = wordlist[Math.floor(Math.random() * wordlist.length)];
return targetWord;
}
console.log('Your word is: ' + newWord());
//go through string of answer word and guesses
function obfuscateWord(){
// temp variable
var obWord = '';
// loop through target word as an array and loop through with the guesses made
for (var i=0; i<targetWord.length; i++) {
//target letter word is not being guessed
if (guesses.indexOf(targetWord[i].toLowerCase(), 0) == -1) {
obWord += '_ ';
} else {
obWord += targetWord[i];
}
}
return obWord;
}
//function to draw the spaces on the screen
function drawWord() {
while (targetWord == '') {
newWord();
}
//specify the div with targetWOrd ID
$('#targetWord').html(obfuscateWord());
}
//for guessed Letters
function drawGuesses() {
guesses.sort();
$('#previousGuesses').html(guesses.join(', '));
//console.log('this is guesses0: '+guesses)
}
//remove duplicates
function cleanGuess() {
//temporary variable
var uniqueGuesses = [];
//for each guess perform function
$.each(guesses, function(index, element) {
//if guess is not in unique guesses push it, otherwise skip it
//if element is not empty, test if it is in array
if (element.length > 0 && $.inArray(element, uniqueGuesses) == -1) {
uniqueGuesses.push(element);
} else {
alert('You already guessed this letter!');
}
});
//override current guesses with uniqueGuesses
guesses = uniqueGuesses;
}
//to populate the array with guesses, when a letter is input by user
function addGuess() {
//filter out to only have a alphabet using a type test
if(/^[a-zA-Z]*$/.test($('#guess').val()) && typeof $('#guess').val() !== "undefined") {
//if passes test push into the array
guesses.push($('#guess').val().toLowerCase());
}
//to 'empty' the user input
$('#guess').val('');
}
// use for win or lose, isWinner true or false
function endGameDialog(isWinner) {
if (isWinner) {
//alert
//set html of #endGame dialog b ox
$('#endGameDialogTitle').html('You won');
$('#endGameDialogContent').html('You guessed '+targetWord+' in '+guesses.length+' attempts!');
} else {
//alert
//set html of #endGame dialog b ox
$('#endGameDialogTitle').html('You Lost');
$('#endGameDialogContent').html('The word was '+targetWord+'');
}
//$('#endGameDialog'.modal('toggle'))
}
console.log('this is guesses: '+guesses)
function reviewLives() {
var livesRemaining = maxLives,
string = targetWord.toLowerCase();
console.log('this is string:' + string)
for (var i = 0; i < guesses.length; i++) {
if (string.indexOf(guesses[i], 0) == -1) {
livesRemaining--;
//console.log(guesses[i])
}
}
if (livesRemaining === 6) {
drawSequence[0]();
} else if (livesRemaining===5) {
drawSequence[1]();
} else if (livesRemaining===4) {
drawSequence[2]();
} else if (livesRemaining===3) {
drawSequence[3]();
} else if (livesRemaining===2) {
drawSequence[4]();
} else if (livesRemaining===1) {
drawSequence[5]();
endGameDialog(false);
}
console.log('livesRemaining is: '+livesRemaining);
}
function checkIfWon() {
if (obfuscateWord() == targetWord) {
endGameDialog(true);
}
}
function resetGame() {
//setImage(0);
targetWord = '';
guesses = [];
newWord();
console.log(newWord())
}
//when key is pressed call the following functions
function update() {
addGuess();
cleanGuess();
drawWord();
drawGuesses();
reviewLives();
checkIfWon();
}
$(document).ready(function() {
//loadWordlist();
drawWord();
drawGuesses();
$('#guess').attr('onkeyup', 'update();');
});
body {
font-family:sans-serif;
font-weight:bold;
font-size:16pt;
}
/* Topmatter */
.topmatter {
height:210px;
}
.bottommatter{
background:#f1f1f1;
height:auto;
}
/* For the left 'Guess A Letter!' and 'Guessed Letter' boxes. */
.side-container {
margin-top:45px;
margin-left:130px;
width:170px;
text-align:center;
}
.container-title {
color:#6f5a2d;
}
.input-area {
width:75px;
height:31px;
margin:auto;
padding:3pt;
border: 1px #6f5a2d solid;
-moz-border-radius:15px;
-webkit-border-radius:15px;
border-radius:15px;
background:#ebe2ce;
}
#letter-input {
border:1px #6f5a2d solid;
width:20pt;
font-size:14pt;
text-align:center;
}
.guessed-letter {
color:#792c15;
}
/* Word Box */
.word-box {
width:250px;
margin:auto;
margin-top:25px;
text-align:center;
}
.word-display {
background:#ebe2ce;
border:1px #6f5a2d solid;
height:31px;
padding:3pt;
-moz-border-radius:15px;
-webkit-border-radius:15px;
border-radius:15px;
}
.shown-letter {
border-bottom: 3px #000 solid;
padding: 0 2px;
margin: 0 2px;
color:#1c2025;
}
/* Hangman Area */
.hang-container {
margin-top:-10px;
margin-right: 90px;
width:200px;
height:205px;
float:right;
}
.scaffolding-top {
width:108px;
height:5px;
background:#332915;
}
.scaffolding-left {
width:5px;
height:200px;
background:#332915;
float:left;
}
.scaffolding-base {
width:150px;
height:5px;
background:#332915;
}
.draw-area {
width:200px;
height:200px;
text-align:center;
}
.rope {
margin:auto;
height:25px;
width:5px;
background:#a59885;
}
.head {
margin:auto;
height:30px;
width:30px;
background:#000;
-webkit-border-radius: 15px;
-moz-border-radius:15px;
border-radius:15px;
}
.armbox {
margin:auto;
width:100px;
}
.leftarm {
float:left;
height:10px;
width:45px;
background:#000;
}
.rightarm {
float:right;
height:10px;
width:45px;
background:#000;
}
.torso {
margin:auto;
width:10px;
height:50px;
background:#000;
}
.legbox {
margin:auto;
height:60px;
width:30px;
}
.leftleg {
float:left;
width:10px;
height:60px;
background:#000;
}
.rightleg {
float:right;
width:10px;
height:60px;
background:#000;
}
.pelvis {
margin:auto;
height:10px;
width:10px;
background:#000;
}
<html>
<head>
<title>Hangman Game</title>
<link rel="stylesheet" type="text/css" href="page.css">
</head>
<body>
<div class='topmatter'>
<div class='hang-container'>
<div class='scaffolding-top'></div>
<div class='scaffolding-left'></div>
<div class='draw-area'>
<div class='rope'></div>
</div>
<div class='scaffolding-base'></div>
</div>
<div class='side-container'>
<div class='container-title'>Guess A Letter!</div>
<div class='input-area'>
<input id='guess' type='text' maxlength='1'/>
</div>
</div>
<div class='side-container'>
<div class='container-title'>Guessed Letters</div>
<div id="previousGuesses" class='input-area'></div>
</div>
</div>
<div class='bottommatter'>
<div class='word-box'>
<div class='word-display' id='targetWord'>
</div>
</div>
</div>
<div id='endGameDialogTitle'>
Win or Lose
</div>
</body>
<script src='ui.js'></script>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
</head>
</html>
当再次输入错误的字母时,问题就开始了。虽然第一次输入错误的字母确实会绘制火柴人的一部分,但如果用户再次输入相同错误的字母,则会弹出警报以通知 key 已经被按下,它绘制火柴人的相同部分(即它会绘制第二个头)。我知道这是因为 livesRemaining 的值没有被更新,这导致它再次绘制相应的“drawFoobar”。我可以使用什么样的逻辑/语句来防止任何额外的绘制尝试?
这是我困扰的具体功能:`
function reviewLives() {
var livesRemaining = maxLives,
string = targetWord.toLowerCase();
console.log('this is string:' + string)
for (var i = 0; i < guesses.length; i++) {
if (string.indexOf(guesses[i], 0) == -1) {
livesRemaining--;
//console.log(guesses[i])
}
}
if (livesRemaining === 6) {
drawSequence[0]();
} else if (livesRemaining===5) {
drawSequence[1]();
} else if (livesRemaining===4) {
drawSequence[2]();
} else if (livesRemaining===3) {
drawSequence[3]();
} else if (livesRemaining===2) {
drawSequence[4]();
} else if (livesRemaining===1) {
drawSequence[5]();
endGameDialog(false);
}
console.log('livesRemaining is: '+livesRemaining);
}
`
最佳答案
例如你可以添加一个全局变量
var letterGuessed = false;
并且在 cleanGuess 函数中,当您提醒文本“您已经猜到了这封信!”时将变量 letterGuessed 设置为 true
alert('You already guessed this letter!');
letterGuessed = true;//add
然后在 reviewLives 函数中首先检查变量 letterGuessed 是否等于 false,然后在退出 for 循环后将变量 letterGuessed 设置回 false像这样
function reviewLives() {
var livesRemaining = maxLives,
string = targetWord.toLowerCase();
console.log('this is string:' + string)
for (var i = 0; i < guesses.length; i++) {
if (!letterGuessed && string.indexOf(guesses[i], 0) == -1) {//==========add !letterGuessed &&
livesRemaining--;
//console.log(guesses[i])
}
}
letterGuessed = false;//==========add
if (livesRemaining === 6) {
drawSequence[0]();
} else if (livesRemaining===5) {
drawSequence[1]();
} else if (livesRemaining===4) {
drawSequence[2]();
} else if (livesRemaining===3) {
drawSequence[3]();
} else if (livesRemaining===2) {
drawSequence[4]();
} else if (livesRemaining===1) {
drawSequence[5]();
endGameDialog(false);
}
console.log('livesRemaining is: '+livesRemaining);
}
关于javascript - 如果值不更改,如何跳过 'if' 语句 Hangman Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38887071/
我正在上 C 编程入门类(class),我们被分配编写 Hangman程序。 在游戏中,计算机随机选择一个单词并显示它有多少个字母。用户必须通过输入他们认为可能存在于该单词中的字母来猜测该单词。此外,
我用 Java 创建了一个刽子手游戏。我不知道如何检查和更换它。一切正常,字符串字正确,游戏板也很好。因此,游戏板给我的单词长度为“_ _ _ _ _”,例如。 我的问题就是如何获取用户输入检查的字符
我正在尝试为我的大学制作一个 Hangman 程序,我需要一些帮助。经过一试,程序进展顺利。最后,您可以选择玩另一个游戏或停止程序,但它保持答案是"is",要求输入新单词。经过一番尝试后如何访问菜单。
我正在制作的 Hangman 游戏有以下 while 循环: while(amountOfGuessesLeft > 0 || !wordComplete){ System.out.p
我正在编写一个hangman 类,并且遇到了一个意外类型错误的小问题。此错误位于 this.hidden.charAt(i) = this.original.charAt(i); 中。任何帮助将不胜感
对于我的刽子手游戏,我希望有一堆错误消息来检查是否输入了多个字母、两次猜测同一个字母等。到目前为止我的完整代码: import java.awt.Color; import java.
我有一个 JAVA 作业,必须使用数组和循环创建一个 Hangman 程序。 用户1输入一个有效的单词(无数字或符号) 用户2可以尝试一次猜出整个单词,或者使用一个字母总共猜10次。最初,用户 2 必
我似乎有一个无法解决的问题,当用户为我的程序输入完整的单词时,它每次搜索字符时都会显示,而不是仅显示整个单词,表明他们猜对了。当用户输入整个单词时,如何让它只显示单词,而不是每次搜索字符时显示?感谢您
import java.util.*; public class Hangman { public static void main(String[] args) { Scanner
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 8 年前。 Improve th
我对编程和 java 非常陌生(如你所见),并且确实陷入了编程刽子手的一个基本问题上。我的代码不是我所知道的最干净的,但我真的很想就我在逻辑上出错的地方提供一些意见。我的麻烦是让程序在每次猜测时正确输
我正在构建一个刽子手/猜词游戏,它使用数组来检查用户输入是否与单词中的字母匹配(他们试图猜测)。尝试跟踪用户正确猜测的次数(使用发生变量),但每当代码运行时,它都会计数两次。 所以我们假设这个词是“a
这个问题已经有答案了: How do I compare strings in Java? (23 个回答) 已关闭 7 年前。 我正在尝试用 Java 制作一个 Hangman 游戏,但我在互联网上
我正在开发一个刽子手游戏,但我想从数据库中选择一个随机单词。 数据库连接: $db_host = "127.0.0.1"; $db_user
我是 Java 的初学者,需要为 Java 最终项目拼凑一个应用程序。我想做刽子手(当时看起来很容易)。这对我来说非常困难。到目前为止,这是我的代码。 (将大约 10 个开源刽子手游戏放在一起真是令人
如何让我的 python hangman 游戏将变量 blanks 中的下划线替换为正确的字母(如果猜到的话)。 我有正确的 if 语句,但我不确定如何替换字母。 这是我尝试过的: def main(
我最近完成了 Javascript、CSS、HTML 的基础知识,并开始使用 jQuery。我决定我所知道的足以制作一个简单的刽子手游戏,所以我决定这样做。我已经完成了大部分,但是如果他们猜对了字母,
这是一个简单的刽子手游戏,我通过按钮制作了一个字母键盘,所以 onclick 它应该调用函数 checkLetter 来检查在要猜测的单词中选择的字母是否不运行,以及如何在用户单击按钮时删除按钮上的字
我正在用 C++ 为 Uni 评估开发 Hangman 游戏,但在用户键入字母后我无法显示隐藏的单词。所以我得到的单词显示为“_ _ _ _ _ _ _”,但是当我键入一个字母时,它不会将下划线替换为
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and th
我是一名优秀的程序员,十分优秀!