public static void Snake_ArrayList_Initialize(Snake_Info Snakeinfo, Game_Info info) //随机初始化蛇的位置 { Snake_AL.Clear(); //清除缓存 info.Control_Key = Keys.Right; bool flag = true; Random ran = new Random();//实例一个随机 while (flag) { X_Y_K YUAN = new X_Y_K(ran.Next(4, M_x - 4), ran.Next(4, M_y - 4), Keys.Right); for (int i = 0; i < Snakeinfo.Body_Long; i++) { if (YUAN.X - i >= 0) { if (Coordinate_date[1, YUAN.X - i, YUAN.Y] == -1) { X_Y_K xyk = new X_Y_K(YUAN.X - i, YUAN.Y, Keys.Right); Snake_AL.Add(xyk); if (Snake_AL.Count == Snakeinfo.Body_Long) { flag = false; } } else { Snake_AL.Clear(); } } else { Snake_AL.Clear(); } } } }
public static void Snake_Co_MakeUp(Snake_Info snake)//蛇AL坐标化 { X_Y_K xyz; for (int x = 0; x < M_x; x++)//初始化坐标 { for (int y = 0; y < M_y; y++) { Coordinate_date[2, x, y] = -1; } } for (int i = 0; i < Snake_AL.Count; i++) { xyz = (X_Y_K)Snake_AL[i]; Coordinate_date[2, xyz.X, xyz.Y] = snake.Snake_ID; } }
public static void Game_InFo_UpDate(Snake_Info snake, Game_Info info, Food_Info food, Obstacle_Info oe_indo)//游戏信息更新 { X_Y_K xyz; xyz = (X_Y_K)Snake_AL[0]; //bmp_id:0 dot树 1 crossbar草丛 2cross山 3around海 //XYAround 0左上,1右上,2左下,3为右下 if (Coordinate_date[1, xyz.X, xyz.Y] != -1) //判断是否碰到障碍物 { if (Coordinate_date[1, xyz.X, xyz.Y] == (int)oe_indo.Bmp_ID[0]) { snake.PH = snake.PH - 10; } else if (Coordinate_date[1, xyz.X, xyz.Y] == (int)oe_indo.Bmp_ID[1]) { snake.PH = snake.PH - 20; } else if (Coordinate_date[1, xyz.X, xyz.Y] == (int)oe_indo.Bmp_ID[2]) { snake.PH = snake.PH - 15; } else if (Coordinate_date[1, xyz.X, xyz.Y] == (int)oe_indo.Bmp_ID[3]) { snake.PH = snake.PH - 30; } } if (Coordinate_date[2, xyz.X, xyz.Y] != -1)//判断是否碰到蛇身 { snake.PH = snake.PH - 5; } if (Coordinate_date[3, xyz.X, xyz.Y] != -1) //判断是吃到食物 { Coordinate_date[3, xyz.X, xyz.Y] = -1; food.Need_Add(); info.Game_Mark++; snake.WaitAdd_Body++; snake.PH = snake.PH + 1; } }
public static void Snake_ArrayList_Update(Snake_Info Snakeinfo)//蛇,刷新 { X_Y_K xyz; int x_l; int y_l; Keys k_l; while (Snakeinfo.WaitAdd_Body > 0) { xyz = (X_Y_K)Snake_AL[Snake_AL.Count - 1]; x_l = xyz.X; y_l = xyz.Y; k_l = xyz.Key; if (xyz.Key == Keys.Up) { if (xyz.Y + 1 >= M_y) { y_l = 0; } else { y_l++; } } else if (xyz.Key == Keys.Down) { if (xyz.Y - 1 <= 0) { y_l = M_y; } else { y_l--; } } else if (xyz.Key == Keys.Left) { if (xyz.X - 1 >= M_x) { x_l = 0; } else { x_l++; } } else if (xyz.Key == Keys.Right) { if (xyz.X - 1 <= 0) { x_l = M_x; } else { x_l--; } } X_Y_K xyk = new X_Y_K(x_l, y_l, k_l); Snake_AL.Add(xyk); Snakeinfo.WaitAdd_Body--; } Snake_AL.Reverse(); xyz = (X_Y_K)Snake_AL[Snake_AL.Count - 1];//xyz是映射到Snake_AL[Snake_AL.Count - 1] int x = xyz.X; int y = xyz.Y; Keys k = xyz.Key; if (k == Keys.Up) { if (xyz.Y <= 0) { y = M_y - 1; } else { y--; } } else if (k == Keys.Down) { if (xyz.Y + 1 >= M_y) { y = 0; } else { y++; } } else if (k == Keys.Left) { if (xyz.X <= 0) { x = M_x - 1; } else { x--; } } else if (k == Keys.Right) { if (xyz.X + 1 >= M_x) { x = 0; } else { x++; } } X_Y_K aa = new X_Y_K(x, y, k); Snake_AL.Add(aa); Snake_AL.Reverse(); Snake_AL.RemoveAt(Snake_AL.Count - 1); }