Small Basic Curriculum: Lesson 4.2: Responding to Events
Small Basic > Curriculum >** **Online > Lesson 4.2: Responding to Events
Estimated time to complete this lesson: 1 hour
Responding to Events
In this lesson, you will learn how to:
Create interactive games that respond to events.
Fun with Shapes
So far, you have learned how to insert and animate various shapes in your Small Basic programs.
http://msdn.microsoft.com/gg715114.Fun_with_Shapes(en-us,MSDN.10).jpg
You have also learned how to use controls and keyboard and mouse events to include interactivity in your Small Basic program.
And you also know that you can use these shapes, controls, and events collectively to create interactive games in Small Basic.
Make the Turtle Draw ? The Game
In this simple game, you tell the Turtle to draw unique shapes in the graphics window by specifying how many sides each shape has.
The game demonstrates how to work with colors and use the properties of Turtle and GraphicsWindow to draw different shapes.
http://msdn.microsoft.com/gg715114.The_Game(en-us,MSDN.10).jpg
Notice how you use the Turtle object to draw shapes and how you use mouse and keyboard events to choose the color and the number of sides.
Make the Turtle Draw ? How to Play
So how do you play this game?
Steps to play the game:
- First, you must select a color from the color palette.
- Next, you define what shape the Turtle should draw by specifying the number of sides.
- When you click Submit, the Turtle starts to draw.
Make the Turtle Draw - Code
Now let’s understand the code for the game in detail…
' Copyright (c) Microsoft Corporation. All rights reserved.
GraphicsWindow.Hide()
gw = 600
gh = 450
GraphicsWindow.CanResize = "False"
GraphicsWindow.Top = (Desktop.Height - gh) / 2
GraphicsWindow.Left = (Desktop.Width - gw) / 2
GraphicsWindow.Title = "Drawing Shapes Using Turtle"
GraphicsWindow.Width = gw
GraphicsWindow.Height = gh
GraphicsWindow.Show()
CreateUI()
Controls.ButtonClicked = OnButtonClicked
GraphicsWindow.MouseDown = OnMouseDown
Sub CreateUI
GraphicsWindow.BrushColor = "Black"
GraphicsWindow.DrawText(100, 25, "Enter the sides:")
sidesTextBox = Controls.AddTextBox(200, 20)
Controls.SetSize(sidesTextBox, 50, 30)
drawButton = Controls.AddButton("DrawShape", 280, 20)
Controls.SetSize(drawButton, 100, 30)
clearButton = Controls.AddButton("Clear", 390, 20)
Controls.SetSize(clearButton, 100, 30)
GraphicsWindow.PenColor = "Black"
GraphicsWindow.DrawRectangle(55, 55, 490, 380)
DrawPalette()
EndSub
Sub OnButtonClicked
clickedButton = Controls.LastClickedButton
If clickedButton = drawButton Then
sides = Controls.GetTextBoxText(sidesTextBox)
If sides < 3 or sides > 35 Then
Controls.SetTextBoxText(sidesTextBox, "")
Else
DrawShape()
EndIf
ElseIf clickedButton = clearButton Then
Controls.SetTextBoxText(sidesTextBox, "")
GraphicsWindow.BrushColor = "White"
GraphicsWindow.FillRectangle(55, 55, 490, 380)
GraphicsWindow.PenColor = "Black"
GraphicsWindow.DrawRectangle(55, 55, 490, 380)
EndIf
EndSub
Sub DrawPalette
color[1] = "Red"
color[2] = "DeepPink"
color[3] = "Magenta"
color[4] = "BlueViolet"
color[5] = "MediumSlateBlue"
color[6] = "LimeGreen"
color[7] = "DeepSkyBlue"
color[8] = "Blue"
color[9] = "DarkGreen"
color[10] = "Aqua"
color[11] = "Green"
color[12] = "SpringGreen"
color[13] = "Yellow"
color[14] = "YellowGreen"
color[15] = "SteelBlue"
color[16] = "DarkSlateBlue"
color[17] = "Black"
color[18] = "Orange"
GraphicsWindow.PenColor = "Black"
For i = 1 To 9
GraphicsWindow.Brushcolor = color[i]
paletteColor = Shapes.AddRectangle(40, 40)
Shapes.Move(paletteColor, 4, i * 44 + 6)
Endfor
For i = 1 To 9
GraphicsWindow.Brushcolor = color[i + 9]
paletteColor = Shapes.AddRectangle(40, 40)
Shapes.Move(paletteColor, 554, i * 44 + 6)
EndFor
EndSub
Sub DrawShape
GraphicsWindow.DrawRectangle(55, 55, 490, 380)
Turtle.Show()
Program.Delay(500)
length = 500 / sides
angle = 360 / sides
Turtle.Speed = 10
Turtle.X = 300
Turtle.Y = 240
For j = 1 To 10
For i = 1 To sides
Turtle.Move(length)
Turtle.Turn(angle)
EndFor
Turtle.Turn(36)
EndFor
EndSub
Sub OnMouseDown
x = GraphicsWindow.MouseX
y = GraphicsWindow.MouseY
If y > 50 And y < 446 Then
If Math.Remainder((y - 6), 44) <= 40 Then
paletteIndex = Math.Floor((y - 6) / 44)
If x > 4 And x < 44 Then
' Left Palette
GraphicsWindow.PenColor = color[paletteIndex]
Controls.SetTextBoxText(sidesTextBox, "")
ElseIf x > 554 And x < 594 Then
' Right Palette
GraphicsWindow.PenColor = color[paletteIndex + 9]
Controls.SetTextBoxText(sidesTextBox, "")
EndIf
GraphicsWindow.DrawRectangle(55, 55, 490, 380)
EndIf
EndIf
EndSub
This is the output you will see:
http://msdn.microsoft.com/gg715114.Turtle_Draw(en-us,MSDN.10).jpg
To create this game, you use the GraphicsWindow to create a user interface. You use the Controls object to add a button and a text box and set the size for the control buttons. You use the Shapes object to add different shapes. Then, you use the Shapes object to show, move, and hide shapes. You also use the Turtle object and set its angle, speed, and position. You use different conditions for different actions.
Bounce the Ball ? The Game
Let’s look at a more complex game, in which you click a ball to keep it floating above the ground.
http://msdn.microsoft.com/gg715114.Bounce_the_Ball(en-us,MSDN.10).jpg
The objective of the game is to keep the ball afloat as long as possible.
Notice how we use mouse events to keep the ball from touching the ground. The ball responds to mouse clicks and stays afloat.
Bounce the Ball ? How to Play
So how do you play this game?
Steps to play the game:
- On the screen, a ball is dropped on the ground.
- You click the ball to make it bounce up in the air.
- You keep clicking the ball to keep it from touching the ground.
- The timer shows how many seconds you keep the ball from touching the ground.
Bounce the Ball ? The Code
Now let’s understand the code for the game in detail…
Copyright (c) Microsoft Corporation. All rights reserved.
GraphicsWindow.Hide()
gw = 450
gh = 400
GraphicsWindow.CanResize = "False"
GraphicsWindow.Width = gw
GraphicsWindow.Height = gh
GraphicsWindow.Top = (Desktop.Height - gh) / 2
GraphicsWindow.Left = (Desktop.Width - gw) / 2
GraphicsWindow.Title = "Bounce the Ball"
GraphicsWindow.Show()
speed = 15
imagepathBase = Program.Directory + "\ground.png"
ballimage = Program.Directory + "\ball.png"
GraphicsWindow.FontSize = 14
Controls.ButtonClicked = OnClicked
angle = 30
sec = 0
min = 0
gw = GraphicsWindow.Width
gh = GraphicsWindow.Height
y = gh - 86
x = 210
GraphicsWindow.BrushColor = "Black"
GraphicsWindow.DrawText(10, 10, "Time: 00:00")
itxt = Shapes.AddText("Click on the ball to start the game!")
Shapes.Move(itxt, 100,130)
ball = Shapes.AddImage(ballimage)
base = Shapes.AddImage(imagepathBase)
Shapes.Move(base, 0, gh - 50)
ballbtn = Controls.AddButton("", x, y)
Controls.SetSize(ballbtn, 36, 36)
Shapes.Move(ball, x, y)
Shapes.Move(ballbtn, x, y)
Shapes.SetOpacity(ballbtn, 0)
Sub Onstart
bX = 1
bY = -2
rndNum = Math.GetRandomNumber(200)
topy = rndnum
Loop:
y = y + bY
gw = GraphicsWindow.Width
gh = GraphicsWindow.Height
If x >= gw - 16 Or x <= 0 Then
bX = -bX
EndIf
If y <= rndNum Then
bY = -bY
EndIf
Shapes.Move(ball, x, y)
Shapes.Rotate(ball, angle + 30)
Shapes.Move(ballbtn, x, y)
Program.Delay(speed)
ShowScore()
If (y < gh - 86) Then
Goto Loop
EndIf
EndGame:
GraphicsWindow.ShowMessage("You bounced the ball for " + strMin + ":" + strSec + " seconds.", "Game Over")
Program.End()
EndSub
Sub OnClicked
Shapes.HideShape(itxt)
speed = speed - 0.5
ShowScore()
Onstart()
EndSub
Sub ShowScore
sec = sec + 0.01
If sec < 60 And min < 1 Then
strMin = "00"
If sec < 10 Then
strSec = Text.Append("0" , Math.Floor(sec))
ElseIf sec > 10 Then
strSec = Text.Append("" , Math.Floor(sec))
EndIf
Else
If min < 10 Then
strMin = Text.Append("0" , min)
ElseIf min > 10 Then
strMin = Text.Append("" , min)
EndIf
If sec < 10 Then
strSec = Text.Append("0" , Math.Floor(sec))
ElseIf sec > 10 Then
strSec = Text.Append("" , Math.Floor(sec))
EndIf
EndIf
GraphicsWindow.BrushColor = "White"
GraphicsWindow.FillRectangle(50, 10, 200, 20)
GraphicsWindow.BrushColor = "Black"
GraphicsWindow.DrawText(54, 10,"" + strMin + ":" + strSec)
EndSub
This is the output you will see:
http://msdn.microsoft.com/gg715114.Bounce_the_Ball_The_Code(en-us,MSDN.10).jpg
To develop this game, you create the user interface by using the GraphicsWindow object. You use the Controls object to define the mouse event that will be used to balance the ball. You use the Shapes object to add the image of the ball. You also use conditional statements to define the action to be performed when a particular mouse event occurs.
Let’s Summarize…
Congratulations! Now you know how to:
- Create interactive games that respond to events.
Show What You Know
Write a program to display a graphics window, and perform the following steps:
- Create a series of statements to appear in the graphics window.
- Create a button that you label True and another button that you label False.
- For each statement, the user will click True or False.
- The user scores points by correctly identifying statements as true or false.
To see the answers to these questions, go to the Answer Key page.
PowerPoint Downloads