
-----------------------------------
we64
Mon Jan 12, 2004 10:03 pm

School project: Hangman
-----------------------------------
Please set the screen to 40 rows by 120 columes

%Hangman Game
var words : array 1 .. 15 of string := init ("computer", "speaker", "program", "video", "cat", "dog", "tiger", "driver", "soccer", "radio", "music", "science", "math", "basketball", "chess")
var random, counter, times, right : int := 0
var letter, word, choice : string := ""

colourback (71)
cls

process won
    choice := "n"
    for w : 1 .. 100
        Draw.Text ("YaY, You won!", maxx div 2 - 100, maxy div 2, Font.New ("serif:24:bold"), Rand.Int (1, 100))
        delay (100)
        exit when choice not= "n"
    end for
end won

process lost
    choice := "n"
    for l : 1 .. 100
        Draw.Text ("You Lost!", maxx div 2 - 50, maxy div 2, Font.New ("serif:24:bold"), Rand.Int (155, 200))
        Draw.Text ("The word is:", maxx div 2 - 150, maxy div 2 + 60, Font.New ("serif:24:bold"), Rand.Int (155, 200))
        Draw.Text (words (random), maxx div 2 + 40, maxy div 2 + 60, Font.New ("serif:24:bold"), Rand.Int (155, 200))
        delay (100)
        exit when choice not= "n"
    end for
end lost

loop
    %Title
    Draw.Text ("Welcome to Tony's Hangman Game", maxx div 2 - 150, maxy - 20, Font.New ("serif:16:bold"), 40)

    %Question
    locate (4, 1)
    put "Please enter a letter from the alphabets:"
    locate (10, 5)
    put "Alphabets:"

    %Hang
    drawfillbox (490, 200, 510, 410, 112) %post
    drawfillbox (500, 400, 620, 410, 112)
    drawfillbox (430, 180, 650, 200, 115) %ground
    drawfillbox (595, 400, 605, 358, 114) %wire
    drawarc (600, 345, 13, 13, 0, 360, 114)

    %Random Words and Dashes
    randint (random, 1, 15)
    var dash : array 1 .. length (words (random)) of string
    for a : 1 .. length (words (random))
        dash (a) := "_"
    end for

    %Alphabets
    var used : array 1 .. 26 of string
    var star : array 1 .. 26 of string
    for a : 1 .. 26
        used (a) := chr (96 + a)
        star (a) := chr (96 + a)
    end for

    %Out put
    loop
        %Draw Dash
        locate (8, 15)
        for a : 1 .. length (words (random))
            put dash (a) : 3, " " ..
        end for

        %Used letters 1
        locate (11, 10)
        for a : 1 .. 26
            put star (a) : 3, " " ..
        end for

        %letter checking
        loop
            locate (6, 1)
            put ""
            locate (5, 1)
            put ""
            locate (5, 1)
            get letter

            if length (letter) > 1 then
                locate (6, 1)
                put "Error, please only put one letter at a time."
                delay (2000)
            end if
            exit when length (letter) = 1
        end loop

        %Used letters 2
        locate (12, 1)
        put ""
        for a : 1 .. 26
            if letter = used (a) then
                if star (a) = chr (42) then
                    locate (12, 1)
                    put "You have already used this letter!"
                else
                    star (a) := chr (42)
                end if
            end if
        end for

        %Wrong Letter
        if index (words (random), letter) = 0 then
            counter += 1
        end if

        %Hangman face
        if counter = 1 then
            drawfilloval (600, 355, 15, 15, 89)
        elsif counter = 2 then
            drawfilloval (595, 357, 3, 3, black)     % left eye
        elsif counter = 3 then
            drawfilloval (605, 357, 3, 3, black)     %right eye
        elsif counter = 4 then
            drawarc (600, 345, 5, 5, 20, 160, black)     %mouth

            %Hangman body
        elsif counter = 5 then
            drawline (600, 340, 600, 280, black)
            Draw.Text ("Help me please!", 660, 330, Font.New ("serif:16:bold"), 40)
        elsif counter = 6 then
            drawline (600, 310, 630, 340, black)     %right arm
            Draw.Text ("Help me please!", 660, 330, Font.New ("serif:16:bold"), 71)
            Draw.Text ("Help me!", 660, 330, Font.New ("serif:16:bold"), 40)
        elsif counter = 7 then
            drawline (600, 310, 570, 340, black)     %left arm

        elsif counter = 8 then
            drawline (600, 280, 630, 250, black)     %right leg
            Draw.Text ("Help me!", 660, 330, Font.New ("serif:16:bold"), 71)
            Draw.Text ("Help! Help!", 660, 330, Font.New ("serif:16:bold"), 40)
        elsif counter = 9 then
            drawline (600, 280, 570, 250, black)     %left leg
        end if

        %Right letter
        for a : 1 .. length (words (random))
            if letter = words (random) (a) then
                dash (a) := letter
            end if
        end for

        for a : 1 .. length (words (random))
            right := right + index (dash (a), "_")
        end for

        %Exits
        exit when right = 0
        right := 0
        exit when counter = 9
    end loop

    %Play again
    delay (1000)
    cls
    if counter = 9 then
        fork lost
        put "Would you like to play again? (y/n)"
        get choice
    elsif word = words (random) or right = 0 then
        fork won
        put "Would you like to play again? (y/n)"
        get choice
    end if

    counter := 0
    exit when choice = "n"
    cls
end loop


-----------------------------------
poly
Mon Jan 12, 2004 10:47 pm


-----------------------------------
hmm its pretty good, except for one wee problem.

http://artistsunity.co.uk/gta/problem.JPG

-----------------------------------
we64
Tue Jan 13, 2004 5:31 pm


-----------------------------------
you have to set the run window to 40 rows by 120 columes under 1024*768

-----------------------------------
shorthair
Tue Jan 13, 2004 5:41 pm


-----------------------------------
Whats with the double post ,  :?  , Oh well its agood game , but you should make the code more flexible for the screen size by using the maxx and maxy
