Форум программистов, компьютерный форум CyberForum.ru

Блэкджек (21 очко) на Си++ - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 26, средняя оценка - 4.92
clementine
Сообщений: n/a
25.01.2010, 14:21     Блэкджек (21 очко) на Си++ #1
Знаю, что здесь прежде чем просить совета, нужно предложить свои наработки, но вдруг у кого-то завалялся код этой игры, и его можно просто так выложить))
Если есть, поделитесь пожалуйста) Нужен простой код без графики, в консоли.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.01.2010, 14:21     Блэкджек (21 очко) на Си++
Посмотрите здесь:

Игра 21 очко - исправить ошибки C (СИ)
C++ Builder 21 очко (BlackJack)
Visual C++ Игра очко
Принцип игры в 21 очко C++
Игра 21-очко, консоль, С++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alexifromcob
Сообщений: n/a
25.01.2010, 23:28     Блэкджек (21 очко) на Си++ #2
Извини за ошибки если есть, только недавно начал С++ изучать, ну вот примерно то, что ты просил :

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <windows.h>
using namespace std;
 
int K=-1;
char *title[]={"6","7","8","9","10","J","Q","K","A"};
 
struct Card
{
    unsigned int value:4;
    unsigned int mast:2;
    unsigned int ves:4;
};
#define size 36
 
class Coloda
{    
    Card card[size];    
public:
    Coloda()
    {
        for (int i=0;i<size;i++)
        {
            card[i].value=i%9;
            card[i].mast=i%4;
            if (card[i].value>=0 && card[i].value<=4) card[i].ves=card[i].value+6; 
            else if (card[i].value==8)
                card[i].ves=11;
            else
            {
                card[i].ves=card[i].value-3;
            }            
        }
    }    
    void PaintCard(bool comp,int value=0, int mast=0)
    {
        if (comp)
        {
        cout<<" ----- \n";
        cout<<"| *** |\n";
        cout<<"| *** |\n";
        cout<<"| *** |\n";
        cout<<" ----- \n";
        }else
        {
        cout<<" ----- \n";
        cout<<"|"<<char(card[value].mast+3)<<"    |\n";
        cout<<"|  "<<title[card[value].value]<<"  |\n";
        cout<<"|     |\n";
        cout<<" ----- \n";
        }
    }
 
    bool GetCard(int &Player,int &Comp,char ans='y')
    {        
        
                K++;
                Player+=card[K].ves;
                PaintCard(false,K,card[K].mast);
    
                K++;
                Comp+=card[K].ves;
                PaintCard(true,K,card[K].mast);
            
        
        Proverka(Player,Comp,false);
    }
 
    void Shuffle()
    {
        for (int i=0;i<size;i++)
        {
            int k=rand()%35;
            int tmp=card[k].value,tmp1=card[k].mast,tmp2=card[k].ves;
            card[k].value=card[i].value;
            card[k].mast=card[i].mast;
            card[k].ves=card[i].ves;
 
            card[i].value=tmp;
            card[i].mast=tmp1;
            card[i].ves=tmp2;            
        }
    }
    void Proverka(int Player, int Comp, bool end)
    {        
        if (end)
        {
            if (Player<21 && Player>Comp)
            {
                cout<<"Player wins! With "<<Player<<"\n";
                cout<<"Comp louse! With "<<Comp<<"\n";
            }
            else if (Player>21) 
            {
                cout<<"Player louse!\n";
                cout<<"Comp have "<<Comp<<"\n";
            }
 
            if (Comp<21 && Comp>Player)
            {
                cout<<"Comp wins! With "<<Comp<<"\n";
                cout<<"Player louse! With "<<Player<<"\n";
            }
            else if (Comp>21) 
            {
                cout<<"Comp louse!\n";    
                cout<<"Player have "<<Player<<"\n";
            }
        } else
            cout<<"Player have: "<<Player<<"\n";
    }    
 
    void Play(int& Player, int& Comp)
    {        
        char ans;
        cout<<"Press 'q' to exit\n";
        do
        {    
            cout<<"Continue play and get one card?(y/n)\n";
            cin>>ans;
            if (ans=='y')
                GetCard(Player,Comp);                
            else if (ans=='n')
            {                                
                Proverka(Player,Comp,true);                    
                break;
            }
        }while (ans!='q');    
    }
    
 
    void Print(int i)
    {        
cout<<title[card[i].value]<<" "<<char(card[i].mast+3)<<" ";//<<card[i].ves<<"\n";            
    }
    void PrintAll()
    {        
        for (int i=0;i<size;i++)
cout<<title[card[i].value]<<" "<<char(card[i].mast+3)<<" "<<card[i].ves<<"\n";            
    }
};
 
void main()
{    
    Coloda k1;
    srand(time(0));
    k1.Shuffle();
 
    int Player=0,Comp=0;        
        
                for (int i=0;i<2;i++)
                  k1.GetCard(Player,Comp);
            
 
        k1.Play(Player,Comp);
 
 
}
Mr.Loner
 Аватар для Mr.Loner
42 / 42 / 4
Регистрация: 23.01.2010
Сообщений: 152
25.01.2010, 23:52     Блэкджек (21 очко) на Си++ #3
alexifromcob, не нашел где учитываются карты, которые вышли из колоды. Если это есть, покажи, пожалуйста.
clementine
Сообщений: n/a
26.01.2010, 07:02     Блэкджек (21 очко) на Си++ #4
alexifromcob, спасибо за помощь)
сейчас буду смотреть, разбираться. Если найду ошибочки или буду вносить изменения, то выложу свой код))
Mr.Loner
 Аватар для Mr.Loner
42 / 42 / 4
Регистрация: 23.01.2010
Сообщений: 152
26.01.2010, 08:17     Блэкджек (21 очко) на Си++ #5
Все, я понял.
Ммммм... Не красиво очень. k - глобальная переменная. Зря так сделал. Очень зря. Лучше сделать ее членом класса. Так будет логичнее.
А Play лучше наоборот убрать из класса и Proverka тоже.
Все-таки принципы ООП никто не отменял.
Yandex
Объявления
26.01.2010, 08:17     Блэкджек (21 очко) на Си++
Ответ Создать тему
Опции темы

Текущее время: 18:52. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru