2013-11-15 66 views
0

我想在PowerShell中开发hang子手游戏。我的剧本一切顺利,但游戏中存在逻辑错误。我想把这个检查,当用户输入两次相同的单词。它简单给出错误! 例如:词“足球”。 如果用户输入字母'F'多于1次,它应该给出错误信息。 这里是我的代码:PowerShell脚本Hang子手游戏

$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); 

回答

1

在这里你去,这应该让你用自己的方式,以保持信件跟踪它们添加到一个数组[email protected]()然后检查他们是否已经使用使用包含一个字母字母$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; 
[email protected]() 
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 ------------" 
} 
+0

OMG!你真棒! – daniyalahmad