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;
}
Beispiel #2
0
Game::Game(std::string mapPath)
{
    this->mapPath = mapPath;
    map = Map(this, mapPath);
    initSnakes(mapPath);
    ai = false;
    speed = 128;
    initFood();
}
Beispiel #3
0
void Game::reset()
{
    snakes.clear();
    map = Map(this, mapPath);
    initSnakes(mapPath);
    ai = false;
    speed = 128;
    initFood();
    start();
}
Beispiel #4
0
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();
}
Beispiel #5
0
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;
}