Computer Science Canada Programming C, C++, Java, PHP, Ruby, Turing, VB   Username:   Password: Wiki   Blog   Search   Turing   Chat Room  Members
Snake Game
Author Message
LiquidDragon

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.

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) end snake_right %boundaries drawfillbox (115, 40, 128, 440, 7) %left wall drawfillbox (120, 430, 520, 440, 7) %top wall drawfillbox (511, 40, 520, 440, 7) %right wall drawfillbox (114, 35, 520, 48, 7) %bottom wall var x, y : int var key : string (1) var orange_x, orange_y : int x := maxx div 2 y := maxy div 2 randint (orange_x, 150, 510) randint (orange_y, 50, 430) loop     getch (key)     %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.

Don't copy though, cuz that would be apparent
Tony's programming blog. DWITE - a programming contest.
LiquidDragon

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) end snake_right %boundaries drawfillbox (115, 40, 128, 440, 7) %left wall drawfillbox (120, 430, 520, 440, 7) %top wall drawfillbox (511, 40, 520, 440, 7) %right wall drawfillbox (114, 35, 520, 48, 7) %bottom wall var x, y : int var key : string (1) var orange_x, orange_y : int x := maxx div 2 y := maxy div 2 randint (orange_x, 150, 510) randint (orange_y, 50, 430) loop     getch (key)     %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

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) end snake_right_f %boundaries drawfillbox (115, 40, 128, 440, 7)     %left wall drawfillbox (120, 430, 520, 440, 7)     %top wall drawfillbox (511, 40, 520, 440, 7)     %right wall drawfillbox (114, 35, 520, 48, 7)     %bottom wall var x, y : int var key : string (1) var orange_x, orange_y : int x := maxx div 2 y := maxy div 2 randint (orange_x, 150, 510) randint (orange_y, 50, 430) loop     getch (key)     %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) end snake_right proc snake_right_f (var x, y : int)     drawfilloval (x - 20, y, 10, 10, 12) end snake_right_f %boundaries drawfillbox (115, 40, 128, 440, 7)     %left wall drawfillbox (120, 430, 520, 440, 7)     %top wall drawfillbox (511, 40, 520, 440, 7)     %right wall drawfillbox (114, 35, 520, 48, 7)     %bottom wall var x, y : int var key : string (1) var count : int var orange_x, orange_y : int var erase_x, erase_y : array 1 .. 1000 of int x := maxx div 2 y := maxy div 2 count := 0 randint (orange_x, 150, 510) randint (orange_y, 50, 430) loop     getch (key)     count += 1     erase_x (count) := x     erase_y (count) := y     %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
 Display posts from previous: All Posts1 Day7 Days2 Weeks1 Month3 Months6 Months1 Year Oldest FirstNewest First

Page 1 of 2  [ 29 Posts ]
Goto page 1, 2  Next
 Jump to:  Select a forum  CompSci.ca ------------ - Network News - General Discussion     General Forums   -----------------   - Hello World   - Featured Poll   - Contests     Contest Forums   -----------------   - DWITE   - [FP] Contest 2006/2008   - [FP] 2005/2006 Archive   - [FP] 2004/2005 Archive   - Off Topic     Lounges   ---------   - User Lounge   - VIP Lounge     Programming -------------- - General Programming     General Programming Forums   --------------------------------   - Functional Programming   - Logical Programming   - C     C   --   - C Help   - C Tutorials   - C Submissions   - C++     C++   ----   - C++ Help   - C++ Tutorials   - C++ Submissions   - Java     Java   -----   - Java Help   - Java Tutorials   - Java Submissions   - Ruby     Ruby   -----   - Ruby Help   - Ruby Tutorials   - Ruby Submissions   - Turing     Turing   --------   - Turing Help   - Turing Tutorials   - Turing Submissions   - PHP     PHP   ----   - PHP Help   - PHP Tutorials   - PHP Submissions   - Python     Python   --------   - Python Help   - Python Tutorials   - Python Submissions   - Visual Basic and Other Basics     VB   ---   - Visual Basic Help   - Visual Basic Tutorials   - Visual Basic Submissions     Education ----------- - Student Life   Graphics and Design ----------------------- - Web Design     Web Design Forums   ---------------------   - (X)HTML Help   - (X)HTML Tutorials   - Flash MX Help   - Flash MX Tutorials   - Graphics     Graphics Forums   ------------------   - Photoshop Tutorials   - The Showroom   - 2D Graphics   - 3D Graphics     Teams ------ - dTeam Public

 Style: Appalachia blueSilver eMJay subAppalachia subBlue subCanvas subEmjay subGrey subSilver subVereor Search: