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

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

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

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

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

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

Реализовать игру человека и машины по заполнению “Греко-латинского квадрата” C++
Можно ли реализовать игру змейка в консольном приложении C++
C++ Помогите реализовать стек на основе массива
C++ реализовать по диаграме классов
C++ Как реализовать игру на два игрока
Верно ли, что в основе фабрики лежит наследование классов? C++
C++ Смоделировать карточную игру "Пьяница"
C++ Реализовать игру кроссворд на основе текстовых файлов
Написать игру с использованием классов C++
Полиморфизм С++ - реализовать текстовую игру C++
Реализовать игру в кости (кубики) C++
Реализовать игру "Жизнь" (Conway's Game of Life) с помощью иерархии классов C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dzrkot
zzzZZZ...
518 / 348 / 53
Регистрация: 11.09.2013
Сообщений: 1,995
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
9 / 9 / 2
Регистрация: 03.06.2014
Сообщений: 647
01.07.2015, 12:52     На основе классов реализовать карточную игру Блэк-Джек #4
Я дико извеняюсь, но можите фул программу в архиве кинуть?
Yandex
Объявления
01.07.2015, 12:52     На основе классов реализовать карточную игру Блэк-Джек
Ответ Создать тему
Опции темы

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