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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.10.2009, 13:50   #11
hqpz
Пользователь
 
Регистрация: 13.07.2009
Сообщений: 16
По умолчанию

Не я сделаю всё остальное. Мне просто нужен код твоей работы и, желательно, подробное объяснение что зачем и как ставить. Просто я хочу понять весь процесс. Так как в инсте щас туго с преподавательским составом. Нам просто дают задание сидеть и заниматься с прогой под названием - Изучаем Delphi и всё. А понял или нет твои проблемы. Да и прога там с глюками всякими. Короче бред. Вот и ищу помощи на стороне. =(. мне надо только посмотреть твой код и комментарии и разобраться. А потом сделаю свою игру.

Ну что можешь скинуть код и описание что да как ставить и куда =) на hqpz007@mail.ru ? Просто позарез надо. =( Буду оч благодарен

Последний раз редактировалось Stilet; 07.10.2009 в 08:43.
hqpz вне форума Ответить с цитированием
Старый 05.10.2009, 22:49   #12
Вавел из ГМТУ
Форумчанин
 
Регистрация: 19.06.2009
Сообщений: 896
По умолчанию

Всё писалось с ходу, ничего особо не обдумывалось.

Типы
Код:
TPole = Array [1..10, 1..10] Of Byte;
Паблик формы
Код:
// Процедура отрисовки поля.
Procedure PrintPole(Pole : TImage; P : TPole);
// Бот.
Procedure Bot;
Вар
Код:
  // Игровое поле. 1 - поле игрока. 2 - поле врага.
  // 1 - выстрел. 2 - корабль. 20 - мёртвый корабль. 3 - корабль врага.
  P1, P2 : TPole;
  P1Win, P2Win : Integer; // Отслеживаем выйгрыш.
Код:
// Бот.
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);
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 := 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);
            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.Brush.Color := RGB(0, 0, 0);
          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.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;
Код:
// При создании формы.
Procedure TForm1.FormCreate(Sender: TObject);
Begin
//Заполним массив от балды (сделаем вид игры)
// Наше поле
// Нарисуем пару кораблей.
P1[8,8] := 2;
P1[7,1] := 2;
P1[7,10] := 2;
P1[6,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;
Вавел из ГМТУ вне форума Ответить с цитированием
Старый 05.10.2009, 23:00   #13
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,865
По умолчанию

Когда-то, очень давно, писал эту статью: http://aka-alex.narod.ru/seabattle.htm
Описывается алгоритм игры компьютера (расстановка кораблей и ход компьютера). Может чем поможет...
Arigato вне форума Ответить с цитированием
Старый 06.10.2009, 20:53   #14
hqpz
Пользователь
 
Регистрация: 13.07.2009
Сообщений: 16
По умолчанию

Спасибо вам огромное. =)
hqpz вне форума Ответить с цитированием
Старый 06.10.2009, 22:02   #15
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

Делал когда то мор бой правда по сети, но расстановка кораблей там есть
Вложения
Тип файла: rar МБ.rar (813.4 Кб, 88 просмотров)
SERG1980 вне форума Ответить с цитированием
Старый 07.10.2009, 11:58   #16
hqpz
Пользователь
 
Регистрация: 13.07.2009
Сообщений: 16
По умолчанию

А почему когда я вставляю твой код(чисто проверить) и запускаю, Delphi постоянно ругается на Type и public? Вечно придерается к чемуто.
hqpz вне форума Ответить с цитированием
Старый 07.10.2009, 23:03   #17
Вавел из ГМТУ
Форумчанин
 
Регистрация: 19.06.2009
Сообщений: 896
По умолчанию

Покажи куда ты вставил?
Вавел из ГМТУ вне форума Ответить с цитированием
Старый 08.10.2009, 07:58   #18
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

Цитата:
Сообщение от hqpz Посмотреть сообщение
А почему когда я вставляю твой код(чисто проверить) и запускаю, Delphi постоянно ругается на Type и public? Вечно придерается к чемуто.
Не надо ничего вставлять просто откомпилируй и всё
SERG1980 вне форума Ответить с цитированием
Старый 09.10.2009, 11:09   #19
hqpz
Пользователь
 
Регистрация: 13.07.2009
Сообщений: 16
По умолчанию

да то что просто откомпилировать я знаю. Просто я хочу переделать игру немного. Но для этого мне надо код перенести в делфи. А еще лучше просто передай(залей на обменник) мне проект свой. Я так лучше пойму что куда писать. Чтобы открыть твой файл и увидеть код готовый к запуску.

Последний раз редактировалось hqpz; 09.10.2009 в 11:35.
hqpz вне форума Ответить с цитированием
Старый 09.10.2009, 11:20   #20
hqpz
Пользователь
 
Регистрация: 13.07.2009
Сообщений: 16
По умолчанию

Еще просьба =) залей куда нибудь скрины с твоей формой и окна куда ты код прописал. Только не на форум а то я отсюда не могу скачивать.(на файлообменник жедательно).
hqpz вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите с кодом lewka-serdceed Общие вопросы Delphi 1 22.06.2009 00:25
Помогите пожалуйста с кодом inwc Помощь студентам 3 20.05.2009 14:17
Помогите, пожалуйста, с кодом С++ Serammy Помощь студентам 1 07.05.2009 19:43
Помогите с кодом prostoCHEL Общие вопросы Delphi 4 02.03.2008 21:56