예제 #1
0
파일: card.cpp 프로젝트: infsega/bbpref
Card *getCard (int aFace, int aSuit) {
  initCardList();
  int no = 32;
  if (aFace >= 7 && aFace <= FACE_ACE && aSuit >= 1 && aSuit <= 4) no = (aFace-7)*4+(aSuit-1);
  return cList[no];
}
//清空链表中数据,已保存文件和链表中的数据同步
int getCard()
{
	int nCount = 0; //卡信息数
	int i = 0;
	Card* pCard = NULL;
	

	IpCardNode node = NULL;
	IpCardNode cur = NULL;

	//清除链表中已存在的数据,并初始化
	if (cardList != NULL)
	{
		releaseCardList();
	}
	initCardList();
	//获取卡信息个数
	nCount = getCardCount(CARDPATH);

	//动态分配内存保存卡信息
	pCard = (Card*)malloc(sizeof(Card) * nCount);
	if (pCard == NULL)
	{
		return FALSE;
	}

	//如果返回FALSE,表示读取卡信息失败
	if (FALSE == readCard(pCard, CARDPATH))
	{
		free(pCard);
		pCard = NULL;
		return FALSE;
    }

	//node->next = NULL;
	for (i = 0, node = cardList; i < nCount; i++)
	{
		if (i == 0)
		{
			node->data = pCard[i];
			node->next = NULL;
		}
		else
		{
			//为节点分配内存
			cur = (IpCardNode)malloc(sizeof(CardNode));
			//如果分配内存失败,则返回
			if (cur == NULL)
			{
				free(pCard);
				return FALSE;
			}
			//初始化新的空间,全部赋值为零
			memset(cur, 0, sizeof(CardNode));

			//将卡信息保存到节点中
			cur->data = pCard[i];
			cur->next = NULL;

			//将节点添加到链表结尾
			node->next = cur;
			node = cur;
		}
	}
	//free(cur);
	free(pCard);
	pCard = NULL;
	return TRUE;
}