Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

4Poker + C++ = ;(

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
Sorokano
Гость





СообщениеДобавлено: Пт Авг 30 2002 18:12    Заголовок сообщения: 4Poker + C++ = ;( Ответить с цитатой

У меня имеется колода карт,которую я инициализировал след. образом:
int* deck=new int[53];
deck[1]=11; deck[2]=21;...deck[52]=134;
У меня есть 52 карты в массиве.1-му элемиенту присвоил туза крестей, 2му-двойку кр,3му-тройку и т.п. Колода не перемешана.Я ее перемешиваю функцией:
int n = floor(400*random_numb()+500);
for ( int i равно 1;; i меньше n;; i + +)
//{
int card1 = floor(52*random_numb());
int card2 = floor(52*random_numb());
int temp = deck[card2];
deck[card2]=deck[card1];
deck[card1]=temp;
}
она работает как надо: выбирается произвольное число и на его основе создаем цикл. За цикл выбираются 2 карты
и переразмешиваются в колоде.Когда после цикла я обращаюся к первым 5 картам колоды, которые должны быть случайными,
мне выдается расклад: крест туз, крест. двойка, тройка, четверка и пятерка!
После поиска в инете я обнаружил что
переменные в цикле FOR в C++ умирают после завершения цикла...ОБЛОМ!
ЧТО ДЕЛАТЬ, ЛЮДИ ДОБРЫЕ!??!?!?!?!
S.O.S. Заранее спасибо,Sorokano.
Вернуться к началу
Борис
Гость





СообщениеДобавлено: Пт Авг 30 2002 19:05    Заголовок сообщения: Re: 4Poker + C++ = ;( Ответить с цитатой

1) Случайная функция не гарантирует, что выберет все значения из диапазона. Посмотри на распределение Гаусса и поймешь, почему крайние значения диапазона оказались нетронутыми.
2) Переменные, объявленные внутри блока (ты, наверное, подразумевал "блока", а не "цикла"), действительно умирают при выходе из блока, и это надо было обнаружить не в инете, а в учебнике по C++. Но в данном случае они ни при чем.
3) Думаю, что ты хотел внутри своего цикла сделать еще один цикл по картам и каждую обменять со случайной картой (то есть int card1 = номер_карты;
int card2 = floor(52*random_numb())Wink, а не выбирать случайные две, так как при выборе случайных двух выбор крайних не гарантирован, вот у тебы крайние и остались не перемешанными.

Все это, конечно, IMHO.
Вернуться к началу
Sorokano
Гость





СообщениеДобавлено: Пт Авг 30 2002 23:19    Заголовок сообщения: Re: 4Poker + C++ = ;( Ответить с цитатой

Что вы имели ввиду под "номером карты"?(пункт 3)
И что вы имели ввиду под "ты хотел внутри своего цикла сделать еще один цикл по картам "?

Заланее спсибо,
Sorokano.
Вернуться к началу
Sorokano
Гость





СообщениеДобавлено: Сб Авг 31 2002 01:00    Заголовок сообщения: Re: 4Poker + C++ = ;( Ответить с цитатой

Может плохое перемешивание колоды связано с функцией random_num в которой используется srand(time(NULL)), цикл проходит слишком быстро поэтому "случайный" номер все время более не менее тот же...
Не могли бы вы тут мне что-нибудь посоветовать?
Буду очень благодарен!!!

Sorokano.
Вернуться к началу
Раф



Зарегистрирован: 31.08.2002
Сообщения: 5
Откуда: Череповец

СообщениеДобавлено: Сб Авг 31 2002 03:44    Заголовок сообщения: Re: 4Poker + C++ = ;( Ответить с цитатой

Я еще не знаю C++(тока учу Smile), но подсказать могу...
Все делается чуточку иначе: нужно создать массив (True/False), в который будет записываться, перемешивалась данная карта или нет. Если выбранная карта уже размешивалась, то просто ищем следующее случаайное число. Конечно не оптимально, но на Delphi работает прекрасно (игра Морской бой Smile
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Борис
Гость





СообщениеДобавлено: Сб Авг 31 2002 16:19    Заголовок сообщения: Re: 4Poker + C++ = ;( Ответить с цитатой

Я имел ввиду следующее:
вместо

for ( int i равно 1;; i меньше n;; i + +)
//{
int card1 = floor(52*random_numb());

написать

for ( int i равно 1;; i меньше n;; i + +)
for ( int card1 равно 1;; card1 меньше или равно 52;; card1 + +)
//{

что гарантирует, что каждая карта с какой-нибудь поменяется

PS. Если пишем на C/C++, то приучаемся нумерацию начинать с нуля Smile
Вернуться к началу
Борис
Гость





СообщениеДобавлено: Сб Авг 31 2002 17:23    Заголовок сообщения: Во-во. Случайным образом выбрать из еще неперемешанных новую карту и перемешать, и так пока не кончатся, то есть перебрать ВСЕ Ответить с цитатой

Smile
Вернуться к началу
Раф



Зарегистрирован: 31.08.2002
Сообщения: 5
Откуда: Череповец

СообщениеДобавлено: Сб Авг 31 2002 18:04    Заголовок сообщения: Re: Во-во. Случайным образом выбрать из еще неперемешанных новую карту и перемешать, и так пока не кончатся, то есть перебрать Ответить с цитатой

ну да... можно последовательно выбирать все ЕЩЕ не перемешанные карты... Smile
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Sorokano
Гость





СообщениеДобавлено: Вс Сен 01 2002 14:38    Заголовок сообщения: Re: Огромное ПАСИБО! Все получилось как надо! :)) Ответить с цитатой

ОГРОМНОЕ ПАСИБО!
Sorokano
Вернуться к началу
Sorokano
Гость





СообщениеДобавлено: Вс Сен 01 2002 14:40    Заголовок сообщения: Re: :Ждите появления в инете новой супер игрухи! :)) хехехе Ответить с цитатой

Ждите появления в инете новой супер игрухи! Smile) хехехе
Sorokano.
Вернуться к началу
Andy-C
Гость





СообщениеДобавлено: Пн Сен 02 2002 08:09    Заголовок сообщения: Re: 4Poker + C++ = ;( Ответить с цитатой

Но человек тасует колоду не так.
Может красивее эмулировать действия человека.

- делит колоду примерно поровну, кладёт ч/з одну,
- делит на 2-5 частей меняет местами,
- берёт "сначала" 2-7 карт, кладёт "в конец",
и т.п. в сочетаниях?
Вернуться к началу
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...