Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
 Аватар для Orein_Chis
0 / 0 / 0
Регистрация: 24.12.2012
Сообщений: 18

Сапёр не пашет

07.09.2013, 18:10. Показов 2178. Ответов 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
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
public partial class Form1 : Form
    {
        private const int
            mr = 10, //клетки по вертикали
            mc = 10, //клетки по горизонтали
            nm = 10, //всего мин
            w = 40,  //ширина клетки
            h = 40;  //высота клетки
 
        //игровое поле
        private int[,] Pole = new int[mr + 2, mc + 2];
        // значение эл-та массива:
        //0..8 - кол-во мин в соседних клетках
        //9 - в клетке мина
        //100..109 - клетка открыта
        //200..209 - в клетке флаг
 
        private int nM; //найденные мины
        private int nF; //поставленные флаги
 
        //статус игры
        private int status;
        // 0 - начало игры
        // 1 - игра
        // 2 - результат
 
        private System.Drawing.Graphics gr;
 
        public Form1()
        {
            InitializeComponent();
 
            for (int row = 0; row <= mr + 1; row++)
            {
                Pole[row, 0] = -3;
                Pole[row, mc + 1] = -3;
            }
 
            for (int col = 0; col <= mc + 1; col++)
            {
                Pole[0, col] = -3;
                Pole[mr + 1, col] = -3;
            }
 
            this.ClientSize = new Size(w * mc + 1, h * mr + MS.Height + 1);
 
            newGame(); //новая игра
 
            //графическая поверхность
            gr = P.CreateGraphics();
 
            //новая игра
            private void newGame()
            {
                int row, col; //клетки
                int n = 0;    //кол-во мин
                int k;        //кол-во мин в соседних клетках
 
                //очистить поле
                for (row = 1; row <= mr; row ++)
                    for(col = 1; col <= mc; col ++)
                        Pole[row, col] = 0;
 
                //генератор случайных чисел
                Random rnd = new Random();
 
                //расстановка мин
                do
                {
                    row = rnd.Next(mr) + 1;
                    col = rnd.Next(mc) + 1;
 
                    if (Pole[row, col] != 9)
                    {
                        Pole[row, col] = 9;
                        n ++;
                    }
                }
                while (n != nm);
 
                //вычисление кол-ва мин в соседних клетках
                for (row = 1; row <= mr; row ++)
                    for (col = 1; col <= mc; col ++)
                        if (Pole[row, col] != 9)
                        {
                            k = 0;
                            if (Pole[row - 1, col - 1] == 9) k ++;
                            if (Pole[row - 1, col] == 9) k ++;
                            if (Pole[row - 1, col + 1] == 9) k ++;
                            if (Pole[row, col - 1] == 9) k ++;
                            if (Pole[row, col + 1] == 9) k ++;
                            if (Pole[row + 1, col - 1] == 9) k ++;
                            if (Pole[row + 1, col] == 9) k ++;
                            if (Pole[row + 1, col + 1] == 9) k ++;
                            Pole[row, col] = k;
                        }
 
                status = 0; //начало игры
                nM = 0;     //нет мин
                nF = 0;     //нет флагов
            }
 
        //рисунок поля
        private void PicPole (Graphics gr, int status)
        {
            for (int row = 1; row <= mr; row ++)
                for (int col = 1; col <= mc; col ++)
                    this.kletka(gr, row, col, status);
        }
 
        //рисунок кдетки
        private void kletka (Graphics gr, int row, int col, int status)
        {
            int x, y; //координаты левого верхнего угла
            x = (col - 1) * w + 1;
            y = (row - 1) * h + 1;
 
            //закрытые - серые
            if (Pole[row, col] < 100) gr.FillRectangle(SystemBrushes.ControlLight, x - 1, y - 1, w, h);
            
            //открытые или помеченные
            if (Pole[row, col] >= 100)
            {
                //открыть - перекрасить в белый
                if (Pole[row, col] != 109) gr.FillRectangle(Brushes.White, x - 1, y - 1, w, h);
                else gr.FillRectangle (Brushes.Red, x - 1, y - 1, w, h); //мина
 
                //кол-во мин рядом
                if ((Pole[row, col] >= 101) && (Pole[row, col] <= 108)) gr.DrawString((Pole[row, col] - 100).ToString(), new Font ("Tahoma", 10, System.Drawing.FontStyle.Regular), Brushes.Purple, x + 3, y + 2);
            }
 
            if (Pole[row, col] >= 200) this.flag (gr, x, y); //флаг
 
            gr.DrawRectangle(Pens.Black, x - 1, y - 1, w, h); //границы клетки
 
            //конец игры - показать мины
            if ((status == 2) && ((Pole[row, col] % 10) == 9)) this.mina (gr, x, y);
        }
 
        //открыть соседние клетки без мин
        private void open (int row, int col)
        {
            int x = (col - 1) * w + 1, y = (row - 1) * h + 1;
 
            if (Pole[row, col] == 0)
            {
                Pole[row, col] = 0;
 
                this.kletka(gr, row, col, status);
 
                this.open(row, col - 1);
                this.open(row - 1, col);
                this.open(row, col + 1);
                this.open(row + 1, col);
 
                this.open(row - 1, col - 1);
                this.open(row - 1, col + 1);
                this.open(row + 1, col - 1);
                this.open(row + 1, col + 1);
            }
            else
                if ((Pole[row, col] < 100) && (Pole[row, col] != -3))
                {
                    Pole[row, col] +=100;
                    this.kletka(gr, row, col, status);
                }
        }
 
        //мина
        private void mina (Graphics gr, int x, int y)
        {
            //корпус
            gr.FillRectangle(Brushes.Green, x + 16, y + 26, 8, 4);
            gr.FillRectangle(Brushes.Green, x + 8, y + 30, 24, 4);
            gr.DrawPie(Pens.Black, x + 6, y + 28, 28, 16, 0, -180);
            gr.FillPie(Brushes.Green, x + 6, y + 28, 28, 16, 0, -180);
            //полоса
            gr.DrawLine(Pens.Black, x + 12, y + 32, x + 28, y + 32);
            //вертикаль
            gr.DrawLine(Pens.Black, x + 20, y + 22, x + 20, y + 36);
            //бока
            gr.DrawLine(Pens.Black, x + 8, y + 30, x + 6, y + 28);
            gr.DrawLine(Pens.Black, x + 32, y + 30, x + 34, y + 28);
        }
 
        //флаг
        private void flag (Graphics gr, int x, int y)
        {
            Point[] p = new Point[3];
            //флажок
            p[0].X = x + 4;  p[0].Y = y + 4;
            p[1].X = x + 30; p[1].Y = y + 12;
            p[2].X = x + 4;  p[2].Y = y + 20;
            gr.FillPolygon(Brushes.Red, p);
            gr.DrawLine(Pens.Red, x + 4, y + 4, x + 4, y + 35);//древко
        }
 
        private void P_MouseClick(object sender, MouseEventArgs e)
        {
            if (status == 2) return; //игра зафершена
            if (status == 0) status = 1; //первый щелчок
 
            int row = (int)(e.Y/h) + 1,
                col = (int)(e.X/w) + 1;
            int x = (col - 1) * w + 1,
                y = (row - 1) * h + 1;
 
            //щелчок левой
            if (e.Button == MouseButtons.Left)
            {
                //заминированная клетка
                if (Pole[row, col] == 9)
                {
                    Pole[row, col] += 100;
                    status = 2; //конец игры
                    this.P.Invalidate();
                }
                else
                    if (Pole[row, col] < 9) this.open(row, col);
            }
 
            //щелчок правой
            if (e.Button == MouseButtons.Right)
            {
                //нет флага - поставить
                if (Pole[row, col] <= 9)
                {
                    nF += 1;
                    if (Pole[row, col] == 9) nM += 1;
                    Pole[row, col] += 200;
                    if ((nM == nm) && (nF == nm))
                    {
                        status = 2; //конец игры
                        this.Invalidate();
                    }
                    else this.kletka(gr, row, col, status);
                }
                else //есть флаг - убрать
                    if (Pole[row, col] >= 200)
                    {
                        nF -= 1;
                        Pole[row, col] -= 200;
                        this.kletka(gr, row, col, status);
                    }
            }
        }
 
        private void Game_Click(object sender, EventArgs e)
        {
            newGame();
            PicPole(gr, status);
        }
 
        private void P_Paint(object sender, PaintEventArgs e)
        {
            PicPole(gr, status);
        }
    }
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.09.2013, 18:10
Ответы с готовыми решениями:

прогу написал, но что-то не пашет, или пашет неправильно посмотрите
В матрице удалить столбцы, в которых все числа меньше нуля. вот код uses crt; type mas=arrayof integer; var n,m,i,j:byte; a:...

Не пашет coffeescript в прадакшн (наполовину пашет;) )
Приветствую, имеется проблема с работой скриптов. Так как в данной теме я знаний у меня нет - прошу помощи. Есть 2 скрипта в...

Не пашет пк!
Собрал с нуля мать мси h110m pro vd plus проц г4560 ну и там по мелочи, в итоге комп запускается,видео сигнал на монитор не...

18
2 / 2 / 0
Регистрация: 31.07.2013
Сообщений: 29
07.09.2013, 20:10
запустил Ваш код, получил три ошибки. во-первых нигде не определен MS в 56 строке, во-вторых P в 61 и 227 строках.
если не отображаются ошибки откройте окно: View->Error List
0
)))
 Аватар для aleks_pilipenko
610 / 423 / 55
Регистрация: 31.12.2009
Сообщений: 2,334
Записей в блоге: 3
07.09.2013, 20:15
лучше весь код выкладывай, а то непонятно, как некоторые компоненты на форме называются...
Я что-то собрал, у меня как-то криво, но работало...

Добавлено через 2 минуты
Цитата Сообщение от mitmit Посмотреть сообщение
MS в 56 строке, во-вторых P в 61 и 227 строках.
я на форму добавил pictureBox1 и переименовал его в P, а MS переименовал в Р, события P_MouseClick и P_Paint привязал к нему же, ошибок не было, и что-то даже менялось при клике мышкой..
0
 Аватар для Orein_Chis
0 / 0 / 0
Регистрация: 24.12.2012
Сообщений: 18
08.09.2013, 13:25  [ТС]
Цитата Сообщение от aleks_pilipenko Посмотреть сообщение
лучше весь код выкладывай, а то непонятно, как некоторые компоненты на форме называются...
Это и есть весь код типа Х)) Всё, что есть внутри namespace.
Цитата Сообщение от mitmit Посмотреть сообщение
во-первых нигде не определен MS в 56 строке
Это менюшка с кнопкой "Новая игра" - Menu Streap.
Цитата Сообщение от mitmit Посмотреть сообщение
во-вторых P в 61 и 227 строках
Это панель.

Извините, не подумала написать это. Под конец уже не соображала вообще
Открыла error list, показал таки ошибку))) В строке 61 просто забыла закрыть фигурную скобку. Представляете?! Скобку! XDD Блин. Всё моя невнимательность Х)) Игра запустилась, что-то даже играет, но после нажатия левого верхнего квадратика программа "сломалась" Х)) Строка 131, не понравилась ему "h". Сейчас буду смотреть почему и естественно не откажусь от содействия. Я соображаю в этом медленно ^^""

Добавлено через 15 минут
Цитата Сообщение от Orein_Chis Посмотреть сообщение
Строка 131, не понравилась ему "h"
Точнее, ему не только "h" не понравилась. Весь FillRectangle.
Почему-то поле нарисовано странно. Координаты x и y берутся за 0, когда им присвоено значение формулы.
0
)))
 Аватар для aleks_pilipenko
610 / 423 / 55
Регистрация: 31.12.2009
Сообщений: 2,334
Записей в блоге: 3
08.09.2013, 13:46
Цитата Сообщение от Orein_Chis Посмотреть сообщение
Всё, что есть внутри namespace.
я к тому, что дизайнер формы тоже надо выкладывать, тогда проект собрать за 2 минуты можно...
0
 Аватар для Orein_Chis
0 / 0 / 0
Регистрация: 24.12.2012
Сообщений: 18
08.09.2013, 15:35  [ТС]
Цитата Сообщение от aleks_pilipenko Посмотреть сообщение
я к тому, что дизайнер формы тоже надо выкладывать, тогда проект собрать за 2 минуты можно...
Цитата Сообщение от Orein_Chis Посмотреть сообщение
Извините, не подумала написать это. Под конец уже не соображала вообще
Я к тому же, как-то не подумала))

Добавлено через 1 час 23 минуты
Цитата Сообщение от Orein_Chis Посмотреть сообщение
Почему-то поле нарисовано странно.
Праааавильно, ведь размер формы я изменила, а поле осталось прежним =_=" После строки 56 добавила:
C#
1
P.ClientSize = new Size(w * mc + 1, h * mr + 1);
Но левая верхняя клетка продолжает зацикливаться.
0
)))
 Аватар для aleks_pilipenko
610 / 423 / 55
Регистрация: 31.12.2009
Сообщений: 2,334
Записей в блоге: 3
08.09.2013, 15:53
выложи весь проект архивом, вечером посмотрю.
0
 Аватар для Orein_Chis
0 / 0 / 0
Регистрация: 24.12.2012
Сообщений: 18
08.09.2013, 15:57  [ТС]
aleks_pilipenko, как раз собиралась)) Уже с исправлениями. Спасибо за отклик ^^
СапёрGame.zip
0
 Аватар для Orein_Chis
0 / 0 / 0
Регистрация: 24.12.2012
Сообщений: 18
08.09.2013, 18:36  [ТС]
Проблему решить так и не получается
0
)))
 Аватар для aleks_pilipenko
610 / 423 / 55
Регистрация: 31.12.2009
Сообщений: 2,334
Записей в блоге: 3
08.09.2013, 19:00
Цитата Сообщение от Orein_Chis Посмотреть сообщение
Сапёр
Game.zip
Не знаю, что там с архивом, но он у меня распаковывается в пустые файлы... какой-то поврежденный одним словом
0
 Аватар для Orein_Chis
0 / 0 / 0
Регистрация: 24.12.2012
Сообщений: 18
08.09.2013, 19:07  [ТС]
aleks_pilipenko, не было печали - файлы подкачали.
Этот вроде целый, запаковала-распаковала нормально.
Game.7z
0
)))
 Аватар для aleks_pilipenko
610 / 423 / 55
Регистрация: 31.12.2009
Сообщений: 2,334
Записей в блоге: 3
09.09.2013, 08:31
я так понимаю, что в строках:
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
        private void open (int row, int col)
        {
            int x = (col - 1) * w + 1, y = (row - 1) * h + 1;
 
            if (Pole[row, col] == 0)
            {
                Pole[row, col] = 0;
 
                this.kletka(gr, row, col, status);
 
                this.open(row, col - 1);
                this.open(row - 1, col);
                this.open(row, col + 1);
                this.open(row + 1, col);
 
                this.open(row - 1, col - 1);
                this.open(row - 1, col + 1);
                this.open(row + 1, col - 1);
                this.open(row + 1, col + 1);
            }
            else
                if ((Pole[row, col] < 100) && (Pole[row, col] != -3))
                {
                    Pole[row, col] +=100;
                    this.kletka(gr, row, col, status);
                }
        }
получается бесконечная рекурсия, поэтому стек переполняется...
Поищи алгоритм для сапера, мне, к сожалению, некогда...
1
 Аватар для Orein_Chis
0 / 0 / 0
Регистрация: 24.12.2012
Сообщений: 18
09.09.2013, 10:20  [ТС]
aleks_pilipenko, ну... спасибо за совет и потраченное время)) Буду искать. Как получится, отпишусь Т_Т

Добавлено через 17 минут
Ну я дяяяяяятел Как я ещё живу до сих пор с такой невнимательностью?! В строке 158 вместо 100 поставила 0! В этом самом методе open!! Проверяла поле на ноль и в случае true приравнивала же к 0! А надо значение 100! Из-за этой ошибки и зацикливалось =_=" Теперь работает. aleks_pilipenko, спасибо за указанное место. А то я бы не знала где искать =/
0
)))
 Аватар для aleks_pilipenko
610 / 423 / 55
Регистрация: 31.12.2009
Сообщений: 2,334
Записей в блоге: 3
09.09.2013, 12:48
Цитата Сообщение от Orein_Chis Посмотреть сообщение
aleks_pilipenko, спасибо за указанное место
Честно говоря, код почти не смотрел, показал можно сказать интуитивно...
0
 Аватар для Orein_Chis
0 / 0 / 0
Регистрация: 24.12.2012
Сообщений: 18
09.09.2013, 17:37  [ТС]
aleks_pilipenko, так оно и бывает обычно Х)) Теперь запаролась на алгоритме - мучаюсь блок-схему к нему писать и надо бы добавить действие в случае выигрыша, а то непорядок ^,...,^
0
)))
 Аватар для aleks_pilipenko
610 / 423 / 55
Регистрация: 31.12.2009
Сообщений: 2,334
Записей в блоге: 3
09.09.2013, 19:22
Цитата Сообщение от Orein_Chis Посмотреть сообщение
мучаюсь блок-схему к нему писать
Я как-то скачивал прогу, которая блок-схемы рисует, сейчас её у меня нету, но, думаю, можно найти её...
0
 Аватар для Orein_Chis
0 / 0 / 0
Регистрация: 24.12.2012
Сообщений: 18
09.09.2013, 19:31  [ТС]
aleks_pilipenko, блин, было бы круто.
0
)))
 Аватар для aleks_pilipenko
610 / 423 / 55
Регистрация: 31.12.2009
Сообщений: 2,334
Записей в блоге: 3
09.09.2013, 19:58
Вот тут что-то:
http://www.microsoft.com/ru-ru... x?id=22347
0
 Аватар для Orein_Chis
0 / 0 / 0
Регистрация: 24.12.2012
Сообщений: 18
09.09.2013, 20:35  [ТС]
aleks_pilipenko, не подходит, у меня VS 2010))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.09.2013, 20:35
Помогаю со студенческими работами здесь

USB не пашет
Пару дней назад разбирал полностью свой НОУТ(!) , чтобы заменить термопасту на проце и видюхе. Затем решил сразу винду перебить. Так...

Direct не пашет
У меня одного так? Посмотрите свои пожалуйста.

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

CCP не пашет
День добрый, так же в копилку, пытаюсь подцепится к 2921 по usb a to b, установил с сайта драйвер, но ССР в упор не хочет этот &quot;ком...

Не пашет установщик
Проблема заключается в том что при запуске установщика,он вроде как запускается и отображается в диспетчере,но его собственно ни где...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru