2016-10-29 3 views
0

私は、子供たちと遊んでいる間に簡単なロジックを理解するのに役立つ非常に単純なゲームを作ります。今は非常に初期段階にあります。C#でピクチャボックスを衝突させたいときはどうすればよいですか?

The picture

マルーン色の正方形の下の絵で

まず見た目は今プレイヤオブジェクトである、それは背景が設定された背景画像、と600×600パネルである40×40の画像ボックス ここでI私は今、4つのボタンを持っている最初のマップ

(私は後で複数のマップを作りたい、これが最初に「チュートリアルマップ」になるだろう)を描いた:

一つは、プレイヤーFを移動しますorward - まだ

一つがオンになります機能していない - 今では唯一の一つは、プレイヤーを右に回します

プレーヤーの広場を下に移動 - 今、それが唯一の

一つは後方にプレイヤーを移動するプレーヤーの広場を上に移動プレイヤーは左 - まだ私はすでに私のプレイヤーがどんななく、パネルを離れることはないと判断

を機能していない:私は壁(緑があるときに文句を言わない私のプレイヤーが動くことを確認することができます方法を知りたい

スクア再)正面。 - 今、それは緑の壁を通り抜けます、そして、私はそれが白い畑の上を移動するだけです。

何らかのオブジェクトを使用して壁として設置する必要がありますか?

ありがとうございました!

+0

matricを使用できます。私はあなたが使用しているデータ構造がわからないが、マトリックスはここでうまくいく。 matricのオブジェクトは、その壁や道路の有無を知らせます。壁の場合はオブジェクトを移動しないでください。 matricは数字を持つことができます。道路として「1」、壁として「0」を解釈する。あなたが助けが必要で、あなたのコードを修正するのに問題があるなら、ここにいくつかのコードを入れてください –

答えて

0

あなたはパネルを持っていますが、それは225x40x40の正方形で割ってあります。あなたのパネルは15の正方形の幅と15の正方形の高さを持っています。

int[,] Matrix = new int[15, 15]; 

この行列は、あなたの世界の衝突を表します:あなたは、すべてのセルが0または1(0がcoridor、1は壁である)ことができる15×15のマトリックスを作成することができます。ボタンを押した後、新しいプレーヤーの位置がマトリクスまたは境界外に衝突するかどうかを確認する必要があります。

private void Window_KeyDown(object sender, KeyEventArgs e) 
{ 
    switch (e.Key) 
    { 
     case Key.Right: 
      if ((int)PlayerLocation.X + 1 != Matrix.GetLength(1) && Matrix[(int)PlayerLocation.Y, (int)PlayerLocation.X + 1] == 0) 
      { 
       PlayerLocation = new Point(PlayerLocation.X + 1, PlayerLocation.Y); 
       MovePlayer(); 
      } 
      break; 
     case Key.Left: 
      if ((int)PlayerLocation.X != 0 && Matrix[(int)PlayerLocation.Y, (int)PlayerLocation.X - 1] == 0) 
      { 
       PlayerLocation = new Point(PlayerLocation.X - 1, PlayerLocation.Y); 
       MovePlayer(); 
      } 
      break; 
     case Key.Up: 
      if ((int)PlayerLocation.Y != 0 && Matrix[(int)PlayerLocation.Y - 1, (int)PlayerLocation.X] == 0) 
      { 
       PlayerLocation = new Point(PlayerLocation.X, PlayerLocation.Y - 1); 
       MovePlayer(); 
      } 
      break; 
     case Key.Down: 
      if ((int)PlayerLocation.Y + 1 != Matrix.GetLength(0) && Matrix[(int)PlayerLocation.Y + 1, (int)PlayerLocation.X] == 0) 
      { 
       PlayerLocation = new Point(PlayerLocation.X, PlayerLocation.Y + 1); 
       MovePlayer(); 
      } 
      break; 
    } 
} 
関連する問題