#include "../config.h" #include "../pixel.h" #include "../util.h" #include "../random/prng.h" #include "snake.h" #include "../joystick.h" #define RANDOM8() (random8()) void snake(){ pixel pixels[64]; pixels[0] = (pixel){NUM_COLS/2, NUM_ROWS/2}; pixels[1] = (pixel){NUM_COLS/2, (NUM_ROWS/2)-1}; pixel * head = &pixels[1]; pixel * tail = &pixels[0]; pixel old_head; pixel apples[10]; unsigned char apple_num = 0; direction dir = up; clear_screen(0); unsigned char x=0, dead=0; while(1){ x++; old_head = *head; if(++head == pixels + 64) head = pixels; unsigned char dead_cnt=0; unsigned char apple_found = 0, j; for(j=0;jx > apples[j].x){ distx = head->x - apples[j].x; }else{ distx = apples[j].x - head->x; } if(head->y > apples[j].y){ disty = head->y - apples[j].y; }else{ disty = apples[j].y - head->y; } if ((distx + disty) < shortdist){ shortdist = distx + disty; nextapple = j; xy = (distx > disty)?1:0; } } if(xy){ dir = (apples[nextapple].x > head->x)?left:right; }else{ dir = (apples[nextapple].y > head->y)?down:up; } } } if( (apple_num<9) && ((RANDOM8()&0xff)<10) ){ pixel new_apple = (pixel){RANDOM8()%NUM_COLS,RANDOM8()%NUM_ROWS}; if(!get_pixel(new_apple)){ apples[apple_num++]=new_apple; } } if(!apple_found){ clearpixel(*tail); if(++tail == pixels + 64) tail = pixels; } }else{ while(tail != head){ clearpixel(*tail); if((++tail)>pixels+64) tail = pixels; wait (60); } break; } for(j=0;jx == apples[j].x) && (head->y == apples[j].y) ){ apple_found = 1; for(; j < apple_num - 1; j++) { apples[j] = apples[j+1]; } apple_num--; goto apple_se; } } if (get_pixel(*head)) { dead = 1; } apple_se: if (!dead) { setpixel(*head, 3); // setze neue €pfel if ( (apple_num < 9) && (random8() < 10) ) { pixel new_apple = (pixel) {(random8() % (NUM_COLS-2))+1, (random8() % (NUM_ROWS-2))+1}; if (!get_pixel(new_apple)){ apples[apple_num++] = new_apple; } } // lšsche Ende if (!apple_found && !dead) { clearpixel(*tail); if (++tail == pixels + 64) tail = pixels; } } else { while (tail != head) { clearpixel(*tail); if ((++tail) > pixels + 64) tail = pixels; wait (60); } break; } for (j = 0; j < apple_num; j++) { if (x % 2) { setpixel(apples[j], 3); } else { clearpixel(apples[j]); } } for(j=0;j<20;j++){ if(JOYISLEFT){ joy = left; }else if(JOYISRIGHT){ joy = right; }else{ joy = 0xff; } if(joy != joy_old){ joy_cmd = joy; } joy_old = joy; wait (5); } } }