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]から削除されるように変更する必要がある現在の機能であり、繰り返しが発生しないようにします。

cards は、カードを出力し、無視できる関数です

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

これが現在の主な機能です。シャッフルはご想像のとおりで、ドローは私が変更する必要がある機能です。カードをランダムに循環させますが、十分に実行すると同じハンドに 2 枚のカードが出現する可能性があるためです。

4

2 に答える 2

0

削除を示す特殊なカード(-1)を使用できます。したがって:

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