int main() { srand(time(NULL)); Stat stat; char name[50]; Snake snake; Pos food; ToGiveTread toGiveThread = {RIGHT, false, false}; showLeaderboard(); initStat(&stat); strcpy(name, stat.nickname); HANDLE hReadThread = CreateThread(NULL, 0, ReadThread, &toGiveThread, 0, NULL); strcpy(stat.nickname, name); initField(); initSnake(&snake); initFood(&snake, &food, &stat); updateAds(&stat); do{ Sleep(sleepTime(stat.level)); }while(!updateSnake(&snake, &food, &toGiveThread, &stat)); toGiveThread.toStopThread = true; clearScr(); updateScore(&stat); CloseHandle(hReadThread); showLeaderboard(); return 0; }
Game::Game(std::string mapPath) { this->mapPath = mapPath; map = Map(this, mapPath); initSnakes(mapPath); ai = false; speed = 128; initFood(); }
void Game::reset() { snakes.clear(); map = Map(this, mapPath); initSnakes(mapPath); ai = false; speed = 128; initFood(); start(); }
void Land::init() { Point point; for (int i = 0; i < this->width; ++i) { std::deque<Point> tmp; for (int j = 0; j < this->height; ++j) { point.SetContent((i == 0 || j == 0 || i + 1 == this->width || j + 1 == this->height) ? 'b' : ' '); point.SetX(i); point.SetY(j); tmp.push_back(point); } this->land.push_back(tmp); tmp.erase(tmp.begin(), tmp.end()); } initFood(); }
void initPowUps(){ initFood(); initSpeed(); initFreeze(); initEdwards(); }
bool updateSnake(Snake * snake, Pos * food, ToGiveTread * toGiveTread, Stat * stat){ drawBlock(snake->tail.X + fieldX, snake->tail.Y + fieldY, BACK_WHITE); drawBlock(snake->head.X + fieldX, snake->head.Y + fieldY, BACKGROUND_BLUE | BACKGROUND_GREEN); switch(toGiveTread->direc){ case RIGHT: snake->head.X++; if(snake->head.X >= GAME_FIELD_WIDTH) return true; break; case LEFT: snake->head.X--; if(snake->head.X < 0) return true; break; case UP: snake->head.Y--; if(snake->head.Y < 0) return true; break; case DOWN: snake->head.Y++; if(snake->head.Y >= GAME_FIELD_HEIGHT) return true; break; } toGiveTread->isChanged = false; drawBlock(snake->head.X + fieldX, snake->head.Y + fieldY, BACKGROUND_BLUE); bool toInitFood = false; if(snake->head.X == food->X && snake->head.Y == food->Y){ toInitFood = true; stat->blocksNum++; stat->score += stat->level; if((stat->blocksNum - INIT_BLOCKS_NUM) % NUM_OF_BLOCKS_TO_RAISE == 0 && stat->level < MAX_LEVEL) stat->level++; updateAds(stat); int i; for(i = stat->blocksNum - 1; i > snake->headPosInArr; i--){ if(i == snake->tailPosInArr) snake->tailPosInArr++; snake->blocks[i] = snake->blocks[i - 1]; } snake->blocks[snake->headPosInArr] = snake->head; }else{ snake->headPosInArr = snake->tailPosInArr; snake->blocks[snake->tailPosInArr--] = snake->head; if(snake->tailPosInArr < 0) snake->tailPosInArr = stat->blocksNum - 1; snake->tail = snake->blocks[snake->tailPosInArr]; } if(toInitFood) initFood(snake, food, stat); int i; for(i = 0; i < stat->blocksNum; i++){ if(i == snake->headPosInArr) continue; if(snake->head.X == snake->blocks[i].X && snake->head.Y == snake->blocks[i].Y) return true; } return false; }