Создание и использование массивов. Создать консольное приложение - 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();
 
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4 из 5
Похожие ответы