Programming C, C++, Java, PHP, Ruby, Turing, VB
Computer Science Canada 
Programming C, C++, Java, PHP, Ruby, Turing, VB  

Username:   Password: 
 RegisterRegister   
 Having a problem with making my snake grow in the game of snake
Index -> Programming, Turing -> Turing Help
View previous topic Printable versionDownload TopicSubscribe to this topicPrivate MessagesRefresh page View next topic
Author Message
legosz




PostPosted: Tue Jun 16, 2015 8:53 am   Post subject: Having a problem with making my snake grow in the game of snake

What is it you are trying to achieve?
I am trying to make my snake grow

What is the problem you are having?
The snake will not grow

Describe what you have tried to solve this problem
I have tried many things,i added a body to the snake head made is pawn everytime i got the food, but it woud not follow the snake

Post any relevant code (You may choose to attach the file instead of posting the code if it is too long)

Turing:


import GUI
var winID : int
winID := Window.Open ("graphics:600;645")

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%variables
var menubutton, snakebutton, helpbutton, quitbutton, restartbutton : int
var LeftMainScreen : boolean := false

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Forwarding procedures
forward proc MENU
forward proc SNAKE
forward proc HELP
forward proc QUIT

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Play game
body proc SNAKE

    cls
    GUI.Dispose (snakebutton)
    GUI.Dispose (helpbutton)
    GUI.Dispose (quitbutton)

    %Making grid
    Draw.FillBox (0, 0, 600, 600, black)
    var grid : array 0 .. 59, 0 .. 59 of int
    var width : int := 10
    var score : int := 0
    var arrows : array char of boolean
    var direction : int := 0
    var playerx, playery : int := 2
    var foodx, foody : int := Rand.Int (3, 56)
    var playagain : string (1)
    var counter : int := 55

    %grid
    for x : 0 .. 59
        for y : 0 .. 59
            grid (x, y) := 0
        end for
    end for
    for x : 0 .. 59
        grid (x, 0) := 1
        grid (x, 59) := 1
    end for
    for y : 0 .. 59
        grid (0, y) := 1
        grid (59, y) := 1
    end for

    %actualk grid
    loop
        for x : 0 .. 59
            for y : 0 .. 59
                if grid (x, y) = 1 then
                    Draw.FillBox (x * width, y * width, x * width + width, y * width + width, yellow)
                end if
            end for
        end for

        %score
        locate (1, 1)
        put "Score: ", score

        %instructions
        locate (2, 1)
        put "Use 'w', 'a', 's', 'd', to move!"

        %directions
        Input.KeyDown (arrows)
        if arrows ('a') and direction not= 2 then
            direction := 1
        elsif arrows ('d') and direction not= 1 then
            direction := 2
        elsif arrows ('s') and direction not= 4 then
            direction := 3
        elsif arrows ('w') and direction not= 3 then
            direction := 4
        end if

        %movement
        if direction = 1 and grid (playerx - 1, playery) = 0 then
            playerx -= 1
        elsif direction = 2 and grid (playerx + 1, playery) = 0 then
            playerx += 1
        elsif direction = 3 and grid (playerx, playery - 1) = 0 then
            playery -= 1
        elsif direction = 4 and grid (playerx, playery + 1) = 0 then
            playery += 1
        end if

        %hitting walls
        if playerx = 1 then
            locate (14, 35)
            put "GAME OVER"
            locate (15, 30)
            put "YOU GOT A SCORE OF ", score
            locate (16, 30)
            put "press 'w' to restart"
            View.Update
            getch (playagain)
            score := 0
            playerx := 5
            playery := 5
            counter := 55

        elsif
                playery = 1 then
            locate (14, 35)
            put "GAME OVER"
            locate (15, 30)
            put "YOU GOT A SCORE OF ", score
            locate (16, 30)
            put "press 'd' to restart"
            View.Update
            getch (playagain)
            score := 0
            playerx := 5
            playery := 5
            counter := 55

        elsif
                playerx = 58 then
            locate (14, 35)
            put "GAME OVER"
            locate (15, 30)
            put "YOU GOT A SCORE OF ", score
            locate (16, 30)
            put "press 'w' to restart"
            View.Update
            getch (playagain)
            score := 0
            playerx := 5
            playery := 5
            counter := 55

        elsif
                playery = 58 then
            locate (14, 35)
            put "GAME OVER"
            locate (15, 30)
            put "YOU GOT A SCORE OF ", score
            locate (16, 30)
            put "press 'w' to restart"
            View.Update
            getch (playagain)
            score := 0
            playerx := 5
            playery := 5
            counter := 55
        end if

        %food
        Draw.FillBox (foodx * width, foody * width, foodx * width + width,
            foody * width + width, 5)

        %snake
        Draw.FillBox (playerx * width, playery * width, playerx * width + width,
            playery * width + width, black)

        %score
        if playerx = foodx and playery = foody then
            score += 1
            counter := counter - 1
            foodx := Rand.Int (3, 56)
            foody := Rand.Int (3, 56)

        end if

        View.Update
        delay (counter)
        cls
    end loop

end SNAKE

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Help  menu
body proc HELP

    LeftMainScreen := true
    cls
    GUI.Dispose (snakebutton)
    GUI.Dispose (quitbutton)
    GUI.Dispose (helpbutton)
    var any : int := Rand.Int (8, 15)
    Draw.FillBox (0, 0, 800, 645, any)
    var writing : int := Font.New ("arial:12")
    Draw.Text ("Welcome to the help menu, this will teach you about the game", 0, 600, writing, any - 1)
    Draw.Text ("Use 'W', 'A', 'S', 'D' to move the snake around", 0, 550, writing, any - 2)
    Draw.Text ("You move the snake around to collect food within the grid to grow", 0, 500, writing, any - 3)
    Draw.Text ("To lose the game you must run into the walls, or yourself", 0, 450, writing, any - 4)
    Draw.Text ("To win the game you must eat enough food to have nowhere to move", 0, 400, writing, any - 5)
    Draw.Text ("It is a simple game to play, hope you enjoy, and have fun!", 0, 350, writing, any - 6)
    quitbutton := GUI.CreateButton (175, 25, 0, "Quit", QUIT)
    menubutton := GUI.CreateButton (235, 25, 0, "Menu", MENU)
    GUI.Refresh

end HELP

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Quit menu
body proc QUIT

    cls
    var any : int := Rand.Int (8, 15)
    Draw.FillBox (0, 0, 800, 645, any)
    var writing : int := Font.New ("arial:24")
    Draw.Text ("Thanks for playing!", 50, 200, writing, any - 1)
    delay (1000)
    GUI.Quit
    Window.Close (winID)

end QUIT

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%main menu

body proc MENU

    cls
    var any : int := Rand.Int (8, 15)
    Draw.FillBox (0, 0, 600, 645, any)
    var snakename : int := Font.New ("Arial:74:bold")
    Font.Draw ("SNAKE", 150, 300, snakename, any - 1)
    snakebutton := GUI.CreateButton (25, 25, 0, "Play game", SNAKE)
    helpbutton := GUI.CreateButton (115, 25, 0, "Help", HELP)
    quitbutton := GUI.CreateButton (175, 25, 0, "Quit", QUIT)
    if LeftMainScreen = true then
        GUI.Dispose (menubutton)
        Draw.FillBox (235, 25, 295, 48, any)
    end if
    GUI.Refresh


end MENU
MENU

loop
    exit when GUI.ProcessEvent
end loop





Please specify what version of Turing you are using
4.1.1
Sponsor
Sponsor
Sponsor
sponsor
TokenHerbz




PostPosted: Sat Jun 27, 2015 4:05 am   Post subject: RE:Having a problem with making my snake grow in the game of snake

Use a flexible array for your snakes body. http://compsci.ca/holtsoft/doc/flexible.html

as he eats the berries, increase his size by 1.

set those x,y values after the head moves to the old position.

handle the movements and /win
Display posts from previous:   
   Index -> Programming, Turing -> Turing Help
View previous topic Tell A FriendPrintable versionDownload TopicSubscribe to this topicPrivate MessagesRefresh page View next topic

Page 1 of 1  [ 2 Posts ]
Jump to:   


Style:  
Search: