Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 我有一个问题,我的人工智能试图删除卡,它刚刚发挥?_C++ - Fatal编程技术网

C++ 我有一个问题,我的人工智能试图删除卡,它刚刚发挥?

C++ 我有一个问题,我的人工智能试图删除卡,它刚刚发挥?,c++,C++,我正在做一个纸牌游戏,疯狂的八分,我已经做了所有的事情,除了我有这个AI的问题。AI需要从其卡牌选项中删除刚刚玩过的卡牌。(每位玩家发5张牌,如果该牌与套装、价值或8相匹配,则可以玩)。到目前为止,电脑确实打出了正确的牌,只是没有取出牌,这样它就可以继续玩下去 主要功能 #include <iostream> #include <time.h> #include "CCrazyEight.h" #include "stdafx.h" using namespace std

我正在做一个纸牌游戏,疯狂的八分,我已经做了所有的事情,除了我有这个AI的问题。AI需要从其卡牌选项中删除刚刚玩过的卡牌。(每位玩家发5张牌,如果该牌与套装、价值或8相匹配,则可以玩)。到目前为止,电脑确实打出了正确的牌,只是没有取出牌,这样它就可以继续玩下去

主要功能

#include <iostream>
#include <time.h>
#include "CCrazyEight.h"
#include "stdafx.h"
using namespace std;


void main()
{
    // Calls Crazy eight and declares a variable, then runs the game
    CCrazyEight E1;
    E1.Menu();
}
#包括
#包括
#包括“CCrazyEight.h”
#包括“stdafx.h”
使用名称空间std;
void main()
{
//调用疯狂八并声明一个变量,然后运行游戏
CCrazyEight E1;
E1.菜单();
}
CCard头文件

#pragma once
#include <iostream>
#include <time.h>
#include "stdafx.h"
using namespace std;

enum CardSuit { Hearts, Diamonds, Spades, Clubs };

class CCard
{
    friend ostream & operator << (ostream &left, CCard right);
private:
    int value;
    CardSuit suit;
public:
    // Constructor, sets default values to suit and value
    CCard()
    {
        value = 1;
        suit = Hearts;
    }
    // return thes value of the card
    int GetValue()
    {
        return value;
    }
    // returns the suit of the card
    CardSuit GetSuit()
    {
        return suit;
    }
    // Passes values to CDeck constructor, which then randomizes values for the cards
    void InitCard(CardSuit s, int v)
    {
        suit = s;
        if (v > 0 && v < 14)
        {
            value = v;
        }
    }
};
// outputs value and suit of the card
ostream & operator << (ostream &left, CCard right)
{
    if (right.value < 11 && right.value > 1)
    {
        left << right.value;
    }
    else if (right.value == 1)
    {
        left << "Ace";
    }
    else if (right.value == 11)
    {
        left << "Jack";
    }
    else if (right.value == 12)
    {
        left << "Queen";
    }
    else if (right.value == 13)
    {
        left << "King";
    }
    left << " of ";
    if (right.suit == Hearts)
    {
        left << "Hearts";
    }
    else if (right.suit == Diamonds)
    {
        left << "Diamonds";
    }
    else if (right.suit == Spades)
    {
        left << "Spades";
    }
    else if (right.suit == Clubs)
    {
        left << "Clubs";
    }
    return left;
}
#pragma once
#include <iostream>
#include "CCard.h"
#include <time.h>
using namespace std;

class CDeck
{
private:
    CCard Deck[52];
    int TopCard;
public:
    // constructor
    // randomizes the card numbers for suit and value
    CDeck()
    {
        srand(time(NULL));
        TopCard = 0;
        for (int suit = 0; suit < 4; suit++)
        {
            for (int value = 1; value <= 13; value++)
            {
                Deck[((suit * 13) + value) - 1].InitCard((CardSuit)suit, value);
            }
        }
    }
    // shuffles the deck, completely randomizes the cards
    void Shuffle()
    {
        TopCard = 0;
        for (int y = 0; y < 10; y++)
        {
            for (int x = 0; x < 52; x++)
            {
                int SwapPosition = rand() % 52;
                CCard temp;
                temp = Deck[x];
                Deck[x] = Deck[SwapPosition];
                Deck[SwapPosition] = temp;
            }
        }
    }
    // Draw a card function that gives out a card when called for in crazy eight
    CCard DrawCard()
    {
        if (TopCard > 51)
        {
            cout << "Deck is Empty." << endl;
        }
        else
        {
            return Deck[TopCard++];
        }
    }
};
#pragma once
#include "CCard.h"
#include <time.h>
#include <iostream>
using namespace std;

class CPlayer
{
    friend ostream & operator << (ostream &left, CPlayer right);
private:
    CCard Hand[25];
    CDeck d1;
    int NumberOfCard;
    bool Computer;
    const int MaxHand = 26;
    bool TopCard;
public:
    // Constructor for the computer, sets computer to true
    CPlayer(bool computer = true)
    {
        Computer = computer;
        NumberOfCard = 0;
    }
    // Computers AI, checks and sees if they can play, if not then they draw until they can play, or they play a card that is playable******Easy mode**** Lol
    CCard ComputerAI(CCard Topcard)
    {
            for (int i = 0; i < NumberOfCard; i++)
            {
                if (Hand[i].GetSuit() == Topcard.GetSuit() || Hand[i].GetValue() == 8 || Hand[i].GetValue() == Topcard.GetValue())
                {
                    for (int i = 0; i < NumberOfCard; i++)
                    {
                        if (Topcard.GetSuit() == Hand[i].GetSuit() && Hand[i].GetValue() != 8)
                        {
                            NumberOfCard--;
                            return Hand[i];
                        }
                    }
                    for (int i = 0; i < NumberOfCard; i++)
                    {
                        if (Topcard.GetValue() == Hand[i].GetValue() && Hand[i].GetValue() != 8)
                        {
                            NumberOfCard--;
                            return Hand[i];
                        }
                    }
                    for (int i = 0; i < NumberOfCard; i++)
                    {
                        if (Hand[i].GetValue() == 8)
                        {
                            NumberOfCard--;
                            return Hand[i];
                        }
                    }
                }
                else
                {
                    GetCard(d1.DrawCard());
                }
            }
    }
    // Is not the computer, sets computer to fasle. i.e. its the human
    void Human()
    {
        Computer = false;
    }
    int NumCards()
    {
        return NumberOfCard;
    }
    // will hand out a card
    bool GetCard(CCard NewCard)
    {
        if (NumberOfCard < MaxHand)
        {
            // Now is taking the card
            Hand[NumberOfCard] = NewCard;
            NumberOfCard++;
            return true;
        }
        else
            return false;
    }
    // subtracts the card that was played from the deck of the human user
    CCard CardPlayed(int index, CCard Topcard)
    {
        if (CheckCard(index, Topcard) == true)
        {
            CCard TempTopcard = Hand[index - 1];
            for (int i = index - 1; i <= NumberOfCard - 1; i++)
            {
                Hand[i] = Hand[i + 1];
            }
            NumberOfCard--;
            return TempTopcard;
        }
        else
            cout << "Not a valid Card." << endl;
            return Topcard;
    }
    // checks the card and see's if it is playable or not
    bool CheckCard(int index, CCard Topcard)
    {
        if (Hand[index - 1].GetSuit() == Topcard.GetSuit() || Hand[index - 1].GetValue() == 8 || Hand[index - 1].GetValue() == Topcard.GetValue())
        {
            return true;
        }
        else
            return false;
    }
};
// overloads the output to cout the card
ostream & operator << (ostream &left, CPlayer right)
{
    for (int i = 0; i < right.NumberOfCard; i++)
    {
            left << i + 1 << ") " << right.Hand[i] << endl;
    }
    return left;
}
#pragma一次
#包括
#包括
#包括“stdafx.h”
使用名称空间std;
enum卡片套装{红心、钻石、黑桃、梅花};
类CCard
{
friend ostream和运算符0&&v<14)
{
值=v;
}
}
};
//输出卡的价值和套装
ostream和操作员1)
{

左键检查
ComputerAI
方法。您返回卡牌,但唯一的删除操作是减少卡牌数量,但这样您实际上删除了最后一张卡牌。是的,我以为我正在这样做,但我不确定如何删除实际玩过的卡牌。
#pragma once
#include "CCard.h"
#include <time.h>
#include <iostream>
using namespace std;

class CPlayer
{
    friend ostream & operator << (ostream &left, CPlayer right);
private:
    CCard Hand[25];
    CDeck d1;
    int NumberOfCard;
    bool Computer;
    const int MaxHand = 26;
    bool TopCard;
public:
    // Constructor for the computer, sets computer to true
    CPlayer(bool computer = true)
    {
        Computer = computer;
        NumberOfCard = 0;
    }
    // Computers AI, checks and sees if they can play, if not then they draw until they can play, or they play a card that is playable******Easy mode**** Lol
    CCard ComputerAI(CCard Topcard)
    {
            for (int i = 0; i < NumberOfCard; i++)
            {
                if (Hand[i].GetSuit() == Topcard.GetSuit() || Hand[i].GetValue() == 8 || Hand[i].GetValue() == Topcard.GetValue())
                {
                    for (int i = 0; i < NumberOfCard; i++)
                    {
                        if (Topcard.GetSuit() == Hand[i].GetSuit() && Hand[i].GetValue() != 8)
                        {
                            NumberOfCard--;
                            return Hand[i];
                        }
                    }
                    for (int i = 0; i < NumberOfCard; i++)
                    {
                        if (Topcard.GetValue() == Hand[i].GetValue() && Hand[i].GetValue() != 8)
                        {
                            NumberOfCard--;
                            return Hand[i];
                        }
                    }
                    for (int i = 0; i < NumberOfCard; i++)
                    {
                        if (Hand[i].GetValue() == 8)
                        {
                            NumberOfCard--;
                            return Hand[i];
                        }
                    }
                }
                else
                {
                    GetCard(d1.DrawCard());
                }
            }
    }
    // Is not the computer, sets computer to fasle. i.e. its the human
    void Human()
    {
        Computer = false;
    }
    int NumCards()
    {
        return NumberOfCard;
    }
    // will hand out a card
    bool GetCard(CCard NewCard)
    {
        if (NumberOfCard < MaxHand)
        {
            // Now is taking the card
            Hand[NumberOfCard] = NewCard;
            NumberOfCard++;
            return true;
        }
        else
            return false;
    }
    // subtracts the card that was played from the deck of the human user
    CCard CardPlayed(int index, CCard Topcard)
    {
        if (CheckCard(index, Topcard) == true)
        {
            CCard TempTopcard = Hand[index - 1];
            for (int i = index - 1; i <= NumberOfCard - 1; i++)
            {
                Hand[i] = Hand[i + 1];
            }
            NumberOfCard--;
            return TempTopcard;
        }
        else
            cout << "Not a valid Card." << endl;
            return Topcard;
    }
    // checks the card and see's if it is playable or not
    bool CheckCard(int index, CCard Topcard)
    {
        if (Hand[index - 1].GetSuit() == Topcard.GetSuit() || Hand[index - 1].GetValue() == 8 || Hand[index - 1].GetValue() == Topcard.GetValue())
        {
            return true;
        }
        else
            return false;
    }
};
// overloads the output to cout the card
ostream & operator << (ostream &left, CPlayer right)
{
    for (int i = 0; i < right.NumberOfCard; i++)
    {
            left << i + 1 << ") " << right.Hand[i] << endl;
    }
    return left;
}