Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 14.06.2015
Сообщений: 25

Srand в карточной игре

28.07.2015, 06:55. Показов 1035. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
подскажите как сделать так что бы
srand выдавал числа в диапазоне от 1 до 36 без повторов
можно ли это сделать без массивов ?

делаю задание ( создать игру 21) это для понимания для чего мне это нужно

мне нужно что бы ни игроку ни компьютеру не попадались карты которые уже были

пишу в visual studio
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.07.2015, 06:55
Ответы с готовыми решениями:

Как сделать систему ходов в карточной игре?
Здравствуйте,я делаю карточную игру,но столкнулся с тем,что не знаю как сделать ходы по очереди,тоесть, чтобы игроки ходили по...

Алгоритм ходов компьютера в карточной игре "Дурак"
Здравствуйте. Помогите пожалуйста с реализацией алгоритма ходов компьютера. Я понимаю что должно быть что-то по типу просчета количесва...

Ошибка в карточной игре
задание на практике по паскалю: написать игру пары, т.е. вытаскиваем два карты если они совпадают то убираются, если нет то остается...

11
Заблокирован
28.07.2015, 10:35
Цитата Сообщение от Clive Посмотреть сообщение
как сделать так что бы
srand выдавал числа в диапазоне от 1 до 36
srand не выдаёт числа, он лишь настраивает "зерно", выдаёт значения функция rand.
В двух словах, rand - это псевдослучайные числа, srand нужен для создания видимости случайности, то есть если ты сделаешь по классике srand ( time(NULL) );, то твой rand будет каждый раз выдавать случайные числа, т.к. время будет всё время разным. В общем, rand выдаёт одну и ту же последовательность чисел для одинаковых аргументов srand, вызванных перед ним.

Цитата Сообщение от Clive Посмотреть сообщение
без повторов
можно ли это сделать без массивов ?
нет, т.к. тебе нужно где то ловить эти повторы.

В общем вот твой код:
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
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <set>
#include <vector>
 
int main()
{
    srand(time(NULL)); //генерим булщить, чтоб числа были случайные на этот раз
    std::set<int> uniqueData; //чисто для того, что б накопить 35 уникальных значений
    std::vector<int> result;
    while(uniqueData.size() < 35) //тебе нужно 35 чисел, раз с 1-го ...
    {
        int randNumber = rand() % 36 + 1; //до 36-и за счёт %36, от одного за счёт + 1
        if(uniqueData.count(randNumber) == 0)
        {
            result.push_back(randNumber); //добавляю в результат и они там будут в порядке добавления
            uniqueData.insert(randNumber); //если б результат брал отсюда, было бы просто 35 чисел по возрастанию, т.к. set и map - сортированны по умолчанию
        }
    }
 
    std::cout << "Result:" << std::endl;
    for(int i = 0; i < result.size(); i++)
        std::cout << "value " << i << " : " << result[i] << std::endl;
 
    int x;
    std::cin >> x;  //чтоб программа в левых IDE сразу не вылетала и ты мог видеть рузельтат
 
    return 0;
}
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
28.07.2015, 10:38
Делается это не через рендмо 1 к 36.

1) Создать класс карта
2) создать класс колода из карт
3) создать класс дилер, который имеет 3-4 колоды( у вас почему только 1 колода) :
3.1) дилер перед игрой сортирует колоду рендомно и потом тупо вытягивает верхнюю карту.

Добавлено через 2 минуты
Butt-Head, Ну вы поняли ))))) Алгоритм не вах.
0
Эксперт PHP
 Аватар для Kerry_Jr
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
28.07.2015, 10:42
Цитата Сообщение от Butt-Head Посмотреть сообщение
тебе нужно 35 чисел
В колоде 36 карт, почему 35-то???
0
Заблокирован
28.07.2015, 11:18
Цитата Сообщение от Kerry_Jr Посмотреть сообщение
В колоде 36 карт, почему 35-то???
ТС говорил
Цитата Сообщение от Clive Посмотреть сообщение
srand выдавал числа в диапазоне от 1 до 36 без повторов
я про игру даже и не думал

Цитата Сообщение от rikimaru2013 Посмотреть сообщение
Ну вы поняли ))))) Алгоритм не вах.
Да... я особо не заморачивался.
Ну раз сам понт кинул - покажи лучше, ради спортивного интереса
0
28.07.2015, 11:36

Не по теме:

Цитата Сообщение от Butt-Head Посмотреть сообщение
ТС говорил
Враки, ни слова о 35. От 1 до 36 - это 36.

0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
28.07.2015, 11:49
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <vector>
#include <algorithm>
 
int main( )
{
    const int deckSize = 36;
    std::vector<int> deck;
 
    for(int i = 0; i < deckSize; i++)
        deck.push_back( i + 1 );
 
    std::random_shuffle( deck.begin( ), deck.end( ) );
 
    for(int i = 0; i < deckSize; i++)
        std::cout << deck[i] << " ";
 
    return 0;
}
Добавлено через 15 секунд
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <vector>
#include <algorithm>
 
int main( )
{
    const int deckSize = 36;
    std::vector<int> deck;
 
    for(int i = 0; i < deckSize; i++)
        deck.push_back( i + 1 );
 
    std::random_shuffle( deck.begin( ), deck.end( ) );
 
    for(int i = 0; i < deckSize; i++)
        std::cout << deck[i] << " ";
 
    return 0;
}
0
Заблокирован
28.07.2015, 12:03
Цитата Сообщение от Kerry_Jr Посмотреть сообщение
Враки, ни слова о 35.
Слова скрыты между строк. Вникай внимательно:
Цитата Сообщение от Clive Посмотреть сообщение
srand выдавал числа в диапазоне от 1 до 36 без повторов
Что бы генератор случайных чисел выдал числа от 1 до 36 без повторов, он должен выдать ровно 35 чисел

rikimaru2013, рандом шафл оййойой, как круто Но по условиям TC-а, следует использовать именно srand и rand!
Так то можно было бы заюзать #include <random>, глянь тут пример - http://en.cppreference.com/w/c... stribution
0
Эксперт PHP
 Аватар для Kerry_Jr
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
28.07.2015, 12:29
Цитата Сообщение от Butt-Head Посмотреть сообщение
он должен выдать ровно 35 чисел
а ничего страшного, если я повторюсь и скажу, что в колоде 36 карт, а от 1 до 36 - это 36 чисел, т.к. 36 входит в диапазон. А теперь посмотри на свой код, который генерирует числа от 1 до 36 включительно, но записывает в вектор только 35 из них.
0
Заблокирован
28.07.2015, 12:50
Цитата Сообщение от Kerry_Jr Посмотреть сообщение
а от 1 до 36 - это 36 чисел, т.к. 36 входит в диапазон
Да, действительно
Цитата Сообщение от Kerry_Jr Посмотреть сообщение
А теперь посмотри на свой код, который генерирует числа от 1 до 36 включительно, но записывает в вектор только 35 из них.
На самом деле он генерить от 1-го до 37-и, так что там много косяков, короче должно быть так:
C++
1
2
3
while(uniqueData.size() < 36) 
    {
        int randNumber = rand() % 35 + 1;
Добавлено через 16 секунд
Цитата Сообщение от Kerry_Jr Посмотреть сообщение
а от 1 до 36 - это 36 чисел, т.к. 36 входит в диапазон
Да, действительно
Цитата Сообщение от Kerry_Jr Посмотреть сообщение
А теперь посмотри на свой код, который генерирует числа от 1 до 36 включительно, но записывает в вектор только 35 из них.
На самом деле он генерить от 1-го до 37-и, так что там много косяков, короче должно быть так:
C++
1
2
3
while(uniqueData.size() < 36) 
    {
        int randNumber = rand() % 35 + 1;
0
Эксперт PHP
 Аватар для Kerry_Jr
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
28.07.2015, 13:13
Цитата Сообщение от Butt-Head Посмотреть сообщение
от 1-го до 37-и,
теперь, видимо, мне придется биться головой о стену и доказывать, что твой код правильно генерировал от 1 до 36. 36%36 = 0, поэтому rand() % 36 + 1 будет генерировать числа от 1 до 36 включительно.

Добавлено через 3 минуты
только это здесь не нужно. Проще тупо заполнить в цикле числами от 1 до 36 и не мучиться с рандомом.

Добавлено через 15 секунд
только это здесь не нужно. Проще тупо заполнить в цикле числами от 1 до 36 и не мучиться с рандомом.
1
0 / 0 / 0
Регистрация: 14.06.2015
Сообщений: 25
28.07.2015, 22:59  [ТС]
Всем спасибо сделал через Массив ( хоть мы его еще не проходили) но вроде все получается
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.07.2015, 22:59
Помогаю со студенческими работами здесь

Взаимодействие классов в карточной игре
Здравствуйте! Сейчас я пытаюсь написать клон вот этой игры. Есть вопрос по взаимодействию классов - Есть класс карта, который...

Ход сервера в карточной игре
Добрый вечер. Есть маленькая игра(для примера урежем её до минимума-я ставлю белое, сервер, в ответ, черное). Мне нужно реализовать вот...

Комбинации в карточной игре Суперпокер
Здравствуйте все участники форума. Недавно наткнулся в интернете на интересную колоду карт, называется 5 dimension. В колоде добавлена...

Тип переменной для колоды в карточной игре
Пишу карточную игру, необходима переменная deck, из которой карты доставать(с удалением из переменной) можно по очереди, доставать...

Как в карточной игре раздать карты и знать их значения
Доброго времени суток. В университете, дали проект создать веб карточную игру. Решил использовать как основной язык PHP. Все хорошо...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru