This is, yet again, another improvement to a script I created earlier, you can find this here.
What I have done is added some new games (3 to be exact) and also created some unnecessary “fancy” bits such as a loading screen and a “Goodbye” exiting message. I have also changed the menu to be a single “echo” command instead of the multiple “write-host” which makes the code look cleaner.
The three games I have added are pretty much all the same game. I was getting sick of guessing games and since making actual games in PowerShell is VERY complex. I decided to make a math game. Specifically one that give the user a math question and the user has to work out the correct answer. An example would be “4 * ? = 12”. Where the user would have to work out “?”.
I made three difficulties of this, easy (1-10), medium (1-20) and hard (1-50). This means that the answers in the easy section are from 1 to 10, the answers in the medium are from 1 to 20 and so on…
I also added a function to change the size of the window to something more appropriate and changed the window title to something more…fun.
Anyway, below is the code for this. Unfortunately, I didn’t break the “300 lines of code” achievement I had set for myself:
function changescreensizeforgames{ $pshost = get-host $pswindow = $pshost.ui.rawui $newsize = $pswindow.buffersize $newsize.height = 500 $newsize.width = 500 $pswindow.buffersize = $newsize $newsize = $pswindow.windowsize $newsize.height = 15 $newsize.width = 51 $pswindow.windowsize = $newsize $pswindow.WindowTitle = "Games Galore!" } changescreensizeforgames function fakeloadingbar{ cls echo "-....." Start-Sleep -Milliseconds 150 cls echo ".-...." Start-Sleep -Milliseconds 150 cls echo "..-..." Start-Sleep -Milliseconds 150 cls echo "...-.." Start-Sleep -Milliseconds 150 cls echo "....-." Start-Sleep -Milliseconds 150 cls echo ".....-" Start-Sleep -Milliseconds 150 cls echo "....-." Start-Sleep -Milliseconds 150 cls echo "...-.." Start-Sleep -Milliseconds 150 cls echo "..-..." Start-Sleep -Milliseconds 150 cls echo ".-...." Start-Sleep -Milliseconds 150 cls echo "-....." Start-Sleep -Milliseconds 150 cls } fakeloadingbar function exitscreenforgames{ cls echo @" #### # # ##### ## # # # # # ## ##### ## #### ## # # ## # ## # # ## # ##### ## ##### ## "@ Start-Sleep -Seconds 1 exit } #Window size change #INTRO (Start Menu) function menu2{ function Show-Menu{ param ( [string]$Title = 'My Menu' ) Clear-Host write-host @" ================ $Title ================ Guessing Games------------ 1: Press '1' to play 1-10 with 1 guess 2: Press '2' for 1-100 with unlimited guesses Multiplication Games------ 3: Press '3' for easy mulitplication game (1-10) 4: Press '4' for medium multiplication game (1-20) 5: Press '5' for hard multiplication game (1-50) Q: Press 'Q' to quit. "@ } Show-Menu -Title 'Select an option' $selection = read-host "please make a selection" if ($selection -eq "1"){ write-host "You chose option one" (1to10guessgame) }elseif ($selection -eq "2"){ Write-Host "you chose option two" (1to100guessgame) }elseif ($selection -eq "3"){ write-host "You chose option three" (easymathgame) }elseif ($selection -eq "4"){ write-host "You chose option four" (mediummathgame) }elseif ($selection -eq "5"){ write-host "You chose option four" (hardmathgame) }elseif ($selection -eq "q"){ clear-host Do {$areyousuremessage = Read-Host "Are you sure you want to quit? Y or N?"} while (("y","n") -notcontains $areyousuremessage) switch ($areyousuremessage){ "y" {exitscreenforgames} "n" {menu2} } }else { (menu2) } } #Single guess game function 1to10guessgame{ clear-host Write-Host "You only have one guess!" Start-Sleep -Seconds 1 Write-Host "Are you ready?" start-sleep -Seconds 1 $random = Get-Random -Minimum 1 -Maximum 11 do { try { $numOk = $true [int]$input1 = Read-host "Make a guess between 1 and 10" }catch {$numOK = $false} }until (($input1 -ge 1 -and $input1 -lt 11) -and $numOK) if ($input1 -eq $random){ Write-Host "You got it right!" }else{ Write-Host "You got it wrong! the number was $random" } Start-Sleep -Seconds 2 do {$playagain1 = Read-Host "Do you want to play again? Y or N"} while (("y","n") -notcontains $playagain1) if ($playagain1 -eq "y"){ (1to10guessgame) }elseif ($playagain1 -eq "n"){ (menu2) } } #1-100 Guess game function 1to100guessgame{ clear-host [int]$random100 = Get-Random -Minimum 1 -Maximum 101 Write-Host "Try and guess my number between 1 and 100" while ($input100 -ne $random100){ Write-Host "enter your guess below" $input100 = [int] (Read-Host) $option1 = if ($input100 -gt $random100) {Write-Host "$input100 was too high"} $option2 = if ($input100 -lt $random100) {Write-Host "$input100 was too low"} $option3 = if ($input100 -gt [int](100) -or $input -lt [int](0)) {Write-Host 'between 1 and 100!'} } Write-Host "Correct! the number was $input100" do {$playagain1 = Read-Host "Do you want to play again? Y or N"} while (("y","n") -notcontains $playagain1) if ($playagain1 -eq "y"){ (1to100guessgame) }elseif ($playagain1 -eq "n"){ (menu2) } } #easy math game 1-10 function easymathgame{ $easynewnumber1 = get-random -minimum 1 -maximum 11 $easynewnumber2 = Get-Random -Minimum 1 -Maximum 11 $easynumbermultiplied = $easynewnumber1 * $easynewnumber2 Clear-Host Write-Host "Here is your question, can you work out '?'" write-host "$easynewnumber2 * ? = $easynumbermultiplied" do{ try{ $numOk = $true [int]$easynewnumberinput = Read-Host "Enter your answer here..." }catch {$numOk = $false} }until (($easynewnumberinput -ge 1 -and $easynewnumberinput -lt 11) -and $numOk) if ($easynewnumberinput -eq $easynewnumber1){ Write-Host "You got it right!" }elseif ($easynewnumberinput -ne $easynewnumber1){ Write-Host "You got it wrong, the answer was $easynewnumber1" } Start-Sleep -Seconds 1 do {$playagain1 = Read-Host "Do you want to play again? Y or N"} while (("y","n") -notcontains $playagain1) if ($playagain1 -eq "y"){ easymathgame }elseif ($playagain1 -eq "n"){ (menu2) } } #medium math game 1-20 function mediummathgame{ $mediumnewnumber1 = get-random -minimum 1 -maximum 20 $mediumnewnumber2 = Get-Random -Minimum 1 -Maximum 20 $mediumnumbermultiplied = $mediumnewnumber1 * $mediumnewnumber2 Clear-Host Write-Host "Here is your question, can you work out '?'" write-host "$mediumnewnumber2 * ? = $mediumnumbermultiplied" do{ try{ $numOk = $true [int]$mediumnewnumberinput = Read-Host "Enter your answer here..." }catch {$numOk = $false} }until (($mediumnewnumberinput -ge 1 -and $mediumnewnumberinput -lt 20) -and $numOk) if ($mediumnewnumberinput -eq $mediumnewnumber1){ Write-Host "You got it right!" }elseif ($mediumnewnumberinput -ne $mediumnewnumber1){ Write-Host "You got it wrong, the answer was $mediumnewnumber1" } Start-Sleep -Seconds 1 do {$playagain1 = Read-Host "Do you want to play again? Y or N"} while (("y","n") -notcontains $playagain1) if ($playagain1 -eq "y"){ mediummathgame }elseif ($playagain1 -eq "n"){ (menu2) } } #Difficult math game 1-50 function hardmathgame{ $hardnewnumber1 = get-random -minimum 1 -maximum 50 $hardnewnumber2 = Get-Random -Minimum 1 -Maximum 50 $hardnumbermultiplied = $hardnewnumber1 * $hardnewnumber2 Clear-Host Write-Host "Here is your question, can you work out '?'" write-host "$hardnewnumber2 * ? = $hardnumbermultiplied" do{ try{ $numOk = $true [int]$hardnewnumberinput = Read-Host "Enter your answer here..." }catch {$numOk = $false} }until (($hardnewnumberinput -ge 1 -and $hardnewnumberinput -lt 51) -and $numOk) if ($hardnewnumberinput -eq $hardnewnumber1){ Write-Host "You got it right!" }elseif ($hardnewnumberinput -ne $hardnewnumber1){ Write-Host "You got it wrong, the answer was $hardnewnumber1" } Start-Sleep -Seconds 1 do {$playagain1 = Read-Host "Do you want to play again? Y or N"} while (("y","n") -notcontains $playagain1) if ($playagain1 -eq "y"){ hardmathgame }elseif ($playagain1 -eq "n"){ (menu2) } } menu2
Hopefully you’re as happy with this code as I am, if you have any improvements please let me know 🙂
Enjoy!