void drawGame( ) { cleanFrameBuffer( ); drawSnake(snake); drawFruit(fruit); drawFrameBuffer( ); }
///////////////////////主函数 int main() { initSnake(); info(); drawSnake(); level(); doGame(); gameOver(); return 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(); }
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(); }
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; }
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); }
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; }
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; }
//主函数 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 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); }
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); } }