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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.04.2017, 18:28   #1
Александир1
 
Регистрация: 14.04.2017
Сообщений: 4
Печаль Морской бой в Delphi, не могу понять где ошибся

Я новичок, так что возможно упустил что то элементарное, если несложно посмотрите пожалуйста. Ошибку не выбивает, просто не работает процедура.
Суть процедуры: при наведении курсора на одну из клеточек поля, компьютер должен прорисовать корабль в этом месте желтым цветом. Вначале идет проверка заняты те клеточки или нет, если нет, этим клеткам присваивается значение 0, и и эти клетки должны прорисоваться желтым. но ничего не происходит, заранее спасибо за помощь, если нужен весь код -- напишите.
procedure TForm1.podbitva(Sender: TObject; Shift: TShiftState; X,Y: Integer);
Код:
procedure TForm1.podbitva(Sender: TObject; Shift: TShiftState; X,Y: Integer);
 begin
 image1.Canvas.Brush.Color:=clWhite;
 dy:=(Y div 30)+1;
 dx:=(X div 30)+1;
For i:=1 to 10 do
 for j:=1 to 10 do
   begin
    if (TP1[i,j]<>1) and (TP1[i,j]<>2) and (TP1[i,j]<>3) then
        begin
          TP1[i,j]:=-1;
          image1.Canvas.Rectangle(30*i-30,30*j-30,30*i,30*j);
        end;
   end;
begin
if RadioButton2.Checked then
 begin
 case RadioGroup1.ItemIndex  of
   0: begin
     if (TP1[dx,dy]<>1) and (TP1[dx+1,dy]<>1) and (TP1[dx+2,dy]<>1) and (TP1[dx+3,dy]<>1) then
     for i:=0 to 3 do
     TP1[dx+i,dy]:=0;
      end;
   1: begin
     if (TP1[dx,dy]<>1) and (TP1[dx+1,dy]<>1) and (TP1[dx+2,dy]<>1) then
     for i:=0 to 2 do
     TP1[dx+i,dy]:=0;
      end;
   2: begin
     if (TP1[dx,dy]<>1) and (TP1[dx+1,dy]<>1)  then
     for i:=0 to 1 do
     TP1[dx+i,dy]:=0;
      end;
   3: begin
     if (TP1[dx,dy]<>1) then
     for i:=0 to 0 do
     TP1[dx+i,dy]:=0;
      end;
   For i:=1 to 10 do
   for j:=1 to 10 do
   begin
     if (TP1[i,j]=0) then
       begin
       image1.Canvas.Brush.Color:=clyellow;
       image1.Canvas.Rectangle(30*i-30,30*j-30,30*(i),30*(j));
       end;
end;
if RadioButton1.Checked then
  begin
   case RadioGroup1.ItemIndex  of
   0: begin
    if (TP1[dx,dy]<>1) and (TP1[dx,dy+1]<>1) and (TP1[dx,dy+2]<>1) and (TP1[dx,dy+3]<>1) then
    for i:=0 to 3 do
    TP1[dx,dy+j]:=0;
      end;
  1: begin
    if (TP1[dx,dy]<>1) and (TP1[dx,dy+1]<>1) and (TP1[dx,dy+2]<>1) then
    for i:=0 to 2 do
    TP1[dx,dy+j]:=0;
     end;
  2: begin
    if (TP1[dx,dy]<>1) and (TP1[dx,dy+1]<>1)  then
    for j:=0 to 1 do
    TP1[dx,dy+j]:=0;
     end;
  3: begin
    if (TP1[dx,dy]<>1) then
    for j:=0 to 0 do
    TP1[dx,dy+j]:=0;
     end;
  end;
For i:=1 to 10 do
for j:=1 to 10 do
           begin
           if (TP1[i,j]=0) then
             begin
             image1.Canvas.Brush.Color:=clyellow;
             image1.Canvas.Rectangle(30*i-30,30*j-30,30*i,30*j);
             end;
           end;
      end;
end;
end;
end.
Александир1 вне форума Ответить с цитированием
Старый 24.04.2017, 19:03   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Код:
  for i:=0 to 3 do
    TP1[dx,dy+j]:=0;
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 25.04.2017, 12:10   #3
Александир1
 
Регистрация: 14.04.2017
Сообщений: 4
По умолчанию

ошибку исправил, но все равно не прорисовывает, а насчет этой ошибки я лоханулся( копировал предыдущее и просто поправлял, да видимо не заметил
Александир1 вне форума Ответить с цитированием
Старый 25.04.2017, 12:25   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Думаешь интересно кому-то глазами отлаживать? Запакуй проект без exe и вложением покажи его на форуме. Возможно кто-то и поищет за тебя ошибку ))
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 25.04.2017, 15:20   #5
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
ошибку исправил,
Цитата:
копировал предыдущее и просто поправлял,
во ВСЕХ местах куда копировал?
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 25.04.2017, 15:54   #6
Александир1
 
Регистрация: 14.04.2017
Сообщений: 4
По умолчанию

вся программа во вложении, если конечно кому то не сложно. Перепроверил все, там было два таких места, ошибку не вижу -- но я и не понимаю почти ничего в делфи, по верхам нахватался, так что может где то элементарное пропустил
Вложения
Тип файла: rar мб.rar (180.1 Кб, 11 просмотров)
Александир1 вне форума Ответить с цитированием
Старый 25.04.2017, 16:17   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Александир1 Посмотреть сообщение
но все равно не прорисовывает
прости, а как должна работать процедура
procedure podbitva()

если Вы в коде её НИГДЕ не вызываете?!
Нужно же прописать обращение к этой процедуре!
(правда, я не понимаю, кто, где и как к ней должен обратиться)


Цитата:
Сообщение от Александир1 Посмотреть сообщение
при наведении курсора на одну из клеточек поля, компьютер должен прорисовать корабль в этом месте желтым цветом.
"Курсор" - это мышка имеется в виду?
Ну и что Вы сделали для того, чтобы это заработало?
Я не вижу у Вас в проекте обработку событий.
Оно же само не заработает.

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


а ещё внизу есть раздел "Похожие темы"
Очень рекомендую.
Вот, например, в теме рабочий исходник (с) kommunist - http://programmersforum.ru/showpost....57&postcount=4

Последний раз редактировалось Serge_Bliznykov; 25.04.2017 в 16:28.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 01.05.2017, 15:47   #8
Александир1
 
Регистрация: 14.04.2017
Сообщений: 4
По умолчанию

все, ошибку исправил, спасибо большое за помощь всем
просто как я и говорил я профан в делфи и не указал событие для процедуры((
Александир1 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с циклом ( находим сумму) - не могу понять , где ошибся ) zipo666 Помощь студентам 3 01.11.2011 12:51
Морской бой на Delphi 7 hqpz Помощь студентам 34 05.12.2009 23:18
Морской бой на Delphi Rage XIII Помощь студентам 8 12.01.2008 22:30
Морской бой на Delphi Rage XIII Gamedev - cоздание игр: Unity, OpenGL, DirectX 5 11.01.2008 17:02