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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 5.00
vitalu
3 / 3 / 1
Регистрация: 25.06.2013
Сообщений: 51
#1

На основе классов реализовать карточную игру Блэк-Джек - C++

18.12.2013, 14:53. Просмотров 1831. Ответов 3
Метки нет (Все метки)

Написать программу, которая на основе классов реализует карточную игру Блэк-Джек.
Подскажите пожалуйста как реализовать данную игру в консоли...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.12.2013, 14:53
Здравствуйте! Я подобрал для вас темы с ответами на вопрос На основе классов реализовать карточную игру Блэк-Джек (C++):

Реализовать игру кроссворд на основе текстовых файлов - C++
Написать программу «кроссворд». Пользователь может вводить выбранные буквы слова. Если слово введено правильно, оно отображается черным...

Реализовать игру "Жизнь" (Conway's Game of Life) с помощью иерархии классов - C++
У нас есть такие правила: Правила Место действия этой игры — «вселенная» — это размеченная на клетки поверхность или плоскость —...

Написать программу, моделирующую карточную игру "Пьяница" и определяющую, кто из двух игроков выигрывает - C++
помогите. Я не могу понять. Пжлст. С++ Игорь с Артуром играют в "Пьяницу". Это такая карточная игра, правила которой описаны ниже. В...

Смоделировать карточную игру "Пьяница" - C++
В игре в пьяницу карточная колода раздается поровну двум игрокам. Далее они вскрывают по одной верхней карте, и тот, чья карта старше,...

Написать игру с использованием классов - C++
Здравствуйте. Тут такая штука - нужно написать игру в с++ используя классы, но я не знаю как это сделать. Класы я написать могу, а дальше -...

Верно ли, что в основе фабрики лежит наследование классов? - C++
Сори за глупый вопрос, но правильно ли я понял, что в основе фабрики лежит наследование классов?

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
dzrkot
zzzZZZ...
519 / 349 / 53
Регистрация: 11.09.2013
Сообщений: 1,997
18.12.2013, 15:09 #2
я бы создал класс примеру player, в нём колода карт, к примеру просто 2 перечисления - enum {бубны, черви, крести, пики} и enum {2,3,4 .. туз}.
и матрицу [4][13] заполненную 0(в ней хранится текущее состояние карт, т.е. если 1 карта уже роздана, то записываем в соотв ячейку 1цу).
Потом методы класса связанные с картами, т.е. взять одну карту - при помощи rand() сгенерить 2 случайных числа и добавить в контрольную сумму(которую потом сравнивают с 21), сказать стоп - сравнение с 21 и соперником, и вывод результата, ну и соответственно создать соперника - тоже что и игрок, только перегрузить конструктор(чтобы значть, что это ИИ и с ним вызываются другие методы) остановка по условию что сумма к примеру >19 итп. Вот это всё потом запилить в цикл while(1)а там вызывать методы игрока в switch() ...навенгое такя бы делал и в процессе уже менял что-либо
vitalu
3 / 3 / 1
Регистрация: 25.06.2013
Сообщений: 51
18.12.2013, 16:52  [ТС] #3
Написал вот так, все работает, но думаю есть вариант намного проще, подскажите пожалуйста......
Не судите строго, только учусь.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//Card.h
#pragma once
static int index=1;
class Card
{
public:
    Card(int);
    ~Card();
    void Sort();
    int Rozd();
    int RozdBank(); 
    int Symma(int);
    int Symma();
    int SymmaBank(int);
    int SymmaBank();
private:
    
    int KolKart;
    int Mast[4];
    int* Dost;
    int *Kploda[4];
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
//Card.cpp
#include<iostream>
#include"Card.h"
using namespace std;
static int summa=0;
static int summabank = 0;
Card::Card(int kol){
    KolKart = kol;
    for(int i = 0; i<4; i++){
        Mast[i] = i+3;
    }   
    Dost = new int[kol / 4];
    for(int i = 0; i<(kol / 4); i++){
        Dost[i] = (kol / 4 == 13)? i+2 : i+6;
    }
    
    for(int i = 0; i<4; i++){
        Kploda[i] = new int [kol / 4];
    }
    for(int i = 0; i<4; i++){
        for(int j = 0; j<(kol / 4); j++){
            Kploda[i][j] = 0;
        }
    }   
}
Card::~Card(){
    delete[]Dost;
    for(int i = 0; i<4; i++)
        delete[]Kploda[i];  
}
void Card::Sort(){
    int m, n;
    for(int karta = 1; karta<=KolKart; karta++){
        m = rand()%4;
        n = rand()%13;
        while(Kploda[m][n]!=0){
            m = rand()%4;
            n = rand()%13;
        }
        Kploda[m][n] = karta;       
    }
}
int Card::Rozd(){
    int a;  
        for(int j = 0; j<=3; j++){
            for(int k = 0; k<=12; k++){
                if(Kploda[j][k]==index){
                    cout<<" "<<(char)Mast[j]<<" - ";    
                    a = Dost[k];
                    if(Dost[k]<=10)
                    cout<<Dost[k]<<endl;
                    else{
                        switch(Dost[k]){
                        case 11:
                            cout<<"J"<<endl;
                            break;
                        case 12:
                            cout<<"Q"<<endl;
                            break;
                        case 13:
                            cout<<"K"<<endl;
                            break;
                        case 14:
                            cout<<"A"<<endl;
                            break;
                        }
                    }
                }
            }           
        }   
    Symma(a);
    index++;
    return 0;
}
int Card::Symma(int a){
    
    if(a<=10)
        return summa+=a;
    else if(a==14)
        return summa+=11;
    else
        return summa+=10;
}
int Card::Symma(){
    return summa;
}
int Card::RozdBank(){
    int a;  
        for(int j = 0; j<=3; j++){
            for(int k = 0; k<=12; k++){
                if(Kploda[j][k]==index){
                    cout<<" "<<(char)Mast[j]<<" - ";
                    a = Dost[k];
                    if(Dost[k]<=10)
                    cout<<Dost[k]<<endl;
                    else{
                        switch(Dost[k]){
                        case 11:
                            cout<<"J"<<endl;
                            break;
                        case 12:
                            cout<<"Q"<<endl;
                            break;
                        case 13:
                            cout<<"K"<<endl;
                            break;
                        case 14:
                            cout<<"A"<<endl;
                            break;
                        }
                    }
                }
            }           
        }   
    SymmaBank(a);
    index++;
    return 0;
}
int Card::SymmaBank(int a){
    
    if(a<=10)
        return summabank+=a;
    else if(a==14)
        return summabank+=11;
    else
        return summabank+=10;
}
int Card::SymmaBank(){
    return summabank;
}
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
//main.cpp
#include<iostream>
#include"Card.h"
#include<time.h>
using namespace std;
 
void main(){
    srand((unsigned)time(NULL));    
    Card A(52);
    A.Sort();
    cout<<"Igrok\n";
    for(int i=1; i<=2; i++)
      A.Rozd();
    cout<<"Summa = "<<A.Symma()<<endl;
    cout<<"Bank\n";
    A.RozdBank();
    do{
        if(A.Symma()<21){
            cout<<"Vzat kartu (1) Stop (0) __ ";
            cin>>index;         
                if(index){
                    cout<<"Igrok\n";
                    A.Rozd();
                    cout<<"Summa = "<<A.Symma()<<endl;
                    if(A.Symma()==21){
                        cout<<"BLECK JACK\n";                       
                    }
                    else if(A.Symma()>21){
                        cout<<"Perebor\n";
                        cout<<"POBEDIL BANCK\n";
                    }
                }
                else{
                    do{
                            cout<<"Bank\n";
                            A.RozdBank();
                        if(A.SymmaBank()==21){
                            cout<<"Summa Banka = "<<A.SymmaBank()<<endl;
                            cout<<"BLECK JACK\n";
                        }
                        else if(A.SymmaBank()>21){
                            cout<<"Banck Perebor\n";
                            cout<<"Summa Banka = "<<A.SymmaBank()<<endl;
                            cout<<"POBEDIL IGROK\n";
                        }
                        else
                            cout<<"Summa Banka = "<<A.SymmaBank()<<endl;
                        }while(A.SymmaBank()<17);
                }
        }       
    }while(index&&A.Symma()<21);
 
    if(A.Symma()<=21 && A.Symma()>A.SymmaBank() )
        cout<<"POBEDIL IGROK\n";
    if(A.SymmaBank()<=21 && A.SymmaBank()>A.Symma() )
        cout<<"POBEDIL BANCK\n";
    if(A.SymmaBank()<=21 && A.Symma()<=21 && A.SymmaBank()==A.Symma())
        cout<<"ROVNO\n";
}
Shoshona
26 / 26 / 8
Регистрация: 03.06.2014
Сообщений: 828
01.07.2015, 12:52 #4
Я дико извеняюсь, но можите фул программу в архиве кинуть?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.07.2015, 12:52
Привет! Вот еще темы с ответами:

Реализовать игру в кости (кубики) - C++
Вот мы по си сейчас проходим Указатели и шаблоны функций ! Нам задали вот такую задачку. Помогите пожалуйста!!! Написать...

Полиморфизм С++ - реализовать текстовую игру - C++
Кто решал задачку на полиморфизм такого плана: класс воины -от них наследники разные типы воинов и класс оржие - наследники разные виды...

Как реализовать игру на два игрока - C++
Есть два обьекта. Как сделать так, чтобы каждым из них можно было отдельно управлять и стрелять? #include &lt;hge.h&gt; #include...

Имитировать карточную игру - Turbo Pascal
На паскале решите пожалуйста. Колода 36 карт описана так:Type...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
01.07.2015, 12:52
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru