Создание и использование массивов. Создать консольное приложение - 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();
- }
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д