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

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

Войти
Регистрация
Восстановить пароль
 
ilyashis
-36 / 0 / 1
Регистрация: 08.12.2011
Сообщений: 137
#1

алгоритм для раздачи карт - C++

28.02.2013, 14:09. Просмотров 969. Ответов 3
Метки нет (Все метки)

всем привет
помогите придумать алгоритм для раздачи карт
карточная игра платок -http://game.panoidl.ru/platok/platok.asp

нужно раздать карты что бы не было безпроигрышной игры
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.02.2013, 14:09     алгоритм для раздачи карт
Посмотрите здесь:

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

Сколькими способами из колоды (36 карт) можно выбрать неупорядоченный набор из 6 карт, удовлетворяющих условию - C++
Сколькими способами из колоды 36 карт можно выбрать неупорядоченный набор из 6 карт, чтобы в этом наборе было бы точно: 2 дамы, 1 туз, 2...

Раздача карт, оценка комбинации и выяснение сколько карт взять, сколько сбросить - C++
Всем добра! Хочу спросить, как решать задачу со сдачей, оценкой карты и после всего этого нужно ещё вычислить, сколько карт нужно...

Реализовать иерархию классов для моделирования работы магазина, продающего колоды карт (по 36 и 52 карты) - C++
Задание: 1. Реализовать класс: Магазин колод карт. Добавить возможность добавлять новые колоды(при добавлении присваивать каждой...

Алгоритм для программы - C++
Как сделать алгоритм для этой программы: #include <conio.h> #include <iostream> #include <math.h> int main() { double a;...

Алгоритм Джонсона для графов - C++
Подскажите, пожалуйста, где можно найти реализацию этого алгоритма или помогите с реализацией. Я так понял, что сначала там идёт алгоритм...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nefton
44 / 20 / 5
Регистрация: 28.02.2013
Сообщений: 188
28.02.2013, 14:15     алгоритм для раздачи карт #2
знаю алгоритм мешания карт, а что такое беспроигрышная игра - без понятия
ilyashis
-36 / 0 / 1
Регистрация: 08.12.2011
Сообщений: 137
28.02.2013, 14:19  [ТС]     алгоритм для раздачи карт #3
поделитесь с мешанием карт пожалуйста
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.02.2013, 14:30     алгоритм для раздачи карт
Еще ссылки по теме:

Алгоритм для работы с матрицей - C++
Помогите, пожалуйста, написать на языке С++ "алгоритм перестановки левой и правой половин квадратной матрицы(размер матрицы n является...

Алгоритм для вычисления выражения - C++
Помогите,пожалуйста, составить алгоритм. Зарание спасибо.

Алгоритм сортировки для вектора - C++
Ребята у меня есть структура типа: struct Set { int row; //строка в матрице int value; //значение, которое повторяется int...

Алгоритм для формирования матрицы - C++
Необходимо сформировать матрицу по заданному образцу. Не могу придумать алгоритм. Буду очень благодарен за помощь. 1 1 1 . . . 1 1 1 0...

Алгоритм Дейкстры для лабиринта - C++
Лабиринт задается матрицей, где 0 стены, 1 проходы, s - начальная вершина, f - конечная. Лабиринт считывается из файла. Не могу сообразить,...

Алгоритм для моментальной лотерей - C++
Нужно придумать алгоритм , вот я думаю может здесь помогут. для простоты понимания упрошу. Есть 3 выйгрышные комбинации и по каждой...


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

Или воспользуйтесь поиском по форуму:
nefton
44 / 20 / 5
Регистрация: 28.02.2013
Сообщений: 188
28.02.2013, 14:30     алгоритм для раздачи карт #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
#include "stdafx.h"
#include "poker.h"
#include <stdlib.h> // Отсюда берём rand()
#include <time.h> // Здесь находится time()
 
 
deck::deck(){
    srand((unsigned)time(NULL)); //раз в секунду - слишком медленно чтоб использовать внутри цикла
    Reload();
}
 
void deck::Reload(void){
/*Кодировка карт: карта представляет собой 1 байт (char)
  0,1,2,3 биты означают достоинство (2..Туза)
  2=1; 3=2; 4=3; 5=4; 6=5; 7=6; 8=7; 9=8; T=9; J=10; Q=11; K=12; A=13;
  4,5 биты означают масть
  в™*=0; в™Ј=1; ♦=2; ♥=3;*/
 
    //Заполняем колоду картами последовательно
    for (int i=0; i<=12; i++){cards[i] = i+1;}; //пики
    for (int i=13; i<=25; i++){cards[i] = (i-13+1)+16;};//трефы
    for (int i=26; i<=38; i++){cards[i] = (i-26+1)+32;};//бубны
    for (int i=39; i<=51; i++){cards[i] = (i-39+1)+16+32;};//черви
    
    Shuffle(); Shuffle(); Shuffle(); //Надо именно 3 раза!
}
bool deck::ConvertCard(unsigned char card, char* dest){
    unsigned char suit, value;
    suit = (card>>4);
    value = (card&0xF);
    if (value == 1) dest[0]='2';
    if (value == 2) dest[0]='3';
    if (value == 3) dest[0]='4';
    if (value == 4) dest[0]='5';
    if (value == 5) dest[0]='6';
    if (value == 6) dest[0]='7';
    if (value == 7) dest[0]='8';
    if (value == 8) dest[0]='9';
    if (value == 9) dest[0]='T';
    if (value == 10) dest[0]='J';
    if (value == 11) dest[0]='Q';
    if (value == 12) dest[0]='K';
    if (value == 13) dest[0]='A';
    if (suit == 0) dest[1]=6;//в™*
    if (suit == 1) dest[1]=5;//в™Ј
    if (suit == 2) dest[1]=4;//♦
    if (suit == 3) dest[1]=3;//♥
 
return 0;
}
 
unsigned char deck::GetCard(){
    char buff=0;
    for (int i=0; i<=51; i++){
        if(cards[i]!=255){buff = cards[i]; cards[i]=255; return buff;}
    }
    return 255; //ошибка, в колоде нет карт
}
void deck::Shuffle(){
    unsigned char buff, index;
    
    
    
    for(int i=0; i<=51; i++){
        index = rand()%52;
        buff = cards[i];
        cards[i]=cards[index];
        cards[index]=buff;
    }
}
unsigned char deck::CardFromStr(char* card){
    unsigned char buff = 255;
    if (card[0]=='2') buff=1;
    if (card[0]=='3') buff=2;
    if (card[0]=='4') buff=3;
    if (card[0]=='5') buff=4;
    if (card[0]=='6') buff=5;
    if (card[0]=='7') buff=6;
    if (card[0]=='8') buff=7;
    if (card[0]=='9') buff=8;
    if (card[0]=='T') buff=9;
    if (card[0]=='J') buff=10;
    if (card[0]=='Q') buff=11;
    if (card[0]=='K') buff=12;
    if (card[0]=='A') buff=13;
    if (buff==255) return 255;
    if (card[1]=='s') buff+=0;
    if (card[1]=='c') buff+=16;
    if (card[1]=='d') buff+=32;
    if (card[1]=='h') buff+=32+16;
    return buff;
}
bool deck::RemoveCard(unsigned char card){
    for (int i=0; i<=51; i++){
        if(cards[i]==card){cards[i]=255; return 0;}
    }
    return 1;
}
Почему мешать надо именно 3 раза. Хороший вопрос. А потому что либо функция rand() выдаёт чтото не случайное, либо алгоритм не случайный.

Я неполенился и проверил насколько случайно помешана колода (мне это важно)
И был сильно удивлён. Я мерял как часто скажем Туз пик оказывался на каком месте в колоде.
Так вот. при одном мешании при 10000 раздач. Разница между самым частым местом и самым редким = порядка 1000!!
При 2х мешаниях уже порядка 500
А при трёх в среднем уже порядка 300 и дальше не падает (ввиду нормального распределения)
Цыфры по памяти, може где ошибка, но суть верна.
Yandex
Объявления
28.02.2013, 14:30     алгоритм для раздачи карт
Ответ Создать тему
Опции темы

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