Понедельник, 29.04.2024, 08:36
Приветствую Вас Гость | RSS
Главная | БЛОГ | Регистрация | Вход
Меню сайта
Форма входа
Категории раздела
WEB-Дизайн [2]
HTML, CSS, JAVA-Script
PHP [2]
Описание языка, скрипты, работа с MySQL
Технология .NET [6]
C#, ASP, основные принципы
Операционные системы [1]
Linux [1]
Все о Linux.
Бытиё [1]
Моя жизнь, мысли, переживания и размышления...
Поиск
Календарь
«  Март 2009  »
ПнВтСрЧтПтСбВс
      1
2345678
9101112131415
16171819202122
23242526272829
3031
Архив записей
Наш опрос
На каком языке вы предпочитаете программировать?
Всего ответов: 791
Друзья сайта
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Блог йуного кодера
Главная » 2009 » Март » 12 » Мешаем карты на C#
14:35
Мешаем карты на C#

1. Создаем колоду.


Я думаю, ни для кого не секрет, что 2 основные составляющие игральной карты – это масть и значение карты. Вот от этого и будем отталкиваться при создании колоды.


В этой статье нам не понадобится графическая оболочка, поэтому просто создадим консольный проект. А затем, для удобства, сразу новый класс и назовем его Class.cs.
Для начала нам нужно создать 2 списка-перечисления(enum) для описания всех возможных карт. CardRank – перечисление значений, и CardSuit – мастей:


  1. // Значения мастей  
  2. public enum CardSuit : int  
  3. {  
  4. Clubs = 0, //крести  
  5. Diamond = 1, // бубны  
  6. Hearts = 2, // червы  
  7. Spades = 3 // пики  
  8. }  
  9. // Значения карт  
  10. public enum CardRank : int  
  11. {  
  12. Ace = 0,  
  13. Two = 1,  
  14. Three = 2,  
  15. Four = 3,  
  16. Five = 4,   
  17. Six = 5,  
  18. Seven = 6,  
  19. Eight = 7,  
  20. Nine = 8,  
  21. Ten = 9,  
  22. Jack = 10,  
  23. Queen = 11,  
  24. King = 12  
  25. }  

Далее вот из этих двух списков нам необходимо создать колоду карт. Каждой карте мы присвоим свой уникальный ID путем простого арифметического действия. Пусть y нас y будет ID карты, a – значение карты, а b – масть карты. Формула тогда будет следующая – y=a*4 + b. Следую простой логике и этой формуле у нас получится 52 уникальных ID карты со значениями от 0 до 51 включительно. Теперь напишем функцию для определения этих самых айдишников через масть и значение:



  1. // Функция нахождения ID карты по масти и значению  
  2. public int ToCardNo(CardSuit suit, CardRank rank)  
  3. {  
  4.     int cardNo = ((int)rank) * 4 + ((int)suit);  
  5.     return cardNo;  
  6. }  

Думаю тут все просто. Функция с возвращением переменной типа int, за входящие параметры принимает 2 перечисления, описанных нами выше, и производит над ними простейшую арифметическую операцию, предварительно конвертируя их в числовые значения.

Теперь нам необходимо произвести обратную конвертацию карты, то есть из айдишника получить масть и значение. Тут формулы будут еще проще.
Для получения значение карты нам нужно ID поделить на 4. То есть a = y/4, остаток отбрасываем, так как нам пока масть не важна и получаем целое число – значение. Функция будет следующая:


  1. // Значение карты по ID   
  2.         public CardRank ToCardRank(int cardNo)  
  3.         {  
  4.             return (CardRank)(cardNo / 4);  
  5.         }  

А для получения масти нам нужно наоборот получить остаток от деления айдишника на 4: a = y%4.


  1.  // Масть карты по ID  
  2.  public CardSuit ToCardSuit(int cardNo)  
  3.  {  
  4.      return (CardSuit)(cardNo % 4);  
  5. }  


Все гениальное просто ).


Теперь на примере попробуем как эти преобразования работают. В основном классе нашего проекта пишем следующее:


  1. cards cd = new cards();  
  2. for (int i = 0; i < 52; i++)  
  3. {  
  4.     int j = i + 1; // Номер карты  
  5.     string rank = cd.ToCardRank(i).ToString();  
  6.     string suit = cd.ToCardSuit(i).ToString();  
  7.   
  8.     Console.WriteLine("{0} карта - {1} {2}", j, rank, suit);  
  9. }  
  10. Console.ReadLine();  

После компиляции этого примера нам будет показана вся колода: 1 карта – Ace Clubs, 2 карта – Ace Diamond и так далее все 52 карты. Мы создали цикл от 0 до 51, задали эти значения как айдишники карт и пустили по кругу 2 формулы, описанные выше. Пожалуй с эти закончим.

2. Мешаем карты.


И так у нас есть 52 карты и теперь нам их нужно перемешать. Для начала создадим массив чисел от 0 до 51:



  1. List<int> deck = new List<int>();  
  2. for (int i = 0; i < 52; i++)  
  3. {  
  4.     deck.Add(i);  
  5. }   


Далее создаем функцию, которая и будет перемешивать наш массив:


  1.         public static void ShuffleList(List<int> list)  
  2.         {  
  3.             Random rand = new Random();  
  4.             for (int i = 0; i < list.Count; i++)  
  5.             {  
  6.                 int tmp = list[i];  
  7.                 list.RemoveAt(i);  
  8.                 list.Insert(rand.Next(0, list.Count), tmp);  
  9.             }  
  10.         }  

В цикле перемещаемся по массиву, удаляя каждый элемент и вставляя его в случайную позицию. Заметьте: код генерирует случайное число, используя новый объект Random при каждом вызове метода; это лучше, чем создание одного объекта Random для всей программы. Вот и все, теперь в нужной нам части кода применяем эту функцию на наш массив и перемешанная колода готова!




Для наглядности давайте попробуем раздать карты на двух человек как при игре в «дурака» по принципу, описанному выше:


  1. // Карты первому игроку  
  2. for (int i = 0; i < 6; i++)  
  3. {  
  4.     int j = deck[i];  
  5.     string rank = cd.ToCardRank(j).ToString();  
  6.     string suit = cd.ToCardSuit(j).ToString();  
  7.     Console.WriteLine("Карты первому игроку:");  
  8.     Console.WriteLine("{0} {1}", rank, suit);  
  9. }  
  10.   
  11. Console.WriteLine("=================");  
  12. // Карты второму игроку  
  13. for (int i = 6; i < 11; i++)  
  14. {  
  15.     int j = deck[i];  
  16.     string rank = cd.ToCardRank(j).ToString();  
  17.     string suit = cd.ToCardSuit(j).ToString();  
  18.     Console.WriteLine("Карты второму игроку:");  
  19.     Console.WriteLine("{0} {1}", rank, suit);  
  20. }  
  21. Console.ReadLine();  


Берем первые шесть карт перемешанного массива, заводим новую переменную j как айдишник карты и в цикле осуществляем функции перевода ID в масть и значение.

В следующих статьях я расскажу как подобные вещи использовать в графическом интерфейсе, используя изображения карт. А пока извините, пора домой )

Категория: Технология .NET | Просмотров: 23341 | Добавил: dblog | Рейтинг: 5.0/1
Всего комментариев: 8
1 AnaestWhant  
0
Earn up to $3500/month just by taking simple surveys online!

I tried one of those online survey sites about 4 months ago that
say all you have to do is spend a couple of minutes filling out
some surveys and you will be making hundreds a day..... YEAH RIGHT, I didn't make anything.

I joined 7 of these stupid websites and I actually tried filling
out a couple of surveys on each site and they took forever then at
the end they wanted me to buy things or I couldn't complete the
survey.

These are complete scams so be aware!!! I couldn't believe they
were even allowed to sell such bogus products.

Then about 2 weeks ago I was watching the news and they had some
vice presidents and marketing managers of some major multi million
dollar companies talking about a site that they personally work
with to pay consumers for their opinion, A site that actually just
wants the "average Joe's" honest opinion on products and services
and is willing to pay big money to get them. for more information
clik here: http://take-survey-and-get-money.info

2 GrireeChera  
0
то что я искал, спасибо

3 Guefreria  
0
http://filmvkom.ru/khkhkh-onlajjn/ -
видео порно смотреть бесплатно онлайн

4 web traffic  
0
Most powerful&cost effective SEO and website traffic service in world get up to 100’000 forum backlinks now!

Your dblog.ucoz.ru website will get thousands of visitors/day using best backlink blast available. See proof how website traffic increased from 400 to 4000 visitors/day and how your website can get same results - http://get-more-web-traffic.net

We can post your marketing post up to 100’000 forums around the web, so your site get thousands of backlinks
and as a result your web page will be ranked #1 positions in search engines and your website will get amazing amount of free, targeted online web traffic from search engines in shortest time.

Most affordable and most powerful service for web traffic and backlinks in the world!

Are you ready to for massive traffic flood to your site? If yes then Order now: http://get-more-web-traffic.net

5 KioltgetolKiz  
0
Как Вы считаете, на сколько поднимутся http://profwoomen.ru/ - пенсии после нового года?

6 zone 4 english roses  
0
amelia lily x factor tour http://pansiesflowers.webs.com - lilypichu yuri lily munster elvira
water lily forever http://growyourbuttercup.webs.com - calendula tropfen von weleda roses 12
petunia pickle bottom scottish highlands boxy backpack http://growtulips.webs.com - lily ann village booking tulip gardens netherlands pictures
peony yip website http://plantpetunia.webs.com - quotes from the great gatsby by nick carraway calla lily band
dahlia horse feathers http://cornflowers.webs.com - carnation revolution in portugal tulip restaurant milwaukee coupon
tulip care pumping station cottage http://dahliaflowers.webs.com - camellia sasanqua edna butler lily of the valley grow
lavender in provence by perez http://growinglily.webs.com - lavender tea make krokus park husum
roses for the dead tabs http://growtulips.webs.com - origami daisy game instructions adderley cornflower tea cup
peony asian bistro menu durham http://pansiesflowers.webs.com - azalea village apartments west palm beach 40 years lily of the valley
petunia debonair dusty rose http://lilyofthevalleygrow.webs.com - daisy zhang bnp lily munster imagenes

7 Volkswagen презентовал универсал Gran Lavida  
0
На базе Mercedes SLS AMG построят GWA 300 SLC

---
(с) http://uatuning.com/news/ford-f-150-raptor-halo-4-ot-galpin-auto-sports.html - Ford F-150 Raptor Halo 4 от Galpin Auto Sports

8 Peonmxtfsh  
0
mehow it was a tradition to go to church every Sunday, then go home and watchWalter
Payton.Through the manifold, caustic soda is dosed by a proportioning pump into the sulphonic acidto
http://tomsskosalgno.webpaper.co/ - toms sko norge

my PC faster - step-by-step?Initially you ought honest software
i just use software from dependable base like the on I mentionyou on this point. It
is indispensable that your software was
http://tomsskosalgno.webpaper.co/ - toms sko tilbud

to be connected with via
the site. The fact the provider has paid to befeatured denotes a commitment to the professionalism
in fact a registered U.K company.If you've been digging around
http://tomsskonett.webpaper.co/ - toms sko norge

cake in such a way that everyone believes he has the biggest
piece.Susie Grindler Heck Jules once shoved an orange Tic Tac up his nose. The English settledJamestown,
Va. (1607); Plymouth,
http://tomsskonett.webpaper.co/ - toms sko nettbutikk

of
either of the erectile chambers.It must have been worse for educators in thestate of Oklahoma, as
their largest educational institutions were going through embarrassing scandals. 4. With theloss of their
http://tomsskonett.yolasite.com/ - toms sko

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Бесплатный хостинг uCozCopyright MyCorp © 2024