借用一下老师的图, 让你知道我要干什么
建议先看看:C# 委托(Delegate) | 菜鸟教程 (runoob.com)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp6
{
delegate int[] Move(int x,int y);//建立一个移动的委托,委托类似于C中函数指针,方便执行函数动作连
class Program
{
//建立了4个移动命令,分别是上下左右,有需要可以自己自行添加
public static int[] moveUp(int x,int y )
{
int[] arr = { x, ++y };//注意++在前,先让他自加一再返回
return arr;
}
public static int[] moveDown(int x,int y)
{
int[] arr = { x, --y };
return arr;
}
public static int[] moveLeft(int x, int y)
{
int[] arr = { --x, y };
return arr;
}
public static int[] moveRight(int x, int y)
{
int[] arr = { ++x, y };
return arr;
}
static void Main(string[] args)
{
//创建一个方法列表,这里就体现出来委托的作用了,不然尖括号里你写什么才能向列表里添加方法呢
List<Move> methods=new List<Move>();
methods.Add(moveUp);
methods.Add(moveDown);
methods.Add(moveLeft);
methods.Add(moveDown);
int initx = 0;
int inity = 0;
String[] str = { "1", "2", "3", "2", "4", "3", "4", "1", "1", "3" };//你要执行的命令
//如果没看懂下面for循环,看看下面的注释你就知道它是干什么用的了,没错那就是对swich case 的替换作用
//委托这东西,仁者见仁智者见智吧,你觉得那种方式更好就用哪种,我自己的看法是委托能让代码结构更加清晰整洁,方便后期的维护与管理(修改函数就可以改变效果)
for(int i = 0; i < str.Length; i++)
{
Move move=methods[Convert.ToInt32(str[i]) -1];
int[] result= move(initx, inity);
initx = result[0];
inity = result[1];
Console.WriteLine(initx + "," + inity);
}
Console.ReadKey();
//for (int j = 0; j < str3.Length; j++)
//{
// switch (str3[j])
// {
// case "0":
// currentY = currentY - 1;
// image.SetPixel(currentX, currentY, Color.Red);
// break;
// case "1":
// currentX = currentX + 1;
// currentY = currentY - 1;
// image.SetPixel(currentX, currentY, Color.Red);
// break;
// case "2":
// currentX = currentX + 1;
// image.SetPixel(currentX, currentY, Color.Red);
// break;
// case "3":
// currentX = currentX + 1;
// currentY = currentY + 1;
// image.SetPixel(currentX, currentY, Color.Red);
// break;
// case "4":
// currentY = currentY + 1;
// image.SetPixel(currentX, currentY, Color.Red);
// break;
// case "5":
// currentX = currentX - 1;
// currentY = currentY + 1;
// image.SetPixel(currentX, currentY, Color.Red);
// break;
// case "6":
// currentX = currentX - 1;
// image.SetPixel(currentX, currentY, Color.Red);
// break;
// case "7":
// currentX = currentX - 1;
// currentY = currentY - 1;
// image.SetPixel(currentX, currentY, Color.Red);
// break;
// default:
// break;
// }
//}
}
}
}