static void startEditMode(void* valuePtr, int16_t loLimit, int16_t hiLimit, uint8_t valueType) { editMode = ON; keys = KEY_INIT; editValuePtr = valuePtr; editValueType = valueType; if (valueType == TYPE_UINT8) editValue = *(uint8_t*)valuePtr; else if (valueType == TYPE_INT8) editValue = *(int8_t*)valuePtr; // else if (valueType == TYPE_INT16) // editValue = *(int16_t*)valuePtr; editLoLimit = loLimit; editHiLimit = hiLimit; editInitialValue = editValue; lcdFillRectangle(30, 11, 98, 34, 0); lcdRectangle(30, 11, 98, 34, 1); lcdRectangle(31, 12, 97, 33, 1); writeSoftkeys(_skEDIT); lcdSelectFont(&font12x16); editModeHandler(); }
uint8_t react(uint8_t inputControl) { Element *iter = head, copy = *head; uint8_t result; //Inicjucje redraw calego ekranu /* lcdRectangle(a.xb, a.yb, a.xe, a.ye, 1, LCDBlack); a.xb = (a.xb+4)%240; a.xe = (a.xe+4)%240; lcdRectangle(a.xb, a.yb, a.xe, a.ye, 1, LCDWhite); */ //presuwamy koniec weza result = checkCollision(inputControl); if(eatable == NULL) newEatable(); if(result == 1 || result == 2) { if(result == 1) { while(iter->next != NULL) iter = iter->next; lcdRectangle(iter->x, iter->y, iter->x+ELSIZE-1, iter->y+ELSIZE-1, 1, bgCOLOR); while(iter->prev != head) { iter->x = iter->prev->x; iter->y = iter->prev->y; iter = iter->prev; } iter->x = copy.x; iter->y = copy.y; //rysuje nowa glowe lcdRectangle(head->x, head->y, head->x+ELSIZE-1, head->y+ELSIZE-1, 1, fgCOLOR); } oldControl = inputControl; switch(oldControl) { case 1: forbidden = 4; break; case 2: forbidden = 8; break; case 4: forbidden = 1; break; case 8: forbidden = 2; break; } return 1; } else return 0; }
void initSnake() { Element *iter; head = factory(); if(head != NULL) { head->x = 7*16; head->y = 10*16; head->prev = NULL; head->next = factory(); if(head->next != NULL) { head->next->x = head->x + ELSIZE; head->next->y = head->y; head->next->prev = head; head->next->next = factory(); if(head->next->next != NULL) { head->next->next->x = head->x + ELSIZE*2; head->next->next->y = head->y; head->next->next->prev = head->next; head->next->next->next = NULL; } } } else { //Jakas wiadomosc na lcd? } for(iter = head; iter != NULL; iter = iter->next) lcdRectangle(iter->x, iter->y, iter->x+ELSIZE-1, iter->y+ELSIZE-1, 1, fgCOLOR); newEatable(); }
//generujemy nowy jadalny element, element jest poprawny jesli jego next //ma wartosc 0xEA, w trakcie sprawdzania jesli next ma wartox 0xEE void newEatable() { while(eatable == NULL || eatable->next != (Element*)0xEA) { if(eatable == NULL) eatable = factory(); eatable->x = (random()%15)*16;//rand()%240; eatable->y = (random()%20)*16;//rand()%320; eatable->next = (Element*)0xEE; eatable->prev = NULL; if(checkCollision(0) == 1) eatable->next = (Element*)0xEA; } lcdRectangle(eatable->x, eatable->y, eatable->x+ELSIZE-1, eatable->y+ELSIZE-1, 1, fgCOLOR); }