所以我已经被赋予了修改先前代码(模拟一副牌)的任务,通过在绘制之后移除阵列中的牌来更加准确地完成它。
我知道有很多方法可以使用链接列表来完成此操作,但我仍然很想使用链接列表,并希望得到帮助,因为我在严格的时间表上,更不用说这样做了我是如何教我的我必须完全改变我的代码,它使用数组,结构和指针,这将花费我没有的时间。
void draw(int deck[SIZE])
{
int numCards = 10;
int i;
int hand[numCards];
int card;
for(i = 0; i < numCards; i++)
{
card = deck[i];
hand[i] = card;
cards(card);
}
}
这是我需要修改的当前功能,以便当卡片被添加到手[i]时,卡片将从卡座[i]中移除,因此我不会重复。
卡是打印卡片的功能,可以忽略
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define SIZE 52
enum faces{Ace = 0, Jack = 10, Queen, King};
char * facecheck(int d);
void shuffle( int deck[]);
void draw(int deck[SIZE]);
void cards(int hand);
int i;
int main()
{
int deck[SIZE], i, n;
char suits[4][9] =
{
"Hearts",
"Diamonds",
"Clubs",
"Spades"
};
srand( time( NULL ) ) ;
for(i = 0; i<SIZE; i++)
{
deck[i] = i;
};
shuffle(deck);
draw(deck);
shuffle(deck);
draw(deck);
return 0;
}
这是当前的主要功能,shuffle就像你想象的那样,并且绘制是我需要修改的功能,因为即使它随机循环通过卡片,如果运行足够两张卡片可以出现在同一只手中。
答案 0 :(得分:0)
您可以使用表示删除的特殊卡(-1)。因此:
card = deck[i];
hand[i] = card;
deck[i] = -1; // deleted
cards(card);
答案 1 :(得分:0)
您可以创建一个删除函数,将所有下一个元素移动到上一个索引,并将最后一个索引设置为-1
。
但是,真的无法从C中的数组中删除元素,因为它具有无法修改的静态分配大小,所以你所能做的就是这样。< / p>
void remove_from_array(int index, int* array, int size)
{
int i = 0;
while (i < size)
{
if (i >= index && i == (size - 1))
array[i] = -1;
else if (i >= index)
array[i] = array[i + 1];
i++;
}
}
remove_from_array(i, deck, SIZE);