Posted: Fri May 14, 2004 5:38 pm Post subject: Snake Game
Well it seems to be alomst the end of the year and our teachers are beginning to assign the end of the year projects. For mine i have decided to make a snake game . My teacher was suprised that i wanted to take the "challenge" although i dont find it to challenging myself. Just difficult to increase the length of the snake.
If you have been assigned your end of the year project feel free to post it or tell me what its about because i would like to no.
I will also update you on my progress for my snake game, but it will be pretty basic because of the basic knowledge our teacher taught us.
Sponsor Sponsor
LiquidDragon
Posted: Fri May 14, 2004 6:20 pm Post subject: (No subject)
Ok i have some problems so far. i need to get my oranges (the things the snake collects) to be on some sort of grid so the snake will get it in line
Here is my code:
code:
setscreen ("graphics:640;480")
proc snake_up (var x, y : int)
drawfillbox (x - 10, y, x + 10, y - 30, 0)
drawfilloval (x, y, 10, 10, 12)
end snake_up
proc snake_down (var x, y : int)
drawfillbox (x - 10, y, x + 10, y + 30, 0)
drawfilloval (x, y, 10, 10, 12)
end snake_down
proc snake_left (var x, y : int)
drawfillbox (x, y - 10, x + 30, y + 10, 0)
drawfilloval (x, y, 10, 10, 12)
end snake_left
proc snake_right (var x, y : int)
drawfillbox (x, y - 10, x - 30, y + 10, 0)
drawfilloval (x, y, 10, 10, 12)
%drawing the orange
drawfilloval (orange_x, orange_y, 10, 10, 8)
if key = KEY_UP_ARROW and whatdotcolor (x, y + 20) not= 7 then
y += 20
snake_up (x, y)
elsif key = KEY_DOWN_ARROW and whatdotcolor (x, y - 20) not= 7 then
y -= 20
snake_down (x, y)
elsif key = KEY_LEFT_ARROW and whatdotcolor (x - 20, y) not= 7 then
x -= 20
snake_left (x, y)
elsif key = KEY_RIGHT_ARROW and whatdotcolor (x + 20, y) not= 7 then
x += 20
snake_right (x, y)
end if
end loop
gamer
Posted: Fri May 14, 2004 7:23 pm Post subject: (No subject)
dont use getch , use Input.KeyDown instead
Tony
Posted: Fri May 14, 2004 9:56 pm Post subject: (No subject)
first of all this belongs in [turing help]
second - maybe you should take a look at an existing snake. Maybe you'll get some ideas for variables setup and types of procedures needed.
Posted: Sat May 15, 2004 8:30 am Post subject: (No subject)
see the problem is i cant use Input.KeyDown becuase we have never learned that in class, so my teacher will get angry. Although i dont understand why She also said that if she finds something we havent learned it will be considered "cheating" and can't have cheating . So i have to keep it simple.
Well... i can add Input.KeyDown if someone explained how it worked and then i could explain to the teacher
MyPistolsIn3D
Posted: Sat May 15, 2004 12:48 pm Post subject: (No subject)
Tpye Input.KeyDown in a turing window and press F9.
white_dragon
Posted: Sat May 15, 2004 4:27 pm Post subject: (No subject)
it basically lets u use more than one key at a time. though i think there is a limit to how many keys u can use.
LiquidDragon
Posted: Sat May 15, 2004 6:17 pm Post subject: (No subject)
Ok well im gonna stick with the getch because otherwise it gets all weird. So now i have two problems
1. When my snake eats an orange he increases in length. I have tried many things for this but haven't figured it out.
2. getting the orange to be on the same grid as the snake. Right now the snake isnt technically on a grid it just looks like it because i set the x and y increases to 20.
Here is what i have so far
code:
setscreen ("graphics:640;480")
var snake_length : int
snake_length := 1
proc snake_up (var x, y : int)
drawfillbox (x - 10, y, x + 10, y - 30, 0)
drawfilloval (x, y, 10, 10, 12)
end snake_up
proc snake_down (var x, y : int)
drawfillbox (x - 10, y, x + 10, y + 30, 0)
drawfilloval (x, y, 10, 10, 12)
end snake_down
proc snake_left (var x, y : int)
drawfillbox (x, y - 10, x + 30, y + 10, 0)
drawfilloval (x, y, 10, 10, 12)
end snake_left
proc snake_right (var x, y : int)
drawfillbox (x, y - 10, x - 30, y + 10, 0)
drawfilloval (x, y, 10, 10, 12)
%drawing the orange
drawfilloval (orange_x, orange_y, 10, 10, 9)
if key = KEY_UP_ARROW and whatdotcolor (x, y + 20) not= 7 then
y += 20
snake_up (x, y)
elsif key = KEY_DOWN_ARROW and whatdotcolor (x, y - 20) not= 7 then
y -= 20
snake_down (x, y)
elsif key = KEY_LEFT_ARROW and whatdotcolor (x - 20, y) not= 7 then
x -= 20
snake_left (x, y)
elsif key = KEY_RIGHT_ARROW and whatdotcolor (x + 20, y) not= 7 then
x += 20
snake_right (x, y)
end if
end loop
Sponsor Sponsor
SuperGenius
Posted: Sat May 15, 2004 9:56 pm Post subject: (No subject)
If you are making a snake game you really need to have at least a few shapes in a 'train' to start with. In the real snake, the head is controlled by the user and each trailing piece will turn in the same direction at the same location that the head did. Also, if you do this you're going to have to add collision detection to see if the snake has run over itself.
LiquidDragon
Posted: Sun May 16, 2004 9:33 am Post subject: (No subject)
Yes i am still working on all that but one small bit at a time.
LiquidDragon
Posted: Sun May 16, 2004 10:31 am Post subject: (No subject)
Ok so i got the snake to follow me but now it tends to leave ovals behind when i switch directions. Could someone help me out with that and maybe help me with Input.KeyDown like give an exmaple in my program.
code:
setscreen ("graphics:640;480")
var snake_length : int
snake_length := 4
proc snake_up (var x, y : int)
drawfillbox (x - 10, y, x + 10, y - 30, 0)
drawfilloval (x, y, 10, 10, 12)
drawfilloval (x - 4, y + 4, 2, 2, green)
drawfilloval (x + 4, y + 4, 2, 2, green)
end snake_up
proc snake_up_f (var x, y : int)
if whatdotcolor (x, y - (20 * snake_length)) not= 7 then
drawfilloval (x, y - (20 * snake_length), 10, 10, 0)
end if
drawfilloval (x, y - 20, 10, 10, 12)
end snake_up_f
proc snake_down (var x, y : int)
drawfillbox (x - 10, y, x + 10, y + 30, 0)
drawfilloval (x, y, 10, 10, 12)
drawfilloval (x - 4, y - 4, 2, 2, green)
drawfilloval (x + 4, y - 4, 2, 2, green)
end snake_down
proc snake_down_f (var x, y : int)
if whatdotcolor (x, y + (20 * snake_length)) not= 7 then
drawfilloval (x, y + (20 * snake_length), 10, 10, 0)
end if
drawfilloval (x, y + 20, 10, 10, 12)
end snake_down_f
proc snake_left (var x, y : int)
drawfillbox (x, y - 10, x + 30, y + 10, 0)
drawfilloval (x, y, 10, 10, 12)
drawfilloval (x - 4, y + 4, 2, 2, green)
drawfilloval (x - 4, y - 4, 2, 2, green)
end snake_left
proc snake_left_f (var x, y : int)
if whatdotcolor (x + (20 * snake_length), y) not= 7 then
drawfilloval (x + (20 * snake_length), y, 10, 10, 0)
end if
drawfilloval (x + 20, y, 10, 10, 12)
end snake_left_f
proc snake_right (var x, y : int)
drawfillbox (x, y - 10, x - 30, y + 10, 0)
drawfilloval (x, y, 10, 10, 12)
drawfilloval (x + 4, y + 4, 2, 2, green)
drawfilloval (x + 4, y - 4, 2, 2, green)
end snake_right
proc snake_right_f (var x, y : int)
if whatdotcolor (x - (20 * snake_length), y) not= 7 then
drawfilloval (x - (20 * snake_length), y, 10, 10, 0)
end if
drawfilloval (x - 20, y, 10, 10, 12)
%drawing the orange
drawfilloval (orange_x, orange_y, 10, 10, 9)
if key = KEY_UP_ARROW and whatdotcolor (x, y + 20) not= 7 then
y += 20
snake_up (x, y)
for i : 1 .. snake_length
snake_up_f (x, y)
end for
elsif key = KEY_DOWN_ARROW and whatdotcolor (x, y - 20) not= 7 then
y -= 20
snake_down (x, y)
for i : 1 .. snake_length
snake_down_f (x, y)
end for
elsif key = KEY_LEFT_ARROW and whatdotcolor (x - 20, y) not= 7 then
x -= 20
snake_left (x, y)
for i : 1 .. snake_length
snake_left_f (x, y)
end for
elsif key = KEY_RIGHT_ARROW and whatdotcolor (x + 20, y) not= 7 then
x += 20
snake_right (x, y)
for i : 1 .. snake_length
snake_right_f (x, y)
end for
end if
end loop
LiquidDragon
Posted: Sun May 16, 2004 3:18 pm Post subject: (No subject)
Come on i really need help on this. I just need to know how to make the circles follow behind. I can do it but as soon as i change directions it messes up.
LiquidDragon
Posted: Sun May 16, 2004 3:38 pm Post subject: (No subject)
YAY!!!! I finally got it to work. Now its time for collision detection and stuff. I'm so happy i finally got it
Look how i got it to work
code:
setscreen ("graphics:640;480")
var snake_length : int
snake_length := 4
proc snake_up (var x, y : int)
drawfillbox (x - 10, y, x + 10, y - 30, 0)
drawfilloval (x, y, 10, 10, 12)
drawfilloval (x - 4, y + 4, 2, 2, green)
drawfilloval (x + 4, y + 4, 2, 2, green)
end snake_up
proc snake_up_f (var x, y : int)
drawfilloval (x, y - 20, 10, 10, 12)
end snake_up_f
proc snake_down (var x, y : int)
drawfillbox (x - 10, y, x + 10, y + 30, 0)
drawfilloval (x, y, 10, 10, 12)
drawfilloval (x - 4, y - 4, 2, 2, green)
drawfilloval (x + 4, y - 4, 2, 2, green)
end snake_down
proc snake_down_f (var x, y : int)
drawfilloval (x, y + 20, 10, 10, 12)
end snake_down_f
proc snake_left (var x, y : int)
drawfillbox (x, y - 10, x + 30, y + 10, 0)
drawfilloval (x, y, 10, 10, 12)
drawfilloval (x - 4, y + 4, 2, 2, green)
drawfilloval (x - 4, y - 4, 2, 2, green)
end snake_left
proc snake_left_f (var x, y : int)
drawfilloval (x + 20, y, 10, 10, 12)
end snake_left_f
proc snake_right (var x, y : int)
drawfillbox (x, y - 10, x - 30, y + 10, 0)
drawfilloval (x, y, 10, 10, 12)
drawfilloval (x + 4, y + 4, 2, 2, green)
drawfilloval (x + 4, y - 4, 2, 2, green)
%drawing the orange
drawfilloval (orange_x, orange_y, 10, 10, 9)
if key = KEY_UP_ARROW and whatdotcolor (x, y + 20) not= 7 then
y += 20
snake_up (x, y)
snake_up_f (x, y)
elsif key = KEY_DOWN_ARROW and whatdotcolor (x, y - 20) not= 7 then
y -= 20
snake_down (x, y)
snake_down_f (x, y)
elsif key = KEY_LEFT_ARROW and whatdotcolor (x - 20, y) not= 7 then
x -= 20
snake_left (x, y)
snake_left_f (x, y)
elsif key = KEY_RIGHT_ARROW and whatdotcolor (x + 20, y) not= 7 then
x += 20
snake_right (x, y)
snake_right_f (x, y)
end if
%This erases the last part of the snake :D
if count >= snake_length then
drawfilloval (erase_x (count - snake_length + 1), erase_y (count - snake_length + 1), 10, 10, 0)
end if
end loop
I think some bits are in order
white_dragon
Posted: Sun May 16, 2004 4:54 pm Post subject: (No subject)
good job! the collision and detection should be really easy. just say that if the snake is beyond or equal to an x or y value then just fork it to a exit statement and say "u suk" lol. jk jk
LiquidDragon
Posted: Sun May 16, 2004 4:56 pm Post subject: (No subject)
LOL! yes that sounds like an excellent thing to say. But what's fork. I've never used that before