Ejemplo n.º 1
0
void FlockWidget::paintEvent(QPaintEvent *event)
{    
    QPainter painter(this);

    painter.setRenderHint(QPainter::Antialiasing);
    painter.setRenderHint(QPainter::HighQualityAntialiasing);
    painter.setRenderHint(QPainter::TextAntialiasing);

    painter.fillRect(0,0,width(),height(),QColor(50,50,75));

    //Draw food
    for (int i=0;i<food.count();i++)
    {
        drawFood(&painter, food[i]);
    }

    //Draw all the friendz!
    for (int i=0;i<friends.count();i++)
    {
        drawAnimal(&painter, friends[i]);
    }

    for (int i=0;i<foes.count();i++)
    {
        drawAnimal(&painter, foes[i]);
    }

}
Ejemplo n.º 2
0
//--------------------------------------------------------------
void essClient::draw(){
    ofBackground(0, 0, 0);
    char udpMessage[1000];
    UDPReceive.Receive(udpMessage,1000);
    raw = udpMessage;

    vector<string> input = ofSplitString(raw, "%");
        
    if(input.size() > 2){
        for(int i = 0; i != input.size(); i++) {
            if(i == 0){
                string inputTemp = input[i];
                vector<string> food = ofSplitString(inputTemp, ",");
                string xTemp = food[0];
                string yTemp = food[1];
                int xPos = ofToInt(xTemp);
                int yPos = ofToInt(yTemp);
                drawFood(xPos, yPos);
            }else{
                string tempInput = input[i];
                vector<string> snakeBlock = ofSplitString(tempInput, ";");
                for(int ii = 0; ii != snakeBlock.size(); ii++) {
                    string tempSnakeBlock = snakeBlock[ii];
                    vector<string> block = ofSplitString(tempSnakeBlock, ",");
                    string xTemp = block[0];
                    string yTemp = block[1];
                    int xPos = ofToInt(xTemp);
                    int yPos = ofToInt(yTemp);
                    drawSnakeBlock(xPos, yPos, i, ii);
                }
            }
        }
    }
}
Ejemplo n.º 3
0
void display (void) {
	glClearDepth (1);
    glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glLoadIdentity();  
	gluLookAt(120.0, 20.0, 140.0,		
              0.0, 0.0, 0.0,		
              0.0, 5.0, 0.0);		
	float pos[]={10.0,90.0,-110.0,1.0};        //set the position
	glLightfv(GL_LIGHT0,GL_POSITION,pos);
	glEnable(GL_COLOR_MATERIAL);
	
	camera();
	glPushMatrix();
	
	glTranslatef(0, -30, 0);
	//glScalef(10,10,10);
	//glCallList(cube);
	glPopMatrix();
	drawGrid();
	//createHabitat();
	drawWalls();
	drawHabitat();
	drawFood();
	drawObject();
	drawPredator();

	//saveToDisk();
    glutSwapBuffers();
}
Ejemplo n.º 4
0
void drawStartPowUps(struct Snake snake_player1[], struct Snake snake_player2[]){
	while( !drawFood(snake_player1, snake_player2) ){
		//printf("Attempting to Draw food\n");
	}
	while( !drawFood(snake_player1, snake_player2) ){
		//printf("Attempting to Draw food\n");
	}
	while( !drawFood(snake_player1, snake_player2) ){
		//printf("Attempting to Draw food\n");
	}
	while( !drawSpeed(snake_player1, snake_player2) ){
		//printf("Attempting to Draw speed\n");
	}
	//speed_drawn = 1;
	while( !drawFreeze(snake_player1, snake_player2) ){
		//printf("Attempting to Draw freeze\n");
	}
	//freeze_drawn = 1;
	while( !drawEdwards(snake_player1, snake_player2) ){
		//printf("Attempting to Draw edwards\n");
	}
}
Ejemplo n.º 5
0
int main()
{
	setupGame();
	addLength();
	addLength();

	drawBoard();
	drawFood();
	
	Game();

	getchar();
}
Ejemplo n.º 6
0
void doGame(void)
{
	isPause = 0;
	while (!isOver)
	{
		if (!isPause)
    {
		moveSnake();
		if (!isFood)            
			drawFood();
    }
    delayMS(ms - snakeLength*2);
    if (jkHasKey()) ///异步检测按键
    {
		switch (jkGetKey())
		{
			case JK_UP:
				if (snakeDir != DIR_DOWN)
				snakeDir = DIR_UP;
			break;
			case JK_DOWN:
				if (snakeDir != DIR_UP)
				snakeDir = DIR_DOWN;
			break;
			case JK_LEFT:
				if (snakeDir != DIR_RIGHT)
				snakeDir = DIR_LEFT;
			break;
			case JK_RIGHT:
				if (snakeDir != DIR_LEFT)
				snakeDir = DIR_RIGHT;
			break;
			case JK_ESC: //游戏结束
				isOver = !isOver;
			break;
			case JK_SPACE: //暂停
				isPause = !isPause;
				break;
			default:
			break;
      }
    }
  }
}
Ejemplo n.º 7
0
void GlutGuiViewport:: draw()
{
//get the complete information about all idsplayed mobiles first
    world.getMobilesSnapshot( ptTopLeft, ptBottomRight, displayedMobiles);
//then draw them
//Such approach is used to make parallel execution more effective (drawing is ecpected to be much slower than getting snapshot)
    if(true){
	World::MobilesSnapshot::iterator i, e=displayedMobiles.end();
	for( i = displayedMobiles.begin(); i!=e; ++i){
	    drawMobile( **i );
	}
    }
    if(true){
	world.getFoodSnapshot( ptTopLeft, ptBottomRight, displayedFood);
	World::FoodSnapshot::iterator i, e = displayedFood.end();
	for( i = displayedFood.begin(); i!=e; ++i){
	    drawFood( *i );
	}
    }
}
Ejemplo n.º 8
0
void checkSnakeCollision()
{
	if (::Snake.begin()->begin()->first == BOARD_X || ::Snake.begin()->begin()->second == BOARD_Y ||
		::Snake.begin()->begin()->first == BOARD_WIDTH || ::Snake.begin()->begin()->second == BOARD_HEIGHT)
	{
		exit(0);
	}
	else if (::Snake.begin()->begin()->first == ::Food.begin()->first &&
			 ::Snake.begin()->begin()->second == ::Food.begin()->second)
	{
		addLength();
		removeFood();
		resetFood();
		drawFood();
	}
	else
	{
		bool first = true;
		std::vector<std::map<short, short>>::iterator it = Snake.begin();
		for (const auto s : Snake)
		{
			if (first)
			{
				first = false;
			}
			else
			{
				if (s.begin()->first == it->begin()->first &&
					s.begin()->second == it->begin()->second)
				{
					exit(0);
				}
			}
		}
	}
}
Ejemplo 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;
}
Ejemplo n.º 10
0
void labyrinth::drawWalls(){
    baseMaterial.apply();
    baseTexture.apply();
    float w = baseTexture.getWidth();
    float h = baseTexture.getHeight();
    glNormal3f(0, 0, 1);
    glBegin(GL_QUADS);
        //THE BASE
        glTexCoord2f(0, h);
        glVertex3f(-0.5, -0.5, -0.5);
        glTexCoord2f(w, h);
        glVertex3f(width-0.5, -0.5, -0.5);
        glTexCoord2f(w, 0);
        glVertex3f(width-0.5, height-0.5, -0.5);
        glTexCoord2f(0, 0);
        glVertex3f(-0.5, height-0.5, -0.5);
    glEnd();
    baseTexture.disable();

    wallMaterial.apply();
    wallTexture.apply();
    glBegin(GL_QUADS);
        //LEFT BORDER
        glNormal3f(1, 0, 0);
        glTexCoord2f(0, h*height);
        glVertex3f(-0.5, -0.5, 0.5);
        glTexCoord2f(w*width, h*height);
        glVertex3f(-0.5, -0.5, -0.5);
        glTexCoord2f(w*width, 0);
        glVertex3f(-0.5, height-0.5, -0.5);
        glTexCoord2f(0, 0);
        glVertex3f(-0.5, height-0.5, 0.5);
        //RIGHT BORDER
        glNormal3f(-1, 0, 0);
        glTexCoord2f(0, h*height);
        glVertex3f(width-0.5, -0.5, 0.5);
        glTexCoord2f(w*width, h*height);
        glVertex3f(width-0.5, height-0.5, 0.5);
        glTexCoord2f(w*width, 0);
        glVertex3f(width-0.5, height-0.5, -0.5);
        glTexCoord2f(0, 0);
        glVertex3f(width-0.5, -0.5, -0.5);

        //TOP BORDER
        glNormal3f(-1, 0, 0);
        glTexCoord2f(0, h*height);
        glVertex3f(-0.5, height-0.5, 0.5);
        glTexCoord2f(w*width, h*height);
        glVertex3f(-0.5, height-0.5, -0.5);
        glTexCoord2f(w*width, 0);
        glVertex3f(width-0.5, height-0.5, -0.5);
        glTexCoord2f(0, 0);
        glVertex3f(width-0.5, height-0.5, 0.5);

        //BOTTOM BORDER
        glNormal3f(1, 0, 0);
        glTexCoord2f(0, h*height);
        glVertex3f(-0.5, -0.5, 0.5);
        glTexCoord2f(w*width, h*height);
        glVertex3f(width-0.5, -0.5, 0.5);
        glTexCoord2f(w*width, 0);
        glVertex3f(width-0.5, -0.5, -0.5);
        glTexCoord2f(0, 0);
        glVertex3f(-0.5, -0.5, -0.5);


    glEnd();

    for(int i=0; i<width; i++){
        for(int j=0; j<height; j++){
            float startX=i-0.5, endX=i+0.5, startY=j-0.5, endY=j+0.5;
            switch(lab[i][j]){
                case GRID_WALL:
                glBegin(GL_QUADS);
                    //FRONT QUAD
                    glNormal3f(0, 0, 1);
                    glTexCoord2f(0, h);
                    glVertex3f(startX, startY, 0.5);
                    glTexCoord2f(w, h);
                    glVertex3f(endX, startY, 0.5);
                    glTexCoord2f(w, 0);
                    glVertex3f(endX, endY, 0.5);
                    glTexCoord2f(0, 0);
                    glVertex3f(startX, endY, 0.5);

                    //TOP QUAD
                    glNormal3f(0, 1, 0);
                    glTexCoord2f(0, h);
                    glVertex3f(startX, endY, 0.5);
                    glTexCoord2f(w, h);
                    glVertex3f(endX, endY, 0.5);
                    glTexCoord2f(w, 0);
                    glVertex3f(endX, endY, -0.5);
                    glTexCoord2f(0, 0);
                    glVertex3f(startX, endY, -0.5);

                    //BOTTOM QUAD
                    glNormal3f(0, -1, 0);
                    glTexCoord2f(0, h);
                    glVertex3f(startX, startY, 0.5);
                    glTexCoord2f(w, h);
                    glVertex3f(startX, startY, -0.5);
                    glTexCoord2f(w, 0);
                    glVertex3f(endX, startY, -0.5);
                    glTexCoord2f(0, 0);
                    glVertex3f(endX, startY, 0.5);

                    //RIGHT QUAD
                    glNormal3f(1, 0, 0);
                    glTexCoord2f(0, h);
                    glVertex3f(endX, startY, 0.5);
                    glTexCoord2f(w, h);
                    glVertex3f(endX, startY, -0.5);
                    glTexCoord2f(w, 0);
                    glVertex3f(endX, endY, -0.5);
                    glTexCoord2f(0, 0);
                    glVertex3f(endX, endY, 0.5);

                    //LEFT QUAD
                    glNormal3f(-1, 0, 0);
                    glTexCoord2f(0, h);
                    glVertex3f(startX, startY, 0.5);
                    glTexCoord2f(w, h);
                    glVertex3f(startX, endY, 0.5);
                    glTexCoord2f(w, 0);
                    glVertex3f(startX, endY, -0.5);
                    glTexCoord2f(0, 0);
                    glVertex3f(startX, startY, -0.5);
                glEnd();
                break;

                case GRID_FOOD:
                foodMaterial.apply();
                drawFood(i, j);
                wallMaterial.apply();
                break;

            }

        }
    }
    wallTexture.disable();
}
Ejemplo n.º 11
0
void ram (void) {
	uint8_t key = BTN_RIGHT, button;
	lcdClear();
	while (1) {	
		switch (key) {
			case BTN_ENTER:
				// exit
				return;
			case BTN_RIGHT:
				if (direction != DIRECTION_LEFT)
					direction = DIRECTION_RIGHT;
			break;
			case BTN_UP:
				if (direction != DIRECTION_DOWN)
					direction = DIRECTION_UP;
			break;
			case BTN_LEFT:
				if (direction != DIRECTION_RIGHT)
					direction = DIRECTION_LEFT;
			break;
			case BTN_DOWN:
				if (direction != DIRECTION_UP)
					direction = DIRECTION_DOWN;
			break;
				//Default: No keystroke received. Assuming last keystroke.
		}
		point newendpoint = snake.endpoint;
		shiftPoint (&newendpoint, direction);
		bool resetBacon = false;
		if (newendpoint.x == bacon.x && newendpoint.y == bacon.y) {
			growBuf (&snake, direction);
			resetBacon = true;
		} else {
			setGamePixel(snake.startpoint.x, snake.startpoint.y, 0);
			shiftBuf (&snake, direction);
		}

		if (getGamePixel(snake.endpoint.x, snake.endpoint.y))
			break;
		setGamePixel(snake.endpoint.x, snake.endpoint.y, 1);

		while (resetBacon) {
			bacon.x = getRandom() % GAME_WIDTH;
			bacon.y = getRandom() % GAME_HEIGHT;
			if (!getGamePixel(bacon.x, bacon.y))
				resetBacon = false;
		}
		
		drawFood (bacon.x, bacon.y);
		lcdRefresh();
		key = BTN_NONE;
		
		for (i=0; i < ( TIME_PER_MOVE / 50 ); ++i) {
			delayms(50);
			if ((button = getInputRaw()) != BTN_NONE)
				key = button;
		}

	}
	
	// Game ended, show results
	lcdClear();
	lcdNl();
	lcdPrintln("Game Over");
	lcdPrintln("Your score:");
	lcdPrintInt(getLength(&snake) - INITIAL_LENGTH + 1);
	lcdNl();
	lcdPrintln("Press any key");
	lcdPrintln("to continue.");
	lcdRefresh();
	delayms(500);
	while(getInputRaw() == BTN_NONE)
		delayms(25);
}