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