Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 1
Регистрация: 30.07.2016
Сообщений: 122

Покер - не работает совпадение

17.11.2016, 17:16. Показов 816. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Я новичок. Я самостоятельно написал код, который создаёт карты по ранку и масти двум игрокам, только логики моей не хватило, чтобы правильно сделать сравнение на совпадение одинаковых карт. В итоге два игрока могут иметь идентичные карты на руках. Я понимаю, что подобных тем на этом форуме много, но я прошу вас помочь мне с моим кодом, так как я вроде как понимаю его логику. И сделан он буквально на пальцах
Кликните здесь для просмотра всего текста
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace PokerGame
{
    class Program
    {
        static void Main()
        {
            while (Console.ReadKey().Key == ConsoleKey.Enter)
            {
                Random random = new Random();
 
                int rank;
                int suit;
 
                int[] card = new int[2];
 
                for (int a = 0; a < card.Length; a++)
                {
                    rank = random.Next(0, 13);
                    suit = random.Next(0, 4);
 
                    if (a == 0) card[a] = rank;
                    if (a == 1) card[a] = suit;
                }
 
                int[,] cards = new int[2, 2];
 
                for (int a = 0; a < 2; a++)
                {
                    for (int c = 0; c < card.Length; c++)
                    {
                        rank = random.Next(0, 13);
                        suit = random.Next(0, 4);
 
                        if (c == 0) card[c] = rank;
                        if (c == 1) card[c] = suit;
                    }
 
                    for (int b = 0; b < 2; b++)
                    {
                        if (b == 0) cards[a, b] = card[0];
                        if (b == 1) cards[a, b] = card[1];
 
                        do
                        {
                            if (cards[0, 0] == cards[1, 0]) // Если есть совпадения, то генерируются новые данные карты.
                            {
                                if (cards[0, 1] == cards[1, 1])
                                {
                                    for (int c = 0; c < card.Length; c++)
                                    {
                                        rank = random.Next(0, 13);
                                        suit = random.Next(0, 4);
 
                                        if (c == 0) card[c] = rank;
                                        if (c == 1) card[c] = suit;
                                    }
                                }
                            }
 
                            if (cards[0, 1] == cards[1, 1]) // Если есть совпадения, то генерируются новые данные карты.
                            {
                                if (cards[0, 0] == cards[1, 0])
                                {
                                    for (int c = 0; c < card.Length; c++)
                                    {
                                        rank = random.Next(0, 13);
                                        suit = random.Next(0, 4);
 
                                        if (c == 0) card[c] = rank;
                                        if (c == 1) card[c] = suit;
                                    }
                                }
                            }
                            break;
                        } while (true);
                    }
                }
                Console.Clear();
                Console.WriteLine("Игрок 1 - Ранк: {0} Масть: {1}", cards[0, 0], cards[0, 1]);
                Console.WriteLine();
                Console.WriteLine("Игрок 2 - Ранк: {0} Масть: {1}", cards[1, 0], cards[1, 1]);
            }
            Console.ReadKey();
        }
    }
}


Добавлено через 18 минут
Подскажите пожалуйста, как делать функцию. Я в функцию запишу создание новых карт, и если будут совпадения, то заново вызывать их, а не переписывать код заново.

Добавлено через 6 минут
Я вывел do while за пределы цикла for. Теперь должно работать. Только я не знаю, как проверить это. Буду вручную тестировать

Кликните здесь для просмотра всего текста
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace PokerGame
{
    class Program
    {
        static void Main()
        {
            while (Console.ReadKey().Key == ConsoleKey.Enter)
            {
                Random random = new Random();
 
                int rank;
                int suit;
 
                int[] card = new int[2];
 
                for (int a = 0; a < card.Length; a++)
                {
                    rank = random.Next(0, 13);
                    suit = random.Next(0, 4);
 
                    if (a == 0) card[a] = rank;
                    if (a == 1) card[a] = suit;
                }
 
                int[,] cards = new int[2, 2];
 
                for (int a = 0; a < 2; a++)
                {
                    for (int c = 0; c < card.Length; c++)
                    {
                        rank = random.Next(0, 13);
                        suit = random.Next(0, 4);
 
                        if (c == 0) card[c] = rank;
                        if (c == 1) card[c] = suit;
                    }
 
                    for (int b = 0; b < 2; b++)
                    {
                        if (b == 0) cards[a, b] = card[0];
                        if (b == 1) cards[a, b] = card[1];
                    }
                }
 
                do
                {
                    if (cards[0, 0] == cards[1, 0]) // Если есть совпадения, то генерируются новые данные карты.
                    {
                        if (cards[0, 1] == cards[1, 1])
                        {
                            for (int c = 0; c < card.Length; c++)
                            {
                                rank = random.Next(0, 13);
                                suit = random.Next(0, 4);
 
                                if (c == 0) card[c] = rank;
                                if (c == 1) card[c] = suit;
                            }
                        }
                    }
 
                    if (cards[0, 1] == cards[1, 1]) // Если есть совпадения, то генерируются новые данные карты.
                    {
                        if (cards[0, 0] == cards[1, 0])
                        {
                            for (int c = 0; c < card.Length; c++)
                            {
                                rank = random.Next(0, 13);
                                suit = random.Next(0, 4);
 
                                if (c == 0) card[c] = rank;
                                if (c == 1) card[c] = suit;
                            }
                        }
                    }
                    break;
                } while (true);
 
                Console.Clear();
                Console.WriteLine("Игрок 1 - Ранк: {0} Масть: {1}", cards[0, 0], cards[0, 1]);
                Console.WriteLine();
                Console.WriteLine("Игрок 2 - Ранк: {0} Масть: {1}", cards[1, 0], cards[1, 1]);
            }
            Console.ReadKey();
        }
    }
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.11.2016, 17:16
Ответы с готовыми решениями:

Сравнить каждый элемент с каждым, если есть совпадение, то соединить всю строку, в которой найдено совпадение
Доброго времени суток! Есть два массива строк разного размера (элементы массива разделены запятой). Необходимо сравнить каждый элемент с...

Как корректно работает FindNext (ищется только первое совпадение)
Доброе время суток. Подскажите, пожалуйста. Есть два листа с данными. На первом список ячеек, на втором все тоже самое. Все данные...

Покер
Даны 5 целых чисел. Среди них: * если одинаковы 5, то вывести &quot;Impossible&quot;, иначе * если одинаковы 4, то вывести &quot;Four of a...

18
 Аватар для Pro100Tom
154 / 31 / 11
Регистрация: 29.10.2012
Сообщений: 397
17.11.2016, 17:17
Перепеши код так, чтобы сначала генерировалась колода (список), а потом просто вытаскивай карты из этой колоды игрокам (доставай и удаляй этот элемент из списка). И проверять ничего не надо будет на счёт одинаковых карт. Пиши алгоритмы таким образом, чтобы они были максимально приближены к реальности. Представь, как в реале процесс проходит: приходят люди, достаётся колода, мешается колода, карты расдаются игрокам (причём сверху и по одной: сначала одну первому игроку, потом одну второму, потом вторую первому и так далее). Расбросай весь код на функции и не повторяйся. Давай имена функциям таким образом, чтобы они точно отображали, что они делают. Если в функции происходит что-то ещё, то создавай ещё одну и так далее. Код должен быть читабелен.
1
0 / 0 / 1
Регистрация: 30.07.2016
Сообщений: 122
17.11.2016, 17:23  [ТС]
Добавил вот это для проверки:
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
                if (cards[0, 1] == cards[1, 1])
                {
                    if (cards[0, 0] == cards[1, 0])
                    {
                        Console.WriteLine("Есть совпадение");
                    }
                }
 
                if (cards[0, 0] == cards[1, 0])
                {
                    if (cards[0, 1] == cards[1, 1])
                    {
                        for (int c = 0; c < card.Length; c++)
                        {
                            Console.WriteLine("Есть совпадение");
                        }
                    }
                }


Добавлено через 2 минуты
Цитата Сообщение от Pro100Tom Посмотреть сообщение
Перепеши код так, чтобы сначала генерировалась колода (список), а потом просто вытаскивай карты из этой колоды игрокам (доставай и удаляй этот элемент из списка). И проверять ничего не надо будет на счёт одинаковых карт. Пиши алгоритмы таким образом, чтобы они были максимально приближены к реальности. Представь, как в реале процесс проходит: приходят люди, достаётся колода, мешается колода, карты расдаются игрокам (причём сверху и по одной: сначала одну первому игроку, потом одну второму, потом вторую первому и так далее). Расбросай весь код на функции и не повторяйся. Давай имена функциям таким образом, чтобы они точно отображали, что они делают. Если в функции происходит что-то ещё, то создавай ещё одну и так далее. Код должен быть читабелен.
Спасибо. Ты не поверишь я так и хотел сделать сначала. Но отсутствие опыта дало о себе знать. Я делал так, как понимаю код. Я вообще обладаю знаниями, как работает переменная, цикл и условие и то на шатком уровне. Вот пытаюсь закреплять их с помощью таких вот исследований

Добавлено через 1 минуту
Вот общий код. Как показала проверка, совпадения действительно есть. Буду думать над алгоритмом.
Кликните здесь для просмотра всего текста
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace PokerGame
{
    class Program
    {
        static void Main()
        {
            while(true)
            //while (Console.ReadKey().Key == ConsoleKey.Enter)
            {
                Random random = new Random();
 
                int rank;
                int suit;
 
                int[] card = new int[2];
 
                for (int a = 0; a < card.Length; a++)
                {
                    rank = random.Next(0, 13);
                    suit = random.Next(0, 4);
 
                    if (a == 0) card[a] = rank;
                    if (a == 1) card[a] = suit;
                }
 
                int[,] cards = new int[2, 2];
 
                for (int a = 0; a < 2; a++)
                {
                    for (int c = 0; c < card.Length; c++)
                    {
                        rank = random.Next(0, 13);
                        suit = random.Next(0, 4);
 
                        if (c == 0) card[c] = rank;
                        if (c == 1) card[c] = suit;
                    }
 
                    for (int b = 0; b < 2; b++)
                    {
                        if (b == 0) cards[a, b] = card[0];
                        if (b == 1) cards[a, b] = card[1];
                    }
                }
 
                do
                {
                    if (cards[0, 0] == cards[1, 0]) // Если есть совпадения, то генерируются новые данные карты.
                    {
                        if (cards[0, 1] == cards[1, 1])
                        {
                            for (int c = 0; c < card.Length; c++)
                            {
                                rank = random.Next(0, 13);
                                suit = random.Next(0, 4);
 
                                if (c == 0) card[c] = rank;
                                if (c == 1) card[c] = suit;
                            }
                        }
                    }
 
                    if (cards[0, 1] == cards[1, 1]) // Если есть совпадения, то генерируются новые данные карты.
                    {
                        if (cards[0, 0] == cards[1, 0])
                        {
                            for (int c = 0; c < card.Length; c++)
                            {
                                rank = random.Next(0, 13);
                                suit = random.Next(0, 4);
 
                                if (c == 0) card[c] = rank;
                                if (c == 1) card[c] = suit;
                            }
                        }
                    }
                    break;
                } while (true);
 
                Console.Clear();
                Console.WriteLine("Игрок 1 - Ранк: {0} Масть: {1}", cards[0, 0], cards[0, 1]);
                Console.WriteLine();
                Console.WriteLine("Игрок 2 - Ранк: {0} Масть: {1}", cards[1, 0], cards[1, 1]);
 
                if (cards[0, 1] == cards[1, 1])
                {
                    if (cards[0, 0] == cards[1, 0])
                    {
                        Console.WriteLine("Есть совпадение");
                        break;
                    }
                }
 
                if (cards[0, 0] == cards[1, 0])
                {
                    if (cards[0, 1] == cards[1, 1])
                    {
                        for (int c = 0; c < card.Length; c++)
                        {
                            Console.WriteLine("Есть совпадение");
                            break;
                        }
                    }
                }
 
            }
            Console.ReadKey();
        }
    }
}
0
 Аватар для Pro100Tom
154 / 31 / 11
Регистрация: 29.10.2012
Сообщений: 397
17.11.2016, 17:24
Цитата Сообщение от Native16 Посмотреть сообщение
Подскажите пожалуйста, как делать функцию
Если в консольном окне то тогда тебе надо использоваь слово static. Сам погугли в чём разница. Тебе надо будет понять, что такое классы и как создавать их экземпляры. После этого сможешь понять, что такое static. Функции бывают публичные, защищённые и приватные (public, protected, private) (тоже погугли, пока используй private или public). Есть ещё internal, но забей. Потом указываешь тип, который функция будет возвращать (int, string). Если ничего не возвращает, то void. Потом пишешь название функции (сам придумываешь, как переменным). А потом указываешь аргументы (в скобках), то есть, что этой функции ты хочешь передать, чтобы она с этими работала. Представь математическую функцию f(x). x - это аргумент, который ты передаёшь, а y это результат, который функция возвращает. Тут тоже самое, только можно передавать кучу аргументов и причём разными способами, но это потом.

C#
1
2
3
4
private static int GetPower(int number)
{
return number * number;
}
Есть специальная функция, которая считает степерь, но я тут * использовал для наглядности.

Потом отдельно вызываешь функцию это вот так
C#
1
int power = GetPower(3);
Переменная power примет значение 9.

Создай новый чистый проект и просто поиграйся с функциями. Как поймёшь, возвращайся к покеру.
1
0 / 0 / 1
Регистрация: 30.07.2016
Сообщений: 122
17.11.2016, 17:29  [ТС]
Цитата Сообщение от Pro100Tom Посмотреть сообщение
Создай новый чистый проект и просто поиграйся с функциями. Как поймёшь, возвращайся к покеру.
да я не покер делаю. Я практикуюсь применять инструменты ЯП для создания программ. Я могу и шашки настольные делать. Лишь бы я понимал, как строятся алгоритмы. Надо бы поправить мою текущую версию раздачи карт игрокам. Так как она, по сути, рабочая.
0
 Аватар для Pro100Tom
154 / 31 / 11
Регистрация: 29.10.2012
Сообщений: 397
17.11.2016, 17:31
Если чё, задавай вопросы. Буду рад помочь. Тут часто фрукты есть, которые говорят "напишите мне прогу". Молодец, что само работаешь.
1
0 / 0 / 1
Регистрация: 30.07.2016
Сообщений: 122
17.11.2016, 18:03  [ТС]

Не по теме:

Цитата Сообщение от Pro100Tom Посмотреть сообщение
Если чё, задавай вопросы. Буду рад помочь. Тут часто фрукты есть, которые говорят "напишите мне прогу". Молодец, что само работаешь.
После 3 класс, когдя я перешёл в 5 (раньше так было) меня не распределили в класс с информатикой. Мои мечты рухнули, а родители не могли позволить мне компьютер, да и вообще, детство у меня бедное было. Вот будучи повзрослее я заработал себе на комп и принялся за свою мечту. Правда медленно и не всегда время есть на это. Эх детство, детство. Да и понимание дороже готовой программы.



Добавлено через 27 минут
Переделал код. Совпадения обнаружены не были. Остался только, наверное самый нубский вопрос из всех возможных нубских вопросов. Можно ли сделать этот код покороче?

Кликните здесь для просмотра всего текста
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace PokerGame
{
    class Program
    {
        static void Main()
        {
            while (true)
            //while (Console.ReadKey().Key == ConsoleKey.Enter)
            {
                Random random = new Random();
 
                int rank;
                int suit;
 
                int[] card = new int[2];
 
                for (int a = 0; a < card.Length; a++)
                {
                    rank = random.Next(0, 13);
                    suit = random.Next(0, 4);
 
                    if (a == 0) card[a] = rank;
                    if (a == 1) card[a] = suit;
                }
 
                int[,] cards = new int[2, 2];
 
                for (int a = 0; a < 2; a++)
                {
                    for (int c = 0; c < card.Length; c++)
                    {
                        rank = random.Next(0, 13);
                        suit = random.Next(0, 4);
 
                        if (c == 0) card[c] = rank;
                        if (c == 1) card[c] = suit;
                    }
 
                    for (int b = 0; b < 2; b++)
                    {
                        if (b == 0) cards[a, b] = card[0];
                        if (b == 1) cards[a, b] = card[1];
                    }
                }
 
                do
                {
                    if (cards[0, 0] == cards[1, 0]) // Если есть совпадения, то генерируются новые данные карты.
                    {
                        if (cards[0, 1] == cards[1, 1])
                        {
                            for (int c = 0; c < card.Length; c++)
                            {
                                rank = random.Next(0, 13);
                                suit = random.Next(0, 4);
 
                                if (c == 0) card[c] = rank;
                                if (c == 1) card[c] = suit;
                            }
 
                            for (int a = 0; a < 2; a++)
                            {
                                for (int c = 0; c < card.Length; c++)
                                {
                                    rank = random.Next(0, 13);
                                    suit = random.Next(0, 4);
 
                                    if (c == 0) card[c] = rank;
                                    if (c == 1) card[c] = suit;
                                }
 
                                for (int b = 0; b < 2; b++)
                                {
                                    if (b == 0) cards[a, b] = card[0];
                                    if (b == 1) cards[a, b] = card[1];
                                }
                            }
                        }
                    }
 
 
 
                    if (cards[0, 1] == cards[1, 1]) // Если есть совпадения, то генерируются новые данные карты.
                    {
                        if (cards[0, 0] == cards[1, 0])
                        {
                            for (int c = 0; c < card.Length; c++)
                            {
                                rank = random.Next(0, 13);
                                suit = random.Next(0, 4);
 
                                if (c == 0) card[c] = rank;
                                if (c == 1) card[c] = suit;
                            }
 
                            for (int a = 0; a < 2; a++)
                            {
                                for (int c = 0; c < card.Length; c++)
                                {
                                    rank = random.Next(0, 13);
                                    suit = random.Next(0, 4);
 
                                    if (c == 0) card[c] = rank;
                                    if (c == 1) card[c] = suit;
                                }
 
                                for (int b = 0; b < 2; b++)
                                {
                                    if (b == 0) cards[a, b] = card[0];
                                    if (b == 1) cards[a, b] = card[1];
                                }
                            }
                        }
                    }
 
                    break;
                } while (true);
 
                Console.Clear();
                Console.WriteLine("Игрок 1 - Ранк: {0} Масть: {1}", cards[0, 0], cards[0, 1]);
                Console.WriteLine();
                Console.WriteLine("Игрок 2 - Ранк: {0} Масть: {1}", cards[1, 0], cards[1, 1]);
 
                if (cards[0, 1] == cards[1, 1])
                {
                    if (cards[0, 0] == cards[1, 0])
                    {
                        Console.WriteLine();
                        Console.WriteLine("Есть совпадение");
                        break;
                    }
                }
 
                if (cards[0, 0] == cards[1, 0])
                {
                    if (cards[0, 1] == cards[1, 1])
                    {
                        for (int c = 0; c < card.Length; c++)
                        {
                            Console.WriteLine("Есть совпадение");
                            break;
                        }
                    }
                }
            }
            Console.ReadKey();
        }
    }
}
0
 Аватар для Pro100Tom
154 / 31 / 11
Регистрация: 29.10.2012
Сообщений: 397
17.11.2016, 18:08
Цитата Сообщение от Native16 Посмотреть сообщение
Можно ли сделать этот код покороче?
сначала раскидай по функциям. А там видно будет.
0
0 / 0 / 1
Регистрация: 30.07.2016
Сообщений: 122
17.11.2016, 19:20  [ТС]
Удалил всё до do. Работает пока ещё
Кликните здесь для просмотра всего текста
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace PokerGame
{
    class Program
    {
        static void Main()
        {
            while (true)
            //while (Console.ReadKey().Key == ConsoleKey.Enter)
            {
                Random random = new Random();
 
                int rank;
                int suit;
                int[] card = new int[2];
                int[,] cards = new int[2, 2];
 
                do
                {
                    if (cards[0, 0] == cards[1, 0]) // Если есть совпадения, то генерируются новые данные карты.
                    {
                        if (cards[0, 1] == cards[1, 1])
                        {
                            for (int c = 0; c < card.Length; c++)
                            {
                                rank = random.Next(0, 13);
                                suit = random.Next(0, 4);
 
                                if (c == 0) card[c] = rank;
                                if (c == 1) card[c] = suit;
                            }
 
                            for (int a = 0; a < 2; a++)
                            {
                                for (int c = 0; c < card.Length; c++)
                                {
                                    rank = random.Next(0, 13);
                                    suit = random.Next(0, 4);
 
                                    if (c == 0) card[c] = rank;
                                    if (c == 1) card[c] = suit;
                                }
 
                                for (int b = 0; b < 2; b++)
                                {
                                    if (b == 0) cards[a, b] = card[0];
                                    if (b == 1) cards[a, b] = card[1];
                                }
                            }
                        }
                    }
 
                    if (cards[0, 1] == cards[1, 1]) // Если есть совпадения, то генерируются новые данные карты.
                    {
                        if (cards[0, 0] == cards[1, 0])
                        {
                            for (int c = 0; c < card.Length; c++)
                            {
                                rank = random.Next(0, 13);
                                suit = random.Next(0, 4);
 
                                if (c == 0) card[c] = rank;
                                if (c == 1) card[c] = suit;
                            }
 
                            for (int a = 0; a < 2; a++)
                            {
                                for (int c = 0; c < card.Length; c++)
                                {
                                    rank = random.Next(0, 13);
                                    suit = random.Next(0, 4);
 
                                    if (c == 0) card[c] = rank;
                                    if (c == 1) card[c] = suit;
                                }
 
                                for (int b = 0; b < 2; b++)
                                {
                                    if (b == 0) cards[a, b] = card[0];
                                    if (b == 1) cards[a, b] = card[1];
                                }
                            }
                        }
                    }
 
                    break;
                } while (true);
 
                Console.Clear();
                Console.WriteLine("Игрок 1 - Ранк: {0} Масть: {1}", cards[0, 0], cards[0, 1]);
                Console.WriteLine();
                Console.WriteLine("Игрок 2 - Ранк: {0} Масть: {1}", cards[1, 0], cards[1, 1]);
 
                // Проверка на совпадение карт у игроков.
 
                if (cards[0, 1] == cards[1, 1])
                {
                    if (cards[0, 0] == cards[1, 0])
                    {
                        Console.WriteLine();
                        Console.WriteLine("Есть совпадение");
                        break;
                    }
                }
 
                if (cards[0, 0] == cards[1, 0])
                {
                    if (cards[0, 1] == cards[1, 1])
                    {
                        for (int c = 0; c < card.Length; c++)
                        {
                            Console.WriteLine("Есть совпадение");
                            break;
                        }
                    }
                }
            }
 
            Console.ReadKey();
        }
    }
}


Добавлено через 4 минуты
Меня интересует вариативность проверки на совпадение карт (условия). Я их сделал две штуки, на каждую из возможных последовательностей. А можно сделать сразу или короче эти условия, чтобы всё убралось в одно действие?

C#
1
2
3
if (cards[0, 0] == cards[1, 0]) // Если есть совпадения, то генерируются новые данные карты.
                    {
                        if (cards[0, 1] == cards[1, 1])
C#
1
2
3
if (cards[0, 1] == cards[1, 1]) // Если есть совпадения, то генерируются новые данные карты.
                    {
                        if (cards[0, 0] == cards[1, 0])
Добавлено через 9 минут
Я придумал. Через цикл for делать проверку в автоматическом режиме. После первого варианта переходить на другой.

Добавлено через 56 минут
Как сделать так, чтобы вместо цифр буквы были? Я хочу чтобы у rank были 0 = 2, 1 = 3, 2 = 4, 3 = 5, 4 = 6, 5 = 7, 6 = 8, 7 = 9, 8 = 10, 9 = J, 10 = Q; 11 = K, 12 = A. А suit были 0 = c, 1 = h, 2 = s, 3 = d.
0
 Аватар для Pro100Tom
154 / 31 / 11
Регистрация: 29.10.2012
Сообщений: 397
17.11.2016, 19:24
Цитата Сообщение от Native16 Посмотреть сообщение
Как сделать так, чтобы вместо цифр буквы были?
Погугли enum.

enum Rank
{
Deuce = 2,
Trey = 3,
...
}
1
0 / 0 / 1
Регистрация: 30.07.2016
Сообщений: 122
17.11.2016, 19:44  [ТС]
Что я делаю неправильно?

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
            int rank = 13;
            int suit = 4;
            int[,] deck = new int[rank, suit];
 
            for (int a = 0; a < rank; a++)
            {
                for (int b = 0; b < suit; b++)
                {
                    rank++;
                    suit++;
                }
            }
 
            for (int a = 0; a < 52; a++)
            {
                Console.WriteLine(deck[rank, suit]);
            }
 
            Console.ReadKey();
0
3566 / 2507 / 1174
Регистрация: 14.08.2016
Сообщений: 8,219
17.11.2016, 19:52
массив не заполняешь
0
0 / 0 / 1
Регистрация: 30.07.2016
Сообщений: 122
17.11.2016, 20:53  [ТС]
Diamante, я не умею я же писал Помогите а пожалуйста

Добавлено через 58 минут
Теперь правильно?
C#
1
2
3
4
5
6
7
8
9
10
            int a;
            int[] b = new int[5];
 
            for (int c = 0; c < b.Length; c++)
            {
                b[c] = c;
                Console.WriteLine("{0}\t", b[c]);
            }
 
            Console.ReadKey();
0
3566 / 2507 / 1174
Регистрация: 14.08.2016
Сообщений: 8,219
17.11.2016, 21:00
такс, с заполнением массива ты справился продолжай в том же духе
1
0 / 0 / 1
Регистрация: 30.07.2016
Сообщений: 122
17.11.2016, 21:11  [ТС]
Цитата Сообщение от Diamante Посмотреть сообщение
такс, с заполнением массива ты справился продолжай в том же духе
с одномерным да. А вот с двумерным засада. Я в упор не понимаю, что я делаю!
C#
1
2
3
4
5
6
7
8
9
10
            int[,] a = new int[2, 4];
 
            for (int i = 0; i < 2; i++)
                for (int j = 0; j < 4; j++)
                {
                    a[i, j] = i + j;
                    Console.WriteLine("{0}", a[i, j]);
                }
 
            Console.ReadKey();
Добавлено через 1 минуту
Почему надо i + j? Почему нельзя заполнить сначала первый индекс, а потом второй? Кажется что всё понятно, а на самом деле не так.

Добавлено через 4 минуты
Казалось бы что всё понятно. Вот ранк, вот масть, вот массив - колода. Тут цикл и там цикл, а что дальше не понимаю.
C#
1
2
3
4
5
6
7
8
9
10
            int rank, suit;
            int[,] deck = new int[13, 4];
 
            for (int a = 0; a < 13; a++)
                for (int b = 0; b < 4; b++)
                {
                    deck[a, b] = // И вот на этом месте ступор. А может даже и раньше.
                }
 
            Console.ReadKey();
Добавлено через 1 минуту
Логика теряется.
0
3566 / 2507 / 1174
Регистрация: 14.08.2016
Сообщений: 8,219
17.11.2016, 21:17
а никто и не говорит что надо i + j, тебе решать какими значениями заполнять массив
можно и первый индекс сначала заполнить, тогда a[j, i] = i + j;

Добавлено через 4 минуты
короче, возьми листочек в клеточку, расчерти 13 по вертикали и 4 по горизонтали - это твой массив
дальше оченно вдумчиво и внимательно посмотри, что и куда ты будешь в этом массиве записывать, и прям карандашиком помечай, поймешь логику заполнения - напишешь и код, а гадать дело неблагодарное
и да, почитай книгу, Герберт Шилдт c# за апру дней осилишь начало, там как раз массивы, она легкая, читается быстро
1
0 / 0 / 1
Регистрация: 30.07.2016
Сообщений: 122
17.11.2016, 21:18  [ТС]
Diamante, я не понимаю в чём разница заполнения двумерного массива от одномерного.
C#
1
deck[a, b] =
вот какой индекс тут заполняется?
0
3566 / 2507 / 1174
Регистрация: 14.08.2016
Сообщений: 8,219
17.11.2016, 21:42
C#
1
2
3
4
5
            for (int a = 0; a < 13; a++)
                for (int b = 0; b < 4; b++)
                {
                    deck[a, b] = // И вот на этом месте ступор. А может даже и раньше.
                }
тут, например, берется сначала и фиксируется а =0, для а =0 перебирается все б : 0, 1, 2, 3; как только все б перебрали, а становится 1 и опять перебор б, потом а =2 и опять перебор б
т.е. порядок запонения такой [0,0] -> [0,1] ->[0,2] ->[0,3] ->[1,0] ->[1,1] ->[1,2] ->[1,3] ->[2,0] ->
1
 Аватар для Pro100Tom
154 / 31 / 11
Регистрация: 29.10.2012
Сообщений: 397
18.11.2016, 13:21
Представь, что переменная это ведро, в которое ты можешь запихать что-то конкретное. например int vedro = 5;

Так вот, одномерный массив это "полоса" таких вёдер, сразу куча вёдер но в одной переменной. Но тогда вопрос, как запихать "что-то конкретное" в нужное тебе ведро (скажем их десять в ряд). Допустим хочешь добавить это "что-то конкретное" в третье ведро, тогда вот так int vedra = new int[10]; vedro[3] = 5;

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

Представь, что у тебя на шахматной доске, на каждом поле стоят вёдра. И тебе нужно запихать "что-то конкретное" в ведро, что находится третье слева и второе сверху. Тогда так int [,] vedra = new int [8,8]; vedra[3][2] = 5;

Понял?
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.11.2016, 13:21
Помогаю со студенческими работами здесь

Покер
Задано масив з п’яти чисел. Серед них : якщо однакові 5, то надрукувати число 1, інакше якщо однакові 4, то надрукувати число 2, інакше...

Покер
Хочу написать простенькую покерную программу на с++. Нужна помощь с архитектурой. Напишите, пожалуйста, какие классы стоит реализовать....

Покер
Прошу помощи. Болел - ничего не понял. Скоро экзамен, а я ничего не понимаю в С++. Дали примерные задачи, а я не понимаю как решать. Вот...

Покер
Добрый день. Подскажите, как решить эту задачку минимально просто, т.е. по минимально использовать циклы, в основном с if? Даны 5...

Покер
Подскажите пожалуста где ошибка??????:help: компилятор выдает ошибки Ошибка 2 error LNK2005: &quot;int __cdecl compareCards(void...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru