Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.72/29: Рейтинг темы: голосов - 29, средняя оценка - 4.72
2 / 1 / 1
Регистрация: 17.06.2020
Сообщений: 134

Доработать игру

17.06.2020, 13:46. Показов 6183. Ответов 46

Студворк — интернет-сервис помощи студентам
Всем доброго дня
Нашел в интернете игру case briks (как то так).Игра отлично работает но я хотел чтобы когда блоки удаляются они занова регенерировались вместо того чтобы превратиться белый цвет. Проект оставлю ниже
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.06.2020, 13:46
Ответы с готовыми решениями:

Доработать игру "Кто хочет стать миллионером"
Здравствуйте, написал код к игре кто хочет стать миллионером, вопросы вызываются и текстового файла, без индексов как вывести рандомно не...

Нужно доработать игру "Шашки"
Проблема такая.. нужно сделать курсовую а я 1ый курс и особо ничего не знаю...чтото пытаюсь но ничего не получается и времени нет..нуно...

Нужно доработать игру
Помогите доработать игру сам я не справляюсь. 1.Нужно выводить таблицу рекордов 5-ти лучших игроков. 2.И сделать извилистую дорогу, и в то...

46
2 / 1 / 1
Регистрация: 17.06.2020
Сообщений: 134
18.06.2020, 06:14  [ТС]
Студворк — интернет-сервис помощи студентам
mr-Crocodile, а обязательно ли написать StateTimerAnimation в private??
0
 Аватар для mr-Crocodile
3054 / 1673 / 657
Регистрация: 19.03.2019
Сообщений: 5,380
18.06.2020, 09:44
Лучший ответ Сообщение было отмечено young for best как решение

Решение

Цитата Сообщение от young for best Посмотреть сообщение
а обязательно ли написать StateTimerAnimation в private??
нет, конечно, не обязательно. и не принципиально.
можно и в public


можно даже сделать эту переменную не свойством класса, а просто глобальной (т.к. у нас один объект данного класса, один обработчик таймера, поэтому конфликтов не будет). Но вот это я бы не рекомендовал делать. Это плохой стиль. Глобальные переменные нужно использовать только если они действительно нужны и без них не обойтись (или без них крайне сложно)


Цитата Сообщение от young for best Посмотреть сообщение
второй этап теперь при удалений одинаковых блоков оно должно уменшить здоровье противника и для этого какой компонент использовать будет правильно использовать. Друг сказал label я думаю gauge или progressbar
полная свобода выбора. Вплоть до paintbox и рисовать там что захочешь и как захочешь.
Label, имхо, самый убого выглядящий вариант.
1
2 / 1 / 1
Регистрация: 17.06.2020
Сообщений: 134
18.06.2020, 10:09  [ТС]
mr-Crocodile, а как реализовать уменьшение здоровью с помощью gauge или progressbar если не сложно можете на вчерашний проект добавить
p.s можете вчерашний код объяснить очень нужно
0
 Аватар для mr-Crocodile
3054 / 1673 / 657
Регистрация: 19.03.2019
Сообщений: 5,380
18.06.2020, 10:41
Лучший ответ Сообщение было отмечено young for best как решение

Решение

Цитата Сообщение от young for best Посмотреть сообщение
а как реализовать уменьшение здоровью с помощью gauge или progressbar
кидаешь на форму TGauge (или TProgressBar)
на процедуре старта игры (смотри обработчик на кнопке Button1) прописываешь что-то вроде
Delphi
1
Gauge1.Progress := Gauge1.MaxValue;
это задать 100%

потом кидаешь Timer и в нём уменьшаешь значение
Delphi
1
gauge1.Progress:=gauge1.Progress-1;
конец игры, если дошли до нуля
Delphi
1
if gauge1.Progress=0 then
Добавлено через 8 минут
Цитата Сообщение от young for best Посмотреть сообщение
p.s можете вчерашний код объяснить очень нужно
это не так работает. Ты спроси, что тебе в коде непонятно, я тебе объясню.

а по сути всё просто.
я добавил метод заполнения пустых мест
Delphi
1
2
3
4
5
6
7
8
9
procedure TForm1.FillNewBricks;
var
   i,j:integer;
begin
  for i:=0 to Form1.DrawGrid1.ColCount-1 do
   for j:=0 to Form1.DrawGrid1.RowCount-1 do
      if ColorOfBrick[i, j] = WALL_COLOR then
            ColorOfBrick[i,j] := PossibleColors[Random(MAX_COLORS)];
end;

потом, там, где было удаление элементов:
Delphi
1
2
3
4
5
6
7
8
9
10
11
procedure TForm1.DrawGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;
  var CanSelect: Boolean);
begin
if not IsBrickAlone(ACol, ARow) then
begin
   RemoveBricks(ColorOfBrick[ACol, ARow], ACol, ARow);
   SlideBricksDown;
   //SlideBricksSide;
   RedrawCells
end;
end;

я прописал вызов этого метода
Delphi
1
2
3
4
5
6
7
if not IsBrickAlone(ACol, ARow) then
begin
   RemoveBricks(ColorOfBrick[ACol, ARow], ACol, ARow);
   SlideBricksDown;
   FillNewBricks;
   RedrawCells
end;
в принципе, можно было на этом остановиться.
но
по клику на блок - удаление всего блока, падение блоков вниз и заполнение освободившихся ячеек проходило мгновенно, без каких-то промежуточных отрисовок.
Мне это не понравилось.
Если ты видел, как это сделано в настоящей игре, то это всё анимировано - улетает удалённый блок, на освободившееся место падают (это видно, как они падают) ячейки сверху, на место свободных - сверху появляются новые.
вот чтобы сделать что-то похожее, я разделил все этапы на отдельные кадры, добавил таймер и после каждого этапа - отрисовку поля.
смена этапов происходит по переменной StateTimerAnimation
и, кстати, пока эта переменная не равна нулю (пока работают этапы анимации) клики по ячейкам игнорируются
это строчка в коде метода DrawGrid1SelectCell
Delphi
1
  if StateTimerAnimation<>0 then Exit;
если что-то не ясно - спрашивай.
1
2 / 1 / 1
Регистрация: 17.06.2020
Сообщений: 134
18.06.2020, 13:42  [ТС]
[quote="mr-Crocodile;14660582"]если что-то не ясно - спрашивай.
Если не сложно на том проекте покажите пример использованием gauge ну когда блоки удаляются тогда уменьшается gauge

Добавлено через 2 часа 44 минуты
mr-Crocodile, помоги я так сделал типо он убирает по рандому можешь изменить его так чтобы он убирал определенное число как в игре
0
2 / 1 / 1
Регистрация: 17.06.2020
Сообщений: 134
18.06.2020, 13:43  [ТС]
DrawGrid_Game.rar
0
 Аватар для mr-Crocodile
3054 / 1673 / 657
Регистрация: 19.03.2019
Сообщений: 5,380
18.06.2020, 14:58
теперь метод RemoveBricks() возвращает количество удалённых квадратов с поля (кстати, исправил БАГ, когда оставался неудалённым квадрат в первом столбце или первой строке - если кликнуть по квадрату из блока в следующих строках/столбцах)

сколько очков давать за количество снятых отвечает функция GetScoreByCount()

добавил окончание игры при
if GaugeScore.Progress = 0 then

переименовал лейблы и кнопку, так, эстетики ради.

Думаю, что тебе ещё нужно добавить какое-то условие, при котором игрок проигрывает.
Иначе будет скучно, нет захватывающего геймплея. (сравни с той игрой, что ты давал ссылку)
Ну и предусмотреть момент, когда ходов больше нет - вероятость такого события невелика, но все же, если квадраты станут в шахматном порядке, то и игра не закончена и кликнуть, чтобы блок удалить - некуда. Патовая ситуация.
для примера, в той игре, на которую ты ссылку давал, в этом случае выдавалась надпись "Нет больше ходов" и поле полностью менялось.
Вложения
Тип файла: zip DrawGrid_Game_v3.zip (7.7 Кб, 2 просмотров)
1
2 / 1 / 1
Регистрация: 17.06.2020
Сообщений: 134
18.06.2020, 19:01  [ТС]
mr-Crocodile, большое спасибо вот честно просто выручил

Добавлено через 1 час 56 минут
mr-Crocodile, посмотри игру таймер поставил чтобы когда дойдет до какого то определенного числа тогда атака от врага ну снимается hp игрока.таймер работает но gauge не уменьшается
0
2 / 1 / 1
Регистрация: 17.06.2020
Сообщений: 134
18.06.2020, 19:03  [ТС]
DrawGrid_Game_v4.rar
0
2 / 1 / 1
Регистрация: 17.06.2020
Сообщений: 134
19.06.2020, 08:00  [ТС]
вот как то так сделал но выглядит как то убого хотел sleep поставить но вес форма тогда завсиает. Как то так сделал посмотри
p.s как сделать таймер для атаки врага просто image поставить и тоже самое делать как в gauge:-
|DrawGrid_Game_v4.rar
0
 Аватар для mr-Crocodile
3054 / 1673 / 657
Регистрация: 19.03.2019
Сообщений: 5,380
19.06.2020, 16:43
Цитата Сообщение от young for best Посмотреть сообщение
p.s как сделать таймер для атаки врага просто image поставить и тоже самое делать как в gauge:-
прости, не понял, атака по какому событию должна происходить и в чём она выражается - что за image и для чего он нужен?
0
2 / 1 / 1
Регистрация: 17.06.2020
Сообщений: 134
19.06.2020, 16:51  [ТС]
mr-Crocodile, я игру и проект отдельно сделал теперь лень их объединять ты можешь их обхединить в один проект

Добавлено через 3 минуты
mr-Crocodile, ну в общем я типо как то сделал их использовал gauge как таймер через свойство kind и второй таймер поставил типо когда оно дойдет до какого то определенного времени враг нападает на игрока теперь я игру не могу объединить с другой формой попробовол занова написал весь код но когда запускаешь программу drawgrid становиться черного цвета ничего не грузится
0
 Аватар для mr-Crocodile
3054 / 1673 / 657
Регистрация: 19.03.2019
Сообщений: 5,380
19.06.2020, 18:03
ну вот тебе ещё один вариант, может быть, и объединять ничего не надо будет!
Вложения
Тип файла: rar DrawGrid_Game_v5.rar (8.8 Кб, 4 просмотров)
1
2 / 1 / 1
Регистрация: 17.06.2020
Сообщений: 134
19.06.2020, 18:06  [ТС]
mr-Crocodile, спасибо
0
2 / 1 / 1
Регистрация: 17.06.2020
Сообщений: 134
20.06.2020, 09:08  [ТС]
mr-Crocodile, объясни свою процедуру

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 TForm4.pb_AttackTimePaint(Sender: TObject);
var x3,y3: Double;
begin
  with pb_AttackTime.Canvas do begin
    Pen.Color:=clRed;
    Brush.Style:=bsClear;
    Brush.Color:=clBtnFace;
    Ellipse(x0Attack - rAttack, y0Attack - rAttack,
      x0Attack+rAttack, y0Attack + rAttack);
    Brush.Style:=bsSolid;
    Brush.Color:=clRed;
 
    if angleAttack>=360 then
       Ellipse(x0Attack - rAttack, y0Attack - rAttack,
         x0Attack + rAttack, y0Attack + rAttack)
    else begin
      x3:=x0Attack+rAttack*cos(GradToRad(angleAttack - 90));
      y3:=y0Attack+rAttack*sin(GradToRad(angleAttack - 90));
 
      Pie(x0Attack - rAttack, y0Attack - rAttack,
        x0Attack + rAttack, y0Attack + rAttack,
        round(x3),round(y3),
        x0Attack, 0);
    end;
 
  end;
end;
Добавлено через 1 час 25 минут
mr-Crocodile, и эту функцию тоже объясни

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function TForm4.RemoveBricks(cl:TColor; ACol, ARow: integer): integer;
begin
  Result:=0;
  if ColorOfBrick[ACol, ARow] <> cl then exit;
  Result:=1;
  ColorOfBrick[ACol, ARow]:= WALL_COLOR;
  if ACol>0 then
    Result:= Result + RemoveBricks(cl, ACol - 1, ARow);
  if ACol<Form4.DrawGrid1.ColCount - 1 then
    Result:= Result + RemoveBricks(cl, ACol + 1, ARow);
  if ARow>0 then
    Result:=Result + RemoveBricks(cl, ACol, ARow - 1);
  if ARow<Form4.DrawGrid1.RowCount - 1 then
    Result:=Result+RemoveBricks(cl, ACol, ARow + 1);
end;
0
20.06.2020, 12:43

Не по теме:

лень их объединять ты можешь их объединить
Не ну норм чё...

0
2 / 1 / 1
Регистрация: 17.06.2020
Сообщений: 134
20.06.2020, 15:35  [ТС]
mr-Crocodile, кстати я игру в полный проект добавил и когда я запускаю игру нарисованный таймер тоже вместе с ним запускается ну игра начнется до того как его откроют.Можно как то его на какой нибудь button поставить ну типо нажимаешь на button и только тогда запускается таймер
0
2 / 1 / 1
Регистрация: 17.06.2020
Сообщений: 134
20.06.2020, 21:05  [ТС]
Вчера мне скинули игру по примере одного из браузерных игр. Сегодня я эту игру добавил свой проект и хотел сделать полноценную игру с меню справками и тд. Но в игре оказался таймер нарисованный на pintbox.

В чем суть? Суть в том что этот таймер начнет работать сразу после того как закончиться компиляция кода. У меня проекте все происходит поочередно сначала загрузочный экран, гл меню, уровни потом само игра. А если запустить игру таким порядком до того как игра начнется гл герой потеряет половину своего hp.

В общем надо сделать так чтобы когда на форме нажимать button тогда и начался анимация таймера. Проект ниже
0
2 / 1 / 1
Регистрация: 17.06.2020
Сообщений: 134
20.06.2020, 21:05  [ТС]
DrawGrid_Game_v5.rar
0
561 / 230 / 88
Регистрация: 11.07.2015
Сообщений: 817
20.06.2020, 21:30
Установи свойство нужного таймера Enabled в False и включай его по кнопке.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.06.2020, 21:30

Игру на Дельфи переделать на игру под интернет
Как игру, например, тетрис, написанную на Делфи переделать в игру под интернет. Что то типа, выкладываю я ее на сервер делаю ссылочку на...

Доработать игру Bounce
Здравствуйте! Нужно доработать игру bounce, то есть сделать базу данных. А именно при нажатий кнопки результат или же статистика выводить...

Доработать игру "Кузнечик", где кнопка прыгает по форме
Сделал игру &quot;Кузнечик&quot; по книге Лукина. Суть игры:Нажимаешь на кнопку и она прыгает по всей форме(через rnd). Я решил ее...

Доработать игру "Поле чудес"
Для игры в «Поле чудес» используется круглый барабан, разделенный на сектора, и стрелка. В каждом секторе записано некоторое число. В...

Доработать игру "Угадай число"
Доброго времени суток всем!Решили с другом сделать эдакий Randomizer. Основной код уже готов, но вот хотелось бы ещё сделать нашу...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru