1

因此,我被赋予了修改先前代码(模拟一副纸牌)的任务,以便通过在绘制后将数组中的纸牌移除来更准确地执行此操作。

我知道有一些方法可以使用链表来做到这一点,但我对使用链表还是很陌生,并且希望得到帮助,因为我处于严格的时间表上,更不用说按照我被教导的方式去做了完全改变我使用数组的代码、结构和指针,这将花费我没有的时间。

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 会按照您的想法进行,而 draw 是我需要修改的功能,因为即使它随机循环卡牌,如果运行足够多的话,两张卡也会出现在同一手牌中。

4

2 回答 2

0

You can create a remove function which moves all next elements to the previous index and sets the last index to -1.

Though, it is not possible to really remove an element from an array in C, because it has a static allocated size which can not be modified, all you can do is something like this.

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);
于 2013-04-17T22:48:00.783 回答
0

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

card = deck[i];     
hand[i] = card;
deck[i] = -1; // deleted  
cards(card);
于 2013-04-17T22:41:28.513 回答