[英]var labels = this.Controls.OfType<Label>(); Control all labels except 1
我有一個迷宮游戲,它使用標簽作為牆和.IntersectsWith來處理大腸桿菌。 我的問題是,由於我的“玩家”也是一個標簽,因此將代碼弄亂了。 我想要的是玩家能夠移動,同時它也不能與所有其他標簽碰撞。
真正的問題是這部分使玩家由於某種原因而無法移動。 不用介意if()與break只是一個實驗。
var labels = this.Controls.OfType<Label>();
foreach (var label in labels)
{
if (label.Bounds.IntersectsWith(player.Bounds))
{
break;
}
if (player.Bounds.IntersectsWith(label.Bounds))
{
namespace mazeGame
{
public partial class Form1 : Form
{
bool down;
bool left;
bool right;
bool up;
public Form1()
{
InitializeComponent();
}
private void panel1_Paint(object sender, PaintEventArgs e)
{
}
private void Form1_KeyUp(object sender, KeyEventArgs e)
{
}
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Right)
{
right = true;
left = false;
up = false;
down = false;
}
if (e.KeyCode == Keys.Left)
{
left = true;
right = false;
up = false;
down = false;
}
if (e.KeyCode == Keys.Up)
{
up = true;
left = false;
right = false;
down = false;
}
if (e.KeyCode == Keys.Down)
{
down = true;
left = false;
up = false;
right = false;
}
}
private void timer1_Tick(object sender, EventArgs e)
{
var labels = this.Controls.OfType<Label>();
foreach (var label in labels)
{
if (label.Bounds.IntersectsWith(player.Bounds))
{
break;
}
if (player.Bounds.IntersectsWith(label.Bounds))
{
if (right == true)
{
right = false;
left = true;
}
else if (left == true)
{
left = false;
right = true;
}
else if (up == true)
{
up = false;
down = true;
}
else if (down == true)
{
down = false;
up = true;
}
}
if (right == true)
{
player.Left += 1;
}
if (left == true)
{
player.Left -= 1;
}
if (up == true)
{
player.Top -= 1;
}
if (down == true)
{
player.Top += 1;
}
}
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void panel2_Paint(object sender, PaintEventArgs e)
{
}
}
}
您可以通過以下方式將player
標簽從選擇中排除:
var labels = this.Controls.OfType<Label>().Where(l => l.Name != "Player")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.