1

Тема: Написання гри тетріс ! Допоможіть Будь-ласка!! Скелет гри дано!

Мені потрібно зробити так, щоб при натисканні  стрілок ліворуч і праворуч моя фігура рухалась відповідно!
скелет коду є.

  PROGRAM TeTRIS;
USES
  CRT, GRAPH;
TYPE
  MAS = ARRAY[1 .. 20, 1 .. 10] OF BOOLEAN;
VAR
  x,y,h,gd,gm, newx,newy : integer;
  MovingF : MAS;
  a: char;

PROCEDURE MoveRight;
BEGIN
END;

PROCEDURE MoweDown;
BEGIN
END;

PROCEDURE RotateF;
BEGIN
END;

PROCEDURE CreateF;
BEGIN
END;

PROCEDURE DrawFrame(x,y,h : INTEGER);
BEGIN
  SetColor(2);
  Rectangle(x,y,x + 10 * h,y + 20 * h);
END;

PROCEDURE DrawRectangle(x,y,h,i,j : integer);
BEGIN
  SetColor(14);
  Rectangle(x + (i - 1) * h,y + (j - 1) * h,x + (i) * h,y + (j) * h);
END;

PROCEDURE MoveLeft(var MovingF : mas);
VAR
  i,j: integer;
BEGIN
  FOR i := 1 TO 10 DO
    FOR j := 1 TO 20 DO
      MovingF[i-1,j] := true;
END;

PROCEDURE DrawMovingF(x,y,h : integer);
VAR
  i,j : integer;
BEGIN
  FOR i := 1 TO 10 DO
    FOR j := 1 TO 20 DO
      IF MovingF[j,i] = TRUE THEN
        DrawRectangle(x,y,h,i,j);
END;


PROCEDURE ProcessPressedKey(a: CHAR; x,y,h: Integer);
BEGIN
  CASE a OF
    #80:
      BEGIN



      END;
    #75:
      BEGIN


      END;
    #77:
      BEGIN
        MoveLeft(MovingF);
        DrawMovingF(x,y,h);

      END;
    #72:
      BEGIN

      END;
  END;
END;

BEGIN
  x := 200;
  y := 0;
  h := 24;
  Gd := Detect;
  InitGraph(Gd,Gm,'c:\bp\bgi');
  DrawFrame(x,y,h);



  DrawMovingF(x,y,h);
  ReadKey;
END.

2

Re: Написання гри тетріс ! Допоможіть Будь-ласка!! Скелет гри дано!

MovingF — це представлення всього ігрового поля? Очевидно, ще потрібен масивчик 4х4 (або 3х3, якщо в тетрісі не буде «палиці» з чотирьох кубиків) для представлення фігури, яка рухатиметься, та її координати відносно початку ігрового поля. Відповідно, треба буде видозмінити процедуру малювання, щоб вона зображувала як квадрати ігрового поля (пусті й заповнені), так і квадрати фігури, що рухається. Тоді рух правороч/ліворуч/вниз можна звести до зміни координат фігури. Складніше зробити поворот — для цього можна використати допоміжний масив (того ж типу, що й фігура), куди переписуватиметься фігура: якщо поворот за год. стрілкою, перший рядок — в останній стовпчик, другий рядок — у передостанній стовпчик, і т.д., поворот проти г/с — навпаки. Далі просто копіюємо допоміжний масив у масив фігури.

При будь-якому русі слід перевіряти, щоб заповнені клітинки фігури не накладались на заповнені клітинки поля й не вилазили за його межі — тоді повертаємо фігуру до попереднього положення. Коли фігура не може рухатися вниз, її елементи переписуються в масив ігрового поля.

Подякували: Torbins1

3

Re: Написання гри тетріс ! Допоможіть Будь-ласка!! Скелет гри дано!

P.Y. написав:

або 3х3, якщо в тетрісі не буде «палиці» з чотирьох кубиків

Обережно, після цього всесвіт ніколи не буде таким, як раніше.

4

Re: Написання гри тетріс ! Допоможіть Будь-ласка!! Скелет гри дано!

Взагалі, над поворотом слід подумати... Палицю треба обертати в межах квадрату 4х4 — тут без варіантів. Більшість фігур вписуються в квадрат 3х3, і краще обертати їх у цих межах, щоб уникнути зайвого зміщення при обертанні. Що ж стосується квадрату 2х2, його можна не обертати взагалі.

Якщо для фігури використовується масив 4х4, можна в його межах реалізувати й обертання 3х3. Просто треба в якійсь додатковій змінній зберігати інформацію про розмір області обертання (4, 3, 2).