作者youngluke (luke)
看板C_Sharp
标题[问题] 打砖块游戏
时间Thu Mar 14 01:37:10 2013
设定一个随时间改变位置的球
碰到方块时会改变方向
碰到墙壁时会改变方向
方块被碰到後会消失
之前我的作法
把一个砖块命名为brick1
把球命名为picball
然後是程式码
if ((brick1.Visible) && (Rectangle.Intersect(picBall.Bounds, brick1.Bounds)
!= Rectangle.Empty))
{
vy = -vy;
brick1.Visible = false; //藉由隐藏brick2达成"消掉"的效果
}
当球和砖块在画面上接触後
球的Y方向改变
砖块变为隐藏
没啥问题
问题在之後
我用for回圈做了很多砖块
int row=3;
int col=10;
int r ;
int c ;
bricks = new PictureBox[row, col];
for ( r=0;r < row; r++)
{
for ( c = 0; c < col; c++)
{
bricks[r, c] = new PictureBox();
bricks[r, c].Width = w;
bricks[r, c].Height = h;
bricks[r, c].Image = pictureBox1.Image;
bricks[r, c].Left = c * w;
bricks[r, c].Top = r * h;
this.Controls.Add(bricks[r, c]);
}
}
这样就跳出很多个方块来了
可是在消砖块这个地方出了问题
我不知道球要去和谁"碰"?
如果intersect的对象是bricks[2,3]这样
球只会和固定的砖块产生反应
而且砖块只有消失一瞬间
如果intersect的对象是bricks[r-1,c-1]这样
球同样也只会和固定的砖块(最右下角)产生反应
而且也只是消去一瞬间而已
请问这种状况要怎麽处理?
感谢
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.230.77.67
1F:→ Beramode:当球移动的位置上有不是隐藏砖块时 不执行移动 03/14 08:22
2F:→ Beramode:执行消砖块的动作 因为有先判定隐藏,之後就不会再撞到 03/14 08:23
3F:→ Beramode:相同的砖块,等於永久消除 03/14 08:23
4F:→ Beramode:感觉写成由砖块触发的事件会比较好 03/14 08:25
5F:推 scythemind:发现羊路克 03/09 12:33