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

Принцип игры в 21 очко - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 24, средняя оценка - 4.83
Pepsy
47 / 32 / 4
Регистрация: 05.01.2013
Сообщений: 307
03.03.2013, 19:43     Принцип игры в 21 очко #1
Если не сложно - то дайте алгоритм(не код), а то не пойму, с чего начинать.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.03.2013, 19:43     Принцип игры в 21 очко
Посмотрите здесь:

Блэкджек (21 очко) на Си++ C++
принцип блочного шифрования C++
C++ принцип подстановки
Принцип 3d программ C++
Принцип char* C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Xipxop
 Аватар для Xipxop
481 / 9 / 2
Регистрация: 28.12.2011
Сообщений: 150
03.03.2013, 20:29     Принцип игры в 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
// 21ocko.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <iostream>
#include <windows.h>
#include <string.h>
#include <time.h>
#include <conio.h>
//-------------------глобальные-----
char* karta[9]={"6","7","8","9","10","Valet","Dama","King","Tyz"}; //перечисляем названия карт
int ockov_kart[9]={6,7,8,9,10,3,4,5,11,}; //перечисляем их очки
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    system("color F0"); //меняем цвет консоли
    srand(time(NULL)); //рандомизируем рандом
    //--
    bool over_game=false;
    int key;
    int cislo=0;
    int ockov=0;
    //--
    while(true)
    {
        system("cls");
        printf("-------------21-ocko--------------\n");
        printf("----------------------------------\n");
        cislo=0;
        ockov=0;
        over_game=false;
        //---
        while(!over_game)
        {
            cislo=rand()%9;
            ockov+=ockov_kart[cislo];
            printf("Vam vipala karta: %s(%i ockov)\n",karta[cislo],ockov_kart[cislo]);
            printf("Y vas: %i/21 ockov vsego\n",ockov);
            //--
            if(ockov>21){printf("Vi Proigral\n");over_game=true;}
            else if(ockov==21){printf("You WIN!!!!!!!!!!\n");over_game=true;}
                 else 
                 {
                     printf("Isco? 1/0\n");
                     std::cin >> key;
                     if(key==0){over_game=true;}
                 }
        }
        printf("REEEESTARTT");
        Sleep(2000);
    }
    
    
    
    system("PAUSE >> void");
    return 0;
}


Пример этот самый простой(за 10 минут)
Pepsy
47 / 32 / 4
Регистрация: 05.01.2013
Сообщений: 307
03.03.2013, 20:56  [ТС]     Принцип игры в 21 очко #3
Все то норм, но есть и но: 4 масти. И забыл сказать: игра на 2 игроков, один из которых - комп. Непонятно мне, как сделать саму генерацию карты с мастью. чтобы она не повторялась.
Pepsy
47 / 32 / 4
Регистрация: 05.01.2013
Сообщений: 307
04.03.2013, 23:18  [ТС]     Принцип игры в 21 очко #4
Может хоть кто-то поможет? Я все знаю, как сделать кроме генерации карт
ValeryS
Модератор
6375 / 4841 / 443
Регистрация: 14.02.2011
Сообщений: 16,044
04.03.2013, 23:30     Принцип игры в 21 очко #5
Цитата Сообщение от Pepsy Посмотреть сообщение
Все то норм, но есть и но: 4 масти. И забыл сказать: игра на 2 игроков, один из которых - комп. Непонятно мне, как сделать саму генерацию карты с мастью. чтобы она не повторялась.
генери числа от 0 до 35
потом это число делим на 9
остаток это вес карты
0 -6
1-7
2-8
3-9
4-10
5-валет
6- дама
7- король
8 -туз
а частное масть
0- пики
1- крести
2-буби
3-черви
хотя в очко масть роли не играет
можешь генерить 4 шестерки 4 семерки .... 4 туза

Не по теме:

помню я как то эту игру на программируемом калькуляторе забабахал

Pepsy
47 / 32 / 4
Регистрация: 05.01.2013
Сообщений: 307
07.03.2013, 20:07  [ТС]     Принцип игры в 21 очко #6
А как это сделать? А то вариант с кучей кейсов мне не очень нравится. Помогите - все уже кроме этого придумал((

Добавлено через 24 минуты
Еще актуально
Turn
7 / 7 / 0
Регистрация: 02.08.2012
Сообщений: 183
07.03.2013, 21:01     Принцип игры в 21 очко #7
Можно попробовать избежать повторяющихся карт через двухмерный массив имитирующий колоду карт:
Вложения
Тип файла: docx ДокуменMicrosoft Word.docx (13.4 Кб, 59 просмотров)
Pepsy
47 / 32 / 4
Регистрация: 05.01.2013
Сообщений: 307
08.03.2013, 12:59  [ТС]     Принцип игры в 21 очко #8
Избежание повторений я уже придумал и так, только как заполнить массив не огромным участком кода, используя
C++
1
2
3
4
switch()
{
case:
}
вот это - мой текущий вопрос.

Добавлено через 13 часов 53 минуты
Тема все еще актуальна.
Desu_Is_A_Lie
 Аватар для Desu_Is_A_Lie
62 / 62 / 3
Регистрация: 26.02.2012
Сообщений: 114
08.03.2013, 14:00     Принцип игры в 21 очко #9
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
    #include    <cstdint>                                                                               // Для uint8_t
    #include    <cstdlib>                                                                               // Для div
 
    
    /*...*/
    
    
    #define     SUITS_CNT   4
    #define     SUITS_CRD   9
    #define     TOTAL_CRD   (SUITS_CRD * SUITS_CNT)
 
    
    /*...*/
 
    
    const char*     csCards[SUITS_CRD]  = {"6", "7", "8", "9", "10", "Jack", "Queen", "King", "Ace"};   // Имена карт
    const char*     csSuits[SUITS_CNT]  = {"Clubs", "Diamonds", "Hearts", "Spades"};                    // Имена мастей
    const uint8_t   btVal[SUITS_CRD]    = {6, 7, 8, 9, 10, 3, 4, 5, 11};                                // Вес карт
    uint8_t         btUsed[SUITS_CNT][SUITS_CRD];                                                       // Массив 'занятости' карт
    memset(btUsed, 0, sizeof(btUsed));                                                                  // Обнуление
    
    
    /*...*/
 
    
    // Генерация карты
    div_t           dtCard;
    do
    {
        dtCard  = div(std::rand() % TOTAL_CRD, SUITS_CRD);                                              // dtCard.quot - Масть; drCard.rem  - Карта
    } while (btUsed[dtCard.quot][dtCard.rem] == 1);                                                     // Генерируем, пока 1 (т.е. занята)
    
    btUsed[dtCard.quot][dtCard.rem]     = 1;                                                            // Ставим 1, т.е. теперь карта занята
 
    
    /*...*/
 
    
    // P.S.:
    //
    // csName[dtCard.rem]       - имя текущей карты
    // csSuits[dtCard.quot]     - имя масти текущей карты
    // btVal[dtCard.rem]        - вес текущей карты
    //
    // После каждой игры не забываем обнулять массив 'занятости' карт ( memset(btUsed, 0, sizeof(btUsed)); )
    //
 
    
    /*...*/
ValeryS
Модератор
6375 / 4841 / 443
Регистрация: 14.02.2011
Сообщений: 16,044
08.03.2013, 14:09     Принцип игры в 21 очко #10
Цитата Сообщение от Pepsy Посмотреть сообщение
switch()
{
case:
}
причем здесь switch
вот примерно наброски кода

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
bool kol[36]={true};// массив колода все карты на месте 
string ves_s[]={"6","7","8","9","10","валет","дама","Король","Туз"};//массив "весов" карты
string  masts[]={"пики","крести","буби","черви"};// массив мастей
...............
 
int card;
card=rand()%36;  //берем случайную карту
while(!col[card])  // проверяем есть ли она в массиве
    card=rand()%36; // если нет, еще берем карту
 
kol[card]=false;  // вынимаем карту их колоды
 
..........
string ves=ves_s[card%9];  //узнаем "вес" карты
string mast=masts[card/9];  //узнаем масть
Добавлено через 3 минуты
Desu_Is_A_Lie,
опередил
Pepsy
47 / 32 / 4
Регистрация: 05.01.2013
Сообщений: 307
08.03.2013, 20:22  [ТС]     Принцип игры в 21 очко #11
C++
1
2
3
memset(btUsed, 0, sizeof(btUsed));                                                                  // Обнуление
 
    div_t           dtCard;
Вот эти 2 строки объясните, если можно.

Добавлено через 12 минут
Со второй разобрался. Только 1 не понятна.
ValeryS
Модератор
6375 / 4841 / 443
Регистрация: 14.02.2011
Сообщений: 16,044
08.03.2013, 20:38     Принцип игры в 21 очко #12
Цитата Сообщение от Pepsy Посмотреть сообщение
Только 1 не понятна.
обнуляет массив
посмотри про функцию memset
заполнить (set) память(memory) каким либо значением
Pepsy
47 / 32 / 4
Регистрация: 05.01.2013
Сообщений: 307
08.03.2013, 21:11  [ТС]     Принцип игры в 21 очко #13
А вот в массиве карт(6,7,8,9 и т.д.) была 10. Но вместо нее выбивает 0, так как в типе чар ток 1 символ можно. что делать?
ValeryS
Модератор
6375 / 4841 / 443
Регистрация: 14.02.2011
Сообщений: 16,044
08.03.2013, 21:20     Принцип игры в 21 очко #14
Цитата Сообщение от Pepsy Посмотреть сообщение
типе чар ток 1 символ можно.
а где ты видел char
у меня
Цитата Сообщение от ValeryS Посмотреть сообщение
string
у Desu_Is_A_Lie
Цитата Сообщение от Desu_Is_A_Lie Посмотреть сообщение
const char*
что есть указатель на char грубо говоря тоже строка
Pepsy
47 / 32 / 4
Регистрация: 05.01.2013
Сообщений: 307
08.03.2013, 21:37  [ТС]     Принцип игры в 21 очко #15
Вылетел вот такой бред:
error LNK1123: сбой при преобразовании в COFF: файл недопустим или поврежден
Что делать?
ValeryS
Модератор
6375 / 4841 / 443
Регистрация: 14.02.2011
Сообщений: 16,044
08.03.2013, 22:04     Принцип игры в 21 очко #16
Цитата Сообщение от Pepsy Посмотреть сообщение
Что делать?
сказать каким компилятором пользуешься
и прислать код
а то как то трудно угадывать
Pepsy
47 / 32 / 4
Регистрация: 05.01.2013
Сообщений: 307
08.03.2013, 22:06  [ТС]     Принцип игры в 21 очко #17
10 студия. Может из-за того, что сначала делал на компе, а потом на ноут сел? Здесь вообще ничего не компилируется.
ValeryS
Модератор
6375 / 4841 / 443
Регистрация: 14.02.2011
Сообщений: 16,044
08.03.2013, 22:10     Принцип игры в 21 очко #18
Цитата Сообщение от Pepsy Посмотреть сообщение
Может из-за того, что сначала делал на компе, а потом на ноут сел?
Проект то как переносил?
скорее всего при переносе файл побился, смотри в конец файла может какой лишний символ появился
Desu_Is_A_Lie
 Аватар для Desu_Is_A_Lie
62 / 62 / 3
Регистрация: 26.02.2012
Сообщений: 114
08.03.2013, 22:15     Принцип игры в 21 очко #19
Цитата Сообщение от Pepsy Посмотреть сообщение
сначала делал на компе, а потом на ноут сел
Project -> Clean
Project -> Build
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.03.2013, 22:36     Принцип игры в 21 очко
Еще ссылки по теме:

Объясните принцип C++
Принцип подстановки C++
C++ Куда копать, игра 21 очко

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

Или воспользуйтесь поиском по форуму:
Pepsy
47 / 32 / 4
Регистрация: 05.01.2013
Сообщений: 307
08.03.2013, 22:36  [ТС]     Принцип игры в 21 очко #20
Флешкой переносил. Но даже когда новый проект создаю и делаю, чтобы он написал 123, то вылетает ошибка.

Добавлено через 7 минут
Цитата Сообщение от Desu_Is_A_Lie Посмотреть сообщение
Project -> Clean
Project -> Build
Не помогает

Добавлено через 13 минут
а вот я пишу так
C++
1
const char* karta[9]={'6', '7', '8', '9', '10', 'В', 'Д', 'К', 'Т'};
и вылетает ошибка
Yandex
Объявления
08.03.2013, 22:36     Принцип игры в 21 очко
Ответ Создать тему
Опции темы

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