MIDlet Pascal
Поиск по сайту
Форма входа

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0


Яндекс.Метрика

Друзья сайта
IT юмор - развлечения
Заработать в интернете - легко!Просто сиди и кликай.
Вторник, 21.08.2018, 10.31.00
Приветствую Вас Гость | RSS
Главная | Регистрация | Вход
Урок №10 "Сапёр урок №1"
Ну чтож, вот мы и добрались до этапа создания какой нибудить игры.Давай попробуем сделать игру.... ну..... например.... Сапёр.
для начала надо определиться на какой экран всё это дело делать.Давайте например на самый маленький 128х128.Ширина поля будет 128, но для простоты округлим ширину до 120 пикселей.Розмещение поля можно обределить по формуле (a-b)/2 где a - ширена экрана, b - ширена поля.Ну вот мы и получили ровное розмещение поля по середине экранаДля того что бы нарисовать поле, воспользуемся процедурой DrawLine(x1,y1,x2,y2:integer)  теперь надо определиться с количеством клеток, давайте пусть поле будет 6х6 клетокДля того что бы нарисовать поле нам нужно загнать процедуру DrawLine в цикл for..to..do, и незабіваем бъявить переменные var i,k:integer.Я например создаю специально для циклов две переменные i и k.Код рисования поля должен выглядить примерно так:

var i,k:integer; //переменные
begin
 repeat // вечный цикл, в котором процедура Delay не очень и нужна
  SetColor(255,255,255);
  FillRect(0,0,128,128);//Стёрли всё с экрана
  SetColor(0,0,0);
  for i:=0 to 6 do //цикл горизонтальных линий
    DrawLine(4, (i*20)+4, 124, (i*20)+4); //Рисуем линию
  for k:=0 to 6 do  //цикл вертикльных линий
    DrawLine((k*20)+4, 4, (k*20)+4, 124); //Рисуем линию
  //возникает вопрос.Откуда взялись такие конкретные цифры?
  //Ответ: 20=120 пикселей поделить на 6 клеток, 4= (128 пикселей минус 120 пикселей) поделить на 2
  repaint; // перерисовка экрана
 until false;
end.

Но не забываем зайти в свойства проекта и указать тип мидлета "MIDP 2.0 весь экран" и версия MIDP "MIDP 2".Теперь нужно сделать курсор.Для начал добавляем в проект переменные key,xcursor, ycursor:integer;.Теперь считываем нажатик клавиши Key:=GetKeyCkicked;.Kурсором у нас будет квадратик DrawRect(xcursor,ycursor,16,16); после чего обрабатываем считаную клавишу, и сделаем что-бы курсор не выходил за пределы поля.

  if KeyToAction(Key)=Ga_Left then xcursor:=xcursor-20; //Обрабатываем нажатые клавиши
  if KeyToAction(Key)=Ga_Right then xcursor:=xcursor+20;
  if KeyToAction(Key)=Ga_Up then ycursor:=ycursor-20;
  if KeyToAction(Key)=Ga_Down then ycursor:=ycursor+20;
  if xcursor<6 then xcursor:=106;  //Обрабатываем поля для курсора
  if xcursor>106 then xcursor:=6;
  if ycursor<6 then ycursor:=106; 
  if ycursor>106 then ycursor:=6;
теперь наш код должен выглядеть примерно так:

var i,k,key,xcursor, ycursor:integer; //переменные
begin
 xcursor:=6;
 ycursor:=6;
 repeat // вечный цикл, в котором процедура Delay не очень и нужна
  Key:=GetKeyClicked;
  SetColor(255,255,255);
  FillRect(0,0,128,128);//Стёрли всё с экрана
  SetColor(0,0,0);
  if KeyToAction(Key)=Ga_Left then xcursor:=xcursor-20; //Обрабатываем нажатые клавиши
  if KeyToAction(Key)=Ga_Right then xcursor:=xcursor+20;
  if KeyToAction(Key)=Ga_Up then ycursor:=ycursor-20;
  if KeyToAction(Key)=Ga_Down then ycursor:=ycursor+20;
  if xcursor<6 then xcursor:=106;  //Обрабатываем поля для курсора
  if xcursor>106 then xcursor:=6;
  if ycursor<6 then ycursor:=106;  
  if ycursor>106 then ycursor:=6;
  DrawRect(xcursor,ycursor,16,16);
  for i:=0 to 6 do //цикл горизонтальных линий
    DrawLine(4, (i*20)+4, 124, (i*20)+4); //Рисуем линию
  for k:=0 to 6 do  //цикл вертикльных линий
    DrawLine((k*20)+4, 4, (k*20)+4, 124); //Рисуем линию
  //возникает вопрос.Откуда взялись такие конкретные цифры?
  //Ответ: 20=120 пикселей поделить на 6 клеток, 4= (128 пикселей минус 120 пикселей) поделить на 2
  repaint; // перерисовка экрана
 until false;
end.

Ну вот.Отлично.Всё работает. теперь пора розмещать мины.Для розмещения мины используем переменные mine:array[1..6,1..6] of boolean
Перед циклом нужно написать код розмещения мин на поле.Нодля начала давуайте определимся с количеством мин... давайте пусть их будет 6 штуктогда код будет такой:for i:=1 to 6 do mine[random(5)+1,random(5)+1]:=true; //помечаем клетки случайным образом где будут находится минытеперь код выглядит так:

var i,k,key,xcursor, ycursor:integer; //переменные
     mine:array[1..6,1..6] of boolean;
begin
 xcursor:=6;
 ycursor:=6;
 repeat // вечный цикл, в котором процедура Delay не очень и нужна 
  Key:=GetKeyClicked;
  SetColor(255,255,255); 
  FillRect(0,0,128,128);//Стёрли всё с экрана
  SetColor(0,0,0);
  if KeyToAction(Key)=Ga_Left then xcursor:=xcursor-20; //Обрабатываем нажатые клавиши
  if KeyToAction(Key)=Ga_Right then xcursor:=xcursor+20;
  if KeyToAction(Key)=Ga_Up then ycursor:=ycursor-20;
  if KeyToAction(Key)=Ga_Down then ycursor:=ycursor+20;
  if xcursor<6 then xcursor:=106;  //Обрабатываем поля для курсора
  if xcursor>106 then xcursor:=6;
  if ycursor<6 then ycursor:=106;  
  if ycursor>106 then ycursor:=6;
  DrawRect(xcursor,ycursor,16,16);
  for i:=0 to 6 do //цикл горизонтальных линий
    DrawLine(4, (i*20)+4, 124, (i*20)+4); //Рисуем линию
  for k:=0 to 6 do  //цикл вертикльных линий
    DrawLine((k*20)+4, 4, (k*20)+4, 124); //Рисуем линию
  //возникает вопрос.Откуда взялись такие конкретные цифры?
  //Ответ: 20=120 пикселей поделить на 6 клеток, 4= (128 пикселей минус 120 пикселей) поделить на 2
  repaint; // перерисовка экрана
 until false;
end.

В следующем уроке научим находить мины
← Урок №9Урок №11 →
Если вы нашли ошибки/очепятки в тексте то сообщите о них на форуме
А также можете заказать программу/игру на этой странице

www.parkflyer.ru - радиоуправляемые модели, радиоуправляемые модели самолетов, магазин радиоуправляемых моделей
Роспись стен, скульптуры на заказ
Wladymyr © 2012-2018
Создать бесплатный сайт с uCoz