上接第二部分,下面要说的是最重要的CreateFlag和Gameplay函数
先是CreateFlag
void CreateFlag()
{
if(contact==0)//分了两种情况,1和0,为什么分一会就知道了
{
srand(time(NULL));//srand参数设为time,根据每次打开文件的时间来制定随机数,保证不唯一性
pa_tetris=(asd*)malloc(sizeof(asd));//工具指针分配内存
pz_tetris=(asd*)malloc(sizeof(asd));//尾指针分配内存
pa_tetris->flag=rand()%19+1;//随机并赋值
pa_tetris->pnext=NULL;//链表标准,创造了第一个节点
pHead_tetris=pa_tetris;
pz_tetris=pa_tetris;
pa_tetris=(asd*)malloc(sizeof(asd));//重新申请内存,因为要在创出一个节点
pa_tetris->flag=rand()%19+1;//随机数,%19+1是为了保证值在1-19之间,因为有19个flag
pa_tetris->pnext=NULL;//链表标准,非头节点的创建
pz_tetris->pnext=pa_tetris;
pz_tetris=pa_tetris;
pTemp_tetris=(asd*)malloc(sizeof(asd));//现在创建了2个节点,pTemp代替头节点,指向第一个节点
pTemp_tetris=pHead_tetris;
}
else //else 指定的是一般情况下,即已经在游戏中时,方块链表衔接情况
{
pTemp_tetris=pz_tetris;
pa_tetris=(asd*)malloc(sizeof(asd));
pa_tetris->flag=rand()%19+1;
pa_tetris->pnext=NULL;
pz_tetris->pnext=pa_tetris;
pz_tetris=pa_tetris;
}
}
因为用链表格式来制作俄罗斯方块,所以一开始不能只创建一个节点就不管了
因为俄罗斯方块,每次游戏界面都会有两个方块,一个是已经在下落的方块,还有一个是画面右侧即将落下的方块作为提示,如果只有一个节点的数据,是没有办法全部表示出来的在Gameplay里会有详细的代码来解释