Julia
and many others are using
Hackety Hack
to learn how to code.
Hackety Hack is a free program for Windows, Mac OS X and Linux that can teach you how to make games, applications and more and share those programs with your friends. You can ask other budding programmers questions and follow them to see what code they're working on through the Hackety Hack website.
Sign up
Learn More
#
# Pong in Shoes
# a clone of http://billmill.org/pong.html
# and shoes is at http://shoooes.net
#
# This is just for kicks -- I'm very fond of NodeBox as well.
#
# There's a slightly different approach in Shoes: rather than
# redrawing the shapes, you can move the shapes around as objects.
# Yeah, see, notice how @you, @comp and @ball are used.
#
Shoes.app :width => 1000, :height => 700, :resizable => false do
paddle_size = 80
ball_diameter = 15
vx, vy = [3, 4]
compuspeed = 8
bounce = 1.2
# set up the playing board
nostroke and background hotpink
@ball = oval 0, 0, ball_diameter, :fill => "#9B7"
@you, @comp = [app.height-4, 0].map {|y| rect 0, y, paddle_size, 4, :curve => 2}
# animates at 40 frames per second
@anim = animate 40 do
# check for game over
if @ball.top + ball_diameter < 0 or @ball.top > app.height
para strong("GAME OVER", :size => 32), "\n",
@ball.top < 0 ? "You win!" : "You Lose!", :top => 140, :align => 'center'
@ball.hide and @anim.stop
end
# move the @you paddle, following the mouse
@you.left = mouse[1] - (paddle_size / 2)
nx, ny = (@ball.left + vx).to_i, (@ball.top + vy).to_i
# move the @comp paddle, speed based on `compuspeed` variable
@comp.left +=
if nx + (ball_diameter / 2) > @comp.left + paddle_size; compuspeed
elsif nx < @comp.left; -compuspeed
else 0 end
# if the @you paddle hits the ball
if ny + ball_diameter > app.height and vy > 0 and
(0..paddle_size).include? nx + (ball_diameter / 2) - @you.left
vx, vy = (nx - @you.left - (paddle_size / 2)) * 0.25, -vy * bounce
ny = app.height - ball_diameter
end
# if the @comp paddle hits the ball
if ny < 0 and vy < 0 and
(0..paddle_size).include? nx + (ball_diameter / 2) - @comp.left
vx, vy = (nx - @comp.left - (paddle_size / 2)) * 0.25, -vy * bounce
ny = 0
elsif nx + ball_diameter > app.width or nx < 0
vx = -vx
end
@ball.move nx, ny
end
end