Example #1
0
// handle keyboard
void HandleKeyPress(unsigned char key, int x, int y){
  switch(key){
  case 27:
    exit(1);
  }
  // Control keys
  if(loseFlag==FALSE){
    switch(key){
    case 's':
      tetrisFigure.Translate(0,-1);
      glutPostRedisplay();
      break;
    case 'a':
      tetrisFigure.Translate(-1,0);
      glutPostRedisplay();
      break;
    case 'd':
      tetrisFigure.Translate(1,0);
      glutPostRedisplay();
      break;
    case 'w':
      tetrisFigure.Rotate(LEFT);
      glutPostRedisplay();
      break;
    case 'e':
      tetrisFigure.Translate(0,1);
      glutPostRedisplay();
      break;
    default:
      break;
    }
  }
  else{
    switch(key){
    case 'n':
      tetrisGame.New();
      loseFlag=FALSE;
      glutPostRedisplay();
      break;
    default:
      break;
    }
  }
}
Example #2
0
// update function
void Update(int value){
  if(loseFlag==FALSE){
    newFigureFlag=tetrisFigure.Translate(0, -1);
    if(!newFigureFlag){
      tetrisGame.Update(tetrisFigure);
      tetrisFigure.New(rand()%NUM_FIGURE);
    }
  }
  glutPostRedisplay(); // Refresh Display
  glutTimerFunc(100, Update, 0);
}
Example #3
0
// 键盘输入处理函数
// 第一个参数是按键的ASCII码, 
// 剩下的是按键时候的鼠标坐标. 鼠标坐标是相对窗口的左上角的
void HandleKeyPress(unsigned char key, int x, int y) {

    // 控制按键,如果游戏还没有失败则支持:
    // a:形状向左移动
    // s:形状向下移动
    // d:形状向右移动
    // w:向左旋转90度
    if(tetrisGame.GetStatus()){
        switch(key){
            case 'a':
                tetrisFigure.Translate(-1,0);
                glutPostRedisplay();
                break;
            case 's':
                tetrisFigure.Translate(0,-1);
                glutPostRedisplay();
                break;
            case 'd':
                tetrisFigure.Translate(1,0);
                glutPostRedisplay();
                break;
            case 'w':
                tetrisFigure.Rotate();
                glutPostRedisplay();
                break;
            default:
                break;
        }
    } else {
        // 如果游戏已经失败,支持:
        // n:开始新的游戏
        switch(key){
            case 'n':
                tetrisGame.New();
                glutPostRedisplay();
                break;
            default:
            break;
        }
    }
}
Example #4
0
// 更新函数
void Update(int value){
    
    // 如果游戏没有结束
    if(tetrisGame.GetStatus()){
        
        // 向下移动形状
        int moveSuccess = tetrisFigure.Translate(0, -1);

        // 如果移动失败表示当前形状已经无法继续下移
        // 更新游戏状态并创建新的形状
        if(!moveSuccess){
            tetrisGame.Update(tetrisFigure);
            tetrisFigure.New(rand()%NUM_FIGURE);
        }
    }
    
    // 刷新显示
    glutPostRedisplay();

    // 设置每0.5秒刷新一次
    glutTimerFunc(500, Update, 0);
}