Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.68/19: Рейтинг темы: голосов - 19, средняя оценка - 4.68
0 / 0 / 0
Регистрация: 17.05.2011
Сообщений: 9

Редактирование кода программы

17.05.2011, 22:42. Показов 4269. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Нашел в инете исходник одной игры и хотел бы его немного изменить. Но что-то никак у меня это не выходит. Вот код программы
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
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
unit soberi_;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes,
  Graphics, Controls, Forms, Dialogs;
 
type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormPaint(Sender: TObject);
 
    // эти объявления вставлены сюда вручную
    procedure ShowPole;
    procedure Mixer;
    procedure NewGame;
 
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
const
    H = 4;   W = 4;   // размер поля - 4х4
var
 
    wc,hc: integer; // ширина и высота клетки
 
    // игровое поле
    pole: array[1..H, 1..W] of byte;
    ex,ey: integer; // координаты пустой клетки
 
    // правильное расположение клеток
    stp : array[1..H, 1..W] of byte =
    (( 1, 2, 3, 4),
     ( 5, 6, 7, 8),
     ( 9,10,11,12),
     (13,14,15, 0));
 
     pic: TBitmap;   // картинка
 
// новая игра
procedure TForm1.NewGame;
var
    fname: string[20]; // файл картинки
    i,j: integer;
begin
    { сюда можно вставить инструкции,
    обеспечивающие, например, случайный
    выбор загружаемой картинки }
 
    fname := 'DAY1.bmp';
    try
        pic.LoadFromFile(fname);
        except
            on EFopenError do
               begin
                ShowMessage('Ошибка обращения к файлу ' + fname);
                Form1.Close;
               end;
    end;
    // Установить размер формы равный
    //  равный размеру картинки.
 
    // размер клетки
    hc := Pic.Height div H;
    wc := Pic.Width div W;
 
    // размер формы
    ClientWidth  := 636;
    ClientHeight := 900;
 
    // исходное (правильное) положение
    for i:=1 to H do
        for j:=1 to W do
            pole[i,j] := stp[i,j];
    Form1.Mixer;    // перемешать фишки
    Form1.ShowPole; // отобразить поле
end;
 
// проверяет, расположены ли
// клетки (фрагменты картинки) в нужном порядке
function Finish: boolean;
var
    row,col: integer;
    i: integer;
begin
    row :=1; col :=1;
    Finish := True; // пусть фишки в нужном порядке
    for i:=1 to 15 do
    begin
       if pole[row,col] <> i then
       begin
            Finish:= False;
            break;
       end;
       // к следующей клетке
       if col < 4
          then inc(col)
       else begin
          col :=1;
          inc(row);
       end;
    end;
end;
 
 
// "перемещает" фишку в соседнюю пустую клетку,
// если она есть, конечно
procedure Move(cx,cy: integer);
// cx,cy - клетка, в которой игрок сделал щелчок
var
    r: integer;       // выбор игрока
begin
    // проверим, возможен ли обмен
    if not (( abs(cx-ex) = 1) and (cy-ey = 0) or
            ( abs(cy-ey) = 1) and (cx-ex = 0))
    then exit;
    // Обмен. Переместим фишку из x,y в ex,ey
    Pole[ey,ex] := Pole[cy,cx];
    Pole[cy,cx] := 0;
    ex:=cx;
    ey:=cy;
    // отрисовать поле
    Form1.ShowPole;
    if Finish then
    begin
        pole[4,4] := 16;
        Form1.ShowPole;
        r := MessageDlg('Цель достигнута!'+ #13+
        'Еще раз?',mtInformation,[mbYes,mbNo],0);
        if r = mrNo then Form1.Close; // завершить работу программы
        Form1.NewGame;
    end;
end;
 
// щелчок в клетке
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
    cx,cy: integer; // координаты клетки
begin
    // преобразуем мыши в координаты клетки
    cx := Trunc(X / wc) + 1;
    cy := Trunc(Y / hc) + 1;
    Move(cx,cy);
end;
 
// выводит игровое поле
procedure TForm1.ShowPole;
var
    Source, Dest: Trect; // области: источник и приемник
    sx,sy: integer;      // левый верхний угол области источника
    i,j: integer;
 
begin
 
    // содержимое клеток
    for i := 1 to W do
        for j := 1 to H do
        begin
            // преобразуем номер картинки
            // в координаты левого верхнего
            // угла области источника
            sy := ((pole[i,j] -1 ) div W) * hc;
            sx := ((pole[i,j] -1 ) mod W) * wc;
 
            Source := Bounds(sx,sy,wc,hc);
            Dest := Bounds((j-1)*wc,(i-1)*hc,wc,hc);
            if pole[i,j] <> 0
                then Canvas.CopyRect(Dest,pic.Canvas,Source)
                else Canvas.Rectangle((j-1)*wc,(i-1)*hc,j*wc,i*hc);
        end;
end;
 
// "перемешивает" фишки
procedure TForm1.Mixer;
var
    x1,y1: integer; // пустая клетка
    x2,y2: integer; // эту переместить в пустую
    d: integer;     // направление, относительно пустой
    i: integer;
begin
    x1:=4; y1:=4; // см. описание массива stp
    randomize;
    for i:= 1 to 150 do  // кол-во перестановок
    begin
        repeat
            x2:=x1;
            y2:=y1;
            d:=random(4)+1;
            case d of
                1: dec(x2);
                2: inc(x2);
                3: dec(y2);
                4: inc(y2);
            end;
        until (x2>=1) and (x2<=4) and (y2>=1) and (y2<=4);
        // здесь определили фишку, которую
        // надо переместить в пустую клетку
        Pole[y1,x1] := Pole[y2,x2];
        Pole[y2,x2] := 0;
        x1:=x2;
        y1:=y2;
    end;
    // запомним координаты пустой клетки
    ex:= x1;
    ey:= y1;
end;
 
// обработка события OnCreate
procedure TForm1.FormCreate(Sender: TObject);
begin
    pic := TBitMap.Create;
    NewGame;
end;
 
// обработка события OnPaint
procedure TForm1.FormPaint(Sender: TObject);
begin
    Form1.ShowPole;
end;
 
end.
Не подскажите, как сделать, чтобы вместо этого окна

Delphi
1
2
3
        r := MessageDlg('Цель достигнута!'+ #13+
        'Еще раз?',mtInformation,[mbYes,mbNo],0);
        if r = mrNo then Form1.Close; // завершить работу программы
Присваивалось Image1.Visible:=true?

Спаисбо!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.05.2011, 22:42
Ответы с готовыми решениями:

Синтаксис Delphi 7. Динамическое редактирование кода в программе
Есть такая временная трудность! Существует 3 типизированные переменные: ConFile_1, ConFile_3, ConFile_7 и (их типы вроде) TCon_File_1,...

Редактирование exe-файла программы, написанной на delphi
Есть бот под один ресурс, на ресурсе сменилось доменное имя и бот теперь не пашет. Бот состоит из одного exe на Borland Delphi 3.0(в...

Варианты кода программы
Какие варианты кода программы, игры парные картинки существуют?

21
 Аватар для Arcor
5709 / 2300 / 466
Регистрация: 20.11.2009
Сообщений: 7,721
Записей в блоге: 1
18.05.2011, 21:39
Студворк — интернет-сервис помощи студентам
**ляяяяяяяяяяя Form1.Image1. .......

Добавлено через 1 минуту
ты обращаешься к процедуре не класса TForm1, а image у тебя это компонент который расположен в классе TForm1 !!!
1
0 / 0 / 0
Регистрация: 17.05.2011
Сообщений: 9
19.05.2011, 19:07  [ТС]
Цитата Сообщение от Arcor Посмотреть сообщение
**ляяяяяяяяяяя Form1.Image1. .......

Добавлено через 1 минуту
ты обращаешься к процедуре не класса TForm1, а image у тебя это компонент который расположен в классе TForm1 !!!
Бинго! Огромное спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.05.2011, 19:07

Шифрование кода программы
Здравствуйте. Подскажите опытные программисты, где можно почитать, желательно разжеванные статьи по актуальному шифрованию кода программы...

Изменение кода программы
Подскажите, как изменить эти две формулы под данный код программы, чтобы их можно было с минимум изменений в коде программы, заменить на...

Описание кода программы
Уважаемые форумчане кто разбирается в коде программы подскажите пожалуйста!!! нужно расписать весь код программы. Заранее большое...

Шифрование кода программы
прочитал занимательную статью http://www.delphikingdom.com/asp/viewitem.asp?catalogid=846 но из-за неграмотности или кривых рук не могу...

Создать форматтер кода программы
Просьба подкинуть идею, как сие сделать. Я знаю что есть форматтеры в виде файла exe которым можно передать текстовый файл, и они его...


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

Или воспользуйтесь поиском по форуму:
22
Ответ Создать тему
Новые блоги и статьи
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства. Жизнь действительно предъявляет каждому. . .
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru