Beispiel #1
0
void TestRollover(CuTest *tc) {
  START_KEY_CAPTURE;

  CuAssertIntEquals(tc, 0, active_layer);

  SHOULDNOT_SEND;
  key_press(5);//F or layer 1
  VERIFY_DIDNOT_SEND;
  CuAssertIntEquals(tc, 1, active_layer);

  key_press(6);//0 or 1 depending on layer
  EXPECT_SENT(3);
  CuAssertIntEquals(tc, 0, active_layer);//layer already reset

  key_release(5);
  CuAssertIntEquals(tc, 0, active_layer);

  key_release(6);
  EXPECT_SENT(4);

  VERIFY KEY(F);
  THEN   NOKEYS;
  THEN   KEY(0);
  THEN   NOKEYS;
}
Beispiel #2
0
void TestLayerLock(CuTest* tc)
{
  START_KEY_CAPTURE;

  SHOULDNOT_SEND;
  key_press(7);//toggle layer to 1
  CuAssertIntEquals(tc, 1, active_layer);
  key_release(7);
  CuAssertIntEquals(tc, 1, active_layer);
  VERIFY_DIDNOT_SEND;

  key_press(6);//0 or 1 depending on layer
  key_release(6);

  SHOULDNOT_SEND;
  key_press(7);//toggle layer to 0
  CuAssertIntEquals(tc, 0, active_layer);
  key_release(7);
  CuAssertIntEquals(tc, 0, active_layer);
  VERIFY_DIDNOT_SEND;

  key_press(6);//0 or 1 depending on layer
  key_release(6);

  VERIFY KEY(1);
  THEN   NOKEYS;

  THEN KEY(0);
  THEN   NOKEYS;
}
Beispiel #3
0
void TestLayerLockActsAsLayerShift(CuTest *tc) {
  START_KEY_CAPTURE;

  SHOULDNOT_SEND;
  key_press(7);//;layer 1
  CuAssertIntEquals(tc, 1, active_layer);
  VERIFY_DIDNOT_SEND;

  make_dualrole_modifier_possible();//pretend enough time has passed
  key_press(6);//0 or 1 depending on layer
  key_release(6);

  SHOULDNOT_SEND;
  key_release(7);
  CuAssertIntEquals(tc, 0, active_layer);
  VERIFY_DIDNOT_SEND;

  key_press(6);//0 or 1 depending on layer
  key_release(6);

  VERIFY KEY(1);
  THEN   NOKEYS;

  THEN KEY(0);
  THEN   NOKEYS;
}
Beispiel #4
0
	Input InputManager::get_input(){
		static bool exit = false;

		frame_text.resize(0);

		SDL_Event evnt;
		SDL_StartTextInput();

		//Will keep looping until there are no more events to process
		while (SDL_PollEvent(&evnt)) {
			switch (evnt.type) {
			case SDL_QUIT:
				return Input::EXIT_REQUEST;
				break;
			case SDL_MOUSEMOTION:

				set_mouse_coords((F32)evnt.motion.x, (F32)evnt.motion.y);

				break;
			case SDL_TEXTINPUT:
				frame_text += evnt.text.text;
				break;
			case SDL_KEYDOWN:
				key_press(evnt.key.keysym.sym , KEYBOARD);
				break;
			case SDL_KEYUP:
				key_release(evnt.key.keysym.sym , KEYBOARD);
				break;
			case SDL_MOUSEBUTTONDOWN:
				key_press(evnt.button.button , MOUSE);
				break;
			case SDL_MOUSEBUTTONUP:
				key_release(evnt.button.button , MOUSE);
				break;
			case SDL_JOYBUTTONDOWN:  /* Handle Joystick Button Presses */
				key_press(evnt.jbutton.button , CONTROLLER);
				break;
			case SDL_JOYBUTTONUP:  /* Handle Joystick Button Presses */
				key_release(evnt.jbutton.button , CONTROLLER);
				break;
			case SDL_JOYAXISMOTION:
				
				switch (evnt.jaxis.axis){
				case 0: set_controller_axis_coord(&m_controller_LX_coords.x, evnt.jaxis.value); break;
				case 1: set_controller_axis_coord(&m_controller_LX_coords.y, evnt.jaxis.value); break;
				case 2: set_controller_axis_coord(&m_controller_RX_coords.x, evnt.jaxis.value); break;
				case 3: set_controller_axis_coord(&m_controller_RX_coords.y, evnt.jaxis.value); break;
				}
				
					
			}
		}

		SDL_StopTextInput();

		if (is_key_pressed(SDLK_ESCAPE,KEYBOARD))exit = !exit;
		if(!exit)SDL_WarpMouseInWindow(m_window, WINDOW_WIDTH / 2.0f, WINDOW_HEIGHT / 2.0f);

		return Input::OK;
	}
Beispiel #5
0
void TestComplicated(CuTest *tc) {
  START_KEY_CAPTURE;

  SHOULDNOT_SEND;
  key_press(5);//F or layer 1
  VERIFY_DIDNOT_SEND;
  CuAssertIntEquals(tc, 1, active_layer);
  make_dualrole_modifier_possible();//pretend enough time has passed

  key_press(0);//LSFT of LBRACKET
  key_release(0);

  CuAssertIntEquals(tc, 1, active_layer);

  SHOULDNOT_SEND;
  key_release(5);
  VERIFY_DIDNOT_SEND;

  CuAssertIntEquals(tc, 0, active_layer);

  EXPECT_SENT(4);
  VERIFY NOKEYS WITH(LSFT);
  THEN NOKEYS NOMODS;
  THEN KEY(LBRACKET);
  THEN NOKEYS;
}
Beispiel #6
0
int main(void) {
  init();
  self_test();
  restore_state();
  while(1) {
    key_press(&key1_lock, &PINA, KEY1, minus);
    key_press(&key2_lock, &PINB, KEY2, plus);
    render_leds();
  };
};
Beispiel #7
0
void TestModifierTapRelease(CuTest *tc) {
  START_KEY_CAPTURE;

  key_press(4);//lshift or z
  make_dualrole_modifier_possible();//pretend enough time has passed
  key_press(0);
  key_release(4);
  key_release(0);

  VERIFY NOKEYS WITH(LSFT);
  THEN   KEY(A) WITH(LSFT);
  THEN   KEY(A) NOMODS;
  THEN   NOKEYS NOMODS;
}
int main(void) {
  uint8_t row, col, key_id;

  init();

  for(;;) {
    _delay_ms(5);                                //  Debouncing
    for(col=0; col<NCOL; col++) {
      *col_port[col] &= ~col_bit[col];
      _delay_us(1);
      for(row=0; row<NROW; row++) {
	key_id = col*NROW+row;
	if(!(*row_port[row] & row_bit[row])) {
	  if(!pressed[key_id])
	    key_press(key_id);
	}
	else if(pressed[key_id])
	  key_release(key_id);
      }
      *col_port[col] |= col_bit[col];
    }

    //    OCR1B++; OCR1C++;

    // TODO fixed keyboard leds.  I disabled as I cannot test them
    //PORTB = (PORTB & 0b00111111) | ((keyboard_leds << 5) & 0b11000000);
    //DDRB  = (DDRB  & 0b00111111) | ((keyboard_leds << 5) & 0b11000000);

  }
}
Beispiel #9
0
int main( int argc, char** argv )
{
  kvs::glut::Application app( argc, argv );
  kvs::glut::Screen screen( &app );
  screen.show();
  //Image読み込み
  ReadBDML::BDMLData bdml(argv[1]);
  ReadIPLab::IPLabList ipl_list;
  ipl_list.read( argv[2] );
  int tindex =30; //time指定
  ReadIPLab::IPLab ipl = ipl_list.load( tindex );
  int sindex =30; //z指定
      
  kvs::ImageObject* image = GetImageObject( ipl, sindex );
  kvs::ImageObject* object = GetImageObjectWithEdge( image, bdml, sindex, tindex );
  
  delete image;
  screen.registerObject( object );

  // キーボード処理イベントを定義しスクリーンに登録する。【追加】
  KeyPress key_press( ipl_list, ipl, bdml, tindex, sindex );
  screen.addEvent( &key_press );

  kvs::glut::Label label( &screen );
  label.setTextColor( kvs::RGBColor::White() );
  label.show();
  PaintEvent paint_event( label, bdml, tindex, sindex );

  screen.addEvent( &paint_event );

  
  //screen.show();
  return app.run();
}
Beispiel #10
0
void TestKey(CuTest* tc)
{
  START_KEY_CAPTURE;

  key_press(0);//A
  key_release(0);

  key_press(0);//A
  key_release(0);

  EXPECT_SENT(4);
  VERIFY KEY(A);
  THEN   NOKEYS;
  THEN   KEY(A);
  THEN   NOKEYS;
}
Beispiel #11
0
int		key_press_hook(int keycode, t_env *e)
{
	key_press(&e->key, keycode);
	if (keycode == KEY_ESC)
		exit(EXIT_SUCCESS);
	if (keycode == KEY_SPACEBAR)
		e->hud[0].c++;
	return (0);
}
Beispiel #12
0
void HistoryComboBox::focusOutEvent(QFocusEvent *e)
{
    QKeyEvent key_press(QKeyEvent::KeyPress, Qt::Key_Return, Qt::NoModifier, QString(), false, 0 );
    QApplication::sendEvent(this, &key_press);

    QKeyEvent key_release(QKeyEvent::KeyRelease, Qt::Key_Return, Qt::NoModifier, QString(), false, 0 );
    QApplication::sendEvent(this, &key_release);

    QComboBox::focusOutEvent(e);
}
Beispiel #13
0
/** Process gui events and deliver them as required. 
 \todo This should probably limit how frequently it calls draw 
 render thread
 */
void sdl_master::process_events()
{
	bool done = false;
	
	SDL_MouseMotionEvent mouse_position;
	mouse_position.state = 0;
	mouse_position.x = 0;
	mouse_position.y = 0;
	
	add_draw_timer(50);	//20 fps
	
	SDL_Event event;
	while(!done)
	{
		if (SDL_WaitEvent(&event))
		{ //wait on an event
			switch(event.type)
			{ //Check event type
				case SDL_USEREVENT:
					switch (event.user.code)
					{
						case 0:
							draw();
							break;
						default:
							break;
					}
					break;
				case SDL_MOUSEMOTION:
					mouse_move(&mouse_position, &event.motion);
					mouse_position = event.motion;
					break;
				case SDL_MOUSEBUTTONDOWN:
				case SDL_MOUSEBUTTONUP:
					mouse_click(&event.button);
					break;
				case SDL_KEYDOWN:
				case SDL_KEYUP:
					key_press(&event.key);
					break;
				case SDL_QUIT:
					quit_request();
					break;
				case SDL_VIDEORESIZE: //User resized window
					display = SDL_SetVideoMode(event.resize.w, event.resize.h, 16,
						SDL_HWSURFACE | SDL_DOUBLEBUF); // Create new window
					break;
			}
		}
		done = check_users(done);
	}
//	int status;
//	if (game_client[0] != 0)
//		SDL_WaitThread(game_client[0], &status);
}
Beispiel #14
0
 any_event make_key_press_event(QObject*, QEvent* event)
 {
   if (event->type() == QEvent::KeyPress)
   {
     QKeyEvent* e = (QKeyEvent*) event;
     // if (e->isAutoRepeat() && !auto_repeat_)
     //   return any_event();
     return key_press(qt_key_to_dige_key(e->key()), e->isAutoRepeat());
   }
   return any_event();
 }
Beispiel #15
0
void TestCancel(CuTest *tc) {
  START_KEY_CAPTURE;

  SHOULDNOT_SEND;
  key_press(5);//F or layer 1
  VERIFY_DIDNOT_SEND;
  make_dualrole_tap_impossible();//pretend too much time has passed

  SHOULDNOT_SEND;
  key_release(5);
  VERIFY_DIDNOT_SEND;
}
Beispiel #16
0
void TestModifierOrKeyCanMod(CuTest *tc) {
  START_KEY_CAPTURE;

  key_press(4);//shift or Z
  make_dualrole_modifier_possible();//pretend enough time has passed
  key_press(0);//A
  key_release(0);
  key_release(4);

  key_press(0);//A
  key_release(0);

  EXPECT_SENT(6);
  VERIFY NOKEYS WITH(LSFT);
  THEN   KEY(A) WITH(LSFT);
  THEN   NOKEYS WITH(LSFT);
  THEN   NOKEYS NOMODS;

  THEN   KEY(A) NOMODS;
  THEN   NOKEYS NOMODS;
}
Beispiel #17
0
void TestKeyModded(CuTest* tc)
{
  START_KEY_CAPTURE;

  key_press(3);//sD
  key_release(3);

  EXPECT_SENT(3);
  VERIFY NOKEYS WITH(LSFT);
  THEN KEY(D) WITH(LSFT);
  THEN NOKEYS;
}
Beispiel #18
0
void TestLayerShiftOrKeyCanTap(CuTest *tc) {
  START_KEY_CAPTURE;

  SHOULDNOT_SEND;
  key_press(5);//F or layer 1
  CuAssertIntEquals(tc, 1, active_layer);
  VERIFY_DIDNOT_SEND;

  key_release(5);
  CuAssertIntEquals(tc, 0, active_layer);

  key_press(0);
  key_release(0);
  CuAssertIntEquals(tc, 0, active_layer);

  VERIFY KEY(F);
  THEN   NOKEYS;

  THEN KEY(A);
  THEN   NOKEYS;
}
Beispiel #19
0
void TestModifierOrKeyCanTap(CuTest *tc) {
  START_KEY_CAPTURE;

  key_press(4);//shift or Z
  key_release(4);


  EXPECT_SENT(4);
  VERIFY NOKEYS WITH(LSFT);
  THEN   NOKEYS NOMODS;
  THEN   KEY(Z) NOMODS;
  THEN   NOKEYS NOMODS;
}
Beispiel #20
0
void TestModifierTapModded(CuTest *tc) {
  START_KEY_CAPTURE;

  key_press(2);//rshift or )
  key_release(2);

  EXPECT_SENT(5);
  VERIFY NOKEYS WITH(RSFT);
  THEN   NOKEYS NOMODS;
  THEN   NOKEYS WITH(LSFT);
  THEN   KEY(9) WITH(LSFT);
  THEN   NOKEYS NOMODS;
}
Beispiel #21
0
void TestSpaceFn(CuTest *tc) {
  START_KEY_CAPTURE;

  key_press(3);
  key_release(3);

  SHOULDNOT_SEND;
  key_press(16*8+6);//SPACE
  CuAssertIntEquals(tc, 1, active_layer);
  VERIFY_DIDNOT_SEND;

  key_release(16*8+6);//SPACE
  CuAssertIntEquals(tc, 0, active_layer);

  SHOULDNOT_SEND;
  key_press(16*8+6);//SPACE
  CuAssertIntEquals(tc, 1, active_layer);
  VERIFY_DIDNOT_SEND;

  make_dualrole_modifier_possible();//pretend enough time has passed

  key_press(11*8+3);//K or down
  key_release(11*8+3);

  SHOULDNOT_SEND;
  key_release(16*8+6);//SPACE
  CuAssertIntEquals(tc, 0, active_layer);
  VERIFY_DIDNOT_SEND;

  VERIFY NOKEYS WITH(RGUI);
  THEN   NOKEYS NOMODS;
  THEN   KEY(SPACE) NOMODS;
  THEN   NOKEYS NOMODS;

  THEN   KEY(DOWN);
  THEN   NOKEYS;
}
Beispiel #22
0
void TestModModded(CuTest* tc)
{
  START_KEY_CAPTURE;

  SHOULDNOT_SEND;
  key_press(7);//toggle layer to 1
  CuAssertIntEquals(tc, 1, active_layer);
  key_release(7);
  CuAssertIntEquals(tc, 1, active_layer);
  VERIFY_DIDNOT_SEND;

  key_press(2);//sLALT
  key_release(2);//sLALT

  SHOULDNOT_SEND;
  key_press(7);//toggle layer to 0
  CuAssertIntEquals(tc, 0, active_layer);
  key_release(7);
  CuAssertIntEquals(tc, 0, active_layer);
  VERIFY_DIDNOT_SEND;

  VERIFY NOKEYS WITH(LSFT|LALT);
  THEN NOKEYS;
}
Beispiel #23
0
void scan() {
  for (ic = 0; ic < COLS_COUNT; ic += 1) {
    digitalWrite(cols_pins[ic], HIGH);

    for (ir = 0; ir < ROWS_COUNT; ir += 1) {
      if (!keymap[ir][ic])
        continue;

      if (digitalRead(rows_pins[ir]))
        key_press(keymap[ir][ic]);
      else
        key_release(keymap[ir][ic]);
    }

    digitalWrite(cols_pins[ic], LOW);
  }
}
Beispiel #24
0
void replay_keypresses(void)
{
  uint8_t i, k;

  clear_pressed();

  // Go through all keys in the replay buf. We can determine whether
  // a command is a key press or release based on whether the key
  // is already pressed.
  for (i = 0; i < replay_buf_len; ++i) {
    k = replay_buf[i];
    if (!key[k].pressed) {
      key_press(k);
    } else {
      key_release(k);
    }
  }
}
Beispiel #25
0
int main()
{
	init_led();
	init_beep();
	init_key();

	led_off_all();
	int i;

	while(1)
	{
		if(i= key_press()){
			led_on(i);
			beep_on();
		}else{
			led_off_all();
			beep_off();
		}
	}
	 return 0;
}
Beispiel #26
0
int				ft_key_press(int keycode, t_frac *frac)
{
	if (keycode == E || keycode == Q || keycode == W || keycode == R)
		key_press(keycode, frac);
	if (keycode == SPACE)
		switch_color(frac);
	if (keycode == PLUS)
		it_pp(frac);
	if (keycode == MOIN)
		it_mm(frac);
	if (keycode == ESC)
		exit(0);
	if (keycode == FORWARD)
		forward(frac);
	if (keycode == BACKWARD)
		backward(frac);
	if (keycode == LEFT)
		left(frac);
	if (keycode == RIGHT)
		right(frac);
	draw_tt(&frac->img, frac);
	return (0);
}
Beispiel #27
0
void poll() {
	uint8_t row, col, key_id;
	for (row=0; row<ROWS; row++) { // scan rows
		*row_port[row] &= ~row_bit[row];
		_delay_us(1);
		for (col=0; col<COLS; col++) { // read columns
			key_id = col*ROWS+row;
			if (! (*col_pin[col] & col_bit[col])) { // press key
				if (! pressed[key_id]) {
					key_press(key_id);
				}
			} else if (pressed[key_id]) { // release key
				key_release(key_id);
			}
		}
		*row_port[row] |= row_bit[row];
	}
	if (caps_lock_led != (keyboard_leds & LED_CAPS_LOCK)) { // change layout
		caps_lock_change_layer();
	}
	//if (keyboard_leds) LED_ON; else LED_OFF;
	repeat_tick();
	_delay_ms(5);
}
Beispiel #28
0
int		input(t_display *display, t_map *map)
{
  SDL_Event	event;

  while (SDL_PollEvent(&event))
    {
      switch (event.type)
	{
	case SDL_QUIT:
	  g_keep_running = false;
	  break;
	case SDL_MOUSEBUTTONDOWN:
	  display->_click_x = display->_horiz + (size_t)event.button.x
	    / (display->_shape_size + 1);
	  display->_click_y = display->_verti + (size_t)event.button.y
	    / (display->_shape_size2 + 1);
	  break;
	case SDL_KEYDOWN:
	  key_press(&event, map, display);
	  break;
	}
    }
  return (0);
}
Beispiel #29
0
void menu::handle_event(const SDL_Event& event)
{
	scrollarea::handle_event(event);
	if (height()==0 || hidden())
		return;

	if(event.type == SDL_KEYDOWN) {
		// Only pass key events if we have the focus
		if (focus(&event))
			key_press(event.key.keysym.sym);
	} else if(!mouse_locked() && ((event.type == SDL_MOUSEBUTTONDOWN &&
	         (event.button.button == SDL_BUTTON_LEFT || event.button.button == SDL_BUTTON_RIGHT)) ||
	         event.type == DOUBLE_CLICK_EVENT)) {

		int x = 0;
		int y = 0;
		if(event.type == SDL_MOUSEBUTTONDOWN) {
			x = event.button.x;
			y = event.button.y;
		} else {
			x = reinterpret_cast<long>(event.user.data1);
			y = reinterpret_cast<long>(event.user.data2);
		}

		const int item = hit(x,y);
		if(item != -1) {
			set_focus(true);
			move_selection_to(item);

			if(click_selects_) {
				show_result_ = true;
			}

			if(event.type == DOUBLE_CLICK_EVENT) {
				if (ignore_next_doubleclick_) {
					ignore_next_doubleclick_ = false;
				} else {
					double_clicked_ = true;
					last_was_doubleclick_ = true;
					if(!silent_) {
						sound::play_UI_sound(game_config::sounds::button_press);
					}
				}
			} else if (last_was_doubleclick_) {
				// If we have a double click as the next event, it means
				// this double click was generated from a click that
				// already has helped in generating a double click.
				SDL_Event ev;
				SDL_PeepEvents(&ev, 1, SDL_PEEKEVENT,
							   SDL_EVENTMASK(DOUBLE_CLICK_EVENT));
				if (ev.type == DOUBLE_CLICK_EVENT) {
					ignore_next_doubleclick_ = true;
				}
				last_was_doubleclick_ = false;
			}
		}


		if(sorter_ != NULL) {
			const int heading = hit_heading(x,y);
			if(heading >= 0 && sorter_->column_sortable(heading)) {
				sort_by(heading);
			}
		}
	} else if(!mouse_locked() && event.type == SDL_MOUSEMOTION) {
		if(click_selects_) {
			const int item = hit(event.motion.x,event.motion.y);
			const bool out = (item == -1);
			if (out_ != out) {
					out_ = out;
					invalidate_row_pos(selected_);
			}
			if (item != -1) {
				move_selection_to(item);
			}
		}

		const int heading_item = hit_heading(event.motion.x,event.motion.y);
		if(heading_item != highlight_heading_) {
			highlight_heading_ = heading_item;
			invalidate_heading();
		}
	}
}
Beispiel #30
0
// ================================ START Menu ================================
int GUI::play( )
{
	Table t;	// choi tren Table nay
	srand(time(NULL)); //Sinh so ngau nhien

	double timeDelay = 1000 - level * 100 ;	//thoi gian de roi
	double tempTimeDelay = timeDelay;
	int IDBrick, IDNextBrick; //So thu tu cua gach
	score = 0; //Diem ban dau
	lines = 0; //So hang da an duoc ban dau
	
	system( "cls" );
	
	//Tao 2 khoi gach dau tien
	IDBrick = createIDBrick(); 
	IDNextBrick = createIDBrick();
	
	//In ra background, level, line va score ban dau
	printBackground( );
	gotoxy( 12, 4 );
	std::cout << level;
	gotoxy( 12, 6 );
	std::cout <<  score;
	gotoxy( 12, 8 );
	std::cout << lines;

	do
	{	
		t.create( IDBrick );	//tao khoi moi

		while ( t.checkEmpty( -1, 0 ) )
		{
			//In ra vien gach tiep theo va mau cua no
			setTextColor( IDNextBrick + 7 );
			t.printNextBrick( IDNextBrick );
		
			Sleep( ( tempTimeDelay ) );
			int count = 5; //So lan xoay toi da trong timeDelay

			while (--count  && kbhit() ) 				//doi phim an	
	        {
	        	KEY = key_press( );
	        	if ( KEY == KEY_LEFT ) 			// dich trai neu nhap phim trai
	        		t.moveLeft( );
	        	else if ( KEY == KEY_RIGHT ) 		// dich phai neu nhap phim phai
	        		t.moveRight( );
	        	else if ( KEY == KEY_DOWN ) 		// roi luon neu nhap phim xuong
	        		tempTimeDelay /= 10;
	        	else if ( KEY == KEY_UP ) 		// xoay neu nhap phim len
	        		t.rotate( );
	        	else if ( KEY == PAUSE || KEY == ESCAPE )		// tam dung pause
	        		while ( 1 ) //man hinh pause 
	        		{
	        			system( "cls" );	//xoa man hinh, chong gian lan

	        			//In ra tuy chon o man hinh pause
    					setTextColor( COLOR );
	        			gotoxy( 20, 9 );
	        			std::cout << "                   _____PAUSE_____                 ";
	        			gotoxy( 20, 12 );
	        			std::cout << "                       RESUME                      ";
	        			gotoxy( 20, 14 );
	        			std::cout << "                       RESTART                     ";
	        			gotoxy( 20, 16 );
	        			std::cout << "                      MAIN MENU                    ";
	
	        			int chosenMenu = cursor( 12, 16, 1 );
					
						//Thuc hien lenh tuy theo toa do con tro tuy chon
						if(chosenMenu == 1 ) //tiep tuc
						{
							//In ra nen game, level, lines va score hien tai va tiep tuc game
							printBackground( );
							gotoxy( 12, 4 );
							std::cout << level;
							gotoxy( 12, 6 );
							std::cout << score;
							gotoxy( 12, 8 );
							std::cout << lines;
							break;
						}
						else if(chosenMenu == 2 && confirm("RESTART") ) //choi lai ( can  xac nhan )
							return play( );
						else if(chosenMenu == 3 && confirm("BACK TO MAIN MENU") ) //quay ve
							return -1;
							//return restart( );
        		}	        		
	    	}
	    
			t.moveDown( );		// dich xuong
			
	   	}
	   	t.setBrickNum( IDBrick + 7 );
	   	t.getFullRows( );	//Lay diem

	   	//Tinh diem hien tai
	   	score = score + level +  level * level * t.getDeletedLines() * t.getDeletedLines();
	   	lines += t.getDeletedLines();

	   	//In ra level, lines va score hien tai
	   	setTextColor ( COLOR ); 
	   	gotoxy( 12, 4 );
		std::cout << level;
	   	gotoxy( 12, 6 );
		std::cout << score;
		gotoxy( 12, 8 );
		std::cout << lines;

	   	IDBrick = IDNextBrick; //Gan khoi cu thanh khoi moi
		IDNextBrick = createIDBrick(); //Tao khoi gach tiep theo

		tempTimeDelay = timeDelay *= 0.99;
		level = ( 1000 - timeDelay ) / 100;
	} while ( t.checkGameOver() == 0 );

	return score;	//lay diem 
}