$Running = $true $GameOver = $false $Guess = 0 $Attempt = 0 $Score = 0 $Digits = 0,0,0 function AskQuestion($prompt) { while($true) { $ans = Read-Host $prompt "?" if($ans) { return $ans.ToUpper() } else { Write-Host "PLEASE ANSWER THE QUESTION." } } } function IsAnInt($value) { return $value -match "^[-*\d]+$" } function GetIntInput($prompt) { while($true) { $ans = Read-Host $prompt " " if(IsAnInt($ans)) { return [int]$ans } else { Write-Host "YOU DID NOT ENTER AN INTEGER." } } } function AskForBet() { while($true) { $bet = GetIntInput("WHAT IS YOUR BET?") if($bet -lt 0) { Write-Host "PLEASE BET A NON-NEGATIVE AMOUNT." } elseif($bet -gt $Wallet) { Write-Host "SORRY MY FRIEND, BUT YOU BET TOO MUCH." Write-Host "YOU HAVE ONLY" $Wallet "DOLLARS TO BET." } else { return $bet } } } function AskToPlayAgain() { while($true) { $ans = AskQuestion("DO YOU WANT TO PLAY AGAIN") if(($ans -eq "YES") -or ($ans -eq "Y")) { return $true } if(($ans -eq "NO") -or ($ans -eq "N")) { return $false } else { Write-Host "PLEASE ANSWER ""YES"" OR ""NO""" } } } function AskToSeeTheRules() { while($true) { $ans = AskQuestion("DO YOU WANT TO SEE THE RULES") if(($ans -eq "YES") -or ($ans -eq "Y")) { return $true } if(($ans -eq "NO") -or ($ans -eq "N")) { return $false } else { Write-Host "PLEASE ANSWER ""YES"" OR ""NO""" } } } function GenerateRandomNumber { param ( [int]$minimum, [int]$maximum, $show ) $value = Get-Random -Minimum $minimum -Maximum $maximum if($show -eq $true) { Write-Host $value } return $value } function DisplayRules() { Write-Host "I WILL THINK OF A THREE-DIGIT NUMBER. YOU WILL TRY TO" Write-Host "GUESS MY NUMBER AND I WILL GIVE YOU CLUES AS FOLLOWS:" Write-Host " PICO - ONE DIGIT CORRECT BUT IN THE WRONG POSITION" Write-Host " FERMI - ONE DIGIT CORRECT AND IN THE RIGHT POSITION" Write-Host " BAGELS - NO DIGITS ARE CORRECT" Write-Host " " Write-Host "YOU GET TWENTY TRIES BEFORE YOU LOSE." Write-Host " " } function MakeIntFromArray($arrayIn) { $retVal = ($arrayIn[0] * 100) + ($arrayIn[1] * 10) + $arrayIn[2] return $retVal } function MakeArrayFromInt($valIn) { $retArray = 0,0,0 $retArray[0] = [Math]::Floor($valIn / 100) $retArray[1] = [Math]::Floor(($valIn - ($retArray[0] * 100)) / 10) $retArray[2] = $ValIn - ($retArray[0] * 100) - ($retArray[1] * 10) return $retArray } function AskForGuess($attempt) { while($true) { $guess = GetIntInput -prompt "GUESS #$attempt" if($guess -lt 0) { Write-Host "PLEASE GUESS A NON-NEGATIVE NUMBER." } elseif($guess -lt 100 -or $guess -gt 999) { Write-Host "PLEASE GUESS A NUMBER BETWEEN 100 AND 999." } else { return $guess } } } function DisplayGameOver($digits) { $number = MakeIntFromArray -arrayIn $digits Write-Host "OH WELL, THAT'S TWENTY GUESSES." Write-Host "MY NUMBER WAS"$number"." } function CreateTheNumber() { $digits = 0,0,0 $digits[0] = GenerateRandomNumber -minimum 1 -maximum 9 -show $false $gotDigit = $false while($gotDigit -eq $false) { $digits[1] = GenerateRandomNumber -minimum 0 -maximum 9 -show $false if($digits[0] -ne $digits[1]) { $gotDigit = $true } } $gotDigit = $false while($gotDigit -eq $false) { $digits[2] = GenerateRandomNumber -minimum 0 -maximum 9 -show $false if($digits[2] -ne $digits[0] -and $digits[2] -ne $digits[1]) { $gotDigit = $true } } return $digits } function CheckGuess() { param ( [int]$guess, $digits ) $temp = MakeArrayFromInt -valIn $guess $vals = 0,0,0 if($temp[0] -eq $digits[0]) { $vals[0] = 1 } if($temp[1] -eq $digits[1]) { $vals[1] = 1 } if($temp[2] -eq $digits[2]) { $vals[2] = 1 } $value = MakeIntFromArray -arrayIn $vals if($value -eq 111) { return $true } if($vals[0] -eq 0) { if($temp[0] -eq $digits[1] -or $temp[0] -eq $digits[2]) { $vals[0] = 2 } } if($vals[1] -eq 0) { if($temp[1] -eq $digits[0] -or $temp[1] -eq $digits[2]) { $vals[1] = 2 } } if($vals[2] -eq 0) { if($temp[2] -eq $digits[0] -or $temp[2] -eq $digits[1]) { $vals[2] = 2 } } $value = MakeIntFromArray -arrayIn $vals if($value -eq 0) { Write-Host "BAGELS" } else { $display = "" if($vals[0] -eq 1) { $display = $display + "FERMI " } if($vals[0] -eq 2) { $display = $display + "PICO " } if($vals[1] -eq 1) { $display = $display + "FERMI " } if($vals[1] -eq 2) { $display = $display + "PICO " } if($vals[2] -eq 1) { $display = $display + "FERMI" } if($vals[2] -eq 2) { $display = $display + "PICO" } Write-Host $display } return $false } Write-Host "*** BAGELS : POWERSHELL ***" $Running = $true if(AskToSeeTheRules -eq $true) { DisplayRules } while($Running -eq $true) { $Attempt = 1 $Digits = CreateTheNumber Write-Host "OK, I HAVE A NUMBER IN MIND." $GameOver = $false while($GameOver -eq $false) { $Guess = AskForGuess -attempt $Attempt $guessed = CheckGuess -guess $Guess -digits $Digits if($guessed -eq $true) { Write-Host "YOU GOT IT!!!" $Score++ $GameOver = $true } else { $Attempt++ if($Attempt > 20) { DisplayGameOver -digits $Digits $GameOver = $true } } } Write-Host "*** GAME OVER ***" $Running = AskToPlayAgain } Write-Host "A"$Score" POINT BAGELS BUFF!" Write-Host "HOPE YOU HAD FUN. BYE!"