Last active
August 29, 2015 14:20
-
-
Save timkellogg/e41a88ede0c90231f506 to your computer and use it in GitHub Desktop.
Game Suite in Bash/Ruby Scripting
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env ruby | |
# Draws the first cards for the game | |
def first_draw | |
@player_hand = @deck.to_a.sample(2).to_h | |
@computer_hand = @deck.to_a.sample(2).to_h | |
puts "Your Hand: #{@player_hand.keys.first} #{@player_hand.keys.last}" | |
puts "Computer's Hand: #{@computer_hand.keys.first}" | |
check_ace | |
computer_hit | |
check_win | |
end | |
# Allows user to pick between 1 and 11 for ace value | |
def check_ace | |
if @player_hand.has_value?("option") | |
puts "What do you want the ace to be worth? 1 or 11" | |
ace_value = Integer(gets.chomp) | |
if [1, 11].include?(ace_value) | |
@player_hand.each_key { |k| @player_hand[k] = ace_value if @player_hand[k] == "option" } | |
else | |
check_ace | |
end | |
else | |
end | |
end | |
# Initialize function to start the game; sets up deck and data structures for hands, scores | |
def start_game | |
@deck = { HA: "option", HK: 10, HQ: 10, HJ: 10, H10: 10, H9: 9, H8: 8, H7: 7, H6: 6, H5: 5, H4: 4, H3: 3, H2: 2, | |
SA: "option", SK: 10, SQ: 10, SJ: 10, S10: 10, S9: 9, S8: 8, S7: 7, S6: 6, S5: 5, S4: 4, S3: 3, S2: 2, | |
CA: "option", CK: 10, KQ: 10, CJ: 10, C10: 10, C9: 9, C8: 8, C7: 7, C6: 6, C5: 5, C4: 4, C3: 3, C2: 2, | |
DA: "option", DK: 10, DQ: 10, DJ: 10, D10: 10, D9: 9, D8: 8, D7: 7, D6: 6, D5: 5, D4: 4, D3: 3, D2: 2 | |
} | |
@player_score = 0 | |
@computer_score = 0 | |
@player_hand = Hash.new | |
@computer_hand = Hash.new | |
first_draw | |
end | |
# Hit/Stay loop | |
def main_loop | |
get_score("player") | |
puts "Your hand is: #{@player_hand} which is worth #{@player_score}." | |
puts "Hit (H) or Stay (S)?" | |
@user_hit = gets.chomp! | |
computer_hit | |
while @user_hit.downcase == 'h' | |
@player_hand.merge!(@deck.to_a.sample(1).to_h) | |
puts "Your hand is now #{@player_hand}" | |
check_ace | |
check_win | |
end | |
computer_hit | |
check_win | |
end | |
# Calculates computer score; computer allow has aces worth 11 | |
def computer_hit | |
if @computer_hand.has_value?("option") | |
ace_value = 11 | |
@computer_hand.each_key { |k| @computer_hand[k] = ace_value if @computer_hand[k] == "option" } | |
else | |
end | |
get_score("computer") | |
while @computer_score < 17 | |
@computer_hand.merge!(@deck.to_a.sample(1).to_h) | |
computer_hit | |
end | |
end | |
# Calculates scores for object passed in (either computer or player) | |
def get_score(type) | |
if type == "computer" | |
@computer_score = @computer_hand.values.inject(:+) | |
elsif type == "player" | |
@player_score = @player_hand.values.inject(:+) | |
end | |
end | |
# Checks win conditions | |
def check_win | |
get_score("player") | |
get_score("computer") | |
# Check if won | |
if @player_score == 21 && @computer_score != 21 | |
end_game("player") | |
elsif @player_score == 21 && @computer_score == 21 | |
end_game("computer") | |
elsif @player_score > 21 | |
end_game("computer") | |
elsif @computer_score > 21 | |
end_game("player") | |
elsif @user_hit == 's' | |
if @computer_score < 21 | |
if @computer_score > @player_score | |
end_game("computer") | |
else | |
end_game("player") | |
end | |
end | |
else | |
main_loop | |
end | |
end | |
# Handles winning/losing dialog and re | |
def end_game(who_won) | |
if who_won == "player" | |
puts "+===============+" | |
puts "| Congrats! |" | |
puts "+===============+" | |
else | |
puts "+========================+" | |
puts "| Sorry, you lost! |" | |
puts "+========================+" | |
end | |
get_score("player") | |
get_score("computer") | |
puts "Your final hand: #{@player_hand.keys} worth #{@player_score}" | |
puts "Computer's final hand: #{@computer_hand.keys} worth #{@computer_score}" | |
puts "Play again? n or y" | |
play_again = gets.chomp! | |
if play_again.downcase! == "y" | |
start_game | |
else | |
exit | |
end | |
end | |
start_game |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# Game Loop | |
playAgain='y' | |
while [ $playAgain == 'y' ] | |
do | |
# Game Functions | |
function RollDie() { | |
diOne="$((RANDOM%6 + 1))" | |
diTwo="$((RANDOM%6 + 1))" | |
sum=$(($diOne+$diTwo)) | |
Rolls[$diRoll]=$sum | |
echo "You rolled a $diOne and a $diTwo for a total of $sum." | |
echo "Your rolls are now: ${Rolls[*]}" | |
} | |
function winGame() { | |
echo "That means you win!" | |
if [ $diRoll -eq 0 ] | |
then | |
echo "You won on your first roll, nice!" | |
else | |
echo "It took you an extra $diRoll roll(s) to win." | |
fi | |
echo "Play again? Y or N" | |
read playAgain | |
} | |
function loseGame() { | |
echo "That means you lose!!" | |
echo "Play again? Y or N" | |
read playAgain | |
} | |
function startGame() { | |
echo `clear` | |
echo "WELCOME TO THE CRAPS TABLE" | |
diRoll=0 | |
winGame=0 | |
declare -a Rolls=() | |
} | |
startGame | |
RollDie | |
# Player rolls 0,7,11 on the first roll, they win | |
if [[ $diRoll -eq 0 ]] && [[ $sum -eq 7 ]] || [[ $sum -eq 11 ]] | |
then | |
winGame | |
# | |
elif [[ $diRoll -eq 0 ]] && [[ $sum -eq 2 ]] || [[ $sum -eq 3 ]] || [[ $sum -eq 12 ]] | |
then | |
loseGame | |
else | |
echo "You aren't done yet!" | |
echo "You rolled a $sum" | |
echo "Press enter to try for $sum again?" | |
read enter | |
winGame=$sum | |
diRoll=$((diRoll + 1)) | |
RollDie | |
while [[ diRoll -ne 0 ]] && [[ $winGame -ne $sum ]] | |
do | |
diRoll=$((diRoll + 1)) | |
if [[ $sum -eq 7 ]] | |
then | |
loseGame | |
else | |
echo "Press enter to try for $sum again?" | |
read enter | |
RollDie | |
fi | |
done | |
fi | |
done | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
option=0 | |
while [ $option=0 ] | |
do | |
echo "==================" | |
echo | |
echo "Welcome to Game Me" | |
echo "Please choose an option below" | |
echo | |
echo "1. CRAPS" | |
echo "2. GUESSING GAME" | |
echo "3. BLACKJACK" | |
echo "4. EXIT" | |
echo | |
echo "=================" | |
read option | |
case $option in | |
1) `echo bash craps.sh` | |
;; | |
2) `echo bash guessinggame.sh` | |
;; | |
3) `echo ruby blackjack.rb` | |
;; | |
4) exit 1 | |
;; | |
*) echo "Sorry, that isn't a choice" | |
option=0 | |
;; | |
esac | |
done |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# Game Loop | |
playAgain='y' | |
while [ $playAgain == 'y' ] | |
do | |
# Map the prize choice to random cost of price | |
function createPrize() { | |
if [ $prize == "TV" ] | |
then | |
prize_cost="$((RANDOM%300 + 200))" | |
startGame | |
elif [ $prize == "AUTO" ] | |
then | |
prize_cost="$((RANDOM%10000 + 5000))" | |
startGame | |
elif [ $prize == "REFRIG"] | |
then | |
prize_cost="$((RANDOM%600 + 300))" | |
startGame | |
else | |
echo "Uh oh, something went wrong!" | |
fi | |
} | |
# Return a win or loss | |
function decideGame() { | |
if [[ $guess = $prize_cost ]] | |
then | |
echo "YOU WON a $prize WORTH $prize_cost DOLLARS!" | |
echo "PLAY AGAIN?" | |
read playAgain | |
else | |
echo "TIME RAN OUT!" | |
echo "THE CORRECT PRICE OF THE $prize WAS $prize_cost." | |
echo "PLAY AGAIN?" | |
read playAgain | |
fi | |
} | |
# Main Game/Timing Loop | |
function startGame() { | |
echo "YOU HAVE ONE MINUTE TO GUESS THE PRICE OF THE PRIZE" | |
echo "WHAT IS YOUR FIRST GUESS?" | |
read guess | |
# Set timing in seconds | |
secs=60 | |
SECONDS=0 | |
while [[ $guess -ne $prize_cost ]] && [[ $secs -gt $SECONDS ]] | |
do | |
if [[ $guess -lt $prize_cost ]] | |
then | |
echo "GUESS HIGHER?" | |
read guess | |
elif [[ $guess -gt $prize_cost ]] | |
then | |
echo "GUESS LOWER?" | |
read guess | |
else | |
echo "OOPS, SOMETHING WENT WRONG. MAKE SURE TO ENTER A NUMBER!" | |
startGame | |
fi | |
done | |
decideGame | |
} | |
# Menu to decide which option to select | |
function menu() { | |
option=0 | |
while [ $option=0 ] | |
do | |
echo `clear` | |
echo '==========================' | |
echo 'WELCOME TO GUESSING GAME!' | |
echo '1 COLOR TV' | |
echo '2 REFRIGERATOR' | |
echo '3 AUTO' | |
echo '==========================' | |
echo 'ENTER YOUR CHOICE (1,2,3)' | |
read option | |
case $option in | |
1) echo "Time to win that TV!" | |
prize="TV" | |
createPrize | |
;; | |
2) echo "Time to win that REFRIG!" | |
prize="REFRIG" | |
createPrize | |
;; | |
3) echo "Time to win that AUTO!" | |
prize="AUTO" | |
createPrize | |
;; | |
*) echo "SORRY, THAT ISN'T A CHOICE." | |
option=0 | |
;; | |
esac | |
done | |
} | |
menu | |
done | |
echo `bash gameme.sh` | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment