Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
3 / 3 / 1
Регистрация: 02.04.2012
Сообщений: 107
1

игра 'BLOKS'

26.04.2013, 21:40. Показов 578. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Писала игру блоки....Как описать процедуру завершения игры?

как еще сделать чтобы форма сразу выполняла все команды пользователя??? Поставила таймер...все же при нажатии кубика все выполняется, только форма не обновляется сразу, визуально все обновляется только после того как свернула и открыла, или при нажатии вне формы....
вот код:

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
unit Unit3;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, Menus;
 
type
  TForm3 = class(TForm)
    MainMenu1: TMainMenu;
    PopupMenu1: TPopupMenu;
    Timer1: TTimer;
    N1: TMenuItem;
    N2: TMenuItem;
    N3: TMenuItem;
    N4: TMenuItem;
    N5: TMenuItem;
    N21: TMenuItem;
    N31: TMenuItem;
    N41: TMenuItem;
    N51: TMenuItem;
    procedure FormCreate(Sender: TObject);
    procedure NewGame;         //procedura formirovaniya massiva
    procedure DropBlock;       //procedura padeniya  blokov
    procedure DelVoid;
    procedure N2Click(Sender: TObject);
    procedure N4Click(Sender: TObject);
    procedure FormPaint(Sender: TObject);
    procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure N21Click(Sender: TObject);
    procedure N31Click(Sender: TObject);
    procedure N41Click(Sender: TObject);
    procedure N51Click(Sender: TObject);
    procedure N3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form3: TForm3;
  MainArray, SecArray : array[0..100,0..100] of byte; // массив из байтов
  BPic1,  BPic2,  BPic3,  BPic4,  BPic5 : TBitmap; //чтобы загрузить картинки
  Count: integer;         //количество, размерность массива(igrovoy oblasti)
  Colors : integer;
implementation
 
{$R *.dfm}
 // timer dlya obnovleniya ekrana/formy
 
procedure TForm3.FormMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
  var  item: byte;
       i,j,k,m: integer;
       ending: boolean;
begin       //procedura udaleniya blokov
item := MainArray[x div 36, y div 36];
m := 1;
ending := False;
for i := 0 to Count do
 for j := 0 to Count do
 SecArray[i,j] := 0;
 
if MainArray[x div 36, y div 36] <>0 then //esli v pozicii kursora chto to est' to udalit'
  begin
   SecArray[x div 36, y div 36] := 1;
   while ending <> True do
     Begin
      k := 0;
      for i := Count downto 0 do
      for j := Count downto 0 do
      if (SecArray[i,j]=1) then
      begin
        if (MainArray[i-1,j]=item) and (SecArray[i-1,j]=0) then
          begin SecArray[i-1,j] := 1;  k:=k+1;  m:=m+1;  end;
 
        if (MainArray[i+1,j]=item) and (SecArray[i+1,j]=0) then
          begin SecArray[i+1,j] := 1;  k:=k+1;  m:=m+1;  end;
 
        if (MainArray[i,j-1]=item) and (SecArray[i,j-1]=0) then
          begin SecArray[i,j-1] := 1;  k:=k+1;  m:=m+1;  end;
 
        if (MainArray[i,j+1]=item) and (SecArray[i,j+1]=0) then
          begin SecArray[i,j+1] := 1;  k:=k+1;  m:=m+1;  end;
 
      end;
 
     if k = 0 then ending := True;
     End;
 
   if m > 1 then
   for i := 0 to Count do
   for j := 0 to Count do
   if SecArray[i,j] = 1 then MainArray[i,j] := 0;
 
  end;
 
end;
 
 
procedure TForm3.DelVoid;
var i,j,k : integer;
begin
 for i := 0 to Count-1 do
 begin
   k := 0;
   for j := 0 to Count do
   k := k+ MainArray[i,j];
   if k=0 then
    for j := 0 to Count do
    begin
     MainArray[i,j] :=  MainArray[i+1,j];
     MainArray[i+1,j] := 0;
    end;
 end;
end;
 
 
procedure TForm3.FormPaint(Sender: TObject);
var i,j : integer;
begin              //esli chto to est'v massive(opredelennie pozicii) to neobhodimo risovat' sootvetstueshiy Bitmap
 for i := 0 to Count do
 for j := 0 to Count do
 if MainArray[i,j] <> 0 then
 case  MainArray[i,j] of
  1: Canvas.Draw(i * 36, j * 36, BPic1); //36-potomuchto razmer iobrazheniy 36*36
  2: Canvas.Draw(i * 36, j * 36, BPic2);
  3: Canvas.Draw(i * 36, j * 36, BPic3);
  4: Canvas.Draw(i * 36, j * 36, BPic4);
  5: Canvas.Draw(i * 36, j * 36, BPic5);
 end;
 DropBlock;
 DelVoid;
end;
 
procedure TForm3.N21Click(Sender: TObject);
begin
 Colors := 2;
 NewGame;
 
end;
 
procedure TForm3.N2Click(Sender: TObject);
begin
NewGame;
end;
 
procedure TForm3.N31Click(Sender: TObject);
begin
 Colors := 3;
 NewGame;
end;
 
procedure TForm3.N3Click(Sender: TObject);
begin
Close;
end;
 
procedure TForm3.N41Click(Sender: TObject);
begin
 Colors := 4;
 NewGame;
end;
 
procedure TForm3.N4Click(Sender: TObject);
begin
NewGame;
end;
 
procedure TForm3.N51Click(Sender: TObject);
begin
 Colors := 5;
 NewGame;
end;
 
procedure TForm3.NewGame;
var i,j : integer;
begin
 Randomize;
 for i := 0 to Count do    //ciklom zapolnyaem massiv
 for j := 0 to Count do
 MainArray[i,j] := random(Colors)+1;//massiv zapolnyaetsya sluchaynimi chislami ot 1 do 3
 
end;
 
procedure TForm3.DropBlock;
var i,j : integer;
begin   //proveryaem est' li v massive 0,esli nad etim nulem chto to est' po Y-ku6 to cmestit' vniz
 
for i := 0 to Count do
for j := Count downto 1 do
  if MainArray[i,j] = 0 then
  begin
  MainArray[i,j] := MainArray[i,j-1];
  MainArray[i,j-1] := 0;
  end;
 
end;
 
 
procedure TForm3.FormCreate(Sender: TObject);
begin
 Count := 15;
 Width := 36*(Count+1)+10; //36-potomuchto razmer iobrazheniy 36*36
 Height := 36*(Count+1)+53;
 Color := clWhite;  // cvet formy beliy
 Colors := 3;
 
 BPic1 := TBitmap.Create; //sozdaem bitap
 BPic1.LoadFromFile('1.bmp') ;//podgruzhaem
 BPic2 := TBitmap.Create;
 BPic2.LoadFromFile('2.bmp');
 BPic3 := TBitmap.Create;
 BPic3.LoadFromFile('3.bmp');
 BPic4 := TBitmap.Create;
 BPic4.LoadFromFile('4.bmp');
 BPic5 := TBitmap.Create;
 BPic5.LoadFromFile('5.bmp');
 
 NewGame;
 
end;
 
end.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.04.2013, 21:40
Ответы с готовыми решениями:

Взаимодействие с mysql на СИ в code::bloks
Скопипастил пробную программу с взаимодействием с mysql на СИ. Указал линкеру все библиотеки однако...

Code bloks, падение качества графики
Добрый день. Графика в код блоксе почему-то переключается на плохую, как видео 360р. Подскажите,...

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

пропустите пожалуйста код через C++ Code Bloks!
кто может переписать код с паскаля на С++,и пропустить код через С++ Code bloks,срочно нужны скрины...

9
angstrom
26.04.2013, 21:50 2
После каких-либо действий вызывай обновление формы.
3 / 3 / 1
Регистрация: 02.04.2012
Сообщений: 107
26.04.2013, 21:58  [ТС] 3
Цитата Сообщение от angstrom Посмотреть сообщение
После каких-либо действий вызывай обновление формы.
Можно так?
Form3.Refresh;
0
angstrom
26.04.2013, 21:59 4
В действиях где идёт перерисовка но нет обновления, так и сделай.
3 / 3 / 1
Регистрация: 02.04.2012
Сообщений: 107
26.04.2013, 22:06  [ТС] 5
Цитата Сообщение от angstrom Посмотреть сообщение
В действиях где идёт перерисовка но нет обновления, так и сделай.
увы....но не получилось....Форма становятся не видными меню, скины и т.д....Проект полностью виснет...Ничего выполняет(((
0
angstrom
26.04.2013, 22:07 6
Такая команда не может приводить к зависаниям, смотрите где напутали.
3 / 3 / 1
Регистрация: 02.04.2012
Сообщений: 107
26.04.2013, 22:14  [ТС] 7
Цитата Сообщение от angstrom Посмотреть сообщение
Такая команда не может приводить к зависаниям, смотрите где напутали.
Вроде нигде....просто добавила Form3.Refresh;-ы

Добавлено через 6 минут
Подскажите пожалуйста куда именно,между какими строками вписать Form3.Refresh; ??? Заранее спасибо!!!!!!!! Я Может не туда вписала((
0
angstrom
26.04.2013, 22:22 8
Если не запутался в вашем коде, то в конец FormMouseUp и DropBlock. Не нашёл где вызывается DropBlock.
В чём смысл игры?

Добавлено через 1 минуту
Цитата Сообщение от angstrom Посмотреть сообщение
Не нашёл где вызывается DropBlock
Увидел, для него не нужно.
3 / 3 / 1
Регистрация: 02.04.2012
Сообщений: 107
26.04.2013, 22:27  [ТС] 9
Цитата Сообщение от angstrom Посмотреть сообщение
Если не запутался в вашем коде, то в конец FormMouseUp и DropBlock. Не нашёл где вызывается DropBlock.
В чём смысл игры?

Добавлено через 1 минуту

Увидел, для него не нужно.
Суть игры в том чтобы убрать все блоки....Щелкаем мышью по группам из 2 или более кубиков одинаковых, чтобы удалить их с поля. Удаляются все близлежащие одинаковые блоки....
0
angstrom
26.04.2013, 22:34 10
Посмотри это.
26.04.2013, 22:34
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.04.2013, 22:34
Помогаю со студенческими работами здесь

Как соединить Code::Bloks редактор и компилятор DevC++ 4.9.9.2
По сответу знаюших людей узнал кое что про Code::Bloks. Я скачал codeblocks-12.11-setup.exe и у...

Бюджет 4500 гр. Конфигурация работа в Office, AutoCAD, игра Assassin, онлайн игра World of Tanks
Собираю компьютер для сестры. Основные требования: работа в Microsoft Office, AutoCAD, игра...

Игра в загадки. Загадать загадку. Если ответ верен – поздравить пользователя. Затем сообщить, что игра окончена.
Всем привет! Меня зовут VitoScaletta, совсем недавно начал обучаться JS, но очень тяжело в голову...

Игра в «Одиннадцать предметов», игра Баше.
прошу помощи в создании программы! Разработать программную модель следующей игры двух...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru