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]); } }
//-------------------------------------------------------------- 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); } } } } }
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(); }
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"); } }
int main() { setupGame(); addLength(); addLength(); drawBoard(); drawFood(); Game(); getchar(); }
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; } } } }
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 ); } } }
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); } } } } }
//主函数 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; }
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(); }
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); }