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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.05.2014, 19:43   #1
Murfik97
Пользователь
 
Регистрация: 17.10.2013
Сообщений: 30
По умолчанию Доработка в коде делфи игры морской бой

Добрый день уважаемые прогеры, имеется небольшая трудность: как разместить мои корабли на Pole1(TImage) допустим отметив в радиобатане однопалубник и при нажатии в указаную клетку на Pole разместить корабль или это можно сделать ток в стринггриде?и может кто какой кодировкой подскажет как лучше прописать ходы компа, а то у меня чистый рандом =).
Код ниже:


Код:
var
  Form1: TForm1;
   // Игровое поле 1 - поле игрока. 2 - поле врага.
  // 1 - выстрел. 2 - корабль 20 - мертвый корабль. 3 - корабль врага.
  P1, P2 : TPole;
  P1Win, P2Win : Integer; // Отслеживаем выигрыша


implementation

uses Sea_War2, Sea_War3;

{$R *.dfm}

Procedure TForm1.Bot;
Var
  x, y : integer;
Begin
Randomize;
// Определим координаты выстрела
Repeat
  x := Random(10) + 1;
  y := Random(10) + 1;
Until (P1[x,y] <> 1) And (P1[x,y] <> 20);
// Если бот промахнулся.
If (P1[x,y] <> 1) And (P1[x,y] <> 2) Then P1[x,y] := 1;
// Если бот попал в корабль
If P1[x,y] = 2 Then Begin
  P1[x,y] := 20;
  P2Win := P2Win + 1;
End;
// Отрисуем наше поле
PrintPole(Pole1, P1);
End;


// Процедура отрисовки поля
// Pole - компонент TImage На котором надо рисовать
// P - Массив который надо отрисовать
Procedure TForm1.PrintPole(Pole : TImage; P : TPole);
Var
  i, x, y : Integer;
Begin
// Заливка цветом "Вода".
  Pole.Canvas.Brush.Style := bsSolid;
  Pole.Canvas.Brush.Color := {RGB(200, 200, 200);}clWhite;
  Pole.Canvas.Rectangle(0,0,200,200);
// Рисуем сетку
    For i := 1 To 10 Do
     Begin
      Pole.Canvas.MoveTo(i * 20, 0);
      Pole.Canvas.LineTo(i * 20, 200);
      Pole.Canvas.MoveTo(0, i * 20);
      Pole.Canvas.LineTo(200, i * 20);
    End;
// Пройдемся по массиву и отрисуем поля
For x := 1 To 10 Do
  Begin
    For y := 1 To 10 Do
      Begin
        If P[x, y] = 1 Then Begin // Рисуем выстрелы
          Pole.Canvas.Brush.Style := bsSolid;
          Pole.Canvas.Brush.Color := clBlue;{RGB(0, 0, 0);}
          Pole.Canvas.Ellipse((x-1) * 20 + 4, (y-1) * 20 + 4, (x-1) * 20 + 16, (y-1) * 20 + 16);
        End;
        // Если мы пытаемся отрисовать вражеский кораблик, то циел начинается снова.
        If IntToStr(P[x, y])[1] = '3' Then Continue;
        If IntToStr(P[x, y])[1] = '2' Then Begin // Рисуем корабли
            Pole.Canvas.Brush.Style := bsSolid;
            Pole.Canvas.Brush.Color := {RGB(200, 5, 5)} clRed;
            Pole.Canvas.Rectangle((x-1) * 20, (y-1) * 20, (x-1) * 20 + 21, (y-1) * 20 + 21);
        End;
        If IntToStr(P[x, y])[2] = '0' Then Begin // Рисуем мертвые  корабли.
          Pole.Canvas.MoveTo((x-1) * 20 , (y-1) * 20);
          Pole.Canvas.LineTo((x-1) * 20 + 20, (y-1) * 20 + 20);
          Pole.Canvas.MoveTo((x-1) * 20 + 20 , (y-1) * 20);
          Pole.Canvas.LineTo((x-1) * 20, (y-1) * 20 + 20);
        End;
      End;
  End;
// Проверим
If P1Win = 20 Then Begin ShowMessage('Вы победитель'); Application.Terminate; End;
If P2Win = 20 Then Begin ShowMessage('Пока неудачник'); Application.Terminate; End;
End;




procedure TForm1.FormCreate(Sender: TObject);
begin
  //Заполним массив (Сделаем вид игры)
// Наше поле
// Нарисуем пару кораблей
//Эмм..ну я даж не знаю как самому при нажатии на радиобатон и нажатии на имидж //разместился корбль, помогите =)
P1[8,8] := 2;// -одно-палубник
P1[7,1] := 2; 
P1[7,10] := 2;
P1[5,10] := 2;
P1[5,5] := 2; P1[5,6] := 2; //-двух-палубник
P1[8,3] := 2; P1[9,3] := 2; //
P1[4,8] := 2; P1[5,8] := 2;// -двух-....
P1[3,3] := 2; P1[4,3] := 2; P1[5,3] := 2;
P1[2,7] := 2; P1[2,8] := 2; P1[2,9] := 2;
P1[1,1] := 2; P1[1,2] := 2; P1[1,3] := 2; P1[1,4] := 2;
// поле врага
// нарисуем пару кораблей
P2[1,1] := 3;
P2[10,1] := 3;
P2[1,8] := 3;
P2[8,5] := 3;
P2[6,6] := 3; P2[6,7] := 3;
P2[9,9] := 3; P2[9,10] := 3;
P2[9,7] := 3; P2[10,7] := 3;
P2[5,2] := 3; P2[6,2] := 3; P2[7,2] := 3;
P2[3,10] := 3; P2[4,10] := 3; P2[5,10] := 3;
P2[3,3] := 3; P2[3,4] := 3; P2[3,5] := 3; P2[3,6] := 3;
// Заставим отрисоваться поля
PrintPole(Pole1, P1);
PrintPole(Pole2, P2);

end;

procedure TForm1.Pole2MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
  Var
  i : Integer;
  Mis : Boolean;
Begin
// Определим чему равен x.
For i := 0 To 9 Do
  If (x >= 20 * i) And (x <= 20 + i * 20) Then
    Begin
      x := i + 1;
      Break;
    End;
// Определим чему равен y.
For i := 0 To 9 Do
  If (y >= 20 * i) And (y <= 20 + i * 20) Then
    Begin
      y := i + 1;
      Break;
    End;
// Присвоим значение выстрела указанному элементу массива
// Если мы сюда уже стреляли
If (P2[x,y] = 1) Or (P2[x,y] = 20) Then Begin
  ShowMessage('тут уже стреляли');
  Mis := True;
End;
// Если мы промахнулись
If (P2[x,y] <> 1) And (P2[x,y] <> 3) And (P2[x,y] <> 20) Then P2[x,y] := 1;
// Если мы попали в корабль врага
If P2[x,y] = 3 Then Begin
  P2[x,y] := 20;
  P1Win := P1Win + 1;
End;
// Отрисуем поле врага
PrintPole(Pole2, P2);
// Заставим бота ответить нам (если мы не промахнулись).
If Mis = False Then Bot;
end;
end.
Если нужно могу скинуть весь проект(Заранее огромнеешие спасибо)

Последний раз редактировалось Murfik97; 15.05.2014 в 23:53.
Murfik97 вне форума Ответить с цитированием
Старый 15.05.2014, 19:51   #2
Murfik97
Пользователь
 
Регистрация: 17.10.2013
Сообщений: 30
По умолчанию

Я как видите ввел автоматом. корабли, а нужно чтоб сам мог, и чтоб компа корабли выдавались рандомно(измените мой код где можно =)

если что вся прога с экзэшкой и дпр-файлом и остальным здесь, можете здесь поюзать и помочь добавить необходимое - http://dropmefiles.com/8NrtN

Последний раз редактировалось Murfik97; 15.05.2014 в 19:59.
Murfik97 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
создать в Паскале копию игры "Морской бой" Керкси Фолс Помощь студентам 6 17.11.2013 13:19
Морской бой на С++ Vacilica Помощь студентам 3 22.01.2011 23:15
Нужно написать 3 игры в консоли на С++: морской бой, пятнашки и крестики-нолики... lewa2424 Помощь студентам 5 14.04.2010 21:33
Морской бой nikifor Фриланс 1 26.03.2009 16:19
Морской бой yulia Помощь студентам 1 28.04.2007 22:12