1 / 1 / 0
Регистрация: 10.10.2018
Сообщений: 18

Рисование поля в игре Сапер

10.12.2018, 07:21. Показов 3017. Ответов 2

Студворк — интернет-сервис помощи студентам
Можете подсказать. пишу игру сапер, добавил выбор режима поля. Допустим когда я выбираю 5на5 поле он отрисовывает кнопки, а когда 10на10 он просто к имеющим дорисовывает как это исправить подскажите. Вот код
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
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 Saper3
{
    public partial class Form1 : Form
    {
        
        int width ;
        int height;
        int distanceBetweenButtoms=30;
        ButtonExtended[,] allButtons;
        int count = 0;
        int countbombs = 0;
        int countButtons;
        int res;
        public Form1()
        {
            InitializeComponent();
            NewGame();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            
        }
        public void NewGame()
        {
            countButtons = width * height;
            allButtons = new ButtonExtended[width, height];
            Random rng = new Random();
            for (int x = 40; x - 40 < width * distanceBetweenButtoms; x += distanceBetweenButtoms)
            {
                for (int y = 40; y - 40 < height * distanceBetweenButtoms; y += distanceBetweenButtoms)
                {
                    ButtonExtended button = new ButtonExtended();
                    button.Size = new Size(30, 30);
                    button.Location = new Point(x, y);
                    button.BackColor = Color.Blue;
                    if (rng.Next(1, 101) < 10)
                    {
                        button.isBomb = true;
                        countbombs++;
                    }
                    res = countButtons - countbombs;
                    allButtons[(x - 40) / distanceBetweenButtoms, (y - 40) / distanceBetweenButtoms] = button;
                    Controls.Add(button);
                    button.Click += new EventHandler(FieldClick);
                }
            }
        }
 
 
 
 
        void FieldClick(object sender, EventArgs e)
        {
            ButtonExtended button = (ButtonExtended)sender;
            if (button.isBomb)
            {
                Explode(button);
            }
            else
            {
                EmptyFieldClick(button);
            }
        }
        void Explode(ButtonExtended button)
        {
            for (int x = 0; x < width; x++)
            {
                for (int y = 0; y < height; y++)
                {
                    if (allButtons[x, y].isBomb)
                    {
                        allButtons[x, y].Text = "*";
                    }
                }
            }
            MessageBox.Show("Вы проиграли");
        }
 
 
        void EmptyFieldClick(ButtonExtended button)
        {
            for (int x = 0; x < width; x++)
            {
                for (int y = 0; y < height; y++)
                {
                    if (allButtons[x, y] == button)
                    {
                        count++;
                        if (MinesAround(x, y) == 0)
                        {
 
                            button.BackColor = Color.White;
                        }
                        else
                        {
                            button.BackColor = Color.White;
                            button.Text = "" + MinesAround(x, y);
                        }
                    }
                }
            }
            if (count == res)
            {
                MessageBox.Show("Вы выиграли");
            }
        }
 
        int MinesAround(int xV, int yV)
        {
            int countsbombs = 0;
 
            for (int x = xV - 1; x <= xV + 1; x++)
            {
                for (int y = yV - 1; y <= yV + 1; y++)
                {
                    if (x >= 0 && x < width && y >= 0 && y < height)
                    {
                        if (allButtons[x, y].isBomb)
                        {
                            countsbombs++;
                        }
                    }
                }
            }
            return countsbombs;
        }
        class ButtonExtended : Button
        {
            public bool isBomb;
            public bool isFlag;
        }
 
        private void x10ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            
            width = 10;
            height = 10;
           
 
            NewGame();
 
        }
 
        private void x15ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Invalidate();
            width = 15;
            height = 15;
           
 
            NewGame();
        }
 
        private void x5ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Invalidate();
            width = 5;
            height = 5;
           
            NewGame();
        }
 
        private void x7ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Invalidate();
            width = 7;
            height = 7;
 
          
            NewGame();
        }
    }
}
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.12.2018, 07:21
Ответы с готовыми решениями:

Уровни сложности в игре "Сапер"
Всем привет! Срочно нужна нужна ваша помощь... есть такой код: using System; using System.Collections.Generic; using...

Фильм по игре Сапер
Трейлер фильма, снятого по культовой игре всех компьютерщиков &quot;Сапер&quot; :D &lt;object width=&quot;425&quot;...

По каком принципу расставляются числа в клетках в игре Сапер?
По каком принципу расставляются числа в клетках в игре Сапер?

2
384 / 184 / 107
Регистрация: 07.01.2016
Сообщений: 496
10.12.2018, 08:25
Лучший ответ Сообщение было отмечено emailworkbabich как решение

Решение

emailworkbabich, добавь в NewGame очистку от кнопок предыдущей конфигурации
C#
1
2
3
4
5
public void NewGame()
{
            if (allButtons != null) foreach (ButtonExtended b in allButtons) b.Dispose();
            /// ...
}
1
1 / 1 / 0
Регистрация: 10.10.2018
Сообщений: 18
10.12.2018, 15:39  [ТС]
Спасибо вам огромное
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.12.2018, 15:39
Помогаю со студенческими работами здесь

Игра сапер - реализовать интерфейс, как в одноименной игре Windows
Добрый вечер! Сегодня доделал(почти) игру сапер. Она у меня запускается в командной строке и при вводе числа открывается соответствующая...

Сапер на c# с произвольным размером поля
Использовать контролы для создания поля невыгодно. Создается долго. А уж тем более размеры поля произвольные (больше чем 10x10) и еще надо...

Написать программу, подобную игре "Сапер"
Игра сапер.задан массив 10х10 заполненый нулями.в этот массив задают в случайные координаты десять 9(бомбы).вокруг девяток ставят...

Открытие ячеек в игре "Сапер"
Здравствуйте, пишу текстовый Сапер на паскале, не могу правильно написать рекурсивную функцию для проверку пустого от мин поля, думаю...

Исправить ошибки в игре "Сапер"
uses crt,dos; const NMaxX=40; NMaxY=25; Level:array of byte = ((8,8,10),(16,16,40),(30,16,99)); ...


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

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

Новые блоги и статьи
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определенном условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru