Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.01.2012, 22:52   #601
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Цитата:
Сообщение от bukashka Посмотреть сообщение
Помогите пожалуйста разобраться, в Каком месте исправить(если в данном случае это возможно), чтобы было заметно какой шарик выделили? Завтра ещё подумаю, но че-то не доходит пока.. Ну например, чтобы он смещался на 3 пикс вверх, когда на него нажали.
Используй рисование линий, как курсор выделения. Найди процедуру и дополни ее вот так:

Код:
procedure TForm1.ClickSpheres(Sender: TObject);
begin
  clisp := True;
  xsp := (sender as TImage).Left div 30;
  ysp := (sender as TImage).Top div 30;

  Form1.Canvas.Pen.Color := clBtnFace;
  Form1.Canvas.MoveTo(OldX + 1, OldY + 1);
  Form1.Canvas.LineTo(OldX + 29, OldY + 1);
  Form1.Canvas.LineTo(OldX + 29, OldY + 29);
  Form1.Canvas.LineTo(OldX + 1, OldY + 29);
  Form1.Canvas.LineTo(OldX + 1, OldY + 1);

  Form1.Canvas.Pen.Color := clRed;
  Form1.Canvas.MoveTo((sender as TImage).Left + 1, (sender as TImage).Top + 1);
  Form1.Canvas.LineTo((sender as TImage).Left + 29, (sender as TImage).Top + 1);
  Form1.Canvas.LineTo((sender as TImage).Left + 29, (sender as TImage).Top + 29);
  Form1.Canvas.LineTo((sender as TImage).Left + 1, (sender as TImage).Top + 29);
  Form1.Canvas.LineTo((sender as TImage).Left + 1, (sender as TImage).Top + 1);
 
  OldX := (sender as TImage).Left;
  OldY := (sender as TImage).Top;
end;
Обязательно пропиши новые переменные в основной секции Var:

Код:
OldX, OldY: Integer;
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 16.01.2012, 14:10   #602
bukashka
 
Регистрация: 12.01.2012
Сообщений: 7
Сообщение

Спасибо... Всё работает.
Сначала объявила переменные не в основной секции, естественно если подряд просто шарики выделять, выделение не сбрасывалось. Наконец дошло почему
A journey of a thousand miles begins with a single step
bukashka вне форума Ответить с цитированием
Старый 16.01.2012, 18:01   #603
bukashka
 
Регистрация: 12.01.2012
Сообщений: 7
По умолчанию

А если сохранять к примеру используя save dialog, вот так можно писать?

Код:
procedure TForm1.YourSaveClick(Sender: TObject);
var
  x, y : Integer;
  FName : string;
begin
  dlgSave.FileName := FName;
  if dlgSave.Execute then
   begin
    FName := dlgSave.FileName;
    AssignFile(output, FName + '.lines');
    Rewrite(output);
      for y:=0 to 8 do begin
        for x:=0 to 8 do begin
          Write(Map[x,y],' ');
        end;
      end;
    Write(score,' ',numlines);
    closefile(output);
  end;
end;
A journey of a thousand miles begins with a single step

Последний раз редактировалось bukashka; 16.01.2012 в 18:04.
bukashka вне форума Ответить с цитированием
Старый 17.01.2012, 12:57   #604
bukashka
 
Регистрация: 12.01.2012
Сообщений: 7
По умолчанию

Я сделала отмену последнего хода, все данные о предыдущем положении фишек сохраняются в процедуре TForm1.ClickSpheres(Sender: TObject).
Но за ход в данном случае тогда будет считаться и просто переключение с фишки на фишку. Это можно как-то побороть?
A journey of a thousand miles begins with a single step
bukashka вне форума Ответить с цитированием
Старый 17.01.2012, 15:50   #605
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

bukashka, у вас есть переменная clisp, проверяйте ее прежде чем сохранять данные в файл.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 17.01.2012, 17:04   #606
bukashka
 
Регистрация: 12.01.2012
Сообщений: 7
По умолчанию

Beermonza, нифига не получается . Вот это работает как писала:

Код:
  for i:=0 to 8 do begin
    for j:=0 to 8 do begin
       SavedPos[i,j] := Map[i,j];
    end;
  end;

  SavedScore := score;
  SavedNumlines := numlines;
  PrevPos := True;
  LastPos.Enabled := True;
остальное, что пробовала, не помогло

и еще такая штука на нажатие пункта в меню:
Код:
procedure TForm1.LastPosClick(Sender: TObject);
var
  x,y : Integer;
begin
    Restart;

    statusbar1.Panels[0].Text  := 'Óíè÷òîæåíî ëèíèé: ' + IntToStr(SavedNumlines);
    statusbar1.Panels[1].text := 'Î÷êè: ' + IntTostr(SavedScore);

    score := SavedScore;
    numlines := SavedNumlines;

             for y:=0 to 8 do begin
       for x:=0 to 8 do begin
         Map[x,y]:=SavedPos[x,y];
       if SavedPos[x,y]<>0 then CreateSpheres(x*33,y*33,SavedPos[x,y]);
       end;
      end;

     clisp :=False;
end;
A journey of a thousand miles begins with a single step

Последний раз редактировалось bukashka; 17.01.2012 в 17:07.
bukashka вне форума Ответить с цитированием
Старый 17.01.2012, 17:09   #607
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Цитата:
Сообщение от bukashka Посмотреть сообщение
Beermonza, нифига не получается.
Покажите мне код, где вы применили проверку переменной clisp до сохранения данных в файл.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 17.01.2012, 17:47   #608
bukashka
 
Регистрация: 12.01.2012
Сообщений: 7
По умолчанию

Гг, не догоняю, чего вы от меня хотите Вы предлагаете в TForm1.ClickSpheres проверять clisp ? Так оно ж там в самом начале clisp := true... В общем туго, извините
A journey of a thousand miles begins with a single step
bukashka вне форума Ответить с цитированием
Старый 17.01.2012, 18:08   #609
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Цитата:
Сообщение от bukashka Посмотреть сообщение
Гг, не догоняю, чего вы от меня хотите Вы предлагаете в TForm1.ClickSpheres проверять clisp ? Так оно ж там в самом начале clisp := true... В общем туго, извините
Хочу чтобы начали думать усиленно. Что такое clisp? ...это флажок, что произошел клик по шарику, а не в пустое место сетки. А так как эта переменная общая для всех процедур, то стало быть, ее можно проверить на False при записи очередного кода. Если clisp = False, значит это был ход. Теперь, где у вас должно быть сохранение хода? ...наверное при клике мышью по сетке. Это скорее всего процедура AreaMouseUp. Собственно, в ней вы уже видите проверку, ...до перемещения шарика, сохраните позицию и цвет всех шаров. Это и будет возможность отмены именно хода, если считать и применить сохраненные данные.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 17.01.2012, 18:55   #610
bukashka
 
Регистрация: 12.01.2012
Сообщений: 7
По умолчанию

Цитата:
Сообщение от Beermonza Посмотреть сообщение
Хочу чтобы начали думать усиленно.
Это правильно, но я думала, честное слово
Первым делом именно в AreaMouseUp пыталась что-то сделать, но потом почему-то переключилась на ClickSpheres.
В общем - ура - всё получилось ))) Спасибо!
A journey of a thousand miles begins with a single step
bukashka вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Хорошие уроки Render Общие вопросы Delphi 9 15.09.2012 07:13
Акцесс вопросы новичков Yaga Помощь студентам 4 02.06.2008 00:16
Учебники для новичков в програмировании Рар Общие вопросы Delphi 6 08.01.2007 08:07