0

PowerShell でハングマン ゲームを開発しようとしています。私のスクリプトではすべてうまくいきますが、ゲームには論理的なエラーがあります。ユーザーが同じ単語を2回入力したときにチェックを入れたい。簡単にエラーが発生します。例:「サッカー」という言葉。ユーザーが文字「F」を 1 回以上入力すると、エラー メッセージが表示されます。これが私のコードです:

$random = Get-Random -Minimum 0 -Maximum 5;
$names="America","Iran","Poland","Cat","PowerShell ";
$arrname= $names[$random];
$arrname.ToCharArray();
$ntp="0","1";
$arrlen = $arrname.Length;
clear;

Write-Host "---------Guess the word--------------";

Write-Host "Length is  : " $arrname.Length;
$life=3;
do{
Write-Host "Lifes Remain " $life;
$rnd= Read-Host "Guess the   word ";

if($flag2 -le 1)
{
 $flag=0;
}
else
{
$life--;
}  
for($i=0;$i -lt $arrname.Length; $i++)
{

if($rnd -eq $arrname[$i] )
{
$flag =1;
$arrlen --;
}
}
if($flag -eq 0 )
{

$life--;

}

if($arrlen -eq 0)
{

Write-Host  $arrname;
Write-Host " ************  You WIN  ********************";
break;

}

if($life -eq 0)
{
Write-Host " ------------- You LOST ------------"
break;
}
$p++;
}
while(1); 
4

2 に答える 2

1

ほら、これでうまくいくはずです。文字を追跡するには、文字を配列に追加してから、$guesses=@()文字を含むを使用して文字を既に使用しているかどうかを確認します$guesses -contains $guessLetter

$random = Get-Random -Minimum 0 -Maximum 5;
$names="America","Iran","Poland","Cat","PowerShell";
$targetWord = $names[$random];
[Char[]]$wordProgress =  "_" * $targetWord.Length
clear;

Write-Host "---------Guess the word--------------";

$life=3;
$guesses=@()
do
{
    do
    {
        Write-Host "[$($targetWord.Length)] $wordProgress";
        Write-Host "Lifes Remain " $life

        $guessLetter = Read-Host "Guess a letter:"
        if ($guesses -contains $guessLetter)
        {
            "Try another letter!"
        }
    } while ($guesses -contains $guessLetter) 

    $guesses+=$guessLetter
    $guesses -join ','

    $foundLetter = $false
    for($i=0;$i -lt $targetWord.Length; $i++)
    {
        if($guessLetter -like $targetWord[$i] )
        {
            $wordProgress[$i] = $guessLetter
            $foundLetter=$true
        }
    }

    if(!$foundLetter)
    {
        $life--;
    }

    if($($wordProgress -join '') -like $targetWord)
    {
        Write-Host $targetWord;
        Write-Host " ************  You WIN  ********************";
        break;
    }

}
while($life -gt 0)
if ($life -eq 0)
{
Write-Host " ------------- You LOST ------------"
}
于 2013-11-15T14:20:38.183 に答える