⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 diamonds.c

📁 一个在linux下用c基于fb语言编写的五子棋游戏
💻 C
📖 第 1 页 / 共 2 页
字号:
		if ( i == 2 ) 			return; 		if (BlockArray[i+1][j+1].Flag_Is_Filled == TRUE) 			 return;		if (BlockArray[i-1][j+1].Flag_Is_Filled == TRUE || BlockArray[i-1][j+2].Flag_Is_Filled == TRUE)			 return;		if (BlockArray[i+1][j+1].Flag_Is_Filled == TRUE ||	 BlockArray[i+1][j+2].Flag_Is_Filled == TRUE)			 return;		{			MoveBlockFromSrcToDes(BlockArray, i, j, i+1, j+1);			DrawBlock(i+1, j+1, 2);			EraseBlock(i, j);			MoveBlockFromSrcToDes(BlockArray, i, j+2, i-1, j+1);			DrawBlock(i-1, j+1, 2);			EraseBlock(i, j+2);			MoveBlockFromSrcToDes(BlockArray, i+1, j, i+1, j+2);			DrawBlock(i+1, j+2, 2);			EraseBlock(i+1, j );		}		return ;	}	if ( BlockArray[i+1][j].Flag_Is_Moveable == TRUE && BlockArray[i+2][j].Flag_Is_Moveable == TRUE)	{		if (j == 0) 			return;		if (BlockArray[i][j-1].Flag_Is_Filled == TRUE || BlockArray[i+1][j-1].Flag_Is_Filled == TRUE) 		     return;		if ( BlockArray[i+3][j].Flag_Is_Filled == TRUE || BlockArray[i+1][j+1].Flag_Is_Filled == TRUE )			 return;		if ( BlockArray[i][j+1].Flag_Is_Filled == TRUE)			 return;		for(m=i; m < i+3; m ++)			if( BlockArray[m][j+2].Flag_Is_Filled == TRUE)				return;		{			MoveBlockFromSrcToDes(BlockArray, i, j, i+1, j-1);			DrawBlock(i+1, j-1, 2);			EraseBlock(i, j);			MoveBlockFromSrcToDes(BlockArray, i+2, j, i+1, j+1);			DrawBlock(i+1, j+1, 2);			EraseBlock(i+2, j);			MoveBlockFromSrcToDes(BlockArray, i+2, j+1, i, j+1);			DrawBlock(i, j+1, 2);			EraseBlock(i+2, j+1);		}		return ;		}	if ( BlockArray[i+1][j-1].Flag_Is_Moveable == TRUE )	{		if(i == ROWS-2) 			return ;		if(BlockArray[i][j-1].Flag_Is_Filled == TRUE ||  BlockArray[i][j-2].Flag_Is_Filled == TRUE)			return;		if(BlockArray[i+2][j-1].Flag_Is_Filled == TRUE || BlockArray[i+2][j-2].Flag_Is_Filled == TRUE)		   return;		if(BlockArray[i][j-1].Flag_Is_Filled == TRUE)		   return;		{			MoveBlockFromSrcToDes(BlockArray, i, j, i, j-2);			DrawBlock(i, j-2, 2);			EraseBlock(i, j);			MoveBlockFromSrcToDes(BlockArray, i+1, j, i, j-1);			DrawBlock(i, j-1, 2);			EraseBlock(i+1, j);			MoveBlockFromSrcToDes(BlockArray, i+1, j-2, i+2, j-1);			DrawBlock(i+2, j-1, 2);			EraseBlock(i+1, j-2);		}		return ;	}	if (BlockArray[i][j+1].Flag_Is_Moveable == TRUE &&  BlockArray[i+1][j+1].Flag_Is_Moveable == TRUE)	{		if(j == COLS - 2) 			return;		if(BlockArray[i+1][j].Flag_Is_Filled == TRUE || BlockArray[i+2][j].Flag_Is_Filled == TRUE)           return;		if(BlockArray[i+1][j+2].Flag_Is_Filled == TRUE || BlockArray[i+2][j+2].Flag_Is_Filled == TRUE)		   return;		{			MoveBlockFromSrcToDes(BlockArray, i, j, i+2, j);			DrawBlock(i+2, j, 2);			EraseBlock(i, j);			MoveBlockFromSrcToDes(BlockArray, i, j+1, i+1, j);			DrawBlock(i+1, j, 2);			EraseBlock(i, j+1);			MoveBlockFromSrcToDes(BlockArray,i + 2, j+1, i+1, j+2);			DrawBlock(i+1, j+2, 2);			EraseBlock(i+2, j+1);		}		return;	}	}void 	RotateStyleThree(BLOCK BlockArray[ROWS][COLS]){	int i=0, j=0;	for(i=2; i < ROWS; i++)	{	   for(j=0; j < COLS; j++)	   {		   if (BlockArray[i][j].Flag_Is_Moveable == TRUE)               break;	   }	   if (j < COLS)		   break;	}      	if(BlockArray[i][j+1].Flag_Is_Moveable == TRUE && BlockArray[i][j+2].Flag_Is_Moveable == TRUE)	{   	    if (i == 2)    	    	return; 		if (BlockArray[i+1][j].Flag_Is_Filled == TRUE) 		     return;		if (BlockArray[i+1][j+2].Flag_Is_Filled == TRUE)			 return;		if (BlockArray[i-1][j+1].Flag_Is_Filled == TRUE || BlockArray[i-1][j+2].Flag_Is_Filled == TRUE)			 return;		{			MoveBlockFromSrcToDes(BlockArray, i, j, i-1, j+1);			DrawBlock(i-1, j+1, 3);			EraseBlock(i, j);		}			return ;	}	if (BlockArray[i+1][j+1].Flag_Is_Moveable == TRUE && BlockArray[i+2][j].Flag_Is_Moveable == TRUE)	{		if (j == 0) 			return;		if (BlockArray[i][j-1].Flag_Is_Filled == TRUE || BlockArray[i+1][j-1].Flag_Is_Filled == TRUE)             return;		if (BlockArray[i+2][j+1].Flag_Is_Filled == TRUE )			 return;		if (BlockArray[i][j+1].Flag_Is_Filled == TRUE)			 return;		{			MoveBlockFromSrcToDes(BlockArray, i+2, j, i+1, j-1);			DrawBlock(i+1, j-1, 3);			EraseBlock(i+2, j);		}		return ;		}	if (BlockArray[i+1][j-1].Flag_Is_Moveable == TRUE && BlockArray[i+1][j+1].Flag_Is_Moveable == TRUE)	{		if(i == ROWS-2) 			return ;		if(BlockArray[i][j-1].Flag_Is_Filled == TRUE )		   return;		if(BlockArray[i+2][j].Flag_Is_Filled == TRUE || BlockArray[i+2][j-1].Flag_Is_Filled == TRUE)		   return;		if(BlockArray[i][j+1].Flag_Is_Filled == TRUE)		   return;		{			MoveBlockFromSrcToDes(BlockArray, i+1, j+1, i+2, j);			DrawBlock(i+2, j, 3);			EraseBlock(i+1, j+1);		}		return ;	}	if (BlockArray[i+2][j].Flag_Is_Moveable == TRUE && BlockArray[i+1][j-1].Flag_Is_Moveable == TRUE)	{		if(j == COLS-1) 			return ;		if(BlockArray[i][j-1].Flag_Is_Filled == TRUE)		   return;		if(BlockArray[i+2][j-1].Flag_Is_Filled == TRUE)		   return;		if(BlockArray[i+1][j+1].Flag_Is_Filled == TRUE || BlockArray[i+2][j+1].Flag_Is_Filled == TRUE)		   return;		{			MoveBlockFromSrcToDes(BlockArray, i, j, i+1, j+1);			DrawBlock(i+1, j+1, 3);			EraseBlock(i, j);		}		return;	}}void 	RotateStyleFour(BLOCK BlockArray[ROWS][COLS]){	int i=0, j=0;	for(i=2; i < ROWS; i++)	{	   for(j=0; j < COLS; j++)	   {		   if (BlockArray[i][j].Flag_Is_Moveable == TRUE)	           break;	   }	   if ( j < COLS )		  break;	}          if ( BlockArray[i][j+1].Flag_Is_Moveable == TRUE)    	{		if(i == 2) 			return;		if(BlockArray[i+1][j].Flag_Is_Filled == TRUE)  			return;		if(BlockArray[i][j+2].Flag_Is_Filled == TRUE)  			return;		if(BlockArray[i-1][j+2].Flag_Is_Filled == TRUE)  			return;		{			MoveBlockFromSrcToDes(BlockArray, i, j ,i, j+2);			DrawBlock(i, j+2, 4);			EraseBlock(i, j );			MoveBlockFromSrcToDes(BlockArray, i+1, j+2, i-1, j+2);			DrawBlock(i-1, j+2, 4);			EraseBlock(i+1, j+2);		}	}	else	{		if (j == 1) 			return;		if (BlockArray[i+2][j].Flag_Is_Filled == TRUE) 			return;		if (BlockArray[i+2][j-2].Flag_Is_Filled == TRUE || BlockArray[i+1][j-2].Flag_Is_Filled == TRUE) 			 return;		{			MoveBlockFromSrcToDes(BlockArray, i, j, i+2, j);			DrawBlock(i+2, j, 4);			EraseBlock(i, j);			MoveBlockFromSrcToDes(BlockArray, i+1, j, i+1, j-2);			DrawBlock(i+1, j-2, 4);			EraseBlock(i+1, j);		}	}}void 	RotateStyleSix(BLOCK BlockArray[ROWS][COLS]){	int i=0, j=0;	for(i=2; i < ROWS; i++)	{	   for(j=0; j < COLS; j++)	   {		   if (BlockArray[i][j].Flag_Is_Moveable == TRUE)			   break;	   }	   if (j < COLS)		  break;	}      	if( BlockArray[i][j+1].Flag_Is_Moveable == TRUE && BlockArray[i][j+2].Flag_Is_Moveable == TRUE )	{		if (i == 2) 			return; 		if (BlockArray[i+1][j].Flag_Is_Filled == TRUE  || BlockArray[i+1][j+1].Flag_Is_Filled == TRUE)  	         return;		if (BlockArray[i-1][j+1].Flag_Is_Filled == TRUE || BlockArray[i-1][j+2].Flag_Is_Filled == TRUE)			 return;		{			MoveBlockFromSrcToDes(BlockArray, i, j, i+1, j+1);			DrawBlock(i+1, j+1, 6);			EraseBlock(i, j);			MoveBlockFromSrcToDes(BlockArray, i, j+2, i-1, j+1);			DrawBlock(i-1, j+1, 6);			EraseBlock(i, j+2);			MoveBlockFromSrcToDes(BlockArray, i+1, j+2, i-1, j+2);			DrawBlock(i-1, j+2, 6);			EraseBlock(i+1, j+2);		}		return ;	}	if ( BlockArray[i+1][j].Flag_Is_Moveable == TRUE && BlockArray[i][j+1].Flag_Is_Moveable == TRUE)	{		if (i == 2) 			return;		if (j == 0) 			return;		if (BlockArray[i][j-1].Flag_Is_Filled == TRUE || BlockArray[i+1][j-1].Flag_Is_Filled == TRUE) 		     return;		if (BlockArray[i][j-1].Flag_Is_Filled == TRUE)			 return;		if (BlockArray[i+1][j+1].Flag_Is_Filled == TRUE || BlockArray[i+2][j+1].Flag_Is_Filled == TRUE)			 return;		{			MoveBlockFromSrcToDes(BlockArray, i, j, i+1, j-1);			DrawBlock(i+1, j-1, 6);			EraseBlock(i, j);			MoveBlockFromSrcToDes(BlockArray, i, j+1, i, j-1);			DrawBlock (i, j-1, 6);			EraseBlock(i, j+1);			MoveBlockFromSrcToDes(BlockArray, i+2, j , i+1, j+1);			DrawBlock(i+1,  j+1, 6);			EraseBlock(i+2, j);		}		return ;		}	if ( BlockArray[i+1][j].Flag_Is_Moveable == TRUE && BlockArray[i+1][j+1].Flag_Is_Moveable == TRUE)	{		if(i == ROWS-2) 			return ;		if(BlockArray[i+2][j].Flag_Is_Filled == TRUE)		    return;		if(BlockArray[i+2][j].Flag_Is_Filled == TRUE || BlockArray[i+2][j+1].Flag_Is_Filled == TRUE)		   return;		if(BlockArray[i][j+1].Flag_Is_Filled == TRUE || BlockArray[i][j+2].Flag_Is_Filled == TRUE)		   return;		{			MoveBlockFromSrcToDes(BlockArray, i, j, i+2, j);			DrawBlock(i+2, j, 6);			EraseBlock(i, j);			MoveBlockFromSrcToDes(BlockArray, i+1, j, i+2, j+1);			DrawBlock(i+2, j+1, 6);			EraseBlock(i+1, j);			MoveBlockFromSrcToDes(BlockArray, i+1, j+2, i , j+1);			DrawBlock(i, j+1, 6);			EraseBlock(i+1, j+2);		}		return ;	}	if ( BlockArray[i+1][j].Flag_Is_Moveable == TRUE && BlockArray[i+2][j-1].Flag_Is_Moveable == TRUE)	{		if(j == COLS-1) 			return ;		if(BlockArray[i][j-1].Flag_Is_Filled == TRUE || BlockArray[i+1][j-1].Flag_Is_Filled == TRUE )		   return;		if(BlockArray[i+2][j+1].Flag_Is_Filled == TRUE)		   return;		if(BlockArray[i+2][j+1].Flag_Is_Filled == TRUE || BlockArray[i+1][j+1].Flag_Is_Filled == TRUE)		   return;		{			MoveBlockFromSrcToDes(BlockArray, i, j, i+1, j-1);			DrawBlock(i+1, j-1, 6);			EraseBlock(i, j);			MoveBlockFromSrcToDes(BlockArray, i+2, j-1, i+2, j+1);			DrawBlock(i+2, j+1, 6);			EraseBlock(i+2, j-1);			MoveBlockFromSrcToDes(BlockArray, i+2, j, i+1, j+1);			DrawBlock(i+1, j+1, 6);			EraseBlock(i+2, j);		}		return;	}}void 	DrawBackground(){	fb_draw_rect(BG_COLOR, x_offset, y_offset, BLOCKSIZE*COLS+LINE_WIDTH*2+OriginXPos*2, BLOCKSIZE*ROWS+LINE_WIDTH*2);	fb_draw_horizontal_line(LINE_COLOR, x_offset+OriginXPos, y_offset+BLOCKSIZE*ROWS, BLOCKSIZE*COLS+LINE_WIDTH*2, LINE_WIDTH);	fb_draw_vertical_line(LINE_COLOR, x_offset+OriginXPos, y_offset, BLOCKSIZE*ROWS, LINE_WIDTH);	fb_draw_vertical_line(LINE_COLOR, x_offset+OriginXPos+LINE_WIDTH+BLOCKSIZE*COLS, y_offset, BLOCKSIZE*ROWS, LINE_WIDTH);}void 	DrawBlock(int row,int column,int BlockStyle){	int	x=0, y=0;	x = x_offset + OriginXPos + LINE_WIDTH + column* BLOCKSIZE;	y = y_offset + row* BLOCKSIZE;	fb_draw_rect(ITEM_COLOR, x, y, BLOCKSIZE-1, BLOCKSIZE-1);}void 	EraseBlock(int row,int column){	int	x=0, y=0;	x = x_offset + OriginXPos + LINE_WIDTH + column* BLOCKSIZE;	y = y_offset + row* BLOCKSIZE;	fb_draw_rect(BG_COLOR, x, y, BLOCKSIZE, BLOCKSIZE);	}void	Init_GameTimer(){	struct timeval tm;	memset(&GameTimer, 0x00, sizeof(GAME_TIMER));	gettimeofday(&tm, NULL);	GameTimer.old_second = tm.tv_sec;	GameTimer.old_msecond = tm.tv_usec;		GameTimer.curent_second = tm.tv_sec;	GameTimer.curent_msecond = tm.tv_usec;}unsigned long	Game_Interval(){	unsigned long ilong=0;	struct timeval tm;	gettimeofday(&tm, NULL);	GameTimer.curent_second = tm.tv_sec;	GameTimer.curent_msecond = tm.tv_usec;		ilong = (1000000*(tm.tv_sec - GameTimer.old_second) + (tm.tv_usec - GameTimer.old_msecond))/1000;	return  ilong;}void 	move_down(){	if(NeedGenerateNewBlock(BlockArray))	{		KillFullLine(BlockArray);		if(GameOver(BlockArray))		{			ChangeBlockStyleToGray(BlockArray);			RefreshWindow(BlockArray);		}		else		{			MoveBlockFromPreviewToGameArea(BlockArray);			GenerateNewBlock(BlockArray);		}	}	else	{		if (CanBlockMoveDown(BlockArray))			MoveBlockDown(BlockArray);		else			Moveable2Stable(BlockArray);	}}void	move_left(){	if(CanBlockMoveLeft(BlockArray))		MoveBlockLeft(BlockArray);}void	move_right(){	if(CanBlockMoveRight(BlockArray)) 		MoveBlockRight(BlockArray);}void	Item_rotate(){	switch(JudgeBlockStyle(BlockArray))	{		case 0:			RotateStyleZero(BlockArray);			break;		case 1:			RotateStyleOne(BlockArray);			break;		case 2:			RotateStyleTwo(BlockArray);			break;		case 3:			RotateStyleThree(BlockArray);			break;		case 4:			RotateStyleFour(BlockArray);			break;		case 5:			break;		case 6:			RotateStyleSix(BlockArray);			break;	}}int main(){	unsigned long lInterval=0;	fb_mmap_buffer();	DrawBackground();	InitializeBlock(BlockArray);	RefreshWindow(BlockArray);	Init_GameTimer();	while (1)	{		lInterval = Game_Interval();		if (lInterval > 1000)		{			move_down(BlockArray);			GameTimer.old_second = GameTimer.curent_second;			GameTimer.old_msecond = GameTimer.curent_msecond;					}		else			continue;	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -