diff --git a/GuessTheNumber.py b/GuessTheNumber.py new file mode 100644 index 0000000..6dd20b5 --- /dev/null +++ b/GuessTheNumber.py @@ -0,0 +1,106 @@ + +import random +import simplegui + +number_of_guesses = 0 +max_number = 100 + + +# helper function to start and restart the game +def new_game(): + # initialize global variables used in your code here + frame = simplegui.create_frame("guess_number", 200, 200) + frame.add_button("Range is [0,100)", range100, 200) + frame.add_button("Range is [0,1000)", range1000, 200) + frame.add_input("Enter a guess", input_guess, 100) + + global secret_number + global max_number + + secret_number = random.randrange(0,max_number) + + global number_of_guesses + print "Number of remaining guesses is", number_of_guesses + + +# define event handlers for control panel +def range100(): + # button that changes the range to [0,100) and starts a new game + print "New game. Range is from 0 to 100" + global max_number + max_number = 100 + global number_of_guesses + number_of_guesses = 7 + +def range1000(): + # button that changes the range to [0,1000) and starts a new game + print "New game. Range is from 0 to 1000" + global max_number + max_number = 1000 + global number_of_guesses + number_of_guesses = 10 + + +def input_guess(guess): + global secret_number + global number_of_guesses + + + # main game logic goes here + guess_number = int(guess) + print "Guess was", guess_number + + number_of_guesses -= 1 + print "Number of remaining guesses is", number_of_guesses + + if(guess_number > secret_number): + print "Lower!" + + elif(guess_number < secret_number): + print "Higher!" + + else: + print "Correct!" + new_game() + return + + if(number_of_guesses <= 0): + print "You ran out of guesses. The number was", secret_number + new_game() + return + + + + +# create frame + + +# register event handlers for control elements and start frame + + +# call new_game +#new_game() + + +# always remember to check your completed program against the grading rubric + +#input_guess(5) + +# template for "Guess the number" mini-project +# input will come from buttons and an input field +# all output for the game will be printed in the console + + + +secret_number = 74 +range100() +new_game() +input_guess("50") +input_guess("75") +input_guess("62") +input_guess("68") +input_guess("71") +input_guess("73") +input_guess("74") + + diff --git a/pong.py b/pong.py new file mode 100644 index 0000000..42dc5be --- /dev/null +++ b/pong.py @@ -0,0 +1,151 @@ +# Implementation of classic arcade game Pong + +import simplegui +import random + +# initialize globals - pos and vel encode vertical info for paddles +WIDTH = 600 +HEIGHT = 400 +BALL_RADIUS = 20 +PAD_WIDTH = 8 +PAD_HEIGHT = 80 +HALF_PAD_WIDTH = PAD_WIDTH / 2 +HALF_PAD_HEIGHT = PAD_HEIGHT / 2 +LEFT = False +RIGHT = True +right_score = 0 +left_score = 0 +ball_pos = [1,2] +paddle2_pos = HEIGHT/2 - HALF_PAD_HEIGHT +paddle1_pos = HEIGHT/2 - HALF_PAD_HEIGHT +paddle1_vel = 1 +paddle2_vel = 1 + +# initialize ball_pos and ball_vel for new bal in middle of table +# if direction is RIGHT, the ball's velocity is upper right, else upper left +def spawn_ball(direction): + global ball_pos, ball_vel # these are vectors stored as lists + ball_pos[0] = WIDTH/2 + ball_pos[1] = HEIGHT/2 + if direction == "RIGHT": + ball_vel = [random.randrange(120, 240)/60.0, -random.randrange(60, 180)/60.0] + else: + ball_vel = [-random.randrange(120, 240)/60.0, -random.randrange(60, 180)/60.0] + +# define event handlers +def new_game(): + global paddle1_pos, paddle2_pos, paddle1_vel, paddle2_vel # these are numbers + global score1, score2 # these are ints + spawn_ball("RIG") + + +def draw(canvas): + global score1, score2, paddle1_pos, paddle2_pos, ball_pos, ball_vel, paddle1_vel, paddle2_vel + + + # draw mid line and gutters + canvas.draw_line([WIDTH / 2, 0],[WIDTH / 2, HEIGHT], 1, "White") + canvas.draw_line([PAD_WIDTH, 0],[PAD_WIDTH, HEIGHT], 1, "White") + canvas.draw_line([WIDTH - PAD_WIDTH, 0],[WIDTH - PAD_WIDTH, HEIGHT], 1, "White") + + # update ball + ball_pos[0] += ball_vel[0] + ball_pos[1] += ball_vel[1] + + if ball_pos[1] <= BALL_RADIUS: + ball_vel[1] = -ball_vel[1] + + if ball_pos[1] >= (HEIGHT-1)- BALL_RADIUS: + ball_vel[1] = -ball_vel[1] + + # draw ball + canvas.draw_circle(ball_pos, BALL_RADIUS, 2, "Red", "White") + + # update paddle's vertical position, keep paddle on the screen + if paddle1_pos >= HEIGHT - PAD_HEIGHT: + if paddle1_pos >= HEIGHT - PAD_HEIGHT: + if paddle1_vel > 0: + paddle1_vel = 0 + + elif paddle1_pos <= 0: + if paddle1_vel < 0: + paddle1_vel = 0 + + if paddle2_pos >= HEIGHT - PAD_HEIGHT: + if paddle2_pos >= HEIGHT - PAD_HEIGHT: + if paddle2_vel > 0: + paddle2_vel = 0 + + elif paddle2_pos <= 0: + if paddle2_vel < 0: + paddle2_vel = 0 + + paddle1_pos += paddle1_vel + paddle2_pos += paddle2_vel + + # draw paddles + + canvas.draw_line([WIDTH-PAD_WIDTH +HALF_PAD_WIDTH, paddle2_pos ] + ,[WIDTH-PAD_WIDTH +HALF_PAD_WIDTH, paddle2_pos+PAD_HEIGHT ] + ,PAD_WIDTH , "White") + canvas.draw_line([0+PAD_WIDTH -HALF_PAD_WIDTH, paddle1_pos ] + ,[0+PAD_WIDTH -HALF_PAD_WIDTH, paddle1_pos+PAD_HEIGHT ] + ,PAD_WIDTH , "White") + + # determine whether paddle and ball collide + global right_score ,left_score + if ball_pos[0] <= BALL_RADIUS + PAD_WIDTH: + if (ball_pos[1] >= paddle1_pos and ball_pos[1] <= paddle1_pos + PAD_HEIGHT): + ball_vel[0] = -1.1 * ball_vel[0] + else: + spawn_ball("RIGHT") + right_score += 1 + + + if ball_pos[0] >= (WIDTH -1) - BALL_RADIUS - PAD_WIDTH: + if (ball_pos[1] >= paddle2_pos and ball_pos[1] <= paddle2_pos + PAD_HEIGHT): + ball_vel[0] = -1.1 * ball_vel[0] + else: + spawn_ball("LEFT") + left_score += 1 + + # draw scores + canvas.draw_text(str(left_score) , (100, 200), 50, 'Blue') + canvas.draw_text(str(right_score), (500, 200), 50, 'Blue') + +def keydown(key): + global paddle1_vel, paddle2_vel + if key == simplegui.KEY_MAP['down']: + paddle2_vel = 6 + elif key == simplegui.KEY_MAP['up']: + paddle2_vel = -6 + + if key == simplegui.KEY_MAP['s']: + paddle1_vel = 6 + elif key == simplegui.KEY_MAP['w']: + paddle1_vel = -6 + + +def keyup(key): + global paddle1_vel, paddle2_vel + +def reset_button(): + global right_score, left_score + right_score = 0 + left_score = 0 + new_game() + +# create frame +frame = simplegui.create_frame("Pong", WIDTH, HEIGHT) +frame.set_draw_handler(draw) +frame.set_keydown_handler(keydown) +frame.set_keyup_handler(keyup) +frame.add_button('Reset', reset_button) + + +# start frame + +new_game() +frame.start() + + diff --git a/rockPaperScissors.py b/rockPaperScissors.py new file mode 100644 index 0000000..b06961b --- /dev/null +++ b/rockPaperScissors.py @@ -0,0 +1,95 @@ +# Rock-paper-scissors-lizard-Spock template +import random + +# The key idea of this program is to equate the strings +# "rock", "paper", "scissors", "lizard", "Spock" to numbers +# as follows: +# +# 0 - rock +# 1 - Spock +# 2 - paper +# 3 - lizard +# 4 - scissors + +# helper functions + +def name_to_number(name): + # delete the following pass statement and fill in your code below + if(name == "rock"): + return 0 + if(name == "Spock"): + return 1 + if(name == "paper"): + return 2 + if(name == "lizard"): + return 3 + if(name == "scissors"): + return 4 + + + # convert name to number using if/elif/else + # don't forget to return the result! + + +def number_to_name(number): + # delete the following pass statement and fill in your code below + + if(number == 0): + return "rock" + if(number == 1): + return "Spock" + if(number == 2): + return "paper" + if(number == 3): + return "lizard" + if(number == 4): + return "scissors" + # convert number to a name using if/elif/else + # don't forget to return the result! + + +def rpsls(player_choice): + # delete the following pass statement and fill in your code below + + # print a blank line to separate consecutive games + print " " + + # print out the message for the player's choice + print "Player chooses", player_choice + + # convert the player's choice to player_number using the function name_to_number() + player_number = name_to_number(player_choice) + + # compute random guess for comp_number using random.randrange() + comp_number = random.randrange(0,5) + + # convert comp_number to comp_choice using the function number_to_name() + comp_choice = number_to_name(comp_number) + + # print out the message for computer's choice + print "Computer chooses", comp_choice + + # compute difference of comp_number and player_number modulo five + diff = (comp_number - player_number )%5 + + # use if/elif/else to determine winner, print winner message + if(diff == 2 or diff == 1 ): + print "Player wins!" + elif(diff == 3 or diff == 4): + print "Computer wins!" + elif(diff == 0): + print "Player and computer tie!" + + +# test your code - THESE CALLS MUST BE PRESENT IN YOUR SUBMITTED CODE +rpsls("rock") +rpsls("Spock") +rpsls("paper") +rpsls("lizard") +rpsls("scissors") + +# always remember to check your completed program against the grading rubric + + + + diff --git a/stopwatch.py b/stopwatch.py new file mode 100644 index 0000000..3823e4f --- /dev/null +++ b/stopwatch.py @@ -0,0 +1,79 @@ +# template for "Stopwatch: The Game" + +import simplegui + +# define global variables +var = 0 +num_of_stops = 0 +num_of_successes = 0 + +# define helper function format that converts time +# in tenths of seconds into formatted string A:BC.D +def format(t): + sec = (t/10) % 60 + mini_sec = t % 10 + min = (t/10) / 60 + min_str = str(min) + sec_str = str(sec) + if(min < 10): + min_str = '0' + str(min) + if(sec < 10): + sec_str = '0' + str(sec) + return min_str + ':' + sec_str + ':' + str(mini_sec) + + +# define event handlers for buttons; "Start", "Stop", "Reset" +def start_handler(): + timer.start() + +def stop_handler(): + timer.stop() + global num_of_stops + global num_of_successes + global var + num_of_stops += 1 + if(var % 10 == 0): + num_of_successes += 1 + +def reset_handler(): + global var + var = 0 + timer.stop() + global num_of_stops + global num_of_successes + num_of_stops = 0 + num_of_successes = 0 + +def increment_count(): + global var + var += 1 + +# define event handler for timer with 0.1 sec interval +timer = simplegui.create_timer(100, increment_count) + + +# define draw handler +def draw(canvas): + global var + global num_of_stops + global num_of_successes + canvas.draw_text(format(var), (70, 120), 30, "White") + canvas.draw_text(str(num_of_successes)+'\\'+ str(num_of_stops),(250, 60), 20, "White") + + +# create frame +frame = simplegui.create_frame("Stop Watch", 300, 200) +frame.add_button("Start", start_handler ,100) +frame.add_button("Stop",stop_handler ,100) +frame.add_button("Reset", reset_handler ,100) + + +# register event handlers +frame.set_draw_handler(draw) + +# start frame +frame.start() + +# Please remember to review the grading rubric + +