unit Brick;
interface
uses types;
///////////////
type
//TBrick = array[0..6] of array[0..6] of integer;//方塊座標 2維
TBrick1 = array[0..3] of TPoint;
TGame = class
public
game_domain: array[0..9] of array[0..19] of Integer; //遊戲空間,2維數組x=10,y=19
pre_game_domain: array[0..9] of array[0..19] of Integer; //以前遊戲空間,2維數組x=10,y=19
graph_domain: array[0..5] of array[0..5] of Integer; //方塊預覽區 x=6,y=6
// bricks_coordinate: array[0..4] of array[0..3] of Tbrick; //方塊座標組 2維[i][j] i=5,j=4;
bricks_coordinate1: array[0..4] of array[0..3] of TBrick1;//方塊座標組2維 i=5, j=4;
score: Integer;//遊戲分數
speed: Integer; //遊戲速度
bricksi: integer;//方塊類型
bricksj: integer; //某類方塊的狀態
brickx:integer;// 方塊在遊戲區的位置 x座標
bricky:integer; //方塊在遊戲區的位置 y座標
procedure newbrick(); //產生一個新方塊
//procedure over(); //結束
//procedure pause(); //暫停
// procedure resume(); //繼續
procedure left(); //左移
procedure right(); //右移
procedure down(); //下移
//檢測是否相交 0,不相交,1相交.state,0 建立,1,下降,2左移,3右移
function isIntersection(state:integer):integer;
//function getscore():integer;//獲得遊戲分 如果返回
//function isover(direct:integer):integer;//判斷遊戲是否結束,1結束,0沒結束
procedure update_game_domain(state:integer);//更新遊戲區,0,產生新塊 1,方塊下落完成,,2結束遊戲
procedure Init_game(); //初始化遊
function converst1(brick:TBrick1 ):TBrick1 ; //旋轉 //初始化調用
procedure rotate();//旋轉方塊 下落程序呼叫
end;
implementation
//初始化函數
procedure TGame.Init_game();
var
i,j,x,y:integer;
begin
//初始化遊戲區
for x:=0 to 9 do
begin
for y:=0 to 19 do
begin
game_domain[x,y]:= 0;
end;
end;
//初始化 方塊預覽區
for i:= 0 to 5 do
begin
for j:= 0 to 5 do
begin
graph_domain[i,j]:= 0;
end;
end;
//初始化方塊座標組
// * * * *
// * * * *
// * * * *
// * * * *
//for i:=0 to 4 do
//begin // * * * * 一字形
bricks_coordinate1[0,0,0].X:= -3;
bricks_coordinate1[0,0,0].Y:= -1;
bricks_coordinate1[0,0,1].X:= -1;
bricks_coordinate1[0,0,1].Y:= -1;
bricks_coordinate1[0,0,2].X:= 1 ;
bricks_coordinate1[0,0,2].Y:= -1;
bricks_coordinate1[0,0,3].X:= 3;
bricks_coordinate1[0,0,3].Y:= -1;
//田字形
bricks_coordinate1[1,0,0].X:= -1;
bricks_coordinate1[1,0,0].Y:= -1;
bricks_coordinate1[1,0,1].X:= 1;
bricks_coordinate1[1,0,1].Y:= -1;
bricks_coordinate1[1,0,2].X:= -1;
bricks_coordinate1[1,0,2].Y:= 1;
bricks_coordinate1[1,0,3].X:= 1;
bricks_coordinate1[1,0,3].Y:= 1;
//之字形
bricks_coordinate1[2,0,0].X:= -3;
bricks_coordinate1[2,0,0].Y:= -1;
bricks_coordinate1[2,0,1].X:= -1;
bricks_coordinate1[2,0,1].Y:= -1;
bricks_coordinate1[2,0,2].X:= -1;
bricks_coordinate1[2,0,2].Y:= 1;
bricks_coordinate1[2,0,3].X:= 1;
bricks_coordinate1[2,0,3].Y:= 1;
//7字形
bricks_coordinate1[3,0,0].X:= 1;
bricks_coordinate1[3,0,0].Y:= -3;
bricks_coordinate1[3,0,1].X:= 1;
bricks_coordinate1[3,0,1].Y:= -1;
bricks_coordinate1[3,0,2].X:= 1;
bricks_coordinate1[3,0,2].Y:= 1;
bricks_coordinate1[3,0,3].X:= -1;
bricks_coordinate1[3,0,3].Y:= 1;
//凸字形
bricks_coordinate1[4,0,0].X:= -3;
bricks_coordinate1[4,0,0].Y:= -1;
bricks_coordinate1[4,0,1].X:= -1;
bricks_coordinate1[4,0,1].Y:= -1;
bricks_coordinate1[4,0,2].X:= 1;
bricks_coordinate1[4,0,2].Y:= -1;
bricks_coordinate1[4,0,3].X:= -1;
bricks_coordinate1[4,0,3].Y:= 1;
for i:=0 to 4 do
begin
for j:=0 to 2 do
begin
//bricks_coordinate[i,j+1]:= converst(bricks_coordinate[i,j]);//可能出現錯誤 返回TBrick指標
bricks_coordinate1[i,j+1]:= converst1(bricks_coordinate1[i,j]);//可能出現錯誤 返回TBrick1指標
end; //j
end;//i
end;
//end初始化函數
//產生一個新方塊
procedure TGame.newbrick(); //產生一個新方塊
var
rand: Integer;
x: Integer;
y: Integer;
begin
for x:= 0 to 9 do
begin
for y:= 0 to 19 do
begin
pre_game_domain[x,y]:=game_domain[x,y]; //在新方塊產生時儲存當前的遊戲空間狀態
end;//y
end;//x
rand:= Random(20);//方塊一共有20種狀態
bricksi:= rand div 4;
bricksj:= rand mod 4;
brickx:= 4; //方塊的x座標左移4
bricky:= 16; //方塊的y座標下移16
if isIntersection(0) = 0 then
update_game_domain(0);
end;
//end產生一個新方塊
//更新遊戲區
procedure TGame.update_game_domain(state:integer);//更新遊戲區,0,產生新塊 1,方塊下落完成,,2,左移,3,右移,4結束遊戲
var
i,x,y: integer;
begin
for x:= 0 to 9 do
begin
for y:= 0 to 19 do
begin
game_domain[x,y]:= pre_game_domain[x,y]; //在新方塊產生時儲存當前的遊戲空間狀態
end;//y
end;//x
for i:=0 to 3 do
begin
game_domain[(bricks_coordinate1[bricksi,bricksj,i].X-1) div 2 + brickx,(bricks_coordinate1[bricksi,bricksj,i].Y-1) div 2 + bricky]:=1;
end;//i
end;
//end 更新遊戲區
//下移
procedure TGame.down(); //下移
var
x,y,x1,y1,count: integer;
begin
bricky:=bricky-1;
if isIntersection(0) = 0 then
begin
update_game_domain(1)
end
else
begin
bricky:=bricky+1;
for y:= 0 to 19 do
begin
count:= 0;
for x:=0 to 9 do
begin
count:= game_domain[x,y]+ count;
end;//x
if count=10 then
begin
for y1:=y to 18 do
begin
for x1:=0 to 9 do
begin
game_domain[x1,y1]:= game_domain[x1,y1+1];
end;//x1
end;//y1
end;//if
end;//y
end;
end;
//end 下移
//左移
procedure TGame.left(); //左移
begin
brickx:= brickx-1;
if isIntersection(0) = 0 then
begin
update_game_domain(2);
end
else
begin
brickx:= brickx+1;
end;
end;
//end; 左移
//右移
procedure TGame.right(); //右移
begin
brickx:= brickx+1;
if isIntersection(0) = 0 then
begin
update_game_domain(3);
end
else
begin
brickx:= brickx-1;
end;
end;
//end 右移
//旋轉方塊
procedure TGame.rotate();//旋轉方塊 下落程序呼叫
var
temp:integer;
begin
temp:= bricksj;
bricksj:= (bricksj+1) mod 4;
if isIntersection(0) = 0 then
begin
update_game_domain(4);
end
else
begin
bricksj:= temp;
end;
end;
//end 旋轉
//檢測是否相交
//檢測是否相交 0,不相交,1相交.state,0 建立,1,下降,2左移,3右移
function TGame.isIntersection(state:integer):integer;
var
i,x,y:integer;
begin
for i:= 0 to 3 do
begin
if pre_game_domain[(bricks_coordinate1[bricksi,bricksj,i].X-1) div 2 + brickx,(bricks_coordinate1[bricksi,bricksj,i].Y-1) div 2 + bricky]=1 then
begin
result:= 1 ;
exit;
end;
if ((bricks_coordinate1[bricksi,bricksj,i].X-1) div 2 + brickx<0) or ((bricks_coordinate1[bricksi,bricksj,i].X-1) div 2 + brickx>9) or ((bricks_coordinate1[bricksi,bricksj,i].Y-1) div 2+bricky<0 )then
begin
result:= 1;
exit;
end ;// if
end;//i
result:= 0;
end;
//end 檢測
//旋轉 //初始化調用
function TGame.converst1(brick:TBrick1 ):TBrick1 ; //旋轉 //初始化調用
var
i: integer;
nextbrick: TBrick1;
begin
for i:=0 to 3 do
begin
nextbrick[i].X:= brick[i].y;
nextbrick[i].Y:= -brick[i].X;
end;//i
result:= nextbrick;
end;
//end 旋轉 //初始化調用
end.