首页 > 解决方案 > 如何更改字符串中的单个字符

问题描述

我正在使用 C# 表单中的数据网格视图创建 pacman 游戏。我从一个字符串创建了游戏地图:

private string INITMAP =               "wwwwwwwwwwwwwwwwwwww"+
                                       "wkkkkkkkkkkkkkkkkkkw"+
                                       "wkwwkwwwwkwwwwwwkwkw"+
                                       "wkwwkkkkkkwwkkkkkwkw"+
                                       "wkkkkwwwwkwwkwkwkkkw"+
                                       "wkwwkwkkkkwwkwkwkwkw"+
                                       "wkwwkwwwwkwwkwwwkwkw"+
                                       "wkwwkkbbbbbbbkkkkwkw"+
                                       "wkwwwwbwbbbwbwwkwkkw"+
                                       "wkkkkkbwbbbwbwwkkwkw"+
                                       "wkwkwwbwbbbwbkkkwkkw"+
                                       "wkwwkwbwwwwwbwwwwwkw"+
                                       "wkkkkkbbbbbbbkkkkkkw"+
                                       "wkwwwwkwkwwwwkwkwwkw"+
                                       "wkwkkkkwkkkwwkwkkwkw"+
                                       "wkwwkwkwkwkwwkkkwwkw"+
                                       "wkkkkwkwkwkwwkwkkkkw"+
                                       "wkwwkwkwkwkwwkwwkwkw"+
                                       "wkkkkkkkkkkkkkkkkkkw"+
                                       "wwwwwwwwwwwwwwwwwwww";
public void Draw()
int totalCells = NROWSCOLUMNS * NROWSCOLUMNS;

        for (int i = 0; i < totalCells; i++)
        {
            int nRow = i / NROWSCOLUMNS;
            int nColumn = i % NROWSCOLUMNS;

            switch (map.Substring(i, 1))
            {
                case "w":
                    Rows[nRow].Cells[nColumn].Value = wall;
                    break;
                case "k":
                    Rows[nRow].Cells[nColumn].Value = kibble;
                    break;
                case "b":
                    Rows[nRow].Cells[nColumn].Value = blank;
                    break;
                default:
                    MessageBox.Show("Unidentified value in string");
                    break;
            }
        }

然后我使用上面的代码将图像绘制到每个单元格中。

当 pacman 碰到一个粗磨时,我需要它将字符串中的“k”替换为“b”。例如,如果粗磨在数据网格视图上的 (1,1) 处,我需要了解如何将 INITMAP 字符串中位置 21 处的“k”更改为“b”,同时保持其他所有内容相同。

当游戏地图在每个计时器滴答时绘制到网格视图时,我不能只是将该单元格的图像更改为空白图像,因此空白将再次被该粗磨食品替换。

标签: c#winforms

解决方案


一种方法是获取字母的坐标,正如 Joel Coehoorn 提到的,使用这样的子字符串:

str = str.Substring(0, coordinate) + 'b' + str.Substring(coordinate+1, str.length())

其中坐标是字符串中字符的位置。


推荐阅读