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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 24, средняя оценка - 4.83
Pepsy
47 / 32 / 4
Регистрация: 05.01.2013
Сообщений: 307
#1

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

03.03.2013, 19:43. Просмотров 3629. Ответов 27
Метки нет (Все метки)

Если не сложно - то дайте алгоритм(не код), а то не пойму, с чего начинать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.03.2013, 19:43
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Принцип игры в 21 очко (C++):

Блэкджек (21 очко) на Си++ - C++
Знаю, что здесь прежде чем просить совета, нужно предложить свои наработки, но вдруг у кого-то завалялся код этой игры, и его можно просто...

Куда копать, игра 21 очко - C++
Подскажите как лучше реализовать. Нужно написать игру- 21 очко на с++ в консоли. Для игры между двумя людьми. 36 карт, туз -11 очков,...

Нужна помощь в написании игры Манкала. Принцип игры то понятен.. а вот написать.. - Visual Basic
Здравствуйте! Нужна помощь в написании игры Манкала. Принцип игры то понятен.. а вот написать.. Лунки можно обозначить цифрами..

Принцип работы онлайн игры - PHP
Здравствуйте. Меня интересует такой вопрос. Для примера возьмем браузерную игру "Дурак". Каким образом в этой игре происходит передача хода...

Принцип создания браузерной игры - PHP
С чего начинаются писаться браузерные игры? С регистрации игрока?

Принцип игры Балда (ходы компьютера) - Delphi
Нужно понять, каким образом компьютер находит слова. Именно по шагам что он делает? Похоже это на тупой перебор слов. Например берет первую...

27
Xipxop
481 / 9 / 2
Регистрация: 28.12.2011
Сообщений: 151
03.03.2013, 20:29 #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 минут)
0
Pepsy
47 / 32 / 4
Регистрация: 05.01.2013
Сообщений: 307
03.03.2013, 20:56  [ТС] #3
Все то норм, но есть и но: 4 масти. И забыл сказать: игра на 2 игроков, один из которых - комп. Непонятно мне, как сделать саму генерацию карты с мастью. чтобы она не повторялась.
0
Pepsy
47 / 32 / 4
Регистрация: 05.01.2013
Сообщений: 307
04.03.2013, 23:18  [ТС] #4
Может хоть кто-то поможет? Я все знаю, как сделать кроме генерации карт
0
ValeryS
Модератор
6679 / 5088 / 475
Регистрация: 14.02.2011
Сообщений: 17,081
04.03.2013, 23:30 #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 туза

Не по теме:

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

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

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

Добавлено через 13 часов 53 минуты
Тема все еще актуальна.
0
Desu_Is_A_Lie
62 / 62 / 3
Регистрация: 26.02.2012
Сообщений: 114
08.03.2013, 14:00 #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)); )
    //
 
    
    /*...*/
1
ValeryS
Модератор
6679 / 5088 / 475
Регистрация: 14.02.2011
Сообщений: 17,081
08.03.2013, 14:09 #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,
опередил
1
Pepsy
47 / 32 / 4
Регистрация: 05.01.2013
Сообщений: 307
08.03.2013, 20:22  [ТС] #11
C++
1
2
3
memset(btUsed, 0, sizeof(btUsed));                                                                  // Обнуление
 
    div_t           dtCard;
Вот эти 2 строки объясните, если можно.

Добавлено через 12 минут
Со второй разобрался. Только 1 не понятна.
0
ValeryS
Модератор
6679 / 5088 / 475
Регистрация: 14.02.2011
Сообщений: 17,081
08.03.2013, 20:38 #12
Цитата Сообщение от Pepsy Посмотреть сообщение
Только 1 не понятна.
обнуляет массив
посмотри про функцию memset
заполнить (set) память(memory) каким либо значением
1
Pepsy
47 / 32 / 4
Регистрация: 05.01.2013
Сообщений: 307
08.03.2013, 21:11  [ТС] #13
А вот в массиве карт(6,7,8,9 и т.д.) была 10. Но вместо нее выбивает 0, так как в типе чар ток 1 символ можно. что делать?
0
ValeryS
Модератор
6679 / 5088 / 475
Регистрация: 14.02.2011
Сообщений: 17,081
08.03.2013, 21:20 #14
Цитата Сообщение от Pepsy Посмотреть сообщение
типе чар ток 1 символ можно.
а где ты видел char
у меня
Цитата Сообщение от ValeryS Посмотреть сообщение
string
у Desu_Is_A_Lie
Цитата Сообщение от Desu_Is_A_Lie Посмотреть сообщение
const char*
что есть указатель на char грубо говоря тоже строка
1
Pepsy
47 / 32 / 4
Регистрация: 05.01.2013
Сообщений: 307
08.03.2013, 21:37  [ТС] #15
Вылетел вот такой бред:
error LNK1123: сбой при преобразовании в COFF: файл недопустим или поврежден
Что делать?
0
08.03.2013, 21:37
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.03.2013, 21:37
Привет! Вот еще темы с ответами:

Принцип браузерной игры в линукс терминале - Java
Привет! Наткнулся на java библиотеку CHARVA. И хотел бы уточнить у знающих людей, возможно ли на основе данной библиотеки сделать...

Cобытийность. Принцип использования и принцип работы событий в jQ и GCT - JavaScript
Добрый день. Подготавливаюсь к собеседованию по чеклисту и не могу найти ответ на вопрос: событийность. Принцип использования и принцип...

21 очко (BlackJack) - C++ Builder
Здраствуйте! Очень нуждаюсь в помощи по игре на C++ 21 очко. Незнаю как сделать каждой карте свой вес(например 10 буби будет иметь 10...

Игра очко - Visual C++
Хочу написать игрушку &quot;очко&quot;, можно как то изображения карт сохранить в dll


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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