Esempio n. 1
0
void drawGame( )
{
    cleanFrameBuffer( );
    drawSnake(snake);
    drawFruit(fruit);
    drawFrameBuffer( );
}
Esempio n. 2
0
///////////////////////主函数
int main()
{
	initSnake();
	info();
	drawSnake();
	level();
	doGame();
	gameOver();
	return 0;
}
Esempio n. 3
0
void		OPENGL_Nib::updateDraw(const Snake & s, const Fruit & f,
				       const std::pair<int, int>& map)
{
  glClear(GL_COLOR_BUFFER_BIT);
  draw_board(map);
  drawFruit(f);
  drawSnake(s);
  glFlush();
  SDL_GL_SwapBuffers();
}
Esempio n. 4
0
void GameObject::render(sf::RenderWindow &window){
	// Fill Window with background black
	window.clear(sf::Color::Black);

	// Draw score text
	scoreText.setString("Score: " + std::to_string(score));
	window.draw(scoreText);

	drawSnake(window);

	// Draw game over screen if neccessary
	if( gameOver )
		window.draw(gameOverText);

	// Update the window with what we've drawn
	window.display();
}
Esempio n. 5
0
void moveSnake(void)
{
	int i;
	int hx = mySnake[0].x;
	int hy = mySnake[0].y;
	switch (snakeDir)
	{
		case DIR_UP:
			hy--;
		break;
		case DIR_DOWN:
			hy++;
		break;
		case DIR_LEFT:
			hx--;
		break;
		case DIR_RIGHT:
			hx++;
		break;
		default:
		break;
	}
	if (hx < 0 || hx >= MAP_WIDTH || hy < 0 || hy >= MAP_HEIGHT || isInSnake(hx, hy))
	{
		isOver = 1;
		return;
	}
	if (hx == myFood.x && hy == myFood.y)
	{
		snakeLength++;
		isFood = 0;
	}
	else
    drawBlock(mySnake[snakeLength-1].x, mySnake[snakeLength-1].y, BS_SPACE);
	for (i = snakeLength - 1; i >= 0; i--)
	{
		mySnake[i+1].x = mySnake[i].x;
		mySnake[i+1].y = mySnake[i].y;
	}
	mySnake[0].x = hx;
	mySnake[0].y = hy;
	drawSnake();
	
	return;
}
Esempio n. 6
0
void	Display::play()
{
  Map	*map	= _game->getMap();
  Snake	*snake	= _game->getSnake();

  Shader	colorShader("Shaders/couleur2D.vert", "Shaders/couleur2D.frag");

  colorShader.load();
  
  glClear(GL_COLOR_BUFFER_BIT);
  
  glUseProgram(colorShader.getProgramID());

  drawBackground();
  drawWalls();
  drawFruit(*map);
  
  drawSnake(*snake);

  glUseProgram(0);
  
  SDL_GL_SwapWindow(_window);
}
Esempio n. 7
0
int main() {
	int** grid = initializeMatrix();
	int score, force_exit, actualSelection = -1;
	st = GetStdHandle(STD_OUTPUT_HANDLE);
	restore_colorProfile(0);
	allocateTail(&(Snake.tail), NULL,  0);
	while (actualSelection != 0) {
		mainMenuGraphics();
		actualSelection = mainMenu(1);
		if (actualSelection == 1) {
			actualSelection = 0;
			graphics_SelectGameMode();
			while ((actualSelection != 1) && (actualSelection != 2)) {
				actualSelection = mainMenu(2);
			}
			int gameMode = graphics_levelSelect();
			initializeNewGame(grid, &score, &force_exit);
			insertTitle();
			drawInGameBorder();
			displayPauseInstructions();
			drawSnake(0, grid);
			updateScore(score);
			assignSnake2Matrix(grid, 1);
			addFood(grid);
			newGame(grid, &score, &force_exit, actualSelection - 1, gameMode);
			if (!force_exit) {
				_getch();
			}
			clear_screen();
			restoreSnakeLength();
		}
		else if (actualSelection == 2) {
			instructions();
		}
	}
	return 0;
}
Esempio n. 8
0
void moveSnake(int z)             //蛇的移动函数
{
   int i,j;
   int hx[2] = {mySnake[0][0].x,mySnake[1][0].x};
   int hy[2] = {mySnake[0][0].y,mySnake[1][0].y};
   if (snakeLength[0] < SNAKE_MIN_LEN)
      return;
   if(z==1)
   if (snakeLength[1] < SNAKE_MIN_LEN)
      return;
   for(j=0;j<z+1;j++)
   {
   switch (snakeDir[j])           //键盘控制:蛇的移动方向
   {
      case DIR_UP:
         hy[j]--;
         break;
      case DIR_DOWN:
         hy[j]++;
         break;
      case DIR_LEFT:
         hx[j]--;
         break;
      case DIR_RIGHT:
         hx[j]++;
         break;
      default:
         break;
   }
   if (hx[j] < 0 || hx[j] >= MAP_WIDTH || hy[j] < 0 || hy[j] >= MAP_HEIGHT || isInSnake(hx[j], hy[j],z))
   {
      isOver[j] = 1;
      return;
   }
   //判断,若蛇超出边界或咬到自己或撞到其他蛇则游戏结束
                                     
   for (i=0;i<BARS;i++)
   {
     if((hx[j]==myBar[i].x)&&(hy[j]==myBar[i].y))
{
        isOver[j] = 1;
      return;
}
   }
   
   //判断,若蛇碰到障碍物,游戏结束
   if (hx[j] == myFood.x && hy[j] == myFood.y) //判断是否吃到食物,吃到则长度增加,分数增加
   {
      snakeLength[j]++;
   PlaySound("d:\\食物.wav",NULL, SND_ASYNC|SND_NODEFAULT );
   point[j]++;
      isFood = 0;
   }
    if (hx[j] == myReward.x && hy[j] == myReward.y)      //判断是否吃到奖励食物,吃到则长度减少
   {
      snakeLength[j]--;
   PlaySound("d:\\奖励食物.wav",NULL, SND_ASYNC|SND_NODEFAULT);
      isReward = 0;
   drawBlock(mySnake[j][snakeLength[j]].x, mySnake[j][snakeLength[j]].y, BS_SPACE);
   drawBlock(mySnake[j][snakeLength[j]-1].x, mySnake[j][snakeLength[j]-1].y, BS_SPACE);
   }
else
      drawBlock(mySnake[j][snakeLength[j]-1].x, mySnake[j][snakeLength[j]-1].y, BS_SPACE);
  
   for (i = snakeLength[j] - 1; i >= 0; i--)                //实现蛇的移动,即将前一节的坐标赋给后一节
   {
      mySnake[j][i+1].x = mySnake[j][i].x;
      mySnake[j][i+1].y = mySnake[j][i].y;
   }
   mySnake[j][0].x = hx[j];
   mySnake[j][0].y = hy[j];
   }
   
   drawSnake(z);
   return;
}
Esempio n. 9
0
//主函数
int main()
{ clock_t start,finish;
   int isPause = 1;
   int chance=0;
   float RewardTime=0;
   int z;
   
   setCursorVisible(0);
   setConsoleTitle("贪吃蛇--D_Y。 2010.1.11");        //标题
   ch=menu();
   ch2=menuDouble();               
   if(ch2=='1')
    z=0;
   if(ch2=='2')
    z=1;
   initSnake(SNAKE_MIN_LEN,z);
   drawMap();
   drawSnake(z);
   //PlaySound("d:\\泡泡堂轻松欢快音乐音效WAV.wav",NULL, SND_ASYNC|SND_NODEFAULT|SND_LOOP );   
   switch(ch)                 //不同的难度对应不同的奖励食物消失时间
   {
   case '1':
       RewardTime=2500;
   case '2':
    RewardTime=3000;
   case '3':
    RewardTime=3500;
   }
   while (!isOver[0]&&!isOver[1])             //当两条蛇任意一条死亡则游戏结束
   {   
    srand((uint32)time(NULL));
      if (!isPause)                           
      {
         moveSnake(z);
         if (!isFood)
            drawFood();
    while(((point[1]+point[0])%4==0)&&((point[1]+point[0])>3)&&p==1)        
                                                          //规定在得分大于三分时每吃掉四个常规食物产生一个奖励食物
    { 
     if (!isReward)
    drawReward();
       start=clock();                                        //画出食物,记录此刻时间
      break;  
    }

    finish=start+RewardTime ;                                //结束时间为开始时间加规定的奖励食物出现时间
            if((isReward==1)&&(finish<=clock()))
    {
             drawBlock(myReward.x, myReward.y, BS_SPACE); //超出规定时间则将奖励食物用背景方框覆盖
    myReward.x=-1;
    myReward.y=-1;
    isReward=0;                                           
    }
    if(((point[1]+point[0])%3==0)&&((point[1]+point[0])>2)&&q==0)                         
    {
    
      clearBar();
    
                    drawBar();
    }
           
    setTextColor(myColors[4]);                                    //规定出输出分数等信息
    gotoTextPos(MAP_BASE_X*2 -14 , MAP_BASE_Y + 2);
    printf("Player 1");
   gotoTextPos(MAP_BASE_X*2 -14 , MAP_BASE_Y + 4);
   
            printf("Score: %d.", point[0]);
    if(z==1)
    {
   gotoTextPos(MAP_BASE_X*2 + MAP_WIDTH*2+4 , MAP_BASE_Y + 2);
            printf("Player 2");
   gotoTextPos(MAP_BASE_X*2 + MAP_WIDTH*2+4 , MAP_BASE_Y + 4);
            printf("Score: %d.", point[1]);
    }                                                          
   
    
      }
      DELAY(ch); //赋予游戏速度
   delayMS(80- snakeLength[0]*2); //游戏速度随着蛇身增长而增加
      if (jkHasKey()) //键盘控制
      {
         switch (jkGetKey())
         {
      
            case JK_UP:
               if (snakeDir[0] != DIR_DOWN)
                  snakeDir[0] = DIR_UP;
      break;
    case 'w': 
               if (snakeDir[1] != DIR_DOWN)
                  snakeDir[1] = DIR_UP;
               
               break;
  
            case JK_DOWN:
               if (snakeDir[0] != DIR_UP)
                  snakeDir[0] = DIR_DOWN;
      break;
      case 's': 
      if (snakeDir[1] != DIR_UP)
                  snakeDir[1] = DIR_DOWN;
               break;
  
            case JK_LEFT:
               if (snakeDir[0] != DIR_RIGHT)
                  snakeDir[0] = DIR_LEFT;
      break;
      case 'a': 
       if (snakeDir[1] != DIR_RIGHT)
                  snakeDir[1] = DIR_LEFT;
               break;
  
            case JK_RIGHT:
               if (snakeDir[0] != DIR_LEFT)
                  snakeDir[0] = DIR_RIGHT;
      case 'd': 
        if (snakeDir[1] != DIR_LEFT)
                  snakeDir[1] = DIR_RIGHT;
               break;
            case JK_ENTER:
            case JK_SPACE:
               isPause = !isPause;
               break;
      case JK_ESC:
       isOver[0]=1;
       break;
            default:
               break;
         }

      }
   }
   PlaySound("d:\\超级马里奥兄弟 死掉音.wav",NULL, SND_ASYNC|SND_NODEFAULT );
   gotoTextPos(MAP_BASE_X + MAP_WIDTH - 7, MAP_BASE_Y + MAP_HEIGHT + 1);
   if(isOver[0]==1&&z==0)
printf("Game Over!!");
   if(isOver[0]==1&&z==1)
printf("Player 2 win!!");   
   if(isOver[1]==1)
   printf("Player 1 win!!");//游戏结束,在规定处显示分数
   getch();
   return 0;
}
Esempio n. 10
0
void updateSnake(SnakeHead * snake) {
	drawSpaceSnake(snake);
	snake->lastPos = snake->pos;
	snake->lastDirection = snake->direction;
	/* This function will get the next position, check if is a hit, score or move, and call the right function */
	switch (snake->direction)
	{
	case NORTH:
		snake->pos.Y -= 1;
		break;
	case SOUTH:
		snake->pos.Y += 1;
		break;
	case EAST:
		snake->pos.X += 1;
		break;
	case WEST:
		snake->pos.X -= 1;
		break;
	}
	/* Update the snake body */
	SnakeBody * tmp = snake->next;
	if (tmp != NULL)
	{
		tmp->lastPos = tmp->pos;
		tmp->lastDirection = tmp->direction;
		tmp = tmp->next;
		while (tmp != NULL)
		{
			/* LastPosition of every block */
			tmp->lastPos = tmp->pos;
			tmp->lastDirection = tmp->direction;
			tmp = tmp->next;
		}

		/* Updates the body positions */
 		tmp = snake->next;
		tmp->pos = snake->lastPos;
		tmp->direction = snake->lastDirection;
		if (tmp->next != NULL)
		{
			tmp = tmp->next;
			while (tmp != NULL)
			{
				tmp->pos = tmp->prev->lastPos;
				tmp->direction = tmp->prev->lastDirection;
				tmp = tmp->next;
			}
		}
		
	}

	if ((snake->nextPosSymbol != ' ') && (snake->nextPosSymbol != FRUIT))
	{
		// Implement Death Functions
		DeathScreen(snake);
		while (!_kbhit())
		{
			continue;
		}
		exit(0);
	}
	if (snake->nextPosSymbol == FRUIT)
	{
		addScore(snake);
		snake->digesting = true;
	}
	drawSnake(snake);
}
Esempio n. 11
0
void Game()
{
	while (true)
	{
		drawBoard();
		removeSnake();
		if (GetAsyncKeyState(VK_LEFT) && !moveSnakeRight_b)
		{
			if (!moveSnakeLeft_b)
			{	
				moveSnakeLeft();
				drawSnake();
				checkSnakeCollision();
			}
		}
		else if (GetAsyncKeyState(VK_RIGHT) && !moveSnakeLeft_b)
		{
			if (!moveSnakeRight_b)
			{
				moveSnakeRight();
				checkSnakeCollision();
			}
		}
		else if (GetAsyncKeyState(VK_UP) && !moveSnakeDown_b)
		{
			if (!moveSnakeUp_b)
			{
				moveSnakeUp();
				checkSnakeCollision();
			}
		}
		else if (GetAsyncKeyState(VK_DOWN) && !moveSnakeUp_b)
		{
			if (!moveSnakeDown_b)
			{
				moveSnakeDown();
				checkSnakeCollision();
			}
		} // Automatic moves
	    else if (moveSnakeDown_b)
		{
			moveSnakeDown();
			checkSnakeCollision();
		}
		else if (moveSnakeUp_b)
		{
			moveSnakeUp();
			checkSnakeCollision();
		}
		else if (moveSnakeRight_b)
		{
			moveSnakeRight();
			checkSnakeCollision();
		}
		else if (moveSnakeLeft_b)
		{
			moveSnakeLeft();
			checkSnakeCollision();
		}

		drawSnake();

		Sleep(100);
	}
}