delphi 寫的一個俄羅斯方塊 簡陋粗造主程式

來源:互聯網
上載者:User

 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.

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.