Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.77/222: Рейтинг темы: голосов - 222, средняя оценка - 4.77
0 / 0 / 0
Регистрация: 08.03.2013
Сообщений: 37

Реализация игры "шахматы"

20.03.2013, 20:22. Показов 42863. Ответов 22

Студворк — интернет-сервис помощи студентам
Данная шахматная доска - поле размером 8 × 8. Пользователь вводит координаты
фигур, из расчета, что (1, 1) - координата нижнего левого угла (направление движения
белых пешек от единицы до восьмерки, а черных от восьмерки до единицы).
Определить , какая фигура нападает или защищает другую, если
пользователь вводит координаты каждой фигуры. Если пользователь сделает не
корректное ввода данных (например, фигуры находятся за пределами поля или
на одной клетке), выдать соответствующее сообщение.
*
белого короля, белого пешки, черного коня;

Добавлено через 8 минут
Данная шахматная доска - поле размером 8 × 8. Пользователь вводит координаты
фигур, из расчета, что (1, 1) - координата нижнего левого угла (направление движения
белых пешек от единицы до восьмерки, а черных от восьмерки до единицы).
Определить , какая фигура нападает или защищает другую, если
пользователь вводит координаты каждой фигуры. Если пользователь сделает не
корректное ввода данных (например, фигуры находятся за пределами поля или
на одной клетке), выдать соответствующее сообщение.
*
белого короля, белого пешки, черного коня;
При выполнении практической работы необходимо использовать только
линейные и разветвленные вычислительные структуры (использование массивов, циклов,
операторов безусловного перехода и прерывания программы запрещается).
Осуществить ввод необходимых данных, выполнить реализацию алгоритма с
использованием операторов условия, обеспечить вывод полученных результатов

Добавлено через 1 минуту
Пример программы
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
 
 
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            int xk, yk, xp, yp, xf, yf;            
            Console.WriteLine("Имитация трех фигур на поле: король(ч), пешка(ч), дамка(б).");
// Ввод короля на поле                
            Console.WriteLine("Введите координаты короля:");
            Console.Write("хk= ");
            xk = Convert.ToInt32(Console.ReadLine());// ввод и инициализация хk
            Console.Write("yk= ");
            yk = Convert.ToInt32(Console.ReadLine());// ввод и инициализация yk
            if(xk<=0 || xk>=9 || yk<=0 || yk>=9){
                Console.WriteLine("Ошибка! Фигура за полем!");
                return;
            }
// Ввод пешки на поле  
            Console.WriteLine("Введите координаты пешки:");
            Console.Write("хp= ");
            xp = Convert.ToInt32(Console.ReadLine());// ввод и инициализация хp
            Console.Write("yp= ");
            yp = Convert.ToInt32(Console.ReadLine());// ввод и инициализация yp
            if (xp <= 0 || xp >= 8 || yp <= 0 || yp >= 8) // пешка за полем или на неположеном месте?
            {
                Console.WriteLine("Ошибка! Фигура за полем!");
                return;
            }
            if (yp == 1)        // пешка стала дамкой дойдя до конца доски?
            {
                Console.WriteLine("Ошибка! Пешка стала дамкой!");
                return;
            }
            if (xp == xk && yp == yk)              // пешка на короле?
            {
                Console.WriteLine("Ошибка! Фигура на фигуре!");
                return;
            }
// Ввод дамки на поле            
            Console.WriteLine("Введите координаты дамки:");
            Console.Write("хf= ");
            xf = Convert.ToInt32(Console.ReadLine());// ввод и инициализация хf   
            Console.Write("yf= ");
            yf = Convert.ToInt32(Console.ReadLine());// ввод и инициализация yf
            if (xf <= 0 || xf >= 9 || yf <= 0 || yf >= 9) // ферзь за полем?
            {
                Console.WriteLine("Ошибка! Фигура за полем!");
                return;
            }
            if ((xf == xk && yf == yk) || (xf==xp && yf==yp) ) // ферзь на другой фигуре?
            {
                Console.WriteLine("Ошибка! Фигура на фигуре!");
                return;
            }
            Console.WriteLine("Фигуры раставлены.");
            Console.WriteLine("Король [{0},{1}], пешка [{2},{3}], дамка [{4},{5}]", xk, yk, xp, yp, xf, yf);
// -------------------------Проверка боя и вывод-----------------------------
            bool boy_korol = false, boy_peshka = false, peshka_Zkorol = false, korol_Zpeshka = false;
// Дамка под боем короля?
            if ((xk+1==xf || xk==xf || xk-1==xf) && (yk - 1 == yf || yk == yf || yk - 1 == yf))
            { 
                Console.WriteLine("Дамка находится под боем короля"); 
            }
           
// Дамка под боем пешки?
            if (yp - 1 == yf && (xp - 1 == xf || xp + 1 == xf))
            {
                Console.WriteLine("Дамка находится под боем пешки");
            }
// Король под боем дамки?            
            if ((xf == xk) || (yf == yk))      // По вертикали и горизонтали
            {
                if (((xk > xp && xk < xf) || (xk < xp && xk > xf)) ||
                    ((yk > yp && yk < yf) || (yk < yp && yk > yf)))
                {
                    korol_Zpeshka = true;  // Король под боем дамки и защищает пешку
                }
                else
                {
                    boy_korol = true; // Король под боем дамки без защиты пешки
                }
            }
            if (Math.Abs(xk - xf) == Math.Abs(yk - yf))       // По диагонялям
            {
                if (Math.Abs(xk - xf) < Math.Abs(xp - xf))
                {
                    korol_Zpeshka = true;// Король под боем дамки и защищает пешку
                }
                else
                {
                    boy_korol = true;                         // Король под боем дамки без защиты пешки
                }
            }
// Пешка под боем дамки?
            if ((xf == xp) || (yf == yp))  // По вертикали и горизонтали
            {
                if (((xp > xk && xp < xf) || (xp < xk && xp > xf)) || 
                    ((yp > yk && yp < yf) || (yp < yk && yp > yf)))
                {
                    peshka_Zkorol = true; // Пешка под боем дамки и защищает короля
                }
                else
                {
                    boy_peshka = true; // Пешка под боем дамки без защиты короля
                }
            }
            if (Math.Abs(xp - xf) == Math.Abs(yp - yf))       // По диагонялям
            {
                if (Math.Abs(xp - xf) < Math.Abs(xk - xf)) 
                {
                    peshka_Zkorol = true;// Пешка под боем дамки и защищает короля
                }else 
                {
                    boy_peshka = true;// Пешка под боем дамки без защиты короля
                }
            }
// Вывод кто под чьим боем
            
            if ((!korol_Zpeshka) && (boy_peshka)) { Console.WriteLine("Пешка находится под боем дамки"); }
            if (peshka_Zkorol) { Console.WriteLine("Пешка находится под боем дамки и защищает короля"); }
 
            if ((!peshka_Zkorol) && (boy_korol)) { Console.WriteLine("Король находится под боем дамки"); }
            if (korol_Zpeshka) { Console.WriteLine("Король находится под боем дамки и защищает пешку"); }
 
            if (!korol_Zpeshka && !boy_peshka && !peshka_Zkorol && !boy_korol) 
            {
                Console.WriteLine("Фигуры не пересекаются"); 
            }
            Console.Read();
        }
    }
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.03.2013, 20:22
Ответы с готовыми решениями:

Шахматы. Нужна информация по написанию логики игры
Здравствуйте, хочу написать шахматы но сразу же столкнулся с проблемой: A)Реализовал класс &quot;Доска&quot; которая хранит инфу: ...

Шахматы, реализация шах и мат
Нужно дописать методы, чтобы шахматы стали полноценной игрой, буду очень благодарен) Файл Program.cs: using MyChess; using...

Создание игры шахматы, WCF
В общем оконные шахматы (без ИИ) у меня есть, необходимо прикрутить сетевое взаимодействие, это WCF как я понимаю, в общем в нём я ничего...

22
 Аватар для int_array
52 / 52 / 7
Регистрация: 13.10.2012
Сообщений: 180
20.03.2013, 23:51
вам бы создать класс "фигура" со всеми необходимыми переменными(цвет, состояние(убита или нет), позиция, возможные позиции хода, имя для вывода) и функции(что находится под боем, под чьим боем находится, ход, смерть) и оперировать было бы проще, и код бы сократился
1
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
21.03.2013, 00:30
Цитата Сообщение от Маргарита2013 Посмотреть сообщение
Данная шахматная доска - поле размером 8 × 8. Пользователь вводит координаты
фигур, из расчета, что (1, 1) - координата нижнего левого угла (направление движения
белых пешек от единицы до восьмерки, а черных от восьмерки до единицы).
Определить , какая фигура нападает или защищает другую, если
пользователь вводит координаты каждой фигуры. Если пользователь сделает не
корректное ввода данных (например, фигуры находятся за пределами поля или
на одной клетке), выдать соответствующее сообщение.
Меня плющит, или нужно через консоль интерфейс реализовать?! 0_о

Цитата Сообщение от int_array Посмотреть сообщение
а вообще вам бы создать класс "фигура"
Некое уточнение - абстрактный класс "фигура" и наследуемы от неё "пешка", "слон", "ладья" и прочее.
0
 Аватар для int_array
52 / 52 / 7
Регистрация: 13.10.2012
Сообщений: 180
21.03.2013, 00:34
Цитата Сообщение от Wolfdp Посмотреть сообщение
Некое уточнение - абстрактный класс "фигура" ...
суть не сильно и меняется, можно и интерфейс, как ТС заблаговолит)

Не по теме:

Цитата Сообщение от Wolfdp Посмотреть сообщение
Меня плющит, или нужно через консоль интерфейс реализовать?! 0_о
и такое бывает, и морской бой бывает надо, бывает и похлеще, натыкался как-то раннер с человечком и ящиками реализовывали, типа марио)

0
0 / 0 / 0
Регистрация: 08.03.2013
Сообщений: 37
21.03.2013, 03:08  [ТС]
можно пожалуйста переделлать пример на тое задание которое подчеркнуто красным! пожалуйста!

Добавлено через 45 минут
ПЕРЕДЕЛАЙТЕ НА белого короля, белого пешки, черного коня;
0
21.03.2013, 03:54

Не по теме:

Цитата Сообщение от int_array Посмотреть сообщение
екое уточнение - абстрактный класс "фигура" ... суть не сильно и меняется, можно и интерфейс, как ТС заблаговолит)
Всё зависит от фигуры ТС :rofl:

0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
21.03.2013, 04:18
Цитата Сообщение от int_array Посмотреть сообщение
суть не сильно и меняется, можно и интерфейс, как ТС заблаговолит)
Ну, или хотя бы интерфейс. Просто я слабо представляю, как обрабатывать ход для каждого класса отдельно. А вообще-то, через наследование классов будет логичней, ибо избавить нас от дублирования кода.

Цитата Сообщение от Маргарита2013 Посмотреть сообщение
использование массивов, циклов,
операторов безусловного перехода и прерывания программы запрещается
Ладно, безусловный переход и прерывания тут нафиг не нужны, но вот массивы и циклы... Вот как мне записать набор белых и черных фигур? Пешка-один, пешка-два, король...? Или как создать карту доски? Тут явно нужен двухмерный массив. И как мне подскажете искать возможные ходы для фигуры без использования цикла? Хранить набор доступных ходов для каждого случая?
0
21.03.2013, 04:31

Не по теме:

Только вчитался в задание. Мне интересно Ваше мнение вот как раз по поводу этого

Цитата Сообщение от Маргарита2013 Посмотреть сообщение
использование массивов, циклов,
операторов безусловного перехода и прерывания программы запрещается
У меня это вызывает аналогию обучению откапыванию ямы голыми руками в строительном техникуме. И я уверен, преподаватель может изобрести не один вариант аргумента вроде того, что это полезно с педагогической точки зрения. Сам в институте сталкиваюсь постоянно.

0
0 / 0 / 0
Регистрация: 08.03.2013
Сообщений: 37
21.03.2013, 05:09  [ТС]
сделайте пожалуйста по образцу и все!
0
601 / 468 / 73
Регистрация: 22.01.2009
Сообщений: 1,180
Записей в блоге: 1
21.03.2013, 05:20

Не по теме:

Цитата Сообщение от Wolfdp Посмотреть сообщение
Меня плющит, или нужно через консоль интерфейс реализовать?!
по крайней мере я еще не встречал ни одного нормального движка, основной протокол которого -- не UCI протокол , который, по своей сути, является консольным, и если запустить "чистый движок", то игра и анализ ведутся именно через консоль. а уж графический интерфейс потом к ней хочешь -- прикручивай, хочешь, возьми готовый типа WinBoard или xChess


Не по теме:

Цитата Сообщение от Маргарита2013 Посмотреть сообщение
дамка [{4},{5}]
обожаю, когда их так называют:) тогда ладья -- валет, а слон -- пирамидка. Даже в задании написано, что ферзь -- это ферзь. какая нахрен дамка???


сишарпа моя не знать, ассемблера, брейнфака, ерланга изутать, посему ответю на анси ся, шоб никто нифига не понять:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include <stdio.h>
#include <math.h>
 
int main(void)
{
    int x1, y1; // white king x, white king y -- Координаты БЕЛОГО КОРОЛЯ
    int x2, y2; // white pawn x, white pawn y -- Координаты [quote=Маргарита2013;4283901]БЕЛОГО ПЕШКИ[/quote]
    int x3, y3; // black knight x, black knight y -- Координаты ЧЕРНОГО КОНЯ. Knight на N заменяется в международной нотации (патамушта K -- это King, т.е. король)
    int d12x, d13x, d23x, d12y, d13y, d23y; // Distance between figures -- Расстояния между фигурами, понадобятся при вычислении условий
    int isError = 0, status = 0;
 
    printf("White King: ");
    scanf("%d %d", &x1, &y1);
    printf("White Pawn: ");
    scanf("%d %d", &x2, &y2);
    printf("Black Knight: ");
    scanf("%d %d", &x3, &y3);
 
    if (x1 < 1 || x1 > 8 || y1 < 1 || y1 > 8) {
        printf("White King is out of board!\n");
        isError = 1;
    }
    if (x2 < 1 || x2 > 8 || y2 < 1 || y2 > 8) {
        printf("White Pawn is out of board!\n");
        isError = 1;
    }
    if (x2 == 1 || x2 == 8) {
        printf("White Pawn is on board but cannot be placed on the 1st or last horizontal!\n");
        isError = 1;
    }
    if (x3 < 1 || x3 > 8 || x3 < 1 || y3 > 8) {
        printf("Black Knight is out of board!\n");
        isError = 1;
    }
 
    if (x1 == x2 && y1 == y2) {
        printf("White King is placed into the same cell that White Pawn!\n");
        isError = 1;
    }
    if (x1 == x3 && y1 == y3) {
        printf("White King is placed into the same cell that Black Knight!\n");
        isError = 1;
    }
    if (x2 == x3 && y2 == y3) {
        printf("White Pawn is placed into the same cell that Black Knight!\n");
        isError = 1;
    }
 
    if (isError) {
        printf("Cannot place figures on the board because of the above error. Aborting");
    } else {
        d12x = abs(x1 - x2); d13x = abs(x1 - x3); d23x = abs(x2 - x3);
        d12y = abs(y1 - y2); d13y = abs(y1 - y3); d23y = abs(y2 - y3);
        printf("Position status:\n");
        if (d12x == 1 && d12y == 1)    { status = 1; printf("White King defends White Pawn\n"); }
        if (d13x == 1 && d13y == 2
            || d13x == 2 && d13y == 1) { status = 1; printf("White King is checked by Black Knight\n"); }
        if (d23x == 1 && d23y == 1)    { status = 1; printf("White Pawn attacks Black Knight\n"); }
        if (d23x == 1 && d23y == 2
            || d23x == 2 && d23y == 1) { status = 1; printf("Black Knight attacks White Pawn\n"); }
 
        if (status == 0) { printf("Usual and boring position. Nothing happens\n"); }
        printf("No stalemate\n"); // это никак не может быть патом
        printf("No checkmate\n"); // и матом
        printf("Position is impossible in real chess game\n"); // ну и вообще реальной позицией в игре
    }
 
    return 0;
}
пс. насяльника, прости за неровный почирк и корявый владений английский йозыгг!

Добавлено через 2 минуты

Не по теме:

для перевода в шарпу можно воспользоваться инструментом Search & replace, как я понимаю. но не буду сам этого делать, потомушта у меня нету компилера егошного и проверить не могу. да и не хочу. сделайте хоть что-нибудь сами



Добавлено через 7 минут

Не по теме:

о, не заметил в теме. это ж си шар!!111

0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
21.03.2013, 05:32
Цитата Сообщение от GoldenId Посмотреть сообщение
Только вчитался в задание.
Прочитай ещё раз. До меня только с 4 раза дошло, что мы вводим три (!) фигуры и смотрим, какая фигура, какую защищает или бьет. В такой ситуации обойдемся и без массивов. На счет циклов не уверен.

P.S. Млин, и посмотрел бы, но компа с студией под рукой нет....

Добавлено через 4 минуты
Цитата Сообщение от NEbO Посмотреть сообщение
для перевода в шарпу можно воспользоваться инструментом Search & replace
printf на Console.WriteLine поменять, делов-то... И я бы всю проверку закинул в одну функцию и вместо isError = 1; использовал return 1; - быстрее, как ни как.
0
601 / 468 / 73
Регистрация: 22.01.2009
Сообщений: 1,180
Записей в блоге: 1
21.03.2013, 05:43
хм. а мне кажется, тут никуда без дифуров в частных производных, теории игр, лямбда исчислении, суперкомпиляторов, метапрограммирования вообще, всяких там монад, функций высшего порядка, хвостовой рекурсии в конце-то концов! ну хоть генетических алгоритмов и нейронных сетей-то куда ж. Ну и конечно, нужно учесть глобальные дескрипторные таблицы, сегменты состояния задачи, а также мьютексы и семафоры для реализации многопоточности.

Добавлено через 36 секунд
там низя ж "прерывать" программу, писано ж)

Добавлено через 1 минуту
походу первый курс, или какой-то непрофильный предмет. там вначале нужно все иф-ами, ифами. как в школе на бейсике линии рисуют. кстати, с помоью goto и if-а можно любой алгоритм закодить, если что

Добавлено через 1 минуту
но главное --- это СИ ШАРРРРР. это зачоот!

Добавлено через 5 минут
ах, да.
Цитата Сообщение от Wolfdp Посмотреть сообщение
быстрее, как ни как
каким лешим? ) там только на одно условие меньше становится, и то нужно его потом опять же проверять
намана все, на ШАРЕ покатит!
0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
21.03.2013, 05:49
Цитата Сообщение от NEbO Посмотреть сообщение
там низя ж "прерывать" программу, писано ж)
Я думал, что нельзя исключения вызывать.


Цитата Сообщение от NEbO Посмотреть сообщение
кстати, с помоью goto и if-а можно любой алгоритм закодить, если что
а event?

Добавлено через 3 минуты
Цитата Сообщение от NEbO Посмотреть сообщение
каким лешим? )
Ну, в код особо не вчитывался, но думаю что-то типа такого

Code
1
2
3
4
if (ПроверкаРасположенияФигур(координаты фигур))
{ Вывод ошибки на экран; }
else
{ Вывод битых и защищенных фигур; }
0
601 / 468 / 73
Регистрация: 22.01.2009
Сообщений: 1,180
Записей в блоге: 1
21.03.2013, 05:55
ах, да. точно . еще эвент (которого, кстати, вообще нет в нативном виде почти ни в одном другом языке), а еще паблик, приват, статик, авто, волатиле, <...>. http://ru.wikipedia.org/wiki/Malbolge. Язык, полный по тьюрингу, а значит все формальные алгоритмы можно на нем записать! Учись

Добавлено через 1 минуту
Цитата Сообщение от Wolfdp Посмотреть сообщение
ПроверкаРасположенияФигур(координаты фигур)
в этой функции было бы все то же самое из моего кода. т.е. у тебя просто на 4 строчки код увеличивается, на объявление, return и пр.
0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
21.03.2013, 06:06
Цитата Сообщение от NEbO Посмотреть сообщение
Язык, полный по тьюрингу, а значит все формальные алгоритмы можно на нем записать!
Троичная система исчисления?! Увольте....

Добавлено через 8 минут
Цитата Сообщение от NEbO Посмотреть сообщение
в этой функции было бы все то же самое из моего кода. т.е. у тебя просто на 4 строчки код увеличивается, на объявление, return и пр.
Ладно, объясню, как бы меня заставил написать препод, без использования функции, но не выполняя весь код зря, при наличии ошибки в начале.

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
noError = true;
if(ПроверкаПервойФигуры)
{
  if (ПроверкаПервойФигуры)
  {}
  else
  { noError = false; }
}
else
  { noError = false; }
 
if (noError)
  Выполняем нужные расчеты.
else
  Выводим сообщени об ошибке.
И да - мои рассуждения и замечания ТС до лампочки. =^_^=
0
601 / 468 / 73
Регистрация: 22.01.2009
Сообщений: 1,180
Записей в блоге: 1
21.03.2013, 06:18
мой код выводит сразу все ошибки во входных данных.
только троичная система напугала? ха. почитай внимательнее, там все горааааздо вкуснее)) каждая последующая операция перекодируется, например)
у меня есть знакомая Маргарита - мастер фиде по шахматам, с гроссмейстерским баллом, хотя щас может уже и выше, не знаю. Вообщем, ТС, не позорь доброе имя)
Цитата Сообщение от Wolfdp Посмотреть сообщение
ТС до лампочки
согласен, расходимся

Добавлено через 1 минуту

Не по теме:

))) а внизу-то список похожих топиков -- там же одни ШАРРРРЫ!!!! Мож сбацаем чего-нибудь на шарах )))

0
Заблокирован
21.03.2013, 11:01
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
 byte xk, yk, xp, yp, xf, yf;
            Console.WriteLine("Имитация трех фигур на поле: король(б), пешка(б), конь(ч).");
            // Ввод короля на поле                
            Console.WriteLine("Введите координаты короля:");
            Console.Write("хk= ");
            xk = byte.Parse(Console.ReadLine());// ввод и инициализация хk
            Console.Write("yk= ");
            yk = byte.Parse(Console.ReadLine());// ввод и инициализация yk
            if (xk < 1 || xk > 8 || yk < 1 || yk > 8)
            {
                Console.WriteLine("Ошибка! Фигура за полем!");
                Console.ReadKey();
                return;
            }
 
            // Ввод короля на поле                
            Console.WriteLine("Введите координаты пешки:");
            Console.Write("хp= ");
            xp = byte.Parse(Console.ReadLine());// ввод и инициализация хk
            Console.Write("yp= ");
            yp = byte.Parse(Console.ReadLine());// ввод и инициализация yk
            if (xp < 1 || xp > 8 || yp < 1 || yp > 8)
            {
                Console.WriteLine("Ошибка! Фигура за полем!");
                Console.ReadKey();
                return;
            }
 
            // Ввод короля на поле                
            Console.WriteLine("Введите координаты коня:");
            Console.Write("хf= ");
            xf = byte.Parse(Console.ReadLine());// ввод и инициализация хk
            Console.Write("yf= ");
            yf = byte.Parse(Console.ReadLine());// ввод и инициализация yk
            if (xf < 1 || xf > 8 || yf < 1 || yf > 8)
            {
                Console.WriteLine("Ошибка! Фигура за полем!");
                Console.ReadKey();
                return;
            }
 
            if (xk == xp && yk == yp)
            {
                Console.WriteLine("Пешка на короле");
                Console.ReadKey();
                return;
            }
            if (xk == xf && yk == yf)
            {
                Console.WriteLine("Конь на короле");
                Console.ReadKey();
                return;
            }
            if (xp == xf && yp == yf)
            {
                Console.WriteLine("Конь на пешке");
                Console.ReadKey();
                return;
            }
 
            Console.WriteLine("Фигуры раставлены");
            Console.WriteLine("Король [{0},{1}], пешка [{2},{3}], конь [{4},{5}]", xk, yk, xp, yp, xf, yf);
         
            // -------------------------Проверка боя и вывод-----------------------------
            if (xk + 1 == xf&&yk==yf) Console.WriteLine("Конь под боем короля");
            if (xk - 1 == xf && yk == yf) Console.WriteLine("Конь под боем короля");
            if (yk + 1 == yf && xk == xf) Console.WriteLine("Конь под боем короля");
            if (yk - 1 == yf && xk == xf) Console.WriteLine("Конь под боем короля");
            if (xk + 1 == xf && yk + 1 == yf) Console.WriteLine("Конь под боем короля");
            if (xk - 1 == xf && yk - 1 == yf) Console.WriteLine("Конь под боем короля");
            if (xk - 1 == xf && yk + 1 == yf) Console.WriteLine("Конь под боем короля");
            if (xk + 1 == xf && yk - 1 == yf) Console.WriteLine("Конь под боем короля");
 
            if (xp + 1 == xf && yp + 1 == yf) Console.WriteLine("Конь под боем пешки");
            if (xp - 1 == xf && yp + 1 == yf) Console.WriteLine("Конь под боем пешки");
 
            if (xf - 1 == xk && yf + 2 == yk) Console.WriteLine("Королю шах от коня");
            if (xf + 1 == xk && yf + 2 == yk) Console.WriteLine("Королю шах от коня");
            if (xf - 2 == xk && yf + 1 == yk) Console.WriteLine("Королю шах от коня");
            if (xf - 2 == xk && yf - 1 == yk) Console.WriteLine("Королю шах от коня");
            if (xf - 1 == xk && yf - 2 == yk) Console.WriteLine("Королю шах от коня");
            if (xf + 1 == xk && yf - 2 == yk) Console.WriteLine("Королю шах от коня");
            if (xf + 2 == xk && yf - 1 == yk) Console.WriteLine("Королю шах от коня");
            if (xf + 2 == xk && yf + 1 == yk) Console.WriteLine("Королю шах от коня");
 
            if (xf - 1 == xp && yf + 2 == yp) Console.WriteLine("Пешка под боем коня");
            if (xf + 1 == xp && yf + 2 == yp) Console.WriteLine("Пешка под боем коня");
            if (xf - 2 == xp && yf + 1 == yp) Console.WriteLine("Пешка под боем коня");
            if (xf - 2 == xp && yf - 1 == yp) Console.WriteLine("Пешка под боем коня");
            if (xf - 1 == xp && yf - 2 == yp) Console.WriteLine("Пешка под боем коня");
            if (xf + 1 == xp && yf - 2 == yp) Console.WriteLine("Пешка под боем коня");
            if (xf + 2 == xp && yf - 1 == yp) Console.WriteLine("Пешка под боем коня");
            if (xf + 2 == xp && yf + 1 == yp) Console.WriteLine("Пешка под боем коня");
 
            Console.ReadKey();
0
01.04.2013, 00:31

Не по теме:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
if (xk + 1 == xf&&yk==yf) Console.WriteLine("Конь под боем короля");
            if (xk - 1 == xf && yk == yf) Console.WriteLine("Конь под боем короля");
            if (yk + 1 == yf && xk == xf) Console.WriteLine("Конь под боем короля");
            if (yk - 1 == yf && xk == xf) Console.WriteLine("Конь под боем короля");
            if (xk + 1 == xf && yk + 1 == yf) Console.WriteLine("Конь под боем короля");
            if (xk - 1 == xf && yk - 1 == yf) Console.WriteLine("Конь под боем короля");
            if (xk - 1 == xf && yk + 1 == yf) Console.WriteLine("Конь под боем короля");
            if (xk + 1 == xf && yk - 1 == yf) Console.WriteLine("Конь под боем короля");
 
            if (xp + 1 == xf && yp + 1 == yf) Console.WriteLine("Конь под боем пешки");
            if (xp - 1 == xf && yp + 1 == yf) Console.WriteLine("Конь под боем пешки");
 
            if (xf - 1 == xk && yf + 2 == yk) Console.WriteLine("Королю шах от коня");
            if (xf + 1 == xk && yf + 2 == yk) Console.WriteLine("Королю шах от коня");
            if (xf - 2 == xk && yf + 1 == yk) Console.WriteLine("Королю шах от коня");
            if (xf - 2 == xk && yf - 1 == yk) Console.WriteLine("Королю шах от коня");
            if (xf - 1 == xk && yf - 2 == yk) Console.WriteLine("Королю шах от коня");
            if (xf + 1 == xk && yf - 2 == yk) Console.WriteLine("Королю шах от коня");
            if (xf + 2 == xk && yf - 1 == yk) Console.WriteLine("Королю шах от коня");
            if (xf + 2 == xk && yf + 1 == yk) Console.WriteLine("Королю шах от коня");
 
            if (xf - 1 == xp && yf + 2 == yp) Console.WriteLine("Пешка под боем коня");
            if (xf + 1 == xp && yf + 2 == yp) Console.WriteLine("Пешка под боем коня");
            if (xf - 2 == xp && yf + 1 == yp) Console.WriteLine("Пешка под боем коня");
            if (xf - 2 == xp && yf - 1 == yp) Console.WriteLine("Пешка под боем коня");
            if (xf - 1 == xp && yf - 2 == yp) Console.WriteLine("Пешка под боем коня");
            if (xf + 1 == xp && yf - 2 == yp) Console.WriteLine("Пешка под боем коня");
            if (xf + 2 == xp && yf - 1 == yp) Console.WriteLine("Пешка под боем коня");
            if (xf + 2 == xp && yf + 1 == yp) Console.WriteLine("Пешка под боем коня");
я конечно все понимаю, но похоже что это какой-то индусский университет программирования
Urety, не тебе в обиду)
просто складывается такое впечатление, что людей учат писать не хорошие программы по нормам ООП и паттернам, а просто много кода, ОЧЕНЬ МНОГО КОДА! конечно лирическое отступление мое будет здесь ни к месту, но все же, когда я учился в универе (не очень долго и не очень успешно), был у нас предмет такой ОПАЯ назывался, так вот препод нам такие задачи ставил, что нам нужно было заведомо заранее выучить тему следующей лекции, чтобы эффективно ее решить, я как-то профилонил разок(вначале) и писал прогу с 99ю if-else блоками за 5 минут, с переносом листинга в рукописную форму, как считаете я успел?)

0
Заблокирован
01.04.2013, 01:05
Цитата Сообщение от int_array Посмотреть сообщение

Не по теме:


я конечно все понимаю, но похоже что это какой-то индусский университет программирования
Urety, не тебе в обиду)
просто складывается такое впечатление, что людей учат писать не хорошие программы по нормам ООП и паттернам, а просто много кода, ОЧЕНЬ МНОГО КОДА! конечно лирическое отступление мое будет здесь ни к месту, но все же, когда я учился в универе (не очень долго и не очень успешно), был у нас предмет такой ОПАЯ назывался, так вот препод нам такие задачи ставил, что нам нужно было заведомо заранее выучить тему следующей лекции, чтобы эффективно ее решить, я как-то профилонил разок(вначале) и писал прогу с 99ю if-else блоками за 5 минут, с переносом листинга в рукописную форму, как считаете я успел?)

Для написания хороших программ знания ООП и паттернов мало.
Че мне обижаться, на тех, кто условие не читает в первом посте темы и пример для выполнения от автора темы. Читаем:
Цитата Сообщение от Маргарита2013 Посмотреть сообщение
При выполнении практической работы необходимо использовать только
линейные и разветвленные вычислительные структуры (использование массивов, циклов,
операторов безусловного перехода и прерывания программы запрещается).
Осуществить ввод необходимых данных, выполнить реализацию алгоритма с
использованием операторов условия, обеспечить вывод полученных результатов
Иными словами, где то кто то начал учить условный переход, и надумали подобные задачи.
0
601 / 468 / 73
Регистрация: 22.01.2009
Сообщений: 1,180
Записей в блоге: 1
01.04.2013, 02:36
На самом деле, на такой задаче можно научиться оптимизировать количество строк кода. Кстати, и по быстродействию тоже: много условных переходов уменьшает вероятность их предсказания, вследствие чего будет много сбросов конвейера. И если выполнять такой код в длиннющем цикле, это сыграет не последнюю роль в производительности. Впрочем, конечно, маловероятно что при решении именно этой задачи кто-то задумывается об этом...
И второе "на самом деле": задача абсолютно адекватная, для прохождения темы условий. Тут не нужны ни циклы, ни паттерны, ни даже(!!!) знание квантовой механики. Количество входных данных константно, и не очень большое. Для реализации задачи нужен только if и пара математических функций, чтобы уменьшить код, и вместо всех возможных состояний (которых аж C(64,3), и на каждое -- строк по 50 кода проверки. если не ошибаюсь) использовать функцию от координат двух фигур. Если сюда впихать что-то еще, задача только распухнет. Ну а реализация полной мат модели шахматной доски займет тоже несколько больше кода, чем было представлено постами выше.
Поэтому даже на такой простой задаче можно запросто увидеть, как человек думает, и думает ли вообще, собственно. Берет ли чужой код и подгоняет под свою задачу, или делает сам. И, наконец, "умный" ли код он копирует (на такой задаче четко видно: зачастую проще реализовать свой алгоритм, чем подгонять код ТС, ибо он неподгонябелен). Это позволит преподавателю подстроиться под студента и помочь ему в освоении материала

Не по теме:

да, да, такие преподаватели там, где розовые пони и слоники. ирл отсечь ну совсем идиотов, разве что, т.к. супер хороший код тут не напишешь. разве что, узнать можно, кто уже до этого знал язык


Ну и, в конце концов, повторюсь, задача адекватная, для соответствующей темы. Посмотрите на мой код: разве он огромен? при использовании try-catch можно было бы еще и проверки сделать в одну строку, получилось бы еще в два раза меньше. Ну а для проверки состояний им можно назначить чиселки, а внизу уже выводить сообщения, соответствующие состояниям. Кстати, тоже можно реализовать через условия (хотя, какой-нибудь switch-case был бы читабельнее, в данном случае).
Короче, это по всякому лучше, чем реализовывать в чисто имеративном языке обход списка рекурсией или вычисление факториала через нее же, для прохождения темы "рекурсия" (повторюсь, актуально это там, где в курсе не проходят, что такое "хвостовая рекурсия"), реализация длинных чисел или компиляторов на пхп (опять же, речь об учебном процессе), или, скажем, реализация ООП-подобного синтаксиса в Erlang.
Спасибо за внимание!

Добавлено через 5 минут
Цитата Сообщение от int_array Посмотреть сообщение
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
if (xk + 1 == xf&&yk==yf) Console.WriteLine("Конь под боем короля");
            if (xk - 1 == xf && yk == yf) Console.WriteLine("Конь под боем короля");
            if (yk + 1 == yf && xk == xf) Console.WriteLine("Конь под боем короля");
            if (yk - 1 == yf && xk == xf) Console.WriteLine("Конь под боем короля");
            if (xk + 1 == xf && yk + 1 == yf) Console.WriteLine("Конь под боем короля");
            if (xk - 1 == xf && yk - 1 == yf) Console.WriteLine("Конь под боем короля");
            if (xk - 1 == xf && yk + 1 == yf) Console.WriteLine("Конь под боем короля");
            if (xk + 1 == xf && yk - 1 == yf) Console.WriteLine("Конь под боем короля");
if (xp + 1 == xf && yp + 1 == yf) Console.WriteLine("Конь под боем пешки");
            if (xp - 1 == xf && yp + 1 == yf) Console.WriteLine("Конь под боем пешки");
if (xf - 1 == xk && yf + 2 == yk) Console.WriteLine("Королю шах от коня");
            if (xf + 1 == xk && yf + 2 == yk) Console.WriteLine("Королю шах от коня");
            if (xf - 2 == xk && yf + 1 == yk) Console.WriteLine("Королю шах от коня");
            if (xf - 2 == xk && yf - 1 == yk) Console.WriteLine("Королю шах от коня");
            if (xf - 1 == xk && yf - 2 == yk) Console.WriteLine("Королю шах от коня");
            if (xf + 1 == xk && yf - 2 == yk) Console.WriteLine("Королю шах от коня");
            if (xf + 2 == xk && yf - 1 == yk) Console.WriteLine("Королю шах от коня");
            if (xf + 2 == xk && yf + 1 == yk) Console.WriteLine("Королю шах от коня");
if (xf - 1 == xp && yf + 2 == yp) Console.WriteLine("Пешка под боем коня");
            if (xf + 1 == xp && yf + 2 == yp) Console.WriteLine("Пешка под боем коня");
            if (xf - 2 == xp && yf + 1 == yp) Console.WriteLine("Пешка под боем коня");
            if (xf - 2 == xp && yf - 1 == yp) Console.WriteLine("Пешка под боем коня");
            if (xf - 1 == xp && yf - 2 == yp) Console.WriteLine("Пешка под боем коня");
            if (xf + 1 == xp && yf - 2 == yp) Console.WriteLine("Пешка под боем коня");
            if (xf + 2 == xp && yf - 1 == yp) Console.WriteLine("Пешка под боем коня");
            if (xf + 2 == xp && yf + 1 == yp) Console.WriteLine("Пешка под боем коня");
а еще почему-то вспомнилось: http://govnokod.ru/best?time=ever (точнее, именно http://govnokod.ru/212)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.04.2013, 02:36
Помогаю со студенческими работами здесь

Создание логической игры Шахматы. Надо разделить код на классы
Надо отделить логику игры в отдельный класс. А так же что бы в текст бокс выводился сделанный ход, и доска была с обозначениями от 1 -8 и...

Пропали игры (шахматы)
У меня компьютер Aser и ОС Win 10 64 bit. Установил игры Win7Games4Win10_8_81_v2 Через некоторое время игры исчезли, хотя в...

Шахматы, реализация окраски StringGrid-а
Проблема не сложная, препод задал сделать хождение фигур по доске. Сделал шахматную доску заполнил ее но делал без оформления ( тупо + и -...

Шахматы: Реализация истории ходов
Здравствуйте! Хочу хранить историю ходов для последующего сохранения в файл. Также хочется откравать сохраненный файл и иметь...

Разработка компьютерной игры Шахматы
Всем привет. Задали РГР по программированию, на тему &quot;Разработка компьютерной игры Шахматы&quot;. Описание: Программа должна давать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru