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

Создание игры "Крестики-Нолики"

15.02.2011, 22:36. Показов 43432. Ответов 22

Студворк — интернет-сервис помощи студентам
Доброе время суток.Подскажите пожалуйста,как можно из элемента Panel,построить поле,допустим 3на3.Я только начинаю изучать С#,да и пока вообще не силён в программировании.Вообще ,по идеи,я хочу написать игру Крестики Нолики.Заранее большое спасибо.
2
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.02.2011, 22:36
Ответы с готовыми решениями:

Создание игры крестики нолики
Возникла проблема при создание игры крестики нолики. В форме имеется 9 Picturebox-ов(3на3) При нажатие на один из них левой кнопкой...

Создание поля для игры крестики-нолики
как реализовать: пишу игру крестики-нолики у меня программа предусматривает выбор размера поля, там 5х5, 15х15 и тд нужно, чтоб когда...

Создание клиент-серверного приложения игры "Крестики-нолики"
Всем привет! Помогите, пожалуйста, написать клиент-серверное приложение для игры в крестики-нолики. Контроль за соблюдением правил и...

22
0 / 0 / 0
Регистрация: 18.05.2015
Сообщений: 1
25.05.2015, 10:57
Студворк — интернет-сервис помощи студентам
А как сделать ничью? вот функция победы
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public bool GetWinState()
        {
            int resW = 0, resH = 0;
            for (int i = 0; i < 3; i++)
            {
                resW = 0; resH = 0;
                for (int t = 0; t < 3; t++)
                {
                    resW += GameMatrix[i, t];
                    resH += GameMatrix[t, i];
                }
                if (resH == 3 | resH == 51) return true;
                if (resW == 3 | resW == 51) return true;
            }
 
            resW = GameMatrix[0, 0] + GameMatrix[1, 1] + GameMatrix[2, 2];
            resH = GameMatrix[0, 2] + GameMatrix[1, 1] + GameMatrix[2, 0];
            if (resH == 3 | resH == 51) return true;
            if (resW == 3 | resW == 51) return true;
            return false;
        }
0
103 / 90 / 19
Регистрация: 15.04.2015
Сообщений: 353
25.05.2015, 13:46
Цитата Сообщение от denprised2 Посмотреть сообщение
А как сделать ничью? вот функция победы
Отказаться от от bool в пользу enum или хотя бы int (три значения вместо двух).
0
0 / 0 / 0
Регистрация: 15.10.2014
Сообщений: 3
08.04.2016, 11:26
Кликните здесь для просмотра всего текста
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
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace Crest
{
    public partial class Form1 : Form
    {
        Button[,] button = new Button[3,3];
        Label label1 = new Label();
        Random rand = new Random();
        int[,] pole = new int[3,3];
        public Form1()
        {
            InitializeComponent();
        }
 
        private void mouseClick(object sender, MouseEventArgs e)
        {
            //Button b = sender as Button; // Получили кнопку
            //Point p = (Point)b.Tag;
            //int x = p.X;
            //int y = p.Y;
 
            int x = ((Point)(sender as Button).Tag).X;
            int y = ((Point)(sender as Button).Tag).Y;
 
            if ((proverka() == 0) && (pole[x,y] == 0))
            {
                pole[x,y] = 1;
                mozgi();
                draw();
                //timer.start();
            }
 
            if (proverka() != 0)
            {
                String s="";
                if (proverka() == 1) s="Вы выиграли!";
                if (proverka() == 2) s="Вы проиграли!";
                if (proverka() == 3) s="Ничья!";
                
                //for (int i = 0; x < 3; x++)
                  //  for (int j = 0; y < 3; y++)
                    //    button[i,j].Visible=false;
 
                DialogResult dialogResult = MessageBox.Show(s + " Хотите повторить?", "Конец игры", MessageBoxButtons.YesNo);
                if (dialogResult == DialogResult.Yes)
                {
                    new_game();
                }
                else if (dialogResult == DialogResult.No)
                {
                    Close();
                }
            }
        }
 
 
        public int ugol()
        {
            if ((pole[0,0] != 0) && (pole[0,2] != 0) && (pole[2,0] != 0) && (pole[2,2] != 0)) return 0;
            else
            {
                int x = rand.Next(3);
                int y = rand.Next(3);
                while (((x != 1) && (y != 1) && (pole[x,y] == 0)) != true)
                {
                    x = rand.Next(3);
                    y = rand.Next(3);
                }
                pole[x,y] = 2;
                return 1;
            }
        }
 
        public int storona()
        {
            if ((pole[0,1] != 0) && (pole[1,0] != 0) && (pole[1,2] != 0) && (pole[2,1] != 0)) return 0;
            else
            {
                int x = rand.Next(3);
                int y = rand.Next(3);
                while ((((x + y == 1) || (x + y == 3)) && (pole[x,y] == 0)) != true)
                {
                    x = rand.Next(3);
                    y = rand.Next(3);
                }
                pole[x,y] = 2;
                return 1;
            }
        }
 
        public int center()
        {
            if (pole[1,1] == 0)
            {
                pole[1,1] = 2;
                return 1;
            }
            else return 0;
        }
 
        public int two_ugla()
        {
            if ((pole[0,0] == 1) && (pole[2,2] == 1) && (storona() == 1)) return 1;
            if ((pole[0,2] == 1) && (pole[2,0] == 1) && (storona() == 1)) return 1;
            return 0;
        }
 
        public int two_to_three(int z)
        {
            int a;
            int b;
            int c;
            int d;
            for (int i = 0; i < 3; i++)
            {
                a = 0; //столбец
                b = 0; //строка
                c = 0;
                d = 0;
 
                for (int j = 0; j < 3; j++)
                {
                    if (pole[i,j] == 0) a++;
                    if (pole[j,i] == 0) b++;
                    c += pole[i,j];
                    d += pole[j,i];
                }
 
                if ((a == 1) && (c == z))
                {
                    for (int x = 0; x < 3; x++)
                        if (pole[i,x] == 0) pole[i,x] = 2;
                    return 1;
                }
 
                if ((b == 1) && (d == z))
                {
                    for (int x = 0; x < 3; x++)
                        if (pole[x,i] == 0) pole[x,i] = 2;
                    return 1;
                }
            }
 
            if ((pole[0,0] == z / 2) && (pole[1,1] == z / 2) && (pole[2,2] == 0)) { pole[2,2] = 2; return 1; }
            if ((pole[0,0] == z / 2) && (pole[1,1] == 0) && (pole[2,2] == z / 2)) { pole[1,1] = 2; return 1; }
            if ((pole[0,0] == 0) && (pole[1,1] == z / 2) && (pole[2,2] == z / 2)) { pole[0,0] = 2; return 1; }
 
            if ((pole[0,2] == z / 2) && (pole[1,1] == z / 2) && (pole[2,0] == 0)) { pole[2,0] = 2; return 1; }
            if ((pole[0,2] == z / 2) && (pole[1,1] == 0) && (pole[2,0] == z / 2)) { pole[1,1] = 2; return 1; }
            if ((pole[0,2] == 0) && (pole[1,1] == z / 2) && (pole[2,0] == z / 2)) { pole[0,2] = 2; return 1; }
 
            return 0;
        }
 
        public int storona_and_ugol()
        {
           // if ((pole[0,2] == 1) && (pole[2,0] == 1))
            //{
                if ((pole[2,1] == 1) || (pole[1,2] == 1) && (pole[2,2] == 0)) { pole[2,2] = 2; return 1; }
                if ((pole[1,0] == 1) || (pole[0,1] == 1) && (pole[0,0] == 0)) { pole[0,0] = 2; return 1; }
            //}
            //if ((pole[0,0] == 1) && (pole[2,2] == 1))
            //{
                if ((pole[0,1] == 1) || (pole[1,2] == 1) && (pole[0,2] == 0)) { pole[0,2] = 2; return 1; }
                if ((pole[1,0] == 1) || (pole[2,1] == 1) && (pole[2,0] == 0)) { pole[2,0] = 2; return 1; }
            //}
            return 0;
        }
 
        public void mozgi()
        {
            if (two_to_three(4) == 1) return; // { MessageBox.Show("два на стороне 4"); return; }
            if (two_to_three(2) == 1) return; //{ MessageBox.Show("два на стороне 2"); return; }
            if (center() == 1) return; //{ MessageBox.Show("Центр");  return;}
            if (storona_and_ugol() == 1) return; //{ MessageBox.Show("сторона и угл"); return;}
            if (two_ugla() == 1) return; // { MessageBox.Show("два угла"); return;}
            if (ugol() == 1) return; //{ MessageBox.Show("угол"); return;}
            if (storona() == 1) return; // { MessageBox.Show("сторона"); return;}
        }
 
        public void draw()
        {
            for (int i = 0; i < 3; i++)
                for (int j = 0; j < 3; j++)
                {
                    if (pole[i, j] == 1) { button[i, j].Text = "X"; button[i,j].BackColor=Color.Red; } 
                    if (pole[i, j] == 2) { button[i, j].Text = "0"; button[i,j].BackColor=Color.Blue;}
                    //if (pole[i,j] != 0) { button[i,j].removeMouseListener(this); }
                }
        }
 
        public int pusto()
        {
            int a = 0;
            for (int i = 0; i < 3; i++)
                for (int j = 0; j < 3; j++)
                    if (pole[i,j] == 0) a++;
            return a;
        }
 
        public int proverka()
        {
            for (int i = 0; i < 3; i++)
            {
                if ((pole[i,0] == pole[i,1]) && (pole[i,1] == pole[i,2])) return pole[i,0];
                if ((pole[0,i] == pole[1,i]) && (pole[1,i] == pole[2,i])) return pole[0,i];
            }
            if ((pole[0,0] == pole[1,1]) && (pole[1,1] == pole[2,2])) return pole[0,0];
            if ((pole[0,2] == pole[1,1]) && (pole[1,1] == pole[2,0])) return pole[0,2];
            if (pusto() == 0) return 3;
            return 0;
        }
 
        public void new_game()
        {
            for (int i = 0; i < 3; i++)
            for (int j = 0; j < 3; j++)
            {
                button[i, j].BackColor = Color.White;
                button[i, j].Text = "";
                pole[i, j] = 0;
            }
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            //this.Size = new Size(500,500);
            //this.Size.Width = 238;
            //this.Size.Height = 280;
            //this.Text = "Крестики-нолики";
            //this.Size.Height = 300;
            //this.ClientSize = new System.Drawing.Size(500, 500);
            //Form f = new Form();
            //f.Size.Width = 500;
 
            this.AutoSize = true;
 
            //int x = 400;
            //int y = 400;
            //this.Size = new System.Drawing.Size(x, y);
            //this.Size.IsEmpty = true;
            //this.Size = new System.Drawing.Size(x, y);
            //Point tmpLocation = this.Location;
            //tmpLocation.X = 500;
            //tmpLocation.Y = 500;
            //this.Location = tmpLocation;
 
            InitializeComponent();
            for (int i = 0; i < 3; i++)
                for (int j = 0; j < 3; j++)
                {
                    button[i, j] = new Button();
                    button[i, j].Location = new System.Drawing.Point(75 * i, 75 * j);
                    button[i, j].Size = new System.Drawing.Size(75, 75);
                    button[i, j].MouseClick += mouseClick;
                    button[i, j].Tag = new Point(i, j);
                    Controls.Add(button[i, j]);
                    pole[i, j] = 0;
                }
            new_game();
        }
    
        
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.04.2016, 11:26

Сохранение стостояния игры крестики-нолики
Привет форумчане, если я правильно понял, Сериализация это сохранения? Вот играл я в крестики нолики и захотел выйти посреди игры, нужно...

Простая логика для игры «Крестики-Нолики»
всем доброго дня! решаю сложнейшую задачу по программированию крестиков-ноликов столкнулся с вопросами, по которым хотелось бы...

Перевод кода игры Крестики-нолики из Delphi в C#
Доброго времени суток. Можете перевести код из Delphi в C# unit Unit1; interface uses Windows, Messages, SysUtils,...

Таблица для игры крестики/нолики в консоли
Кто-нибудь может подсказать, как создать табличку в консоли?:scratch: Ну не таблицу, а сетку для 9 элементов, что бы внутри каждого...

Сформируйте массив, представляющий собой поле игры в «Крестики-нолики»
Сформируйте массив , представляющий собой поле игры в «Крестики-нолики».Поле является массивом 3х3 , в клетках которого последовательно...


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

Или воспользуйтесь поиском по форуму:
23
Ответ Создать тему
Новые блоги и статьи
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru