Создание и использование массивов. Создать консольное приложение - C#
Формулировка задачи:
Смоделировать следующую игру. На шахматной доске выделить поля, находящиеся под угрозой заданной шахматной фигуры. Фигуру (ферзя или коня) выбрать в режиме диалога. Ввести два натуральных числа: N и M (1<N<8, 1<M<8) – номера позиций по вертикали и по горизонтали, определяющие местоположения фигуры на шахматной доске. Шахматную доску представить символьной матрицей 8*8. Соответствующий ферзю (коню) элемент матрицы обозначить символом F(K). Поля, находящиеся под угрозой ферзя (коня) обозначить символом *, а остальные поля – символом 0.
Далее то, что у меня вышло, но работает оно не так, как нужно. Помогите, пожалуйста исправить.
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program { static string[,] Ferz(int x, int y) { string[,] array = new string[8, 8]; array[x, y] = "F"; int i, j, lin1, lin2; for (i = 0; i < 8; i++) { for (j = 0; j < 8; j++) { lin1 = Math.Abs(y - i); lin2 = Math.Abs(x - j); if ((i == y) || (i == x) || (lin1 == lin2)) array[i, j] = "*"; else array[i, j] = "0"; if ((i == (x - 1)) && (j == (y - 1))) array[i, j] = "F"; } } return array; } static string[,] Hourse(int x, int y) { string[,] array = new string[8, 8]; //array[x, y] = "K"; int i, j, lin1, lin2; for (i = 0; i < 8; i++) { //if ((i == x)&& (j == y)) array[i, j] = "K"; } // else{ for (j = 0; j < 8; j++) { lin1 = Math.Abs(y - i); lin2 = Math.Abs(x - j); if (((lin1 == 1) && (lin2 == 2)) || ((lin1 == 2) && (lin2 == 1))) array[i, j] = "*"; else array[i, j] = "0"; if ((i == (x - 1)) && (j == (y - 1))) array[i, j] = "K"; } } return array; } static string ChoseFigure() { Console.WriteLine("Выберите фигуру, Ферзь (Enter F) или Конь (Enter K)?"); string figure; figure = Console.ReadLine(); if (figure == "F") Console.WriteLine("Ваша фигура ферзь "); if (figure == "K") Console.WriteLine("Ваша фигура конь "); if (!((figure == "K") || (figure == "F"))) do { Console.WriteLine("Enter F or K "); figure = Console.ReadLine(); } while ((!(figure == "F") || (figure == "K"))); return figure; } static int ChoseLocation1() { Console.WriteLine("выберите положение фигуры по вертикали от 1 до 8"); string i; i = Console.ReadLine(); int x = Convert.ToInt32(i); do { if ((x != 1) && (x != 2) && (x != 3) && (x != 4) && (x != 5) && (x != 6) && (x != 7) && (x != 8)) { Console.WriteLine("Введите 1 или 2 или 3 или 4 или 5 или 6 или 7 или 8! "); i = Console.ReadLine(); x = Convert.ToInt32(i); } } while ((x != 1) && (x != 2) && (x != 3) && (x != 4) && (x != 5) && (x != 6) && (x != 7) && (x != 8)); return x; } static int ChoseLocation2() { Console.WriteLine("выберите положение фигуры по горизонтали от 1 до 8"); string j = Console.ReadLine(); int y = Convert.ToInt32(j); do { if ((y != 1) && (y != 2) && (y != 3) && (y != 4) && (y != 5) && (y != 6) && (y != 7) && (y != 8)) { Console.WriteLine("Enter 1 или 2 или 3 или 4 или 5 или 6 или 7 или 8! "); j = Console.ReadLine(); y = Convert.ToInt32(j); } } while ((y != 1) && (y != 2) && (y != 3) && (y != 4) && (y != 5) && (y != 6) && (y != 7) && (y != 8)); return y; } static void Print(int x, int y, string[,] array) { for (int i = 0; i < 8; i++) { for (int j = 0; j < 8; j++) Console.Write(array[i, j]); Console.WriteLine(); } Console.WriteLine(); } static void Main(string[] args) { string figure = ChoseFigure(); int x = ChoseLocation1(); int y = ChoseLocation2(); string[,] desk = new string[8, 8]; if (figure == "F") { desk = Hourse(x, y); } if (figure == "K") { desk = Ferz(x, y); } Print(x, y, desk); Console.ReadKey(); } } }
Решение задачи: «Создание и использование массивов. Создать консольное приложение»
textual
Листинг программы
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace chess { class Program { struct Point { public int x; public int y; public Point(int _x, int _y) { x = _x; y = _y; } } static List<Point> FerzAttackedField(Point _ferzcoords) { if (!((0 <= _ferzcoords.x && _ferzcoords.x <= 7) && (0 <= _ferzcoords.y && _ferzcoords.y <= 7))) return null; List<Point> points = new List<Point>(); for (int i = 1;i < 8;i++){ points.Add(new Point(_ferzcoords.x + i, _ferzcoords.y + i)); //диагональ право вверх points.Add(new Point(_ferzcoords.x - i, _ferzcoords.y - i)); //диагональ лево вниз points.Add(new Point(_ferzcoords.x + i, _ferzcoords.y - i)); //диагональ право вниз points.Add(new Point(_ferzcoords.x - i, _ferzcoords.y + i)); //диагональ лево вверх points.Add(new Point(_ferzcoords.x + i, _ferzcoords.y)); //горизонталь право points.Add(new Point(_ferzcoords.x - i, _ferzcoords.y)); //горизонталь лево points.Add(new Point(_ferzcoords.x, _ferzcoords.y + i)); //вертикаль вверх points.Add(new Point(_ferzcoords.x, _ferzcoords.y - i)); //вертикаль вниз } return points.Where(p => (0 <= p.x && p.x <= 7) && (0 <= p.y && p.y <= 7)).ToList(); //отметаем координаты вышедшие за пределы доски } static List<Point> KnightAttackedField(Point _knightcoords) { if (!((0 < _knightcoords.x && _knightcoords.x < 9) && (0 < _knightcoords.y && _knightcoords.y < 9))) return null; List<Point> points = new List<Point>(); points.Add(new Point(_knightcoords.x + 1, _knightcoords.y + 2)); //диагональ право вверх points.Add(new Point(_knightcoords.x + 2, _knightcoords.y + 1)); // points.Add(new Point(_knightcoords.x - 1, _knightcoords.y - 2)); //диагональ лево вниз points.Add(new Point(_knightcoords.x - 2, _knightcoords.y - 1)); // points.Add(new Point(_knightcoords.x + 1, _knightcoords.y - 2)); //диагональ право вниз points.Add(new Point(_knightcoords.x + 2, _knightcoords.y - 1)); // points.Add(new Point(_knightcoords.x - 1, _knightcoords.y + 2)); //диагональ лево вверх points.Add(new Point(_knightcoords.x - 2, _knightcoords.y + 1)); // return points.Where(p => (0 <= p.x && p.x <= 7) && (0 <= p.y && p.y <= 7)).ToList(); //отметаем координаты вышедшие за пределы доски } static void Main(string[] args) { foreach (Point p in FerzAttackedField(new Point(5, 5))) { Console.WriteLine("{0} {1}",p.x,p.y); } Console.ReadKey(); Console.Clear(); foreach (Point p in KnightAttackedField(new Point(5, 5))) { Console.WriteLine("{0} {1}", p.x, p.y); } Console.ReadKey(); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д