所以,我試圖仿效的WinForms的掃雷遊戲,只是作爲一個練習。到目前爲止,我有兩個類,一個叫做「單元」,它來自常規的按鈕類,但它自己的屬性和一個處理邏輯的類很少(基本上我製作了一個填充了「單元格」類型對象的二維數組,並用炸彈填充它)。我遇到了一個問題 - 如何將我的「單元格」按鈕控件數組附加到表單上?從頭開始重寫所有內容?這兩個課程顯然都還沒有完成,只是我想檢查它在表單上的外觀,並意識到我被卡住了。幫助我簡單的WinForms遊戲
這裏是我的Cell類
class Cell : Button
{
//private GraphicsPath path;
const int width = 20;
const int height = 20;
public byte Value { get; set; }
public bool IsBomb { get; set; }
public Cell()
{
}
public Cell(int x, int y)
{
this.Location = new Point(x, y);
}
protected override void OnPaint(PaintEventArgs pevent)
{
base.OnPaint(pevent);
this.Width = width;
this.Height = height;
}
protected override void OnClick(EventArgs e)
{
base.OnClick(e);
this.Text = Value.ToString();
}
}
這裏是我的數組類
class CellArray
{
private int _rows = 0;
private int _columns = 0;
private int _bombAmount = 0;
private Random rand;
private Cell[,] cellMatrix;
public CellArray(int rows, int columns, int bombAmount)
{
_rows = rows;
_columns = columns;
_bombAmount = bombAmount;
populate();
setBombs();
}
private void populate()
{
cellMatrix = new Cell[_rows, _columns];
for (int i = 1; i < _rows; i++)
{
for (int j = 1; j < _columns; j++)
{
cellMatrix[i, j] = new Cell();
cellMatrix[i, j].IsBomb = false;
}
}
}
private void setBombs()
{
//*****************************************QUESTIONABLE************************************
rand = new Random();
int k = 1;
while (k < _bombAmount)
{
Flag:
{
int i = rand.Next(_rows);
int j = rand.Next(_columns);
if (cellMatrix[i, j].IsBomb == false)
cellMatrix[i, j].IsBomb = true;
else
goto Flag;
}
}
//*****************************************QUESTIONABLE************************************
for (int i = 1; i < _rows; i++)
{
for (int j = 1; j < _columns; j++)
{
if (cellMatrix[i - 1, j - 1].IsBomb == true)
{
cellMatrix[i, j].Value++;
}
if (cellMatrix[i - 1, j].IsBomb == true)
{
cellMatrix[i, j].Value++;
}
if (cellMatrix[i, j - 1].IsBomb == true)
{
cellMatrix[i, j].Value++;
}
if (cellMatrix[i - 1, j + 1].IsBomb == true)
{
cellMatrix[i, j].Value++;
}
if (cellMatrix[i, j + 1].IsBomb == true)
{
cellMatrix[i, j].Value++;
}
if (cellMatrix[i + 1, j + 1].IsBomb == true)
{
cellMatrix[i, j].Value++;
}
if (cellMatrix[i + 1, j].IsBomb == true)
{
cellMatrix[i, j].Value++;
}
if (cellMatrix[i + 1, j - 1].IsBomb == true)
{
cellMatrix[i, j].Value++;
}
}
}
}
}
也,你不需要在setBombs goto語句(它有對碼流沒有影響) – Asher 2011-04-24 19:20:21
不分配寬度和高度在OnPaint方法,只是在構造函數中 – Stormenet 2011-04-24 19:23:44
舍設定他們一次,它確實如此 - 如果在某個位置已經有炸彈,它就會再次進行這個循環,以確保所有的炸彈都被種植,並且有些位置不會播種兩次或更多次。 – Max 2011-04-24 19:31:14