1. Гость, мы просим Вас ознакомиться с Правилами Форума и Отказом от ответственности!

Игра 21 в консольном режиме

Тема в разделе 'C/C++', создана пользователем РэПеРоК, 12 окт 2010.

  1. TopicStarter Overlay

    РэПеРоК Пользователи

    Сообщения:
    46
    Лайки:
    78
    Пол:
    Мужской
    Репутация:
    0
    Вот код иры написанно на С

    #include<iostream>
    #include<ctime>
    using namespace std;

    static const char *nom[13]={"2","3","4","5","6","7","8","9","10","Valet","Dama","Korol","Tuz"};
    static const char *suit[4]={"Trefi","Bubni","Chervi","Piki"};

    bool Tkoloda(int koloda[][13],int N,int M);//тасование карт, создание колоды
    //сдача карт
    int Sdat(int koloda[][13],int N,int M,int fl);
    //номерация карт, рубашки, масти, количество строк, столбцов,отображать ли карты

    bool isAll(int n,int m);//колода полная?
    int Ohki(int nomer);//определение веса карты
    int Perebor(int &user,int &comp,int &f1,int &f2);//проверка на перебор
    int Gold(int &user,int &comp,int &f1,int &f2);//проверка на золото
    void UserGame(int Scomp,int &sUser , int f2,int koloda[][13],int fl);//ваша игра
    void LogicComp(int &Scomp,int sUser , int f2,int koloda[][13],int fl);//логика для компьютера
    void EndGame(int sUser, int Scomp);//вывод очков


    void main()
    {
    setlocale(LC_CTYPE,"rus");


    int koloda[4][13]={0};

    int sUser=0,Scomp=0;//количество очков

    if(!Tkoloda(koloda,4,13))
    {
    cout << " Не хватает карт в колоде \n";
    exit(0);
    }
    else
    cout << "играем \n";

    //1 сдача карт по 2 шт каждому
    cout<<"Карты игрока:\n";
    for(int i=1; i<=2;i++)
    {
    sUser+=Sdat(koloda,4,13,1);
    Scomp+=Sdat(koloda,4,13,0);

    }
    cout<<"Очки игрока="<<sUser<<endl;

    //учитываем перебор
    int f1=1,f2=1;
    int p=Perebor(sUser,Scomp,f1,f2);
    if(!p)
    {
    cout<<"играем дальше!\n";
    }
    //ищем золотую комбинацию
    Gold(sUser,Scomp,f1,f2);
    //логика для user
    UserGame(Scomp,sUser, f2,koloda,f1);
    //логика для компьютера
    LogicComp(Scomp,sUser, f2,koloda,f1);

    EndGame(sUser, Scomp);
    }
    //колода полная?
    bool isAll(int n,int m)
    {
    if(n<4||m<13)
    {
    return false;
    }
    return true;

    }
    //определение веса карты
    int Ohki(int nomer)
    {
    int summ[13]={2,3,4,5,6,7,8,9,10,2,3,4,11};
    return summ[nomer];
    }
    //проверка на перебор
    int Perebor(int &user,int &comp,int &f1,int &f2)
    {
    if(user>21 && comp>21)
    {
    cout<<"Переигрываем!\n";
    f1=0;
    f2=0;
    user=comp=0;
    return 0;
    }

    if(user>21)
    {
    cout<<"Перебор user!\n";
    f1=0;
    f2=0;
    user=0;
    return 0;
    }
    if(comp>21)
    {
    cout<<"Перебор comp\n";
    f1=0;
    f2=0;
    comp=0;
    return 0;
    }
    return 1;
    }

    int Gold(int &user,int &comp,int &f1,int &f2)//проверка на золото
    {
    if(user==22)
    {
    f1=0;
    f2=0;
    return 1;
    }
    if(comp==22)
    {
    f1=0;
    f2=0;

    return 1;
    }
    return 0;
    }
    //тасование карт, создание колоды
    bool Tkoloda(int koloda[][13],int N,int M){

    srand((unsigned)time(0));

    if(!isAll(N,M))
    {
    return false;
    }
    int s1,n1;

    for(int i=0;i<N*M;)
    {
    //выбор случайным образом карты
    s1=rand()%(N+1);
    n1=rand()%(M+1);
    //проверка не выбиралась ли карта
    if(!koloda[s1][n1])
    {
    koloda[s1][n1]=i+1;
    i++;
    }
    }
    return true;
    }

    int Sdat(int koloda[][13],int N,int M,int f1){

    if(!isAll(N,M))
    {
    return 0;
    }
    static int sl=1;//номер по порядку карты в колоде

    for(int i=0;i<N;i++)
    {
    for(int j=0;j<M;j++)
    {
    if(koloda[j]==sl)
    {
    //отображение карты
    if(f1)
    {
    cout<<nom[j]<<" "<<suit<<endl;
    }
    sl++;

    return Ohki(j);
    }
    }

    }

    }

    void UserGame(int Scomp,int &sUser , int f2,int koloda[][13],int f1)//ваша игра
    {
    //предоставление возможности взять ещё игроку
    while(f1)
    {
    cout<<"Ещё 1/0?=";
    cin>>f1;
    if(f1)
    {
    sUser+=Sdat(koloda,4,13,1);
    Perebor(sUser,Scomp,f1,f2);
    }

    }
    }
    void LogicComp(int &Scomp, int sUser,int f2,int koloda[][13],int f1)//логика для компьютера
    {
    while(f2)
    {
    if(Scomp>=19)
    f2=0;
    else
    if(Scomp<=14)
    f2=1;
    else
    if(Scomp>=15 && Scomp>=17)
    {
    srand((unsigned)time(0));
    int x=rand()%2;
    if(x)
    f2=1;
    else
    f2=0;
    }
    else
    if(Scomp==18)
    {
    int x=rand()%5;
    if(x)
    f2=1;
    else
    f2=0;
    }

    if(f2)
    {
    Scomp+=Sdat(koloda,4,13,0);
    Perebor(sUser,Scomp,f1,f2);
    }

    }

    }
    void EndGame(int sUser, int Scomp)
    {
    cout<<"***********************************\a\n";
    cout<<"Очки игрока="<<sUser<<endl;
    cout<<"Очки компьютера="<<Scomp<<endl;
    if(sUser>Scomp)
    cout<<"Вы выиграли!\n";
    else if(sUser<Scomp)
    cout<<"Вы проиграли!\n";
    else
    cout<<"Ничья\n";
    cout<<"***********************************\a\n";
    }
    3 пользователям это нравится.
  2. MorzE nullptr AngeliCore Пользователи

    Сообщения:
    198
    Лайки:
    134
    Пол:
    Мужской
    Репутация:
    3
    Страна:
    Russian Federation Russian Federation
    А где же шлюхи?
    1 человеку нравится это.
  3. serega serega666 Пользователи

    Сообщения:
    4
    Лайки:
    0
    Пол:
    Мужской
    Репутация:
    0
    Команда:
    games devs
    на панели :D
Черновик сохранён Черновик удалён

Поделиться этой страницей