• API
• FAQ
• Tools
• Trends
• Archive
daily pastebin goal
22%
SHARE
TWEET

# arduino snake game

a guest Dec 27th, 2012 556 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
1.
4.
5. /******** istanze ************/
7. /********* variabili costanti *******/
8. #define LEFT 1
9. #define RIGHT 2
10. #define UP 3
11. #define DOWN 4
12. #define MAX_WIDTH 84        //risoluzione display 84x48
13. #define MAX_HEIGHT 48
14.
15. /**/int x=5, y=5;
16. /**/int xC, yC;                //cordinate testa snake
17. /**/int xFruit=0, yFruit=0;    //cordinate frutto
18. /**/int point=0, points=10;
19. boolean left=false,right=true, up=false, down=false, pause=true;
20. /**/int speakerPin = 8;
21. /**/int dr = 0, dc = 1, i;
22. /**/int snake_cols[260];    // vettore che contiene le cordinate delle singole parti dello snake { cols[0], row[0] }  corrispondono alla testa
23. /**/int snake_row[260];     // vettore che contiene le cordinate delle singole parti dello snake { cols[snake_lenght], row[snake_lenght] } corrispondono alla coda
24. /**/int snake_lenght = 10;  // lunghrzza snake
25. /**/int level=0, time=20;
26. /**/int g, m, j, l, k;      //sensori ingressi (button)
27. /*****************************/
28. void(* reset)(void) = 0;    //reset arduino
29. /******** Setup *************/
30. void setup() {
31.   Serial.begin(9600);
33.   display.begin();
34.   pinMode(speakerPin, OUTPUT);
35.   pinMode(9, OUTPUT);
36.   pinMode(10, OUTPUT);
37.   digitalWrite(9, HIGH);
38.   digitalWrite(10, HIGH);
39.
40.   xFruit = display.width()/2;
41.   yFruit = display.height()/2;
42.
43.   display.clearDisplay();
44.   display.setTextSize(1);
45.   display.setTextColor(BLACK);
46.   display.setCursor(0,0);
47.   display.println("Snake v1.0");
48.   display.setCursor(0,20);
49.   display.print("Developed by: Ouarrak Ayoub");
50.   display.display();
51.   delay(3500);
52.   display.clearDisplay();
53.   display.setTextSize(2);
54.   display.setTextColor(BLACK);
55.   display.setCursor(0,0);
56.   display.println("Enjoy");
57.   display.display();
58.   delay(2000);
59.
60. }
61. /********** Loop ***********/
62. void loop() {
63.   xC=snake_cols[0];        //cordinate testa snake
64.   yC=snake_row[0];
65.
66.   if(point == 0 or point == points){
67.     level++;
68.     display.clearDisplay();
69.     display.setTextSize(2);
70.     display.setTextColor(BLACK);
71.     display.setCursor(0,0);
72.     display.print("Level:");
73.     display.setTextSize(2);
74.     display.setCursor(0,30);
75.     display.print(level);
76.     display.display();
77.     delay(2000);
78.     upLevel(level);
79.     point=1;
80.     points+=10;
81.     resetValues();
82.   }
83.
84.   display.clearDisplay();
85.
86.   m=analogRead(A2);    //leggo valori dei button  (1023 è stato premuto, 0 non è stato premuto)
91.
92.   moveSnake(g,k,l,m,j);
93.
94.   //lo snake ha mangiato il frutto (da destra o da sinistra)
95.   for(int i=0; i < 3 ; i++) {
96.     if((xC+i == xFruit) or (xC == xFruit+i)) {     //controllo la testa dello snake(x) con cordinate x del frutto
97.       if((yC == yFruit) or (yC+i == yFruit) or (yC == yFruit+i)) { //controllo la testa dello snake(y) con cordinate y del frutto
98.         point++;
99.         beep(8, 2000, 10);
100.         xFruit = random(1, 80);      //nuove cordinate frutto in modo casuale
101.         yFruit = random(1, 46);
102.         snake_lenght+=2;              //aumento lunghezza snake
103.         drawSnake();
104.       }
105.     }
106.     //lo snake ha mangiato il frutto (da sopra o da sotto)
107.     if((yC+i == yFruit) or (yC == yFruit+i)) {
108.       if((xC == xFruit) or (xC+i == xFruit) or (xC == xFruit+i)) {
109.         point++;
110.         beep(8, 2000, 10);
111.         xFruit = random(1, 80);
112.         yFruit = random(1, 46);
113.         snake_lenght+=2;
114.         drawSnake();
115.       }
116.     }
117.   }
118.   /*****************/
119.   if(left == true) {
120.     if(xC==1) {              //snake tocca parete sinistra
121.        gameover();
122.     }
123.     if(xC > 1)
124.       drawSnake();
125.   }
126.   /*****************/
127.   if(right == true){
128.     if(xC == MAX_WIDTH-1)  //snake tocca parete destra
129.        gameover();
130.     if(xC < MAX_WIDTH-1)
131.       drawSnake();
132.   }
133.   /*****************/
134.   if(up == true){
135.     if(yC==1)             //snake tocca parete sopra
136.       gameover();
137.     if(yC > 1)
138.       drawSnake();
139.   }
140.   /*****************/
141.   if(down == true){
142.     if(yC == MAX_HEIGHT-1) //snake tocca parete sotto
143.       gameover();
144.     if(yC < MAX_HEIGHT-1)
145.       drawSnake();
146.   }
147.   /*****************/
148.   //questa parte va rivista perchè non funzione (snake mangia se stesso)
149.    /*for (i=1; i<snake_lenght; i++)
150.     if ((xC == snake_row[i] and yC == snake_cols[-snake_lenght+i]))
151.      { gameover();
152.      /* Serial.print(snake_row[snake_lenght-1]);
153.       Serial.print(" = ");
154.       Serial.print(snake_row[i]);
155.       Serial.print("  and  ");
156.       Serial.print(snake_cols[snake_lenght-1]);
157.       Serial.print(" = ");
158.       Serial.println(snake_cols[i]);
159.      }*/
160.   delay(time);
161. }
162. /***************************************/
163. void resetValues() {
164.   snake_lenght = 10;
165.   for(int i=0; i<snake_lenght-1; i++) {      //inizializzo posizione snake
166.      snake_cols[i]=i;
167.      snake_row[i]=(MAX_HEIGHT/2);
168.   }
169.   left=false;
170.   right=true;
171.   up=false;
172.   down=false;
173.   dr = 0;
174.   dc = 1;
175. }
176. /***************************************/
177. void upLevel(int lev) {
178.   switch(lev) {
179.     case 1: time;    break;
180.     case 2: time-=4; break;
181.     case 3: time-=4; break;
182.     case 4: time-=4; break;
183.     case 5: time-=4; break;
184.     case 6: time-=4; break;
185.   }
186. }
187. /***************************************/
188. void drawSnake(){
189.   display.drawRect(0,0,MAX_WIDTH,MAX_HEIGHT,BLACK);
190.
191.   for(int i=snake_lenght; i>0; i--)
192.     display.drawCircle(snake_cols[i], snake_row[i], 1,  BLACK);
193.
194.   display.fillRect(xFruit, yFruit, 3, 3, BLACK);
195.   display.display();
196.
197.   for(int i=snake_lenght; i>0; i--) {
198.     snake_row[i] = snake_row[i-1];
199.     snake_cols[i] = snake_cols[i-1];
200.   }
201.   snake_row[0]  += dr;
202.   snake_cols[0] += dc;
203. }
204. /***************************************/
205. void direc(int d){
206.   switch(d) {
207.     case 1: { left=true ; right=false; up=false; down=false; dr = 0; dc = -1;} break;
208.     case 2: { left=false; right=true ; up=false; down=false; dr = 0; dc = +1;} break;
209.     case 3: { left=false; right=false; up=true ; down=false; dr = -1; dc = 0;} break;
210.     case 4: { left=false; right=false; up=false; down=true ; dr = +1; dc = 0;} break;
211.   }
212. }
213. /***************************************/
214. void gameover(){
215.     display.clearDisplay();
216.     display.setTextSize(1);
217.     display.setTextColor(BLACK);
218.     display.setCursor(15,0);
219.     display.println("Game Over");
220.     display.setTextSize(1);
221.     display.setTextColor(BLACK);
222.     display.setCursor(0,20);
223.     display.print("points: ");
224.     display.setCursor(50,20);
225.     display.print(point-1);
226.     display.setCursor(0, 30);
227.     display.print("level: ");
228.     display.setCursor(50,30);
229.     display.print(level);
230.     display.display();
231.     delay(2500);
232.     display.clearDisplay();
233.     display.setTextSize(1);
234.     display.setTextColor(BLACK);
235.     display.setCursor(0,0);
236.     display.println("Try again");
237.     display.display();
238.     delay(1500);
239.     point=0;
240.     points=10;
241.     level=0;
242.     resetValues();
243. }
244. /***************************************/
245. void beep (unsigned char speakerPin, int frequencyInHertz, long timeInMilliseconds)
246. {
247.     int x;
248.     long delayAmount = (long)(1000000/frequencyInHertz);
249.     long loopTime = (long)((timeInMilliseconds*1000)/(delayAmount*2));
250.     for (x=0;x<loopTime;x++)
251.     {
252.         digitalWrite(speakerPin,HIGH);
253.         delayMicroseconds(delayAmount);
254.         digitalWrite(speakerPin,LOW);
255.         delayMicroseconds(delayAmount);
256.     }
257.
258.     delay(2);
259.     //a little delay to make all notes sound separate
260. }
261. /***************************************/
262. void moveSnake(int g, int k, int l, int m, int j) {
263.     if(g > 900) {
264.           display.clearDisplay();
265.           display.setTextSize(2);
266.           display.setTextColor(BLACK);
267.           display.setCursor(0,0);
268.           display.println("Pause");
269.           display.setTextSize(1);
270.           display.setCursor(0,20);
271.           display.print("points: ");
272.           display.setCursor(50,20);
273.           display.print(point-1);
274.           display.setCursor(0, 30);
275.           display.print("level: ");
276.           display.setCursor(50,30);
277.           display.print(level);
278.           display.display();
279.           delay(2500);
280.     }
281.     if(k > 900 and right==false) {
282.       if ((xC > 0 or xC <= display.width()-xC))
283.         direc(LEFT);
284.     }
285.     if(l > 900 and left==false) {
286.       if ((xC > 0 or xC <= display.width()-xC))
287.         direc(RIGHT);
288.     }
289.     if(m > 900 and down==false) {
290.       if((yC > 0 or yC <= display.height()-yC))
291.         direc(UP);
292.     }
293.     if(j > 900 and up==false) {
294.        if((yC > 0 or yC <= display.height()-yC))
295.            direc(DOWN);
296.     }
297. }
RAW Paste Data
Top