Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
Результаты опроса: Можно ли построить беспроигрышный алгоритм для игры "Сапер"?
Да. 9 20.45%
Нет. 20 45.45%
Зависит от отношения количества бомб к количеству клеток поля. 15 34.09%
Голосовавшие: 44. Вы ещё не голосовали в этом опросе

 
 
Рейтинг 4.67/168: Рейтинг темы: голосов - 168, средняя оценка - 4.67
Пробующий
 Аватар для galileopro
185 / 98 / 10
Регистрация: 28.04.2009
Сообщений: 1,101

Сапер на Delphi

13.08.2009, 22:00. Показов 32062. Ответов 127
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Хочу написать сапера на делфи. Принимаю любую помощь и предложения.
1
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.08.2009, 22:00
Ответы с готовыми решениями:

Сапер
Кто подскажет как сделать в сапере чтобы он выводил в конце игры время за которое ты прошел, и чтобы записывал таблицу рекордов, как в...

Сапер
Ребят не пойму как правильно сделать рекурсию, мой алгоритм не правильный. Бывает просто 0 откроет и все, бывает нули еще рядом не открытые...

Сапер
Добрый День. Пишу сапера и столкнулся с проблемами. Компилируется удачно и запускается тоже,но вот при нажатии кнопки ошибки так и сыпятся....

127
Почетный модератор
 Аватар для Puporev
64319 / 47615 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
18.08.2009, 17:44
Студворк — интернет-сервис помощи студентам
Экзешник без графических файлов работать не будет, зря выложил.

Добавлено через 1 минуту 45 секунд
Динамический массив
Delphi
1
2
3
4
5
6
var a:array of array of integer;
........................................
Setlength(a,10,10);
for i:=0 to 9 do
for j:=0 to 9 do
a[i,j]:=??????/
0
Пробующий
 Аватар для galileopro
185 / 98 / 10
Регистрация: 28.04.2009
Сообщений: 1,101
18.08.2009, 17:53  [ТС]
Ага. А как сделать, чтобы если пользователь жмет в меню "особые.." то открывается окошко где он указывает к-во бомб и т п т. е. формочка видимо новая, а как её Вызвать?

Добавлено через 4 минуты 35 секунд
Form2.Visible:=true?
0
Почетный модератор
 Аватар для Puporev
64319 / 47615 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
18.08.2009, 17:55
Да не нужно новую форму. Обычно делается 3 уровня игры, легкий, средний и трудный. Они выбпраются в меню. Для каждого уровня рисуется свое поле с разным количеством мин.
0
Пробующий
 Аватар для galileopro
185 / 98 / 10
Регистрация: 28.04.2009
Сообщений: 1,101
18.08.2009, 17:59  [ТС]
Там можно и свои игрі делать
0
Пробующий
 Аватар для galileopro
185 / 98 / 10
Регистрация: 28.04.2009
Сообщений: 1,101
19.08.2009, 19:01  [ТС]
А как можно насильно нарисовать на TImage поле пустое(скажем белого цвета), просто у меня почему-то
Delphi
1
Image1.Repaint; Image1.Refresh;
не дают должного эффекта, все равно он не перерисовывается. Скажем вот мой код
Delphi
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
procedure DrawPole(MyCanvas:TCanvas; index:integer; i,j:integer);
 begin
    Form1.ImageList1.Draw(MyCanvas,(i-1)*VarLeft,(j-1)*VarTop,index,true);
    Form1.Image1.Refresh;
 end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
Form1.Width:=400;
Form1.Height:=400;
Form1.Image1.Width:=15*10;
Form1.Image1.Height:=15*10;
 Form1.Image1.Repaint;
 for i:=1 to 10 do
 for j:=1 to 10 do
DrawPole(Form1.Image1.Canvas,5,i,j);
end;
 
procedure TForm1.Button2Click(Sender: TObject);
begin
Form1.Image1.Width:=15*15;
Form1.Image1.Height:=15*10;
Form1.Image1.Repaint;
  for i:=1 to 15 do
 for j:=1 to 10 do
DrawPole(Form1.Image1.Canvas,5,i,j);
end;
Сначала нажимаю на Баттон1, и рисуется квадрат 10 на 10. Потом на Баттон2, и успешно рисуется прямоугольник 15 на 10. Затем снова на Баттон1, и ничего не происходит. Заново квадратное поле не рисуется((

Добавлено через 33 минуты 59 секунд
Спрошу проще: как перерисовать Image или\и Image.canvas так чтоб наверняка. Если что и было нарисовано, то оно сотрется хоть ядерная война)
0
Человек
 Аватар для mustardandrew
97 / 82 / 7
Регистрация: 16.06.2009
Сообщений: 229
19.08.2009, 21:45
Просто зарисовивай
Delphi
1
Canvas.FillRect(Rect(0,0,width, height));
0
Пробующий
 Аватар для galileopro
185 / 98 / 10
Регистрация: 28.04.2009
Сообщений: 1,101
19.08.2009, 22:04  [ТС]
Спасибо. А можно как-то запретить\разрешить изменение размеров Image?
0
Человек
 Аватар для mustardandrew
97 / 82 / 7
Регистрация: 16.06.2009
Сообщений: 229
19.08.2009, 22:14
Цитата Сообщение от galileopro Посмотреть сообщение
Спасибо. А можно как-то запретить\разрешить изменение размеров Image?
А зачем ето делать?
0
Пробующий
 Аватар для galileopro
185 / 98 / 10
Регистрация: 28.04.2009
Сообщений: 1,101
19.08.2009, 22:26  [ТС]
Да дело в том, что я пітаюсь в программе изменить размер Image, но он не меняется.
0
Человек
 Аватар для mustardandrew
97 / 82 / 7
Регистрация: 16.06.2009
Сообщений: 229
19.08.2009, 22:33
Попробуй пересоздать
Для примера
Delphi
1
2
3
4
5
6
7
Image1.Free;
Image1 := TImage.Create(Application);
Image1.Width := 300;
Image1.Height := 300;
Image1.Left := 10;
Image1.Top := 10;
Image1.Parent := Form1;
0
Пробующий
 Аватар для galileopro
185 / 98 / 10
Регистрация: 28.04.2009
Сообщений: 1,101
20.08.2009, 00:31  [ТС]
Да помогло. Вот код на всякий случай
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
procedure TForm1.Button1Click(Sender: TObject);
begin
Image1.SetBounds(10,10,50,50);
 Form1.Caption:=IntToStr(Image1.Width)+' '+IntToStr(Image1.Height);
  Form1.ImageList1.Draw(Form1.Image1.Canvas,10,10,0,true);
end;
 
procedure TForm1.Button2Click(Sender: TObject);
begin
Image1.Free;
Image1 := TImage.Create(Application);
Image1.SetBounds(10,10,200,200);
Image1.Parent := Form1;
Image1.Canvas.FillRect(Rect(0,0,Image1.width, Image1.height));
 Form1.Caption:=IntToStr(Image1.Width)+' '+IntToStr(Image1.Height);
end;
Добавлено через 36 минут 21 секунду
Только как быть С MouseDown Image? Если его вот так пересоздать, то почему-то обработчик события не работает(

Добавлено через 1 час 2 минуты 53 секунды
Ребят как обработать событие MouseDown(...) "пересозданного" компонента? Стандартный обработчик не работает. Вот код "пересоздания":
Delphi
1
2
3
4
5
Form1.Image1.Free;
Form1.Image1 := TImage.Create(Application);
Form1.Image1.SetBounds(30,30,200,200);
Form1.Image1.Parent := Form1;
...
0
Человек
 Аватар для mustardandrew
97 / 82 / 7
Регистрация: 16.06.2009
Сообщений: 229
20.08.2009, 23:37
Delphi
1
Form1.Image1.OnMouseDown := <Здесь назва функции для собития>;
0
Пробующий
 Аватар для galileopro
185 / 98 / 10
Регистрация: 28.04.2009
Сообщений: 1,101
21.08.2009, 00:04  [ТС]
Спасибо. А вот если пишешь
Delphi
1
Form1.Image1.OnMouseDown:=TForm1.Image1MouseDown(Form1, mbLeft,Shift, 10,10);
То ругается на слово Shift, чем можно заменить?

Добавлено через 9 минут 38 секунд
Вот написал
Delphi
1
ssShift
Так как <a href="http://translate.google.ru/translate?hl=ru&sl=en&u=http://www.freepascal.org/docs-html/rtl/classes/tshiftstate.html&ei=EquNSviKLKGKnQOM4MDb DQ&sa=X&oi=translate&resnum=4&ct=result& prev=/search%3Fq%3DTShiftState%26hl%3Dru%26lr% 3D%26sa%3DG%26newwindow%3D1">Вот</a>
Но оно ругается: [Error] Incompatible types: 'TShiftState' and 'Enumeration'
0
Человек
 Аватар для mustardandrew
97 / 82 / 7
Регистрация: 16.06.2009
Сообщений: 229
21.08.2009, 00:04
Нет пишеш просто
Delphi
1
Form1.Image1.OnMouseDown:=TForm1.Image1MouseDown;
0
Пробующий
 Аватар для galileopro
185 / 98 / 10
Регистрация: 28.04.2009
Сообщений: 1,101
21.08.2009, 00:10  [ТС]
http://translate.google.ru/tra... window%3D1

Добавлено через 47 секунд
Тогда говорит [Error] Unit1.pas(200): Incompatible types: 'TMouseEvent' and 'Procedure'

Добавлено через 4 минуты 44 секунды
Вообще если напсать
Delphi
1
Form1.Image1.OnMouseDown:=TForm1.Image1MouseDown;
То как потом проверять координаты мышки? И какая кнопка нажата? Левая или правая?
0
Человек
 Аватар для mustardandrew
97 / 82 / 7
Регистрация: 16.06.2009
Сообщений: 229
21.08.2009, 00:20
Работает процедура Image1MouseDown.
А в ней
(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

Добавлено через 3 минуты 35 секунд
Delphi
1
2
3
4
5
6
7
8
9
// Якщо нажата ліва і права клавіші
    if ((button = mbLeft) and (ssRight in shift)) or
       ((button = mbRight) and (ssLeft in shift))  then begin end;
 
// якщо нажата права клавіша
    if button = mbRight  then begin end;
 
// Якщо нажата ліва клавіша
    if button = mbLeft then begin end;
0
Пробующий
 Аватар для galileopro
185 / 98 / 10
Регистрация: 28.04.2009
Сообщений: 1,101
21.08.2009, 13:00  [ТС]
Это я знаю, но на строку
Delphi
1
    Form1.Image1.OnMouseDown:=TForm1.Image1MouseDown;
компилятор говорит Error: Incompatible types: 'TMouseEvent' and 'Procedure'

Добавлено через 7 минут 8 секунд
А понял, если это не свойство, а процедура, то нужно ставить скобки
Delphi
1
Form1.Image1.OnMouseDown:=TForm1.Image1MouseDown();
Но тогда компилятор ругатся
[Error] Unit1.pas(202): Not enough actual parameters

Добавлено через 58 минут 10 секунд
Все спасибо, я уже нашел выход.

Добавлено через 5 минут 41 секунду
Вот такой вопрос как добавить иконку в меню? У меня ругается на
Delphi
1
2
3
4
5
6
7
var MyIcon:TIcon;
begin
MyIcon:=TIcon.Create;
MyIcon.LoadFromFile(ExtractFileDir(ParamStr(0))+'\pictures\'+'Ic.ico');
Form1.MainMenu1.Images.InsertIcon(N2.ImageIndex,MyIcon);
MyIcon.Free;
end;
Добавлено через 8 минут 7 секунд
Сделал так
Delphi
1
2
3
4
5
6
7
var MyBitmap:TBitMap;
begin
MyBitmap:=TBitMap.Create;
MyBitmap.LoadFromFile(ExtractFileDir(ParamStr(0))+'\pictures\'+'Ic.bmp');
MainMenu1.items.items[0].items[1].Bitmap:=MyBitmap;
MyBitmap.Free;
end;
0
Пробующий
 Аватар для galileopro
185 / 98 / 10
Регистрация: 28.04.2009
Сообщений: 1,101
21.08.2009, 14:35  [ТС]
Проверьте, если кто может єто на предмет глюков. Там уже много кой-чего добавлено и исправлено. 7_1.rar
0
Человек
 Аватар для mustardandrew
97 / 82 / 7
Регистрация: 16.06.2009
Сообщений: 229
21.08.2009, 23:43
Здесь ошибка
Delphi
1
Form1.Image1.OnMouseDown:=TForm1.Image1MouseDown;
Правильно
Delphi
1
Form1.Image1.OnMouseDown:=Form1.Image1MouseDown;
0
Пробующий
 Аватар для galileopro
185 / 98 / 10
Регистрация: 28.04.2009
Сообщений: 1,101
21.08.2009, 23:51  [ТС]
Я пробовал и так. Там все равно ошибки были. Да не парься, я уже решил проблему. в исходнике полностью весь код есть. Если хочешь, я выложу решение.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.08.2009, 23:51
Помогаю со студенческими работами здесь

Сапер
Пишу игру &quot;сапер&quot; на C++. Появилась небольшая проблемка. Всё поле храню в массиве. Бомбы разбрасываю случайно по полю, а после этого...

Сапер
Доброго времени суток! Подскажите пожалуйста, где я налажал в коде? Я запутался:( Ругается на константу двумерного массива... #include...

Сапер
package myminesapper; public class myminesapper { public static void main(String args) { int m=5; //m*n (p) int n=5; ...

Сапер на С++
Помогите написать программу. Вводим размерность поля,задаем координаты мин и соответственно их количество и программа высчитывает...

Сапер на С++
помогите пожалуйста переделать игру сапер, программа работает, осталось оформить ее с классом &quot;Field&quot;, помогите пожалуйста, а то...


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

Или воспользуйтесь поиском по форуму:
100
Ответ Создать тему
Новые блоги и статьи
[golang] Двоичная куча, min-heap
alhaos 20.05.2026
Двоичная куча Двоичная куча — структура данных, которая всегда держит самый важный элемент наготове. Представьте очередь к хилеру в игре, и очередь из игроков в приоритете те у кого меньше. . .
[golang] Breadth-First Search
alhaos 19.05.2026
BFS (Breadth-First Search) — это базовый алгоритм обхода графа в ширину, который поуровнево исследует все связанные вершины. Он начинает с выбранной точки и проверяет всех соседей, прежде чем. . .
[golang] Алгоритм «Хак Госпера»
alhaos 17.05.2026
Алгоритм «Хак Госпера» Хак Госпера (Gosper's Hack) — алгоритм нахождения следующего по величине числа с тем же количеством установленных бит. Придуман Биллом Госпером в 1970-х, опубликован в. . .
Рисование бинарного древа до 6-го колена на js, svg.
russiannick 17.05.2026
<svg width="335" height="240" viewBox="0 0 335 240" fill="#e5e1bb"> <style> <!]> </ style> <g id="bush"> </ g> </ svg> function fn(){ let rost;/ / высота древа let xx=165,yy=210,w=256;
FSharp: interface of module
DevAlt 16.05.2026
Интерфейс модуля F# позволяет управлять доступностью членов, содержащихся в реализации модуля. По-умолчанию все члены модуля доступны: module Foo let x = 10 let boo () = printfn "boo" . . .
Хитросплетение родственных связей пантеона греческих богов.
russiannick 14.05.2026
Однооконник, позволяющий узреть и изучить отдельных героев древней Греции. <!DOCTYPE html> <html lang="ru"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible". . .
[golang] Угол между стрелками часов
alhaos 12.05.2026
По заданным значениям часа и минуты необходимо определить значение меньшего угла между стрелками аналогового циферблата часов. import "math" func angleClock(hour int, minutes int) float64 { . . .
Debian 13: Установка Lazarus QT5
ВитГо 09.05.2026
Эта инструкция моя компиляция инструкций volvo https:/ / www. cyberforum. ru/ blogs/ 203668/ 10753. html и его же старой инструкции по установке Lazarus с gtk2. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru