因此,我被赋予了修改先前代码(模拟一副纸牌)的任务,以通过在绘制后移除阵列中的纸牌来更准确地完成此任务。

我知道有使用链接列表执行此操作的方法,但是我对使用链接列表尚不熟悉,因此希望获得帮助,因为我的时间紧迫,更不用说按照我的教导去做完全更改使用数组的代码,结构和指针,这将花费我没有的时间。

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; 
}  

这是当前的主要功能,随机播放功能与您想像的一样,绘制功能是我需要修改的功能,因为即使它随机循环遍历卡,但如果运行足够,两张卡也可以出现在同一手牌上。

===============>>#1 票数:0

您可以使用表示删除的特殊卡(-1)。 因此:

card = deck[i];     
hand[i] = card;
deck[i] = -1; // deleted  
cards(card);

===============>>#2 票数:0

您可以创建一个remove函数,将所有下一个元素移到上一个索引,并将最后一个索引设置为-1

虽然,它不可能真正从C中的数组中删除的元素,因为它有一个静态分配的大小不能被修改的,所有你能做的就是这样的事情。

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);

  ask by Cody Rogers translate from so

未解决问题?本站智能推荐: