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

📄 diamonds.c

📁 一个在linux下用c基于fb语言编写的五子棋游戏
💻 C
📖 第 1 页 / 共 2 页
字号:
#include	"diamonds.h"void 	InitializeBlock(BLOCK BlockArray[ROWS][COLS]){	int i=0, j=0;	for (i=0; i < ROWS; i++)	{		for (j=0; j < COLS; j++)		{			BlockArray[i][j].Flag_Is_Filled = FALSE;			BlockArray[i][j].Flag_Is_Moveable = FALSE;			BlockArray[i][j].BlockStyle = 0;		}	}}BOOL 	GameOver(BLOCK Block[ROWS][COLS]){	int i=0;    BOOL Flag=FALSE;	for(i=0; i<COLS; i++)	{		if (Block[4][i].Flag_Is_Moveable==FALSE && 	Block[4][i].Flag_Is_Filled==TRUE)			Flag=TRUE;	}	return (Flag);}void 	GenerateNewBlock(BLOCK BlockArray[ROWS][COLS]){	int i=0,j=0;	srand((unsigned)time(NULL));    switch (rand()%7 )	{	case 0:   	     BlockArray[0][0].BlockStyle=0;BlockArray[0][0].Flag_Is_Filled=TRUE;BlockArray[0][0].Flag_Is_Moveable=TRUE;		 BlockArray[0][1].BlockStyle=0;BlockArray[0][1].Flag_Is_Filled=TRUE;BlockArray[0][1].Flag_Is_Moveable=TRUE;         BlockArray[0][2].BlockStyle=0;BlockArray[0][2].Flag_Is_Filled=TRUE;BlockArray[0][2].Flag_Is_Moveable=TRUE;		 BlockArray[0][3].BlockStyle=0;BlockArray[0][3].Flag_Is_Filled=TRUE;BlockArray[0][3].Flag_Is_Moveable=TRUE;		 break;	case 1:	     BlockArray[0][1].BlockStyle=1;BlockArray[0][1].Flag_Is_Filled=TRUE;BlockArray[0][1].Flag_Is_Moveable=TRUE; 		 BlockArray[0][2].BlockStyle=1;BlockArray[0][2].Flag_Is_Filled=TRUE;BlockArray[0][2].Flag_Is_Moveable=TRUE;         BlockArray[1][0].BlockStyle=1;BlockArray[1][0].Flag_Is_Filled=TRUE;BlockArray[1][0].Flag_Is_Moveable=TRUE;		 BlockArray[1][1].BlockStyle=1;BlockArray[1][1].Flag_Is_Filled=TRUE;BlockArray[1][1].Flag_Is_Moveable=TRUE;		 break;	case 2:  		 BlockArray[0][0].BlockStyle=2;BlockArray[0][0].Flag_Is_Filled=TRUE;BlockArray[0][0].Flag_Is_Moveable=TRUE; 		 BlockArray[0][1].BlockStyle=2;BlockArray[0][1].Flag_Is_Filled=TRUE;BlockArray[0][1].Flag_Is_Moveable=TRUE;         BlockArray[0][2].BlockStyle=2;BlockArray[0][2].Flag_Is_Filled=TRUE;BlockArray[0][2].Flag_Is_Moveable=TRUE;		 BlockArray[1][0].BlockStyle=2;BlockArray[1][0].Flag_Is_Filled=TRUE;BlockArray[1][0].Flag_Is_Moveable=TRUE;		 break;	case 3:		  		 BlockArray[0][0].BlockStyle=3;BlockArray[0][0].Flag_Is_Filled=TRUE;BlockArray[0][0].Flag_Is_Moveable=TRUE; 		 BlockArray[0][1].BlockStyle=3;BlockArray[0][1].Flag_Is_Filled=TRUE;BlockArray[0][1].Flag_Is_Moveable=TRUE;         BlockArray[0][2].BlockStyle=3;BlockArray[0][2].Flag_Is_Filled=TRUE;BlockArray[0][2].Flag_Is_Moveable=TRUE;		 BlockArray[1][1].BlockStyle=3;BlockArray[1][1].Flag_Is_Filled=TRUE;BlockArray[1][1].Flag_Is_Moveable=TRUE;  		 break;	case 4:		 BlockArray[0][0].BlockStyle=4;BlockArray[0][0].Flag_Is_Filled=TRUE;BlockArray[0][0].Flag_Is_Moveable=TRUE; 		 BlockArray[0][1].BlockStyle=4;BlockArray[0][1].Flag_Is_Filled=TRUE;BlockArray[0][1].Flag_Is_Moveable=TRUE;         BlockArray[1][1].BlockStyle=4;BlockArray[1][1].Flag_Is_Filled=TRUE;BlockArray[1][1].Flag_Is_Moveable=TRUE;		 BlockArray[1][2].BlockStyle=4;BlockArray[1][2].Flag_Is_Filled=TRUE;BlockArray[1][2].Flag_Is_Moveable=TRUE;		 break;	case 5:		 BlockArray[0][0].BlockStyle=5;BlockArray[0][0].Flag_Is_Filled=TRUE;BlockArray[0][0].Flag_Is_Moveable=TRUE; 		 BlockArray[0][1].BlockStyle=5;BlockArray[0][1].Flag_Is_Filled=TRUE;BlockArray[0][1].Flag_Is_Moveable=TRUE;         BlockArray[1][0].BlockStyle=5;BlockArray[1][0].Flag_Is_Filled=TRUE;BlockArray[1][0].Flag_Is_Moveable=TRUE;		 BlockArray[1][1].BlockStyle=5;BlockArray[1][1].Flag_Is_Filled=TRUE;BlockArray[1][1].Flag_Is_Moveable=TRUE;		 break;	case 6:		 BlockArray[0][0].BlockStyle=6;BlockArray[0][0].Flag_Is_Filled=TRUE;BlockArray[0][0].Flag_Is_Moveable=TRUE; 		 BlockArray[0][1].BlockStyle=6;BlockArray[0][1].Flag_Is_Filled=TRUE;BlockArray[0][1].Flag_Is_Moveable=TRUE;         BlockArray[0][2].BlockStyle=6;BlockArray[0][2].Flag_Is_Filled=TRUE;BlockArray[0][2].Flag_Is_Moveable=TRUE;		 BlockArray[1][2].BlockStyle=6;BlockArray[1][2].Flag_Is_Filled=TRUE;BlockArray[1][2].Flag_Is_Moveable=TRUE;		 break;	}	for(i=0; i<2; i++)	  for(j=0; j<COLS; j++)		 if(BlockArray[i][j].Flag_Is_Filled)			DrawBlock(i,j,BlockArray[i][j].BlockStyle);}BOOL 	NeedGenerateNewBlock(BLOCK Block[ROWS][COLS]){	int i=0,j=0;	BOOL Flag=TRUE;	for(i=2;i < ROWS; i++)	{		for(j=0; j < COLS; j++)		{			if (Block[i][j].Flag_Is_Moveable==TRUE)				Flag=FALSE;		}	}	return (Flag);}void 	KillFullLine(BLOCK BlockArray[ROWS][COLS]){	int i=0, j=0, m=0, n=0, Flag=0;	for(i=ROWS-1; i >= 4; i--) 	{		Flag=TRUE;          		for(j=0;j<COLS;j++)			if (BlockArray[i][j].Flag_Is_Filled == FALSE) 				Flag=FALSE;          		if(Flag==TRUE)            		{			for(m=i; m >= 4; m--)     			{ 			   for(n=0;n<COLS;n++)  			   {	               					MoveBlockFromSrcToDes(BlockArray, m-1, n, m, n);                    if(BlockArray[m][n].Flag_Is_Filled==TRUE)       					   DrawBlock(m,n,BlockArray[m][n].BlockStyle);					else     				   EraseBlock(m,n);                         			   }			}		 i++;        		}	}}BOOL 	CanBlockMoveDown(BLOCK Block[ROWS][COLS]){	int i=0, j=0;	int Flag=TRUE;	for(i=2; i < ROWS; i++)	{		for(j=0; j < COLS; j++)		{			if (Block[i][j].Flag_Is_Moveable==TRUE)			{				if (i==ROWS-1)					Flag=FALSE;				if(Block[i+1][j].Flag_Is_Filled==TRUE && Block[i+1][j].Flag_Is_Moveable==FALSE)                    Flag=FALSE;			}		}	}	return (Flag);}BOOL 	CanBlockMoveRight(BLOCK BlockArray[ROWS][COLS]){	int i=0, j=0;	int Flag=TRUE;	for(i=2; i < ROWS; i++)	{		for(j=0; j < COLS; j++)		{			if (BlockArray[i][j].Flag_Is_Moveable==TRUE)			{				if (j==COLS-1)					Flag=FALSE;				if(BlockArray[i][j+1].Flag_Is_Filled==TRUE && BlockArray[i][j+1].Flag_Is_Moveable==FALSE)                    Flag=FALSE;			}		}	}	return (Flag);}BOOL 	CanBlockMoveLeft(BLOCK BlockArray[ROWS][COLS]){	int i=0, j=0;	int Flag=TRUE;	for(i=2; i < ROWS; i++)	{		for(j=0; j <COLS; j++)		{			if (BlockArray[i][j].Flag_Is_Moveable==TRUE)			{				if (j==0)					Flag=FALSE;		 	    if(BlockArray[i][j-1].Flag_Is_Filled==TRUE && BlockArray[i][j-1].Flag_Is_Moveable==FALSE)                    Flag=FALSE;			}		}	}	return (Flag);}void 	MoveBlockFromSrcToDes (BLOCK BlockArray[ROWS][COLS],int SrcRow, int SrcCol, int DesRow, int DesCol){	BlockArray[DesRow][DesCol].Flag_Is_Filled   = BlockArray[SrcRow][SrcCol].Flag_Is_Filled;	BlockArray[DesRow][DesCol].Flag_Is_Moveable = BlockArray[SrcRow][SrcCol].Flag_Is_Moveable;	BlockArray[DesRow][DesCol].BlockStyle       = BlockArray[SrcRow][SrcCol].BlockStyle;	BlockArray[SrcRow][SrcCol].Flag_Is_Filled   = FALSE;	BlockArray[SrcRow][SrcCol].Flag_Is_Moveable = FALSE;	BlockArray[SrcRow][SrcCol].BlockStyle       = 0;}void 	MoveBlockFromPreviewToGameArea(BLOCK BlockArray[ROWS][COLS]){	int i=0, j=0;	for (i=0; i < 2; i++)	{		for (j=0; j < COLS; j++)		{			if (BlockArray[i][j].Flag_Is_Filled == TRUE)			{				MoveBlockFromSrcToDes(BlockArray,i, j, i+2, j+3 );			    DrawBlock(i+2, j+3, BlockArray[i+2][j+3 ].BlockStyle);				EraseBlock(i, j);			}		}	}}void 	MoveBlockDown(BLOCK Block[ROWS][COLS]){	int i=0, j=0;	for(i=ROWS-1; i >= 2; i--)  	{	   for(j=0;j<COLS;j++) 	   {   		  if (Block[i][j].Flag_Is_Moveable==TRUE)		  {				MoveBlockFromSrcToDes(Block, i, j, i+1, j);				DrawBlock(i+1, j, Block[i+1][j].BlockStyle);                EraseBlock(i, j);		  }		}	}}void 	MoveBlockRight(BLOCK BlockArray[ROWS][COLS]){	int i=0, j=0;	for(i=COLS-1; i >= 0; i--)	{	    for(j=2; j < ROWS; j++)		{			if (BlockArray[j][i].Flag_Is_Moveable==TRUE)			{				MoveBlockFromSrcToDes(BlockArray, j, i, j, i+1);  			    DrawBlock(j, i+1, BlockArray[j][i+1].BlockStyle);				EraseBlock(j, i);			}		}	}}void 	MoveBlockLeft(BLOCK BlockArray[ROWS][COLS]){	int i=0, j=0;	for(i=0; i < COLS; i++)	{	    for(j=2; j < ROWS; j++)		{			if (BlockArray[j][i].Flag_Is_Moveable==TRUE)			{				MoveBlockFromSrcToDes(BlockArray, j, i, j, i-1);				DrawBlock(j, i-1, BlockArray[j][i-1].BlockStyle);				EraseBlock(j, i);			}		}	}}void 	Moveable2Stable(BLOCK Block[ROWS][COLS]){	int i=0, j=0;	for(i = 2; i < ROWS; i++)	{	   for(j = 0;j < COLS; j++)	   {	   	 if (Block[i][j].Flag_Is_Filled==TRUE)		  	 Block[i][j].Flag_Is_Moveable=FALSE;		}	}}void 	RefreshWindow(BLOCK BlockArray[ROWS][COLS]){	int i=0, j=0;	DrawBackground();    for(i = 0;i < ROWS; i++)    {	   for(j = 0; j < COLS; j++)	   {	  	  if(BlockArray[i][j].Flag_Is_Filled)    		 DrawBlock(i, j, BlockArray[i][j].BlockStyle);		}	}	}int 	JudgeBlockStyle(BLOCK BlockArray[ROWS][COLS]){	int style=0, i=0, j=0;	for(i = 2; i < ROWS ; i++)	{		for(j = 0; j < COLS; j++)		{			if(BlockArray[i][j].Flag_Is_Moveable==TRUE)			{				style=BlockArray[i][j].BlockStyle;				break;			}		}		if (j < COLS) 			break;	}	return (style);}void 	ChangeBlockStyleToGray(BLOCK BlockArray[ROWS][COLS]){	int i=0, j=0;	for(i = ROWS-1;i >= 2;i--)	{	   for(j = 0; j <= COLS - 1; j++)	   {	  	  if(BlockArray[i][j].Flag_Is_Filled)    		 BlockArray[i][j].BlockStyle = 7;		}	}	for(i = 2;i <= 3; i ++)	{	   for(j = 0;j <= COLS - 1;j ++)	   {	  	  BlockArray[i][j].Flag_Is_Filled = FALSE;	   }	}}void 	RotateStyleZero(BLOCK BlockArray[ROWS][COLS]){	int i=0, j=0, m=0, n=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 (i >= ROWS-2)			return ;		if (BlockArray[i-1][j].Flag_Is_Filled==TRUE || BlockArray[i-1][j+1].Flag_Is_Filled==TRUE)			return ;		for(m=i+1; m <= i+2; m++)		{			for (n=j+1; n <= j+3; n++)			{			 if ( BlockArray[m][n].Flag_Is_Filled == TRUE )			     return ;			}		}        		{			MoveBlockFromSrcToDes(BlockArray, i, j, i-1, j+1);			DrawBlock(i-1, j+1, 0);			EraseBlock(i, j);			MoveBlockFromSrcToDes(BlockArray, i, j+2, i+1, j+1);			DrawBlock(i+1, j+1, 0);			EraseBlock(i, j+2);			MoveBlockFromSrcToDes(BlockArray, i, j+3, i+2, j+1);			DrawBlock(i+2, j+1, 0);			EraseBlock(i, j+3);		}	}	else	{		if (j >= COLS - 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 ;		for(m=i+1; m <= i+3; m++)		{			for (n=j+1; n <= j+2; n++)			{			 if ( BlockArray[m][n].Flag_Is_Filled == TRUE )					return ;			}		}		{			MoveBlockFromSrcToDes(BlockArray, i, j, i+1, j-1);			DrawBlock(i+1, j-1, 0);			EraseBlock(i, j);			MoveBlockFromSrcToDes(BlockArray, i+2, j, i+1, j+1);			DrawBlock(i+1, j+1, 0);			EraseBlock(i+2, j);			MoveBlockFromSrcToDes(BlockArray, i+3 , j, i+1, j+2);			DrawBlock(i+1, j+2, 0);			EraseBlock(i+3, j);		}	}}void 	RotateStyleOne(BLOCK BlockArray[ROWS][COLS]){	int i=0, j=0, m=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(i >= ROWS - 2)			return;		if(BlockArray[i-1][j].Flag_Is_Filled == TRUE) 			return;		if(BlockArray[i-1][j+1].Flag_Is_Filled == TRUE) 			return;		if(BlockArray[i+1][j+1].Flag_Is_Filled == TRUE ) 			return;		for(m = j-1 ; m <= j+1; m++)		   if (BlockArray[i + 2][ m ].Flag_Is_Filled == TRUE ) 			   return;		{			MoveBlockFromSrcToDes(BlockArray, i+1, j, i-1, j);			DrawBlock(i-1, j, 1);			EraseBlock(i+1, j);			MoveBlockFromSrcToDes(BlockArray, i+1, j-1, i+1, j+1);			DrawBlock(i+1, j+1, 1);			EraseBlock(i+1, j-1);		}	}	else	{		if (i >= ROWS -3)			return;		if (j < 1) 			return;		if (BlockArray[i][j+1].Flag_Is_Filled == TRUE) 			return;		if (BlockArray[i+2][j].Flag_Is_Filled == TRUE) 			return;		if (BlockArray[i+2][j-1].Flag_Is_Filled == TRUE) 			return;		for(m=j; m <= j+1; m++)		   if (BlockArray[i + 3][ m ].Flag_Is_Filled == TRUE) 			   return;		{			MoveBlockFromSrcToDes(BlockArray, i, j, i+2, j);			DrawBlock(i+2, j, 1);			EraseBlock(i, j);			MoveBlockFromSrcToDes(BlockArray, i+2, j+1, i+2, j--);			DrawBlock(i+2, j-1, 1);			EraseBlock(i+2, j+1);		}	}}void 	RotateStyleTwo(BLOCK BlockArray[ROWS][COLS]){	int i=0, j=0, m=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+1][j].Flag_Is_Moveable == TRUE )	{

⌨️ 快捷键说明

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