我试图做一个自学习的蛇游戏,遇到了一个问题,我试图解决在过去的几个小时。这里是我移动蛇头代码:错误的参数传递给函数C#
public void moveTo()
{
int foodX = food.PosX/food.Width;
int foodY = food.PosY/food.Height;
Direction directionOfMaxForCurrentState= new Direction();
int currentX = head.PosX/head.Width;
int currentY = head.PosY/head.Height;
do
{
int tmpX = currentX;
int tmpY = currentY;
previousX = tmpX;
previousY = tmpY;
directionOfMaxForCurrentState = HighestQactionForState(currentX, currentY, previousX, previousY);
if (directionOfMaxForCurrentState == Direction.Up) { head.PosY -= head.Height; }
if (directionOfMaxForCurrentState == Direction.Down) { head.PosY += head.Height; }
if (directionOfMaxForCurrentState == Direction.Left) { head.PosX -= head.Width; }
if (directionOfMaxForCurrentState == Direction.Right) {head.PosX += head.Width; }
currentX = head.PosX/head.Width;
currentY = head.PosY/head.Height;
if (currentX == foodX && currentY == foodY) { snake.Clear(); head = new Cell(1, 1); snake.Add(head); }
} while (head.PosX == food.PosX && head.PosY == food.PosY);
}
这里是HighestQactionForState功能:
public Direction HighestQactionForState(int x, int y, int px, int py)
{
var Qaround = new List<decimal>();
var actionsWithMax = new List<Direction>();
Direction toExclude = new Direction();
toExclude = directionToExclude(x, y, px, py);
foreach (Direction action in PosibleActionsForState(x, y).Where(a => a != toExclude).ToList())
{
if (action == Direction.Up && (double)Math.Abs(Q[Tuple.Create(x, y - 1, action)] - MaxQaroundState(x, y)) < 0.000000000000000000000001) actionsWithMax.Add(action);
if (action == Direction.Down && (double)Math.Abs(Q[Tuple.Create(x, y + 1, action)] - MaxQaroundState(x, y)) < 0.000000000000000000000001) actionsWithMax.Add(action);
if (action == Direction.Left && (double)Math.Abs(Q[Tuple.Create(x - 1, y, action)] - MaxQaroundState(x, y)) < 0.000000000000000000000001) actionsWithMax.Add(action);
if (action == Direction.Right && (double)Math.Abs(Q[Tuple.Create(x + 1, y, action)] - MaxQaroundState(x, y)) < 0.000000000000000000000001) actionsWithMax.Add(action);
}
return actionsWithMax.ElementAt(rnd.Next(actionsWithMax.Count));
}
所以,现在当我把断点在对moveTo功能我看到HighestQactionForState得到正确的参数,但在HighestQactionForState函数中参数不正确 - px始终与int x具有相同的值,而py与y相同,从而导致程序行为错误。任何帮助,将不胜感激!
因为你以前和当前的坐标是相同的。你所做的只是使用临时变量作为中介,但你并没有改变任何一个值。 –
这是因为它们在调用方法时是相同的:currentX == tmpX == previousX –
因为在调用方法 –