예제 #1
0
static void _TetrisManager_HighlightLinesToDelete(TetrisManager* tetrisManager, int* indexes, int count){
	int i;
	int j;
	int k;
	for (i = 0; i < LINES_TO_DELETE_HIGHTING_COUNT; i++){
		FontUtil_ChangeFontColor(JADE);
		Sleep(LINES_TO_DELETE_HIGHTING_MILLISECOND);
		for (j = 0; j < count; j++){

			WaitForSingleObject(((TetrisManager*)tetrisManager)->mutex,INFINITE);		// LOCK °É±â
			CursorUtil_GotoXY(2, indexes[j]);
			for (k = 0; k < BOARD_COL_SIZE - 2; k++){
				printf("¢Ê");
			}
			ReleaseMutex(((TetrisManager*)tetrisManager)->mutex);						// LOCK ÇØÁ¦
		}
		FontUtil_ChangeFontColor(DEFAULT_FONT_COLOR);
		Sleep(LINES_TO_DELETE_HIGHTING_MILLISECOND);
		for (j = 0; j < count; j++){

			WaitForSingleObject(((TetrisManager*)tetrisManager)->mutex,INFINITE);		// LOCK °É±â
			CursorUtil_GotoXY(2, indexes[j]);
			for (k = 0; k < BOARD_COL_SIZE - 2; k++){
				printf("  ");
			}
			ReleaseMutex(((TetrisManager*)tetrisManager)->mutex);						// LOCK ÇØÁ¦
		}
	}
}
예제 #2
0
void CheckBox_Print(CheckBox* checkBox, int color){
	int i;
	int j;
	Point startPositionToPrint = checkBox->startPositionToPrint;
	checkBox->width = checkBox->width % 2 == 1 ? checkBox->width + 1 : checkBox->width;
	CursorUtil_GotoXY(startPositionToPrint.x, startPositionToPrint.y++);
	FontUtil_ChangeFontColor(WHITE);
	printf("¦®¦¬¦¯");
	CursorUtil_GotoXY(startPositionToPrint.x, startPositionToPrint.y++);
	printf("¦­%s¦­", checkBox->isChecked ? "¡î" : "  ");
	CursorUtil_GotoXY(startPositionToPrint.x, startPositionToPrint.y++);
	printf("¦±¦¬¦°");
	startPositionToPrint.x += 7;
	startPositionToPrint.y -= 3;
	CursorUtil_GotoXY(startPositionToPrint.x, startPositionToPrint.y++);
	for (i = 0; i < checkBox->height; i++){
		CursorUtil_GotoXY(startPositionToPrint.x, startPositionToPrint.y++);
		FontUtil_ChangeFontColor(WHITE);
		FontUtil_ChangeFontColor(color);
		printf("%s", TextItem_GetText(&checkBox->text));
		for (j = 0; j < checkBox->width - TextItem_GetTotalByte(checkBox->text); j++){
			printf(" ");
		}
		FontUtil_ChangeFontColor(WHITE);
	}
}
void TextButton_Print(TextButton* textButton, int color){
	int i;
	int j;
	Point startPositionToPrint = textButton->startPositionToPrint;
	textButton->width = textButton->width % 2 == 1 ? textButton->width + 1 : textButton->width;
	CursorUtil_GotoXY(startPositionToPrint.x, startPositionToPrint.y++);
	FontUtil_ChangeFontColor(WHITE);
	printf("¦®");
	for (i = 0; i < textButton->width / 2; i++){
		printf("¦¬");
	}
	printf("¦¯");
	for (i = 0; i < textButton->height; i++){
		CursorUtil_GotoXY(startPositionToPrint.x, startPositionToPrint.y++);
		FontUtil_ChangeFontColor(WHITE);
		printf("¦­");
		FontUtil_ChangeFontColor(color);
		printf("%s", TextItem_GetText(&textButton->text));
		for (j = 0; j < textButton->width - TextItem_GetTotalByte(textButton->text); j++){
			printf(" ");
		}
		FontUtil_ChangeFontColor(WHITE);
		printf("¦­");
	}
	CursorUtil_GotoXY(startPositionToPrint.x, startPositionToPrint.y++);
	printf("¦±");
	for (i = 0; i < textButton->width / 2; i++){
		printf("¦¬");
	}
	printf("¦°");
}
예제 #4
0
static void _TetrisManager_PrintKeys(TetrisManager* tetrisManager, int x, int y){
	WaitForSingleObject(((TetrisManager*)tetrisManager)->mutex,INFINITE);		// LOCK °É±â

	ScreenUtil_ClearRectangle(x, y, 26, 9); // use temp size (magic number)
	CursorUtil_GotoXY(x, y++);
	printf("¦®¦¬¦¬¦¬¦¬ Keys ¦¬¦¬¦¬¦¬¦¯");
	CursorUtil_GotoXY(x, y++);
	printf("¦­¡ç       ¦­move left  ¦­");
	CursorUtil_GotoXY(x, y++);
	printf("¦­¡æ       ¦­move right ¦­");
	CursorUtil_GotoXY(x, y++);
	printf("¦­¡é       ¦­move down  ¦­");
	CursorUtil_GotoXY(x, y++);
	printf("¦­¡è       ¦­rotate     ¦­");
	CursorUtil_GotoXY(x, y++);
	printf("¦­SpaceBar ¦­direct down¦­");
	CursorUtil_GotoXY(x, y++);
	printf("¦­ESC      ¦­pause      ¦­");
	CursorUtil_GotoXY(x, y++);
	printf("¦­L (l)    ¦­hold       ¦­");
	CursorUtil_GotoXY(x, y++);
	printf("¦±¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦°");

	ReleaseMutex(((TetrisManager*)tetrisManager)->mutex);						// LOCK ÇØÁ¦
}
예제 #5
0
//// ¾È°³ ¾ÆÀÌÅÛ ÇÔ¼ö Á¤ÀÇ
void splash(TetrisManager* tetrisManager, int blockType, int isSplash)
{
	int i, j;

	////ÇöÀç splash(¾È°³ ¾ÆÀÌÅÛ) ÀÛµ¿ ½Ã '¢Æ'(¾È°³) Ç¥½Ã
	if (isSplash == 1)
	{
		if (tetrisManager->isSplashMode == 1)
		{
			WaitForSingleObject(((TetrisManager*)tetrisManager)->mutex, INFINITE);		// LOCK °É±â
			for (i = 1; i < BOARD_ROW_SIZE - 1; i++) {
				for (j = 1; j < BOARD_COL_SIZE - 1; j++) {
					if (tetrisManager->board[i][j] == FIXED_BLOCK) //// fixed blockÀ» ±âÁØÀ¸·Î °¡·Î,¼¼·Î ±æÀÌ Å½»ö
					{
						
						for (j = 1; j < BOARD_COL_SIZE - 1; j++) {
							CursorUtil_GotoXY(2 * j, i);;
							printf("¢Æ"); //// Ž»öÇÑ ±æÀÌ ¸¸Å­ Ãâ·Â 
						}
						
					}
				}
			}
			ReleaseMutex(((TetrisManager*)tetrisManager)->mutex);						// LOCK ÇØÁ¦
		}
	}
	////splash°¡ ³¡³µÀ» ¶§ ¿ø»óº¹±¸
	else
	{
		if (tetrisManager->isSplashMode == 0)
		{
			for (i = 1; i < BOARD_ROW_SIZE - 1; i++) {
				for (j = 1; j < BOARD_COL_SIZE - 1; j++) {
					if (tetrisManager->board[i][j] == FIXED_BLOCK) //// fixed blockÀ» ±âÁØÀ¸·Î °¡·Î,¼¼·Î ±æÀÌ Å½»ö
					{
						WaitForSingleObject(((TetrisManager*)tetrisManager)->mutex, INFINITE);		// LOCK °É±â
						CursorUtil_GotoXY(2 * j, i);;
						printf("¢Ì"); //// Ž»öÇÑ ±æÀÌ ¸¸Å­ Ãâ·Â
						ReleaseMutex(((TetrisManager*)tetrisManager)->mutex);						// LOCK ÇØÁ¦
					}
					else if (tetrisManager->board[i][j] == EMPTY) //// ºó °ø°£À» ±âÁØÀ¸·Î °¡·Î,¼¼·Î ±æÀÌ Å½»ö
					{
						WaitForSingleObject(((TetrisManager*)tetrisManager)->mutex, INFINITE);		// LOCK °É±â
						CursorUtil_GotoXY(2 * j, i);;
						printf("  "); //// Ž»öÇÑ ±æÀÌ ¸¸Å­ Ãâ·Â
						ReleaseMutex(((TetrisManager*)tetrisManager)->mutex);						// LOCK ÇØÁ¦
					}
				}
			}
			tetrisManager->isSplashMode = 1;
		}
	}
}
예제 #6
0
static void _TetrisManager_PrintItemInventory(TetrisManager* tetrisManager, int list, int index, int x, int y){ //ÇϳªÀÇ ±âº» Àκ¥Å丮
	WaitForSingleObject(((TetrisManager*)tetrisManager)->mutex, INFINITE);		// LOCK °É±â

	ScreenUtil_ClearRectangle(x, y, 9, 9); //¾ÆÀÌÅÛ Àκ¥Å丮 »ý¼º
	CursorUtil_GotoXY(x, y++);
	printf("¦® 0%d ¦¯", list);
	CursorUtil_GotoXY(x, y++);
	printf("¦­ %c%c%c¦­", itemList[index][0], itemList[index][1], itemList[index][2]);
	CursorUtil_GotoXY(x, y++);
	printf("¦±¦¬¦¬¦°");
	ReleaseMutex(((TetrisManager*)tetrisManager)->mutex);						// LOCK ÇØÁ¦


}
예제 #7
0
static void _TetrisManager_PrintStatus(TetrisManager* tetrisManager, int x, int y){
	WaitForSingleObject(((TetrisManager*)tetrisManager)->mutex,INFINITE);		// LOCK °É±â

	ScreenUtil_ClearRectangle(x + 2, y + 1, 4, 1); // use temp size (magic number)
	ScreenUtil_ClearRectangle(x + 13, y + 1, 6, 1); // use temp size (magic number)
	ScreenUtil_ClearRectangle(x + 26, y + 1, 12, 1); // use temp size (magic number)
	CursorUtil_GotoXY(x, y++);
	printf("¦® Lv ¦¯   ¦® Line ¦¯   ¦® TotalScore ¦¯");
	CursorUtil_GotoXY(x, y++);
	printf("¦­%3d ¦­   ¦­%4d  ¦­   ¦­%7d     ¦­", tetrisManager->speedLevel, tetrisManager->deletedLineCount, tetrisManager->score);
	CursorUtil_GotoXY(x, y++);
	printf("¦±¦¬¦¬¦°   ¦±¦¬¦¬¦¬¦°   ¦±¦¬¦¬¦¬¦¬¦¬¦¬¦°");

	ReleaseMutex(((TetrisManager*)tetrisManager)->mutex);						// LOCK ÇØÁ¦
}
예제 #8
0
void TetrisManager_PrintChangeNextCount(TetrisManager tetrisManager){
	// use temp size (magic number)
	int x = 38;
	int y = 20;

	WaitForSingleObject(tetrisManager.mutex,INFINITE);		// LOCK °É±â
	CursorUtil_GotoXY(x, y++);
	printf("¦® Change ¦¯");
	CursorUtil_GotoXY(x, y++);
	printf("¦­   %02d   ¦­", tetrisManager.changeNextCount);
	CursorUtil_GotoXY(x, y++);
	printf("¦±¦¬¦¬¦¬¦¬¦°");
	ReleaseMutex(tetrisManager.mutex);						// LOCK ÇØÁ¦
	
}
예제 #9
0
static void _TetrisManager_PrintBlock(TetrisManager* tetrisManager, int blockType, int status){
	int i;
	Block block = _TetrisManager_GetBlockByType(tetrisManager, blockType);

	WaitForSingleObject(((TetrisManager*)tetrisManager)->mutex,INFINITE);		// LOCK °É±â
	switch (blockType){
	case MOVING_BLOCK:
		FontUtil_ChangeFontColor(tetrisManager->block.color);
		break;
	case FIXED_BLOCK:
		FontUtil_ChangeFontColor(WHITE);
		break;
	case SHADOW_BLOCK:
		changeShadowColor(tetrisManager->speedLevel); // ·¹º§º°·Î ±×¸²ÀÚ »öÀ» ´Ù¸£°Ô Ãâ·ÂÇÏ´Â ÇÔ¼ö
		break;
	}
	for (i = 0; i < POSITIONS_SIZE; i++){
		int x = Block_GetPositions(block)[i].x;
		int y = Block_GetPositions(block)[i].y;
		CursorUtil_GotoXY(2 * y, x);
		printf("%s", boardTypesToPrint[status]);
	}
	FontUtil_ChangeFontColor(DEFAULT_FONT_COLOR);
	ReleaseMutex(((TetrisManager*)tetrisManager)->mutex);			// LOCK ÇØÁ¦

	_TetrisManager_PrintTotalTime(*tetrisManager); // because of multi thread problem, this function covers total time
}
예제 #10
0
void TetrisManager_PrintBoard(TetrisManager* tetrisManager){
	int i;
	int j;
	int x = 0;
	int y = 0;
	for (i = 0; i < BOARD_ROW_SIZE; i++){
		WaitForSingleObject(((TetrisManager*)tetrisManager)->mutex,INFINITE);		//LOCK °É±â(´Ù¸¥ ºÎºÐ¿¡¼­ Ä¿¼­ÀÇ »ö»óÀ» º¯°æÇÏ´Â °ÍÀ» ¸·±âÀ§ÇØ ÀӰ豸¿ªÀ¸·Î º¸È£)
		CursorUtil_GotoXY(x, y++);
		for (j = 0; j < BOARD_COL_SIZE; j++){
			switch (tetrisManager->board[i][j]){
			case LEFT_TOP_EDGE: case RIGHT_TOP_EDGE: case LEFT_BOTTOM_EDGE: case RIGHT_BOTTOM_EDGE:
			case LEFT_WALL: case RIGHT_WALL: case TOP_WALL: case BOTTOM_WALL:
			case EMPTY:
				FontUtil_ChangeFontColor(DEFAULT_FONT_COLOR);
				break;
			case MOVING_BLOCK:
				FontUtil_ChangeFontColor(tetrisManager->block.color);
				break;
			case FIXED_BLOCK:
				FontUtil_ChangeFontColor(WHITE);
				break;
			case SHADOW_BLOCK:
				changeShadowColor(tetrisManager->speedLevel); // ·¹º§º°·Î ±×¸²ÀÚ »öÀ» ´Ù¸£°Ô Ãâ·ÂÇÏ´Â ÇÔ¼ö
				break;
			}
			printf("%s", boardTypesToPrint[tetrisManager->board[i][j]]);
			FontUtil_ChangeFontColor(DEFAULT_FONT_COLOR);	//¸Å°³º¯¼ö·Î color ¸¦ ¹Þ¾Æ¼­ ÇØ´ç color ·Î Ãâ·Â Ä¿¼­ÀÇ »ö»óÀ» º¯°æÇÏ´Â ¿ªÇÒÀ» ÇÕ´Ï´Ù. 
															//SetConsoleTextAttribute ÇÔ¼ö¸¦ È£ÃâÇϸ鼭 ¸Å°³º¯¼ö·Î º¯°æÇÒ »ö»ó Á¤¼ö°ªÀ» ³Ñ°Ü Ãâ·Â Ä¿¼­ÀÇ »ö»óÀ» º¯°æÇÕ´Ï´Ù.
		}
		ReleaseMutex(((TetrisManager*)tetrisManager)->mutex);						// LOCK ÇØÁ¦
	}
}
예제 #11
0
static void _TetrisManager_PrintTotalTime(TetrisManager tetrisManager){
	int hour = tetrisManager.totalTime / (60 * 60);
	int minute = tetrisManager.totalTime % (60 * 60) / 60;
	int second = tetrisManager.totalTime % 60;

	// use temp size (magic number)
	int x = 50;
	int y = 20;

	WaitForSingleObject(tetrisManager.mutex,INFINITE);		// LOCK °É±â
	CursorUtil_GotoXY(x, y++);
	printf("¦®  time  ¦¯");
	CursorUtil_GotoXY(x, y++);
	printf("¦­%02d:%02d:%02d¦­", hour, minute, second);
	CursorUtil_GotoXY(x, y++);
	printf("¦±¦¬¦¬¦¬¦¬¦°");
	ReleaseMutex(tetrisManager.mutex);						// LOCK ÇØÁ¦
}
void VerticalMenu_Print(VerticalMenu* verticalMenu){
	int i;
	Point startPositionToPrint = verticalMenu->startPositionToPrint;
	CursorUtil_Hide();
	for (i = 0; i < verticalMenu->count; i++){
		CursorUtil_GotoXY(startPositionToPrint.x, startPositionToPrint.y++);
		if (i == verticalMenu->selectedIndex){
			FontUtil_ChangeFontColor(WHITE_INVERSION);
		}
		else{
			FontUtil_ChangeFontColor(WHITE);
		}
		printf("%s", verticalMenu->items[i]);
	}
	FontUtil_ChangeFontColor(WHITE);
}
예제 #13
0
static void TetrisManager_Item_ProcessBLOCK(TetrisManager* tetrisManager, int blockType, int number){	
	//¾ÆÀÌÅÛÀ» ÅëÇØ ºí·Ï Á¦°Å ÈÄ shadowºí·ÏÀ̳ª movingºí·ÏÀÇ À§Ä¡¸¦ Àç¼³Á¤ÇØÁØ´Ù.
	int i;
	Block block = _TetrisManager_GetBlockByType(tetrisManager, blockType);

	for (i = 0; i < POSITIONS_SIZE; i++){
		int x = Block_GetPositions(block)[i].x;
		int y = Block_GetPositions(block)[i].y;
		
		WaitForSingleObject(((TetrisManager*)tetrisManager)->mutex,INFINITE);		// LOCK °É±â
		CursorUtil_GotoXY(2*y, (x+number));
		
		if((x+number)!=BOARD_ROW_SIZE - 1){
			printf("%s", boardTypesToPrint[(int)EMPTY]);	
		}
		ReleaseMutex(((TetrisManager*)tetrisManager)->mutex);						// LOCK ÇØÁ¦
	}

	FontUtil_ChangeFontColor(DEFAULT_FONT_COLOR);
	
	_TetrisManager_PrintTotalTime(*tetrisManager); // because of multi thread problem, this function covers total time
}