![]() |
![]() |
Sir |
![]()
Сообщение
#1
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 95 Пол: Мужской Репутация: ![]() ![]() ![]() |
Я никак немогу понять почему в ниже написанной программе квадраты задевают и подтирают друг друга.
Код program tetris; uses crt,graph; const esc=#27; up=#72; down=#80; left=#75; right=#77; null=#0; var dv,mv,a,b:integer; ch:char; Procedure Sync; assembler;{Procedura Zaderjki lucha} asm mov dx, 3DAh @@Wait: in al, dx test al, 08h jz @@Wait end; procedure moveL; begin if (getpixel(a-1,B)=15) or (getpixel(a-1,b-3)=15) then begin a:=a+20;b:=b+1; end; if (getpixel(a-1,B)=0) and (getpixel(a-1,b-3)=0) then begin a:=a-20;b:=b+1; end; end; procedure moveR; begin if (getpixel(a+41,B)<>0) or (getpixel(a+41,b-3)<>0) then begin a:=a-20; b:=b+1; end; if (getpixel(a+41,B)=0) and (getpixel(a+41,b-3)=0) then begin a:=a+20; b:=b+1; end; end; procedure kvd; begin setfillstyle(1,15); bar(a,b,a+40,b-40); sync; end; procedure stakan; begin {setlinestyle(solidln,0,thickwidth);} line(98,0,98,400); line(98,400,542,400); line(542,400,542,0); setfillstyle(0,15); end; procedure zakrash; begin setfillstyle(0,15); bar(a,b,a+40,b-40); end; procedure proverkaV; begin if a>502 then a:=501; if a<98 then a:=99; end; procedure proverkaG; begin if b>397 then begin b:=397; ch:=null; end; end; begin dv:=detect; initgraph(dv,mv,'c:tpbgi'); a:=320; b:=40; kvd; stakan; repeat a:=320; b:=40; while getpixel(a+20,b+3)=0 do begin if keypressed=true then begin ch:=readkey; zakrash; case ch of esc:halt(1); left:moveL; right:moveR; end; proverkaG; proverkaV; kvd; end; if keypressed=false then begin zakrash; a:=a; b:=b+1; proverkaG; proverkaV; kvd; end; end; until getpixel(320,40)=15; end. |
![]() ![]() |
Shadow |
![]()
Сообщение
#2
|
![]() Lonely_Raven ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 640 Пол: Мужской Репутация: ![]() ![]() ![]() |
![]() размер квадратов и стакана немного не совпадал присмотрись -------------------- Программа делает то что вы ей приказали а не то что бы ВАМ хотелось бы.
МЕРФИ --------------------- RTFM - Read the fucking manual --------------------- http://www.livejournal.com/users/lonley_raven/ |
Sir |
![]()
Сообщение
#3
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 95 Пол: Мужской Репутация: ![]() ![]() ![]() |
Я поменял размеры стакана, но всё равно с размерами не проходит да и не должен по идее размер влиять на соприкосновение.
Код program tetris; uses crt,graph; const esc=#27; up=#72; down=#80; left=#75; right=#77; null=#0; var gp:array[1..540] of word; gp1:array[1..22] of word; ox,oy,dv,mv,a,b:integer; c,o:byte; ch:char; procedure wait;assembler; asm mov dx, 3DAh @@Wait: in al, dx test al, 08h jz @@Wait end; procedure moveL; begin if (getpixel(a-1,b+1)<>0) or (getpixel(a-1,b-40)<>0) then begin a:=a+20;b:=b+1; end; if (getpixel(a,b+1)=0) and (getpixel(a,b-38)=0) then begin a:=a-20;b:=b+1; end; end; procedure moveR; begin if (getpixel(a+41,B)<>0) or (getpixel(a+41,b-38)<>0) then begin a:=a-20; b:=b+1; end; if (getpixel(a+41,B)=0) and (getpixel(a+41,b-38)=0) then begin a:=a+20; b:=b+1; end; end; procedure kvd; begin setfillstyle(1,c); bar(a,b,a+40,b-40); wait; delay(300); end; procedure stakan; begin line(157,0,157,400); line(157,400,483,400); line(483,400,483,0); setfillstyle(0,15); delay(300); end; procedure zakrash; begin setfillstyle(0,15); bar(a,b,a+40,b-40); end; procedure proverkaV; begin if a>440 then a:=440; if a<160 then a:=160; end; begin randomize; dv:=detect; initgraph(dv,mv,'c:tpbgi'); a:=320; b:=40; ox:=100; stakan; repeat a:=320; b:=40; C:=1+random(14); while getpixel(a+20,b+1)=0 do begin if keypressed then begin ch:=readkey; zakrash; case ch of esc:halt(1); left:moveL; right:moveR; end; proverkaV; kvd; end else begin zakrash; a:=a; b:=b+1; proverkaV; kvd; end; end; until getpixel(320,40)<>0; end. |
GLuk |
![]()
Сообщение
#4
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 775 Пол: Мужской Репутация: ![]() ![]() ![]() |
Попробуй по-другому подойти к решению вопроса:
рассматривай стакан как - матрицу. Все будет легче и намного быстрее ![]() |
Sir |
![]()
Сообщение
#5
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 95 Пол: Мужской Репутация: ![]() ![]() ![]() |
Не понимаю???Объясни поподробней???
|
Shadow |
![]()
Сообщение
#6
|
![]() Lonely_Raven ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 640 Пол: Мужской Репутация: ![]() ![]() ![]() |
:D вме просто матрица
0.0.0.0.0.0.0 0.0.0.0.0.0.0 0.0.0.0.0.0.0 нет елемнтов в матрице 0.0.0.0.0.0.0 0.0.0.0.0.0.0 1.1.1.1.1.1.1. последняя сторока заполнена вот примерно так т.е. если квадрат упал то в матрицу зщаносится 1 в то место куда он упал -------------------- Программа делает то что вы ей приказали а не то что бы ВАМ хотелось бы.
МЕРФИ --------------------- RTFM - Read the fucking manual --------------------- http://www.livejournal.com/users/lonley_raven/ |
GLuk |
![]()
Сообщение
#7
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 775 Пол: Мужской Репутация: ![]() ![]() ![]() |
Цитата :D вме просто матрица 0.0.0.0.0.0.0 0.0.0.0.0.0.0 0.0.0.0.0.0.0 нет елемнтов в матрице 0.0.0.0.0.0.0 0.0.0.0.0.0.0 1.1.1.1.1.1.1. последняя сторока заполнена вот примерно так т.е. если квадрат упал то в матрицу зщаносится 1 в то место куда он упал Hi Shadow! Ну типа я это и имел в виду :D |
Sir |
![]()
Сообщение
#8
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 95 Пол: Мужской Репутация: ![]() ![]() ![]() |
А падение делать попиксельно или поблочно?Я уже пробовал сделать что-то подобное но начав быстро заглох-наверно нужно немного подумать ??? :-/
|
GLuk |
![]()
Сообщение
#9
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 775 Пол: Мужской Репутация: ![]() ![]() ![]() |
В зависимости от матрицы.
|
Shadow |
![]()
Сообщение
#10
|
![]() Lonely_Raven ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 640 Пол: Мужской Репутация: ![]() ![]() ![]() |
:D проверять наличее елементов в стакане в матрице будешь, так удобнее ВОТ!!!
чего есче не получается -------------------- Программа делает то что вы ей приказали а не то что бы ВАМ хотелось бы.
МЕРФИ --------------------- RTFM - Read the fucking manual --------------------- http://www.livejournal.com/users/lonley_raven/ |
![]() ![]() |
![]() |
Текстовая версия | 15.07.2025 7:22 |