Older Version Newer Version

JanetTerra JanetTerra Oct 20, 2009

Simple Jack-O-Lantern Play - JanetTerra JanetTerra

 
    Nomainwin
' Janet Terra
' Jack-o-lantern Challenge 2009
' Released into Public Domain
    title$ = "Simple Jack-o-Lantern Play"
    orange$ = "255 159 63"
    edge$ = "255 183 95"
    brown$ = "223 143 31"
    carve$ = "191 111 0"
    pumpkinEyes = 0
    pumpkinNose = 0
    pumpkinMouth = 0
    gWidth = 500
    bWidth = 230
    WindowWidth = 800
    WindowHeight = 600
    UpperLeftX = Int((DisplayWidth - WindowWidth) / 2)
    UpperLeftY = Int((DisplayHeight - WindowHeight) / 2)
    BackgroundColor$ = "Black"
    Menu #main, "&Options", "&New", [NewPumpkin],|, _
        "E&xit", [EndApp]
    Graphicbox #main.g, 0, 0, gWidth, 450
    Graphicbox #main.t, 0, 450, gWidth, 100
    Graphicbox #main.b, gWidth + 50, 50, bWidth, 350
    Open title$ for Window as #main
    #main, "Trapclose [EndApp]"
    #main.g, "Down; Fill Black"
    Gosub [DrawTitle]
    #main.b, "Down; Fill Black"
    Gosub [GlowSprite]
    #main.g, "Fill Black; Home"
    #main.g, "Getbmp bg 0 0 1 1"
    #main.g, "Background bg"
    #main.g, "Posxy pumpkinX pumpkinY"
    #main.g, "Spritexy glow ";pumpkinX - 140;" ";pumpkinY - 82
    #main.g, "Cyclesprite glow 1"
    #main.g, "Segment segPumpkin"
    #main.g, "Flush"
 
[NewPumpkin]
    Timer 0
    midX = pumpkinX
    midY = pumpkinY
    EyesSelection = 0
    NoseSelection = 0
    MouthSelection = 0
    h$ = "#main.g"
    Gosub [DrawPumpkin]
    #main.g, "Segment pumpkinSeg"
    #main.g, "Flush"
    #main.b, "Down"
    Gosub [FaceSelections]
 Wait
 
[ClickSelections]
    xClick = MouseX
    yClick = MouseY
    midX = pumpkinX
    midY = pumpkinY
    FaceSelection = 0
    Timer 0
    LightCandle = 0
    Select Case
        Case xClick > 120
            FaceSelection = 0
        Case yClick > 105 and yClick < 120
                FaceSelection = 1
        Case yClick > 130 and yClick < 145
                FaceSelection = 2
        Case yClick > 155 and yClick < 170
                FaceSelection = 3
        Case yClick > 205 and yClick < 220
                LightCandle = 1
    End Select
    midX = pumpkinX
    midY = pumpkinY
    Select Case FaceSelection
        Case 1
            Gosub [SelectEyes]
        Case 2
            Gosub [SelectNose]
        Case 3
            Gosub [SelectMouth]
    End Select
    If LightCandle = 0 Then
        Wait
    End If
[SelectCandle]
    Gosub [LightCandle]
    bg$ = orange$
    fg$ = "Black"
    Timer 100, [GlowCandle]
Wait
 
[GlowCandle]
    #main.g, "Drawsprites"
Wait
 
[ClickEyes]
    xClick = MouseX
    yClick = MouseY
    Select Case
        Case yClick > 20 and yClick < 80
            EyesSelection = 1
            eyeY = pumpkinY - 70
        Case yClick > 100 and yClick < 160
            EyesSelection = 2
            eyeY = pumpkinY - 40
        Case yClick > 175 and yClick < 220
            EyesSelection = 3
            eyeY = pumpkinY - 35
        Case yClick > 240 and yClick < 280
            EyesSelection = 4
            eyeY = pumpkinY - 15
        Case yClick > 300 and yClick < 330
            Gosub [FaceSelections]
            Wait
        Case Else
            Wait
    End Select
    Gosub [JackOLantern]
Wait
 
[ClickNose]
    xClick = MouseX
    yClick = MouseY
    Select Case
        Case xClick < 85
            Wait
        Case xClick > 155
            Wait
        Case yClick > 15 and yClick < 75
            NoseSelection = 1
            noseY = pumpkinY
        Case yClick > 95 and yClick < 145
            NoseSelection = 2
            noseY = pumpkinY + 30
        Case yClick > 165 and yClick < 195
            NoseSelection = 3
            noseY = pumpkinY + 30
        Case yClick > 215 and yClick < 240
            NoseSelection = 4
            noseY = pumpkinY + 10
        Case yClick > 255 and yClick < 280
            NoseSelection = 5
            noseY = pumpkinY + 20
        Case yClick > 300 and yClick < 330
            Gosub [FaceSelections]
            Wait
        Case Else
            Wait
    End Select
    midX = pumpkinX
    midY = pumpkinY
    Gosub [JackOLantern]
Wait
 
[ClickMouth]
    xClick = MouseX
    yClick = MouseY
    Select Case
        Case yClick > 45 and yClick < 120
            MouthSelection = 1
            mouthY = pumpkinY + 70
        Case yClick > 140 and yClick < 215
            MouthSelection = 2
            mouthY = pumpkinY + 100
        Case yClick > 225 and yClick < 270
            MouthSelection = 3
            mouthY = pumpkinY + 75
        Case yClick > 300 and yClick < 330
            Gosub [FaceSelections]
            Wait
        Case Else
            Wait
    End Select
    midX = pumpkinX
    midY = pumpkinY
    Gosub [JackOLantern]
Wait
 
[DrawPumpkin]
    If h$ = "#main.g" Then
        #h$, "Delsegment ";pumpkinSeg
    End If
    #h$, "Fill Black; Size 1"
    #h$, "Color ";orange$
    #h$, "Backcolor ";orange$
    #h$, "Place ";midX;" ";midY
    #h$, "Circlefilled 152"
    #h$, "Size 4"
    #h$, "Color ";edge$
    #h$, "Place ";midX;" ";midY
    #h$, "Circle 154"
    #h$, "Color ";brown$
    #h$, "Place ";midX;" ";midY + 12
    #h$, "Ellipse 40 340"
    #h$, "Place ";midX;" ";midY + 12
    #h$, "Ellipse 100 340"
    #h$, "Place ";midX;" ";midY + 12
    #h$, "Ellipse 180 340"
    #h$, "Place ";midX;" ";midY + 12
    #h$, "Ellipse 250 340"
    #h$, "Color ";carve$
    x1 = midX - 100
    x2 = x1 + 15
    y1 = midY - 120
    y2 = midY - 110
    For t = 1 to 7
        #h$, "Line ";x1;" ";y1;" ";x2;" ";y2
        x1 = x2
        x2 = x1 + 15
        #h$, "Line ";x1;" ";y2;" ";x2;" ";y1
        x1 = x2
        x2 = x1 + 15
    Next t
    #h$, "Place ";midX;" ";midY
    #h$, "Color Black"
    For r = 158 to 200
        #h$, "Circle ";r
    Next r
    #h$, "Color Darkgreen"
    For s = midX - 15 to midX + 15
        #h$, "Place ";s;" ";midY -150
        #h$, "North; Turn 30; Go 50"
    Next s
Return
 
[JackOLantern]
    h$ = "#main.g"
    #h$, "Delsegment ";segPumpkin
    flushFlag = 0
    midX = pumpkinX
    midY = pumpkinY
    Gosub [DrawPumpkin]
    midX = pumpkinX
    midY = pumpkinY
    Select Case EyesSelection
        Case 1
            eyeX = midX - 60
            Gosub [Eyes1]
            eyeX = midX + 60
            Gosub [Eyes1]
        Case 2
            eyeX = midX - 60
            Gosub [Eyes2]
            eyeX = midX + 60
            Gosub [Eyes2]
        Case 3
            eyeX = midX - 60
            Gosub [Eyes3]
            eyeX = midX + 60
            Gosub [Eyes3]
        Case 4
            eyeX = midX - 60
            Gosub [Eyes4]
            eyeX = midX + 60
            Gosub [Eyes4]
    End Select
    noseX = midX
    Select Case NoseSelection
        Case 1
            Gosub [Nose1]
        Case 2
            Gosub [Nose2]
        Case 3
            Gosub [Nose3]
        Case 4
            Gosub [Nose4]
        Case 5
            noseX = midX - 10
            Gosub [Nose5]
            noseX = midX + 10
            Gosub [Nose5]
    End Select
    mouthX = midX
    Select Case MouthSelection
        Case 1
            Gosub [Mouth1]
        Case 2
            Gosub [Mouth2]
        Case 3
            Gosub [Mouth3]
    End Select
    If h$ = "#main.g" Then
        #h$ "Segment pumpkinSeg"
        #h$, "Flush"
    End If
Return
 
[SelectEyes]
    #main.b, "Cls; Fill Yellow"
    #main.b, "Backcolor ";orange$
    fg$ = "Black"
    bg$ = orange$
    h$ = "#main.b"
    midX = pumpkinX
    midY = pumpkinY
    eyeX = 55: eyeY = 20
    Gosub [Eyes1]
    eyeX = 175
    Gosub [Eyes1]
    eyeX = 55: eyeY = 130
    Gosub [Eyes2]
    eyeX = 175
    Gosub [Eyes2]
    eyeX = 55: eyeY = 200
    Gosub [Eyes3]
    eyeX = 175
    Gosub [Eyes3]
    eyeX = 55: eyeY = 280
    Gosub [Eyes4]
    eyeX = 175
    Gosub [Eyes4]
    #main.b, "Backcolor Yellow; Color ";orange$
    #main.b, "Font Times_New_Roman 24 Bold Italic"
    x$ = "Cancel"
    #main.b, "Stringwidth? x$ width"
    #main.b, "Place ";Int((bWidth / 2) - (width / 2));" 330"
    #main.b, "\";x$
    #main.b, "Flush EyeSelection"
    #main.b, "When leftButtonUp [ClickEyes]"
Return
 
[Eyes1]
    #h$, "Size 3"
    #h$, "Color ";fg$
    For r = 210 to 150 Step -1
        #h$, "Place ";eyeX;" ";eyeY
        #h$, "North; Turn ";r
        #h$, "Go 60"
    Next r
    #h$, "Color ";bg$
    #h$, "Backcolor ";bg$
    #h$, "Place ";eyeX;" ";eyeY + 55
    #h$, "Circlefilled 7"
Return
 
[Eyes2]
    #h$, "Size 3"
    #h$, "Color ";fg$
    #h$, "Backcolor ";fg$
    #h$, "Place ";eyeX;" ";eyeY
    #h$, "Ellipsefilled 45 60"
    #h$, "Color ";bg$
    #h$, "Backcolor ";bg$
    #h$, "Place ";eyeX + 10;" ";eyeY + 20
    #h$, "Circlefilled 7"
Return
 
[Eyes3]
    #h$, "Size 3"
    #h$, "Color ";fg$
    #h$, "Backcolor ";fg$
    #h$, "Place ";eyeX;" ";eyeY
    #h$, "Ellipsefilled 60 45"
    #h$, "Color ";bg$
    #h$, "Backcolor ";bg$
    #h$, "Place ";eyeX + 25;" ";eyeY
    #h$, "Circlefilled 7"
Return
 
[Eyes4]
    #h$, "Size 3"
    #h$, "Color ";fg$
    for r = -90 to 90
        perCent = Abs(r) / 100
        goLen = 9 - Int(perCent * 10)
        #h$, "Place ";eyeX;" ";eyeY
        #h$, "North; Turn ";r
        #h$, "Go ";30 + goLen
    Next r
    #h$, "Color ";bg$
    for r = -90 to 90
        perCent = Abs(r) / 100
        goLen = 9 - Int(perCent * 10)
        #h$, "Place ";eyeX - 10;" ";eyeY
        #h$, "North; Turn ";r
        #h$, "Go ";7 + goLen
    Next r
Return
 
[SelectNose]
    #main.b, "Cls; Fill Yellow"
    #main.b, "Backcolor ";orange$
    fg$ = "Black"
    bg$ = orange$
    h$ = "#main.b"
    noseX = 120: noseY = 20
    Gosub [Nose1]
    noseX = 120: noseY = 120
    Gosub [Nose2]
    noseX = 120: noseY = 180
    Gosub [Nose3]
    noseX = 120: noseY = 200
    Gosub [Nose4]
    noseX = 110: noseY = 260
    Gosub [Nose5]
    noseX = 130: noseY = 260
    Gosub [Nose5]
    #main.b, "Backcolor Yellow; Color ";orange$
    #main.b, "Font Times_New_Roman 24 Bold Italic"
    x$ = "Cancel"
    #main.b, "Stringwidth? x$ width"
    #main.b, "Place ";Int((bWidth / 2) - (width / 2));" 330"
    #main.b, "\";x$
    #main.b, "Flush NoseSelection"
    #main.b, "When leftButtonUp [ClickNose]"
Return
 
[Nose1]
    #h$, "Size 3"
    #h$, "Color ";fg$
    #h$, "Backcolor ";fg$
    For r = 210 to 150 Step -1
        #h$, "Place ";noseX;" ";noseY
        #h$, "North; Turn ";r
        #h$, "Go 50"
    Next r
Return
 
[Nose2]
    #h$, "Size 3"
    #h$, "Color ";fg$
    #h$, "Backcolor ";fg$
    #h$, "Place ";noseX;" ";noseY
    #h$, "Circlefilled 20"
Return
 
[Nose3]
    #h$, "Size 3"
    #h$, "Color ";fg$
    #h$, "Backcolor ";fg$
    #h$, "Place ";noseX;" ";noseY
    #h$, "Ellipsefilled 60 20"
Return
 
[Nose4]
    #h$, "Size 3"
    #h$, "Color ";fg$
    #h$, "Backcolor ";fg$
    For r = 210 to 150 Step -1
        #h$, "Place ";noseX;" ";noseY
        #h$, "North; Turn ";r
        #h$, "Up; Go 25; Down; Go 10"
    Next r
Return
 
[Nose5]
    #h$, "Size 3"
    #h$, "Color ";fg$
    #h$, "Backcolor ";fg$
    For r = 250 to 110 Step -1
        #h$, "Place ";noseX;" ";noseY
        #h$, "North; Turn ";r
        #h$, "Up; Go 10; Down; Go 5"
    Next r
Return
 
[SelectMouth]
    #main.b, "Cls; Fill Yellow"
    #main.b, "Backcolor ";orange$
    fg$ = "Black"
    bg$ = orange$
    h$ = "#main.b"
    mouthX = 120: mouthY = 50
    Gosub [Mouth1]
    mouthX = 120: mouthY = 180
    Gosub [Mouth2]
    mouthX = 120: mouthY = 230
    Gosub [Mouth3]
    #main.b, "Backcolor Yellow; Color ";orange$
    #main.b, "Font Times_New_Roman 24 Bold Italic"
    x$ = "Cancel"
    #main.b, "Stringwidth? x$ width"
    #main.b, "Place ";Int((bWidth / 2) - (width / 2));" 330"
    #main.b, "\";x$
    #main.b, "Flush MouthSelection"
    #main.b, "When leftButtonUp [ClickMouth]"
Return
 
[Mouth1]
    #h$, "Size 3"
    #h$, "Color ";fg$
    #h$, "Backcolor ";fg$
    For r = 270 to 90 Step -1
        #h$, "Place ";mouthX;" ";mouthY
        #h$, "North; Turn ";r
        #h$, "Go 70"
    Next r
    #h$, "Color ";bg$
    #h$, "Backcolor ";bg$
    #h$, "Place ";mouthX - 50;" ";mouthY
    #h$, "Boxfilled ";mouthX - 30;" ";mouthY + 20
    #h$, "Place ";mouthX - 10;" ";mouthY
    #h$, "Boxfilled ";mouthX + 10;" ";mouthY + 20
    #h$, "Place ";mouthX + 30;" ";mouthY
    #h$, "Boxfilled ";mouthX + 50;" ";mouthY + 20
Return
 
[Mouth2]
    #h$, "Size 3"
    #h$, "Color ";fg$
    #h$, "Backcolor ";fg$
    #h$, "Place ";mouthX;" ";mouthY
    #h$, "Circlefilled 35"
Return
 
[Mouth3]
    #h$, "Size 3"
    #h$, "Color ";fg$
    #h$, "Backcolor ";fg$
    #h$, "Place ";mouthX - 60;" ";mouthY
    #h$, "Boxfilled ";mouthX + 60;" ";mouthY + 40
    #h$, "Color ";bg$
    #h$, "Backcolor ";bg$
    x = mouthX - 50
    For t = 1 to 6
        For r = -20 to 20
            #h$, "Place ";x;" ";mouthY + 10
            #h$, "North; Turn ";r
            #h$, "Go 12"
        Next r
        For r = 200 to 160 Step -1
            #h$, "Place ";x;" ";mouthY + 30
            #h$, "North; Turn ";r
            #h$, "Go 12"
        Next r
        x = x + 20
    Next t
Return
 
[FaceSelections]
    #main.b, "Color Black; Backcolor Black"
    #main.b, "Cls; Place -5 -5; Boxfilled ";bWidth + 10;" 360"
    #main.b, "Font Times_New_Roman 14 Bold Italic"
    #main.b, "Place 10 80; Color ";orange$
    #main.b, "\Click to"
    #main.b, "Font Times_New_Roman 14 Bold"
    #main.b, "Color Yellow"
    #main.b, "Place 10 120"
    #main.b, "\Select Eyes"
    #main.b, "Place 10 145"
    #main.b, "\Select Nose"
    #main.b, "Place 10 170"
    #main.b, "\Select Mouth"
    #main.b, "Place 10 220"
    #main.b, "\Light Candle"
    #main.b, "Flush SelectionsText"
    #main.b, "When leftButtonUp [ClickSelections]"
Return
 
[DrawTitle]
    #main.t, "Font Times_New_Roman 24 Bold Italic"
    #main.t, "Down; Fill Black"
    #main.t, "Backcolor Black; Color 255 128 0"
    t$ = "Simple Pumpkin Play"
    #main.t, "Stringwidth? title$ width"
    #main.t, "Place ";Int(gWidth / 2 - 10) - Int(width / 2);" 25"
    #main.t, "\";title$
    #main.t, "Flush"
Return
 
[GlowSprite]
    gHue = Int(Rnd(1) * 50) * 5
    For i = 1 to 4
        #main.g, "Color White; Backcolor White"
        #main.g, "Place 0 0; Boxfilled 280 224"
        #main.g, "Color Black; Backcolor Black"
        #main.g, "Place 0 224; Boxfilled 280 448"
        #main.g, "Place 140 112; Ellipsefilled 280 224"
        rHue = 195 + i * 15
        gInc = 5
        For x = 280 to 1 Step -1
            If gHue < 5 Then
                gHue = 5
                gInc = 5
            End If
            If gHue > 250 Then
                gHue = 250
                gInc = -5
            End If
            gHue = gHue + gInc
            #main.g, "Color ";rHue;" ";gHue;" 0"
            #main.g, "Place 140 336; Ellipsefilled ";x;" 224"
            #main.g, "Ellipsefilled ";x;" 224"
        Next x
        #main.g, "Getbmp g";i;" 0 0 280 448"
    Next i
        #main.g, "Addsprite glow g1 g2 g3 g4"
        #main.g, "Spritexy glow 120 150"
    #main.g, "Discard"
Return
 
[LightCandle]
    midX = 160
    mid1Y = 200
    mid2Y = 560
    WindowWidth = 500
    WindowHeight = 740
    UpperLeftX = 1
    UpperLeftY = 1
    Graphicbox #1.g, 0, 0, 500, 740
' Remove next line for Just BASIC application
    Stylebits #1, _WS_POPUP, _WS_CAPTION, 0, 0
    Open "" for Window as #1
    #1.g, "When leftButtonUp [CloseCandle]"
    CandleScreen = 1
    #1.g, "Horizscrollbar Off"
    #1.g, "Down"
    #1.g, "Place 0 360; Boxfilled 350 720"
    h$ = "#1.g"
    midY = mid2Y
    eyeYpumpkin = eyeY
    noseYpumpkin = noseY
    mouthYpumpkin = mouthY
    Gosub [DrawPumpkin]
    #1.g, "Color White; Backcolor White"
    #1.g, "Place -2 -2; Boxfilled 352 360"
    #1.g, "Color Black; Backcolor Black"
    midY = mid1Y
    #1.g, "Place ";midX;" ";midY
    #1.g, "Circlefilled 154"
    For s = midX - 15 to midX + 15
        #1.g, "Place ";s;" ";midY -150
        #1.g, "North; Turn 30; Go 50"
    Next s
    Select Case EyesSelection
        Case 1
            eyeY = mid2Y - 70
            eyeX = midX - 60
            Gosub [Eyes1]
            eyeX = midX + 60
            Gosub [Eyes1]
        Case 2
            eyeY = mid2Y - 40
            eyeX = midX - 60
            Gosub [Eyes2]
            eyeX = midX + 60
            Gosub [Eyes2]
        Case 3
            eyeY = mid2Y - 35
            eyeX = midX - 60
            Gosub [Eyes3]
            eyeX = midX + 60
            Gosub [Eyes3]
        Case 4
             eyeY = mid2Y - 15
            eyeX = midX - 60
            Gosub [Eyes4]
            eyeX = midX + 60
            Gosub [Eyes4]
    End Select
    noseX = midX
    Select Case NoseSelection
        Case 1
            noseY = mid2Y
            Gosub [Nose1]
        Case 2
            noseY = mid2Y + 30
            Gosub [Nose2]
        Case 3
            noseY = mid2Y + 30
            Gosub [Nose3]
        Case 4
            noseY = mid2Y + 10
            Gosub [Nose4]
        Case 5
            noseY = mid2Y + 20
            noseX = midX - 10
            Gosub [Nose5]
            noseX = midX + 10
            Gosub [Nose5]
    End Select
    mouthX = midX
    Select Case MouthSelection
        Case 1
            mouthY = mid2Y + 70
            Gosub [Mouth1]
        Case 2
            mouthY = mid2Y + 100
            Gosub [Mouth2]
        Case 3
            mouthY = mid2Y + 75
            Gosub [Mouth3]
    End Select
    bg$ = "Black"
    fg$ = "White"
    Select Case EyesSelection
        Case 1
            eyeY = mid1Y - 70
            eyeX = midX - 60
            Gosub [Eyes1]
            eyeX = midX + 60
            Gosub [Eyes1]
        Case 2
            eyeY = mid1Y - 40
            eyeX = midX - 60
            Gosub [Eyes2]
            eyeX = midX + 60
            Gosub [Eyes2]
        Case 3
            eyeY = mid1Y - 35
            eyeX = midX - 60
            Gosub [Eyes3]
            eyeX = midX + 60
            Gosub [Eyes3]
        Case 4
             eyeY = mid1Y - 15
            eyeX = midX - 60
            Gosub [Eyes4]
            eyeX = midX + 60
            Gosub [Eyes4]
    End Select
    eyeY = eyeYpumpkin
    Select Case NoseSelection
        Case 1
            noseY = mid1Y
            Gosub [Nose1]
        Case 2
            noseY = mid1Y + 30
            Gosub [Nose2]
        Case 3
            noseY = mid1Y + 30
            Gosub [Nose3]
        Case 4
            noseY = mid1Y + 10
            Gosub [Nose4]
        Case 5
            noseY = mid1Y + 20
            noseX = midX - 10
            Gosub [Nose5]
            noseX = midX + 10
            Gosub [Nose5]
    End Select
    noseY = noseYpumpkin
    Select Case MouthSelection
        Case 1
            mouthY = midY + 70
            Gosub [Mouth1]
        Case 2
            mouthY = midY + 100
            Gosub [Mouth2]
        Case 3
            mouthY = midY + 75
            Gosub [Mouth3]
    End Select
    mouthY = mouthYpumpkin
    #1.g, "Flush PumpkinSprite"
    #1, "Show"
    #1.g, "Getbmp pumpkin 0 1 320 720"
    #main.g, "Addsprite pumpkin pumpkin"
    #main.g, "Spritexy pumpkin ";pumpkinX - 160;" ";pumpkinY - 199
    #main.g, "Drawsprites"
 
[CloseCandle]
    Close #1
    CandleScreen = 0
    Return
 
[EndApp]
    Timer 0
    If CandleScreen = 1 Then
        Close #1
    End If
    Close #main
End