2014-12-04 4 views
0

나는 원하는대로 패들과 벽에서 튀는 공을 가지고있다. 그리곤 draw.Rectangle 도구를 통해 단 하나의 벽돌을 추가하고 공을 튕겨 내고 색깔을 바꿨다. 그러나 더 이상의 충돌을 멈추게 보이지 않게 할 수는 없습니다. 많은 수의 벽돌을 가지고 배열을 사용하고 있습니다. 칠을 한 후에 참 또는 거짓으로 바꿀 수 있습니다.볼을 어레이 구성 요소에서 다시 튀어 나오려고합니까? (더 나은 단어를 생각할 수 없다) C#

내 문제는 내가 배열 벽돌과 충돌하도록 공을 잡으려고한다는 것이지만 내 삶은 가능한 한 많은 인터넷 검색으로도 알아낼 수 있습니다. 여기에 내가 생각하는 내 코드의 조각입니다 볼 좌표가 벽돌 위치의 매개 변수에 있다면 내가 확인의 충돌에 대한 이해에

for (int i = 0; 1 < brickLive.Length; i++) 
       if ((y == brickLocation[i, 0]) && (x >= brickLocation[0, i]) && (x <= (brickLocation[0, i] + 60))) 
        yChange = -yChange; 

에 대한 작업이 코드 값에 말하는 '해야한다'. 방향을 바꾸면됩니다. 내가 게임을 시작 때까지 잘 실행 현재 코드 (내가 삽입 버튼을 클릭하고 그 작업 바운스 버튼 수) 여기

을 내 전체 코드

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 

namespace Breakout 
{ 
    public partial class Form1 : Form 
    { 

     private int x, y, x2, y2; 
     private int xChange, yChange; 

     int bat, batX, batXX, mouseX; 

     private Graphics paper; 
     private Pen pen, pen2, pen3; 

     private Pen brkpen; 

     private Random ranNum; 

     int brkLength = 60; 
     int brkHeight = 20; 
    int[,] brickLocation = { { 0, 100 }, { 61, 100 }, { 122, 100 } }; 
    bool[] brickLive = { true, true, true }; 


    public Form1() 
    { 
     InitializeComponent(); 

     paper = picDisplayBat.CreateGraphics(); 
     pen = new Pen(Color.Red); 
     pen.Width = 10; 
     ranNum = new Random(); 

     paper = picDisplayBat.CreateGraphics(); 
     pen = new Pen(Color.Blue); 
     pen.Width = 3; 

     paper = picDisplayBat.CreateGraphics(); 
     pen2 = new Pen(Color.Red); 
     pen.Width = 3; 

     picDisplayBat.MouseMove += new 
     System.Windows.Forms.MouseEventHandler(picDraw_MouseMove); 

     paper = picDisplayBat.CreateGraphics(); 
     brkpen = new Pen(Color.Black); 
     brkpen.Width = 3; 


     //paper = picDisplayBat.CreateGraphics(); 
     //pen3 = new Pen(Color.Green); 
     //pen3.Width = 5; 
} 


    private void picDraw_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)       //DRAWING THE BAT TO MOVE WITH MOUSE 
    { 
     //paper.Clear(Color.White); 
     mouseX = e.X; 
    } 


    private void btnInsert_Click_1(object sender, EventArgs e) 
    { 
     { 
      btnBounce.Visible = true; 
     } 
    } 

    private void btnBounce_Click_1(object sender, EventArgs e) 
    { 
     { 

      timer1.Interval = 25; 
      timer1.Enabled = true; 

      x = ranNum.Next(1, picDisplayBat.Height); 
      y = ranNum.Next(1, picDisplayBat.Width); 
      xChange = ranNum.Next(1, 10); yChange = ranNum.Next(1, 10); 


      for (int i = 0; i < brickLive.Length; i++) 
      { 
       paper.DrawRectangle(brkpen, brickLocation[i, 0], brickLocation[i, 1], brkLength, brkHeight); 


      } 

     } 
    } 

    private void timer1_Tick(object sender, EventArgs e) 
    { 
     { 

      x = x + xChange; 
      y = y + yChange; 
      if (x >= picDisplayBat.Width) 
       xChange = -xChange; 

      if (y >= picDisplayBat.Height) 
       yChange = -yChange; 

      if (x <= 0) 
       xChange = -xChange; 

      if (y <= 0) 
       yChange = -yChange; 

      if ((y > picDisplayBat.Height - 20) && (x >= batX + 10) && (x <= batX + 50)) 
       yChange = -yChange; 

      if ((y < picDisplayBat.Height - 295) && (x >= batX + 10) && (x <= batX + 50)) 
       yChange = -yChange; 

      for (int i = 0; 1 < brickLive.Length; i++) 
       if ((y == brickLocation[i, 0]) && (x >= brickLocation[0, i]) && (x <= (brickLocation[0, i] + 60))) 
        yChange = -yChange; 



       paper.Clear(Color.White); 
      paper.DrawRectangle(pen, mouseX + 10, picDisplayBat.Height - 20, 50, 10);   //bat 1 
      paper.DrawEllipse(pen, x, y, 10, 10);            //ball 
      paper.DrawRectangle(pen2, mouseX + 10, picDisplayBat.Height - 295, 50, 10);  //bat2 
      //paper.DrawRectangle(pen3, x2, y2, 60, 10); 
      bat = mouseX; 
      batX = mouseX; 
      batXX = mouseX; 

      for (int i = 0; i < brickLive.Length; i++) 
      { 
       paper.DrawRectangle(brkpen, brickLocation[i, 0], brickLocation[i, 1], brkLength, brkHeight); 


      } 
     } 
    } 

    private void btnExit_Click(object sender, EventArgs e) 
    { 

    Environment.Exit(0); 

    } 

    private void btnStop_Click(object sender, EventArgs e) 
    { 


      timer1.Enabled = false; 
      paper.Clear(Color.White); 

     } 

} 

}

+0

[튀는 공과의 충돌을 사용하여 배열로 만든 벽돌을 죽이려고합니다. C#] (http://stackoverflow.com/questions/27299706/trying-to-kill-bricks-made-by-an-array-using-collision-with-a-bouncing-ball-cs) – Plutonix

+0

하나는 매우 wasnt 좋은 따라서 그 부정적인 포인트와 슬레이트 내 편집 된 버전 보지 도움이 보였다 더 나은 하나를 만들었습니다 –

답변

0

입니다 나에게 잘못 보입니다.

if ((y == brickLocation[i, 0]) && (x >= brickLocation[0, i]) && (x <= (brickLocation[0, i] + 60)))

당신이 항상 벽돌 배열 위치에 대한 [i, ...을 가져야한다 날 것으로 보인다, 그래서 수직 성분의 수평 성분과 [i, 1]에 대한 시험 [i, 0] 중 하나.

+0

그것은 루프 괜찮아요 (ive 완료 나누기 및 루프를 통해 봤다)하지만 한 번 루프를 통해 네 번째로 간다 오류가 발생하여 발생하는 시간 Breakout.exe에서 처리되지 않은 'System.IndexOutOfRangeException'예외가 발생했습니다. 추가 정보 : 인덱스가 배열 경계를 벗어났습니다. –

+0

실제로 내 대답을 읽습니까? –

+0

그래, 내가 그것을 시도하고 당신이 말한대로 라운드를 전환하지만 그것은 작동하지 않았다 내가 그걸로 반응 이유는 단지 내가 배열에 얼마나 많은 구성 요소 위의 값으로 설정 후 휴식 것 같다는 말을했다 –