Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.53/15: Рейтинг темы: голосов - 15, средняя оценка - 4.53
0 / 0 / 0
Регистрация: 08.04.2019
Сообщений: 2
1

Игра "Крестики нолики", переделать на игру с компьютером

15.04.2019, 22:33. Просмотров 2867. Ответов 2


Есть код игра с человеком, нужно передалать для игры с компьютером через рандом, код выполнен с кнопками, пожалуйста!!

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
 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 WindowsFormsApp8
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        int i; //счетчик ходов
        int num_game = 0; // номер игры
        int Ovin = 0; // количество побед О
        int Xvin = 0; // количество побед Х
        string[] arr = new string[10]; // массив, который хранит расположение Х и О на игровом поле
        string t = "X"; // переменная которая показывает чей ход происходит
 
        public string Game(int j) // принимает номер клетки поля
        {
            string fakeT; // переменная следущего хода
            if (i % 2 == 1) // узнает чей ход сделан (Х - непарный ход)
            {
                t = "X";
                fakeT = "O";
            }
            else
            {
                t = "O";
                fakeT = "X";
            }
            fakeT = "Ходит " + fakeT;
            arr[j] = t;
            i += 1;
            label1.Text = fakeT;// пишет кто следущий ходит
            return t; // возвращает отметку на поле Х или О
        }
 
        public void who_vin()
        {
 
            if ((arr[1] == "X" & arr[2] == "X" & arr[3] == "X") | (arr[1] == "X" & arr[5] == "X" & arr[9] == "X") | (arr[1] == "X" & arr[4] == "X" & arr[7] == "X") | (arr[2] == "X" & arr[5] == "X" & arr[8] == "X") | (arr[3] == "X" & arr[6] == "X" & arr[9] == "X") | (arr[3] == "X" & arr[5] == "X" & arr[7] == "X") | (arr[4] == "X" & arr[5] == "X" & arr[6] == "X") | (arr[7] == "X" & arr[8] == "X" & arr[9] == "X"))
            { // за таких обстоятельств побеждает Х
                Xvin += 1; // начисляем ему победу
 
                label3.Text = Xvin.ToString() + " : " + Ovin.ToString(); // обновляем табло побед
                MessageBox.Show(" ИГРОК ХОДИВШИЙ X ПОБЕДИЛ!"); // выводим окошечко, которое говорит нам о победе
                refresch();// чистим поле, начинаем новую игру
            }
 
            if ((arr[1] == "O" & arr[2] == "O" & arr[3] == "O") | (arr[1] == "O" & arr[5] == "O" & arr[9] == "O") | (arr[1] == "O" & arr[4] == "O" & arr[7] == "O") | (arr[2] == "O" & arr[5] == "O" & arr[8] == "O") | (arr[3] == "O" & arr[6] == "O" & arr[9] == "O") | (arr[3] == "O" & arr[5] == "O" & arr[7] == "O") | (arr[4] == "O" & arr[5] == "O" & arr[6] == "O") | (arr[7] == "O" & arr[8] == "O" & arr[9] == "O"))
            {// за таких обстоятельств побеждает О, следущие действия аналогичны
                Ovin += 1;
 
                label3.Text = Xvin.ToString() + " : " + Ovin.ToString();
                MessageBox.Show("ИГРОК ХОДИВШИЙ O ПОБЕДИЛ!");
                refresch();
            }
            if ((arr[1] != "") & (arr[2] != "") & (arr[3] != "") & (arr[4] != "") & (arr[5] != "") & (arr[7] != "") & (arr[8] != "") & (arr[9] != ""))
            {// Ничья, тоесть все поле заполнено, а победителя нет
                MessageBox.Show(" НИЧЬЯ! :)"); // объявляем ничью
                refresch();// чистим поле
            }
        }
 
        public void refresch()
        {
            button1.Text = "";
            button2.Text = "";
            button3.Text = "";
            button4.Text = "";
            button5.Text = "";
            button6.Text = "";
            button7.Text = "";
            button8.Text = "";
            button9.Text = "";// почистили каждую клетку поля
            label1.Text = "";//табло следующего хода
            for (i = 0; i < 10; i += 1) // массив ходов
            {
                arr[i] = "";
            }
            i = 1; // номер хода
            num_game += 1; // добавляем к номеру игры
            label2.Text = num_game + " игра"; // обновляем табло с номером игры
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            if (button1.Text == "X" | button1.Text == "O") // если клетка уже заполненая
            {
                MessageBox.Show(" КНОПКА ЗАПОЛНЕНА");// предупреждаем, что нельзя
            }
            else
            {
                button1.Text = Game(1); who_vin();
            }// если все хорошо, запускаем 2 функции. задаем клетке отметку Х или О
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
            if (button2.Text == "X" | button2.Text == "O")
            {
                MessageBox.Show(" КНОПКА ЗАПОЛНЕНА");
            }
            else
            {
                button2.Text = Game(2); who_vin();
            }
        }
 
        private void button3_Click(object sender, EventArgs e)
        {
            if (button3.Text == "X" | button3.Text == "O")
            {
                MessageBox.Show(" КНОПКА ЗАПОЛНЕНА");
            }
            else
            {
                button3.Text = Game(3); who_vin();
            }
        }
 
        private void button4_Click(object sender, EventArgs e)
        {
            if (button4.Text == "X" | button4.Text == "O")
            {
                MessageBox.Show(" КНОПКА ЗАПОЛНЕНА");
            }
            else
            {
                button4.Text = Game(4); who_vin();
            }
        }
 
        private void button5_Click(object sender, EventArgs e)
        {
            if (button5.Text == "X" | button5.Text == "O")
            {
                MessageBox.Show(" КНОПКА ЗАПОЛНЕНА");
            }
            else
            {
                button5.Text = Game(5); who_vin();
            }
        }
 
        private void button6_Click(object sender, EventArgs e)
        {
            if (button6.Text == "X" | button6.Text == "O")
            {
                MessageBox.Show(" КНОПКА ЗАПОЛНЕНА");
            }
            else
            {
                button6.Text = Game(6); who_vin();
            }
        }
 
        private void button7_Click(object sender, EventArgs e)
        {
            if (button7.Text == "X" | button7.Text == "O")
            {
                MessageBox.Show(" КНОПКА ЗАПОЛНЕНА");
            }
            else
            {
                button7.Text = Game(7); who_vin();
            }
        }
 
        private void button8_Click(object sender, EventArgs e)
        {
            if (button8.Text == "X" | button8.Text == "O")
            {
                MessageBox.Show(" КНОПКА ЗАПОЛНЕНА");
            }
            else
            {
                button8.Text = Game(8); who_vin();
            }
        }
 
        private void button9_Click(object sender, EventArgs e)
        {
            if (button9.Text == "X" | button9.Text == "O")
            {
                MessageBox.Show(" КНОПКА ЗАПОЛНЕНА");
            }
            else
            {
                button9.Text = Game(9); who_vin();
            }
        }
 
        private void button10_Click(object sender, EventArgs e)
        {
            refresch();
        }
 
        private void label1_Click(object sender, EventArgs e)
        {
 
        }
 
        private void label2_Click(object sender, EventArgs e)
        {
 
        }
 
        private void label3_Click(object sender, EventArgs e)
        {
 
        }
 
        private void label4_Click(object sender, EventArgs e)
        {
 
        }
 
        private void label5_Click(object sender, EventArgs e)
        {
 
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            refresch();// чистим поле перед игрой
            label3.Text = Xvin.ToString() + " : " + Ovin.ToString(); // задаем счетчик
        }
    }
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.04.2019, 22:33
Ответы с готовыми решениями:

Доделать игру "Крестики-нолики"
Доброго времени суток! Помогите мне доделать игру &quot;Крестики-нолики&quot;, на C# с помощью Windows Form....

Приложение Крестики-нолики. Игра с компьютером
Доброго времени суток. Дело вот в чем. Как в игре Крестики-нолики добавить режим &quot;игра с...

как сделать проверку выиграша и переход на новую игру(игра крестики нолики на батонах) Прогу выложыл в архиве
помогите кто может

Нужен счётчик кликов по PictureBox в игре "Крестики-нолики"
Пишу крестики-нолики. Как поле взял pictureBox. Вот отрисовываю сетку поля: private void...

2
611 / 505 / 316
Регистрация: 20.05.2015
Сообщений: 1,422
16.04.2019, 06:45 2
Лучший ответ Сообщение было отмечено fadasda как решение

Решение

Как-то так:
Кликните здесь для просмотра всего текста
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
        public int[,] mass = new int[3, 3];
        private bool haveWinner = false;
        private bool player = true;
        public XO()
        {
            InitializeComponent();
        }
        private void button_Click(object sender, EventArgs e)
        {
            Button b = (Button)sender;
            int i = int.Parse(b.Name[6].ToString());
            int j = int.Parse(b.Name[8].ToString());
 
            if (mass[i, j] == 0)
            {
                changeButton(b,i, j, player);
                if ((checkBox1.Checked) && (!haveWinner))
                {
                    getPoint(ref i, ref j);
                    changeButton(b,i, j, false);
                }
                else
                {
                    player = !player;
                }
            }
        }
 
        private void changeButton(Button b,int i, int j, bool player)
        {
            b.Text = (player ? "X" : "O");
            //либо так
            //b.Image = (player ? img : img2);
            b.Update();
            mass[i, j] = (player ? 1 : 2);
            checkWinner(player);
        }
        private void getPoint(ref int i, ref int j)
        {
            Random rand = new Random();
            while (mass[i, j] != 0)
            {
                i = rand.Next(0, 3);
                j = rand.Next(0, 3);
            }
        }
 
        private void checkWinner(bool player)
        {
            int val = (player ? 1 : 2);
            bool[] done = new bool[9];
            for (int i = 0; i < done.Length; i++) done[i] = true;
            for (int i = 0; i < 3; i++)
            {
                if (mass[i, i] != val) done[6] = false;
                if (mass[i, 2 - i] != val) done[7] = false;
                for (int j = 0; j < 3; j++)
                {
                    if (mass[i, j] != val)
                    {
                        done[i] = false;
                    }
                    if (mass[j, i] != val) done[i + 3] = false;
                    if (mass[i, j] == 0) done[8] = false;
                }
            }
            for (int i = 0; i < done.Length; i++)
            {
                if (done[i] == true)
                {
                    haveWinner = true;
                    for (int k = 0; k < 3; k++)
                        for (int j = 0; j < 3; j++)
                        {
                            (this.Controls[string.Format("button{0}_{1}", k, j)] as Button).Enabled = false;
                        }
                    if (i == 8)
                    {
                        MessageBox.Show("Ничья!!!");
                    }
                    if (player)
                    {
                        if (checkBox1.Checked)
                            MessageBox.Show("вы выиграли!!!");
                        else MessageBox.Show("игрок X выиграл!!!");
                    }
                    else
                    {
                        if (checkBox1.Checked)
                            MessageBox.Show("вы проиграли!!!");
                        else MessageBox.Show("игрок O выиграл!!!");
                    }
                    break;
                }
            }
        }
 
        private void XO_Load(object sender, EventArgs e)
        {
            for (int i = 0; i < 3; i++)
                for (int j = 0; j < 3; j++)
                {
                    Button bt = new Button();
                    bt.Location = new System.Drawing.Point(30 * i + 10 * (i + 1), 30 * j + 10 * (j + 1));
                    bt.Name = String.Format("button{0}_{1}", i, j);
                    bt.Size = new System.Drawing.Size(30, 30);
                    bt.Click += new System.EventHandler(this.button_Click);
                    this.Controls.Add(bt);
                }
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            player = true;
            haveWinner = false;
            for (int i = 0; i < 3; i++)
                for (int j = 0; j < 3; j++)
                {
                    mass[i, j] = 0;
                    (this.Controls[string.Format("button{0}_{1}", i, j)] as Button).Enabled = true;
                    (this.Controls[string.Format("button{0}_{1}", i, j)] as Button).Image = null;
                }
        }
1
0 / 0 / 0
Регистрация: 08.04.2019
Сообщений: 2
27.04.2019, 19:59  [ТС] 3
Закройте эту тему
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.04.2019, 19:59

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

Оконные крестики нолики и ошибка "Требуется ссылка на объект"
Form1.Designer.cs namespace WindowsFormsApplication1 { public partial class Form1 { ...

Игра в крестики-нолики с "умным" компьютером
Скиньте или подскажите как написать код для игры с компьютером в крестики-нолики и это должен быть...

"Крестики-нолики": проверить, закончена ли игра выигрышем "крестиков"
Клеточное поле размером 5х5 является результатом игры в крестики-нолики. проверить, закончена игра...

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


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.