|
|
Program Kolumz;.PAS |
|
{* Колонки *}Unit PROGRAM KOLUMZ;;Interface Implementation Begin writeln('Старая игра в текстовом режиме'); End. Program Kolumz; Uses Program Kolumz;.pas; {* Эту строку можно удалить *} Uses TpCrt, TpWindow; {* Подключаем внешние файлы *} Type {* Создание новых типов данных *} Map = Array [0..30, 0..7] Of Byte; Line = Array [0..2] Of Byte; OfsMap = Array [0..1, 0..3] Of ShortInt; Const {* Постоянные значения *} MaxY : Byte = 18; MaxCol : Byte = 6; OfsMapX : Ofsmap = ((1, 1, 0, 1),(2, 2, 0, 2)); OfsMapY : Ofsmap = ((0, 1, 1, - 1),(0, 2, 2, - 2)); ZLn : Line = (0, 0, 0); Atr : Array [0..8] Of byte = (0, 9, 10, 11, 12, 13, 14, 15, 7); Var {* Объявление переменных *} SysTime : LongInt Absolute $0; OldTime : LongInt; NewTime : LongInt; WorkTime : word; ScoreWindow : WindowPtr; GameWindow : WindowPtr; GameCount : Byte; GX : Byte; GY : Byte; OldX : Byte; OldY : Byte; RealSpeed : Word; Speed : Word; GameScore : Word; BeepFlag : Boolean; FoundLn : Boolean; Flag : Boolean; GameMap : Map; Map1 : Map; GmLn : Line; GmStr : String; Key : Char; I : Byte; J : Byte; Procedure FoundLines(x : byte; y : byte; l : map); Var {* Объявление переменных *} mask : shortint; a : shortint; c : shortint; d : shortint; e : shortint; f : shortint; g : shortint; h : shortint; Begin mask := L[y, x]; For a := 0 To 3 Do; {* Цикл для a => [0 .. 3] *} f := x + OfsMapX[0, a]; g := y + OfsMapY[1, a]; h := x + OfsMapX[1, a]; c := L[e, f]; d := L[g, h]; If ((c = mask) And (d = mask)) Then Begin Map1[y := 1; x] := 1; Map1[e := 1; f] := 1; Map1[g := 1; h] := 1; BeepFlag := True; Var {* Необходимые переменные *} a : Byte; b : Byte; c : Byte; Begin a := GmLn[0]; b := GmLn[1]; c := GmLn[2]; GmLn[0] := b; GmLn[1] := c; GmLn[2] := a; Var {* Объявление переменных *} a : Byte; b : Byte; c : Byte; d : Byte; Begin For a := 1 To MaxY Do; {* Цикл для a => [1 .. MaxY] *} For b := 0 To 5 Do; {* Цикл для b => [0 .. 5] *} c := GameMap[d, b]; Var {* Необходимые переменные *} x1 : Byte; y1 : Byte; z1 : Byte; Begin flag := true; While flag Do Begin Flag := false; For y1 := MaxY Downto 1 Do Begin For x1; For z1 := y1 - 1 Downto 1 Do GameMap[z1 + 1, x1]; If flag Then y1 := 1; Var {* Объявление переменных *} x1 : Byte; y1 : Byte; Begin BeepFlag := False; FoundLn := false; For y1 := MaxY Downto 1 Do For x1; For y1 := MaxY Downto 1 Do For x1; FoundLn := true; str(GameScore : 5, GmStr); {PrintScore} Procedure PutCol(L : Line; x : byte); y : byte); Var {* Объявление переменных *} i : byte; Begin For I := 0 To 2 Do; {* Цикл для I => [0 .. 2] *} Procedure PutLine; Begin PutCol(ZLn, OldX, OldY); PutCol(GmLn, GX, GY); End; Begin Randomize; ClrScr; {* Очистка экрана *} If Not MakeWindow(ScoreWindow, 30, 1, 45, 5, True, True, True, 112, 112, 112, ' SCORE ') Then Halt(2); If Not MakeWindow(GameWindow, 10, 1, 27, 22, True, True, True, 112, 30,$1c, ' KOLUMZ ') Then Halt(2); If Not DisplayWindow(ScoreWindow) Then Halt(2); If Not DisplayWindow(GameWindow) Then Halt(2); GameScore := 0; FillChar(GameMap, 200,#0); PutMap; Speed := 12; GameCount := 0; While GameMap[3, 3] = 0 Do Begin GX := 3; GY := 4; asm mov ah, 0Ch int 21h End; OldX := 3; OldY := 5; For I := 0 To 2 Do {* Увеличиваем I от 0 до 2 с шагом 1 *} GmLn[I] := Random(MaxCol) + 1; {RandLine} PutLine; RealSpeed := Speed; Repeat OldTime := SysTime; Repeat If keypressed Then Begin Key := ReadKey; {* Ждем нажатия пользователя *} If Key = #0 Then Begin Key := ReadKey; {* Ждем нажатия пользователя *} Case Key Of #75: Begin OldX := GX; OldY := GY; If GX > 0 Then Dec(GX); {* GX-- *} If GameMap[GY, GX] > 0 Then GX := OldX; PutLine; End; #77: Begin OldX := GX; OldY := GY; If Gx0 Then GX := OldX; PutLine; End; #72: Begin ScrolLine; PutLine; End; #80 : RealSpeed := RealSpeed Div 10; End; End; If key = #27 Then Halt(2); End; NewTime := SysTime; WorkTime := NewTime - OldTime; Until worktime > = RealSpeed; OldY := GY; OldX := GX; Inc(GY); {* Прибавим к GY единицу *} PutLine; { delay(RealSpeed); } Until ((GY > MaxY) Or (GameMap[GY, GX] > 0)); For i := 0 To 2 Do {* Цикл для i => [0 .. 2] *} GameMap[GY - I - 1, GX] := GmLn[I]; DelLines; If GameCount = 19 Then Begin GameCount := 0; Speed := (Speed Div 3) Shl 1; End; End; Beep; Key := ReadKey; {* Ждем нажатия любой клавиши *} End.... 07.08.2014 - Breakpoint - точка остановки 07.08.2014 - Топ-10 самых популярных приложений в Facebook 18.11.2013 - Панель управления и персонализация системы. Windows Vista 18.11.2013 - Логические и физические диски. Windows Vista 18.11.2013 - Удаление файлов и папок 01.11.2013 - Программирование дисковых подсистем: возможности 31.10.2013 - Windows8 или Windows7? 31.10.2013 - Windows8, игры |
|
Non-commercial fansite
|