我正在尝试创建一个单词搜索游戏。问题是我无法将单词插入TableLayoutPanel。当我写这篇文章的时候,我收到了一个编译错误,上面写着“没有方法'替换'替换'占用'5'参数。
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
Random r = new Random();
for (int a = 0; a < tableLayoutPanel1.ColumnCount; a++)
{
for (int b = 0; b < tableLayoutPanel1.RowCount; b++)
{
Label nl = new Label();
int x = r.Next(65, 90);
char c = (char)x;
nl.Text = c.ToString();
tableLayoutPanel1.Controls.Add(nl, a, b);
}
}
}
private void newGameToolStripMenuItem_Click(object sender, EventArgs e)
{
Application.Restart();
}
private void PlaceWords()
{
string[] words = { "byte", "char" };
Random rn = new Random();
foreach (string p in words)
{
String s = p.Trim();
bool placed = false;// continue trying to place the word in // the matrix until it fits
while (placed == false)// generate a new random row and column
{
int nRow = rn.Next(30);// generate a new random x & y direction vector
int nCol = rn.Next(30);// x direction: -1, 0, or 1
int nDirX = 0; // y direction -1, 0, or 1
int nDirY = 0; // (although direction can never be 0, 0, this is null)
while (nDirX == 0 && nDirY == 0)
{
nDirX = rn.Next(3) - 1;
nDirY = rn.Next(3) - 1;
}
placed =PlaceWords(s.ToUpper(),nRow,nCol,nDirX,nDirY);
}
}
}
答案 0 :(得分:4)
你的PlaceWords方法不接受那么多参数,实际上它不接受任何参数。
此外,它的外观方式,你的PlaceWords是一个递归函数,不会退出,导致堆栈溢出。
要解决此问题,您需要创建第二个PlaceWords函数,该函数接受所有5个参数,并执行PlaceWords所做的任何操作,并返回布尔值。
答案 1 :(得分:0)
看起来像Form1_Load中的嵌套for循环应该将随机字符放入tableLayoutPanel1。然后,您需要调用PlaceWords(),它将确定将每个单词放在单词列表中的位置和方向。在PlaceWords的末尾,你正在调用PlaceWords(s.ToUpper(),nRow,nCol,nDirX,nDirY),它应该将这个单词实际放入tableLayoutPanel1。这个带有5个参数的第二个PlaceWords应该有不同的名称(我建议使用PlaceString);它应该不试图调用它所在的相同Placewords方法。 然后,您需要编写看起来像的方法PlaceString:
public bool PlaceString(string s, int nRow, int nCol, int nDirX, int nDirY)
{
/* whatever code you need to put the string into tableLayoutPanel1 */
}