2 / 1 / 0
Регистрация: 04.03.2017
Сообщений: 27
1

Шахматы

30.03.2017, 17:17. Показов 5417. Ответов 11
Метки нет (Все метки)

На любую клетку шахматной доски поставить 2 ферзя. Поля, находящиеся под угрозой ферзя, заполнить символом ’*’. Сделать ход ферзем и получить новую картинку поля.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.03.2017, 17:17
Ответы с готовыми решениями:

Игра "Шахматы"
Начинаю писать шахматы на чистом С ,с использованием WinAPI/OpenGL,и есть много вопросов)) Первый...

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

Шахматы
Ход шахматной фигуры задан в виде: XY-XY, где X - буква (A,B,C,D,E,F,G,H), а Y - цифра...

Трехцветные шахматы
Решил изобрести трехцветные шахматы - сложную и увлекательную модификацию классических шахмат....

11
20 / 20 / 8
Регистрация: 15.10.2015
Сообщений: 83
31.03.2017, 01:15 2
А подробней можно? Не понятна суть задачи
0
2 / 1 / 0
Регистрация: 04.03.2017
Сообщений: 27
31.03.2017, 16:46  [ТС] 3
Цитата Сообщение от egorthik Посмотреть сообщение
А подробней можно? Не понятна суть задачи
Необходимо подключить графическую библиотеку, нарисовать шахматную доску. В программе должно быть меню. (что-то вроде: показать текущую позицию, показать картинку доски, показать последовательность ходов) Пользователь вводит координаты, в которую хочет переместить фигуру и потом необходимо получить новую картинку, и звездочками отметить клетки, находящиеся под угрозой ферзя. Можно сделать для одного ферзя, а не двух.
Я думаю, что надо делать через массив, размером 8х8. Вот только с алгоритмом застряла, т.к. ферзь ходит не только по диагонали
Изображения
 
1
2 / 1 / 0
Регистрация: 04.03.2017
Сообщений: 27
31.03.2017, 16:46  [ТС] 4
Цитата Сообщение от egorthik Посмотреть сообщение
А подробней можно? Не понятна суть задачи
Необходимо подключить графическую библиотеку, нарисовать шахматную доску. В программе должно быть меню. (что-то вроде: показать текущую позицию, показать картинку доски, показать последовательность ходов) Пользователь вводит координаты, в которую хочет переместить фигуру и потом необходимо получить новую картинку, и звездочками отметить клетки, находящиеся под угрозой ферзя. Можно сделать для одного ферзя, а не двух.
Я думаю, что надо делать через массив, размером 8х8. Вот только с алгоритмом застряла, т.к. ферзь ходит не только по диагонали
0
Диссидент
Эксперт C
27349 / 17067 / 3771
Регистрация: 24.12.2010
Сообщений: 38,455
01.04.2017, 10:25 5
Цитата Сообщение от Lastlight1998 Посмотреть сообщение
Вот только с алгоритмом застряла, т.к. ферзь ходит не только по диагонали
То есть сложности с определением битых клеток. да?
C
1
2
3
4
5
6
7
8
char D[8][8]; // Доска
int fx, fy; // положение ферзя
for(x=0; x<8; x++)
  for(y=0; y<8; y++) {
    if (x==fx && y==fy) D{i][j]= 'Ф';
    else if (x==xf || y==yf || abs(x-fx)==abs(y-fy)) D[x][y] = '*';
    else D[x][y] = ' ';
  }
0
2 / 1 / 0
Регистрация: 04.03.2017
Сообщений: 27
01.04.2017, 15:43  [ТС] 6
Цитата Сообщение от Байт Посмотреть сообщение
То есть сложности с определением битых клеток. да?
C
1
2
3
4
5
6
7
8
char D[8][8]; // Доска
int fx, fy; // положение ферзя
for(x=0; x<8; x++)
  for(y=0; y<8; y++) {
    if (x==fx && y==fy) D{i][j]= 'Ф';
    else if (x==xf || y==yf || abs(x-fx)==abs(y-fy)) D[x][y] = '*';
    else D[x][y] = ' ';
  }
Программа будет состоять из нескольких функций : 1) меню
2) перемещение фигуры и следовательно получение пары чисел новой координаты
3) вывод на экран изображения доски
и вопрос : как передавать аргументы в функцию? через ссылки указатели? и как возвращать значения?
0
Диссидент
Эксперт C
27349 / 17067 / 3771
Регистрация: 24.12.2010
Сообщений: 38,455
02.04.2017, 11:31 7
Цитата Сообщение от Lastlight1998 Посмотреть сообщение
и вопрос : как передавать аргументы в функцию? через ссылки указатели? и как возвращать значения?
Странный вопрос. А что, то что написано во всех учебниках, непонятно? А если непонятно, то что именно?
Цитата Сообщение от Lastlight1998 Посмотреть сообщение
Программа будет состоять из нескольких функций
Задание довольно объемно. Вряд ли найдутся желающие делать его за вас целиком.
0
2 / 1 / 0
Регистрация: 04.03.2017
Сообщений: 27
02.04.2017, 12:34  [ТС] 8
Цитата Сообщение от Байт Посмотреть сообщение
Странный вопрос. А что, то что написано во всех учебниках, непонятно? А если непонятно, то что именно?Задание довольно объемно. Вряд ли найдутся желающие делать его за вас целиком.
Я не прошу его делать за меня. В main сначала запрашиваем начальные координаты (x_0, y_0) , вызываем функцию меню, которая в свою очередь может вызывать через switch еще 4 функции: переместить фигуру (т.е. считать новые координаты x и y), показать получившуюся картинку, показать последовательность перемещений и выход из программы.
Например пользователь вводит начальные координаты ферзя(в main) потом после вызова меню вызывает показать картину поля. Как из main и menu передать начальные координаты? И еще вопрос: как передать массив доски, чтобы после выхода из функции он сохранялся, а мы работали не только с копией внутри функции, которая после работы функции исчезает?

Добавлено через 2 минуты
Цитата Сообщение от Байт Посмотреть сообщение
То есть сложности с определением битых клеток. да?
C
1
2
3
4
5
6
7
8
char D[8][8]; // Доска
int fx, fy; // положение ферзя
for(x=0; x<8; x++)
  for(y=0; y<8; y++) {
    if (x==fx && y==fy) D{i][j]= 'Ф';
    else if (x==xf || y==yf || abs(x-fx)==abs(y-fy)) D[x][y] = '*';
    else D[x][y] = ' ';
  }
Я думаю, что нельзя приравнять элемент массива char к определенному символу. Массив заполняется мусором. Необходимо использовать функции <string.h>
0
Почетный модератор
Эксперт по компьютерным сетямЭксперт Windows
28040 / 15771 / 981
Регистрация: 15.09.2009
Сообщений: 67,752
Записей в блоге: 78
02.04.2017, 12:34 9
Цитата Сообщение от Lastlight1998 Посмотреть сообщение
Я не прошу его делать за меня
только за это плюсану
0
Диссидент
Эксперт C
27349 / 17067 / 3771
Регистрация: 24.12.2010
Сообщений: 38,455
02.04.2017, 12:37 10
Lastlight1998, покажите ваши наброски. На общие описания можно дать только общий ответ, который уже написан во всех учебниках. И если вы не поняли, что написано там, то вероятность того, что вы поймете то, что я вам могу сказать, исчезающе мала.
0
2 / 1 / 0
Регистрация: 04.03.2017
Сообщений: 27
02.04.2017, 12:46  [ТС] 11
Цитата Сообщение от Байт Посмотреть сообщение
Lastlight1998, покажите ваши наброски. На общие описания можно дать только общий ответ, который уже написан во всех учебниках. И если вы не поняли, что написано там, то вероятность того, что вы поймете то, что я вам могу сказать, исчезающе мала.
Это только самое начало и естественно здесь ничего не работает
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
#include <stdio.h>
#include <conio.h>
#include <math.h>
 
 
 
void Menu ()
{
    int v, z=1, new_x, new_y;
        printf("Выберите одно из действий\n1 - переместить фигуру\n2 - показать текущее координаты\n3 - вывести последовательность действий\n4 - выход\n- ");
        scanf ("%d", &v);
        switch (v)
        {
            case 1:
                {
                    if (z==1) 
                    {
                        Move(fx, fy, D[8][8]);
                        z=z+1;
                    }               
                    else 
                    {
                        printf ("Куда хочешь переместить фигуру? Введи х и у->");
                        scanf ("%d%d", &new_x, &new_y);
                        Move(new_x, new_y, D[8][8]);
                    }
                    break;
                }       
            case 2:
                {
                    Show(D[x][y]);
                    break;
                }           
            case 3:
                {
                // последовательность
                }
            case 4:
                {
                //  выход
                }
        }
}
 
void Move (int &(fx), int &(fy), int (&D)[8][8])
{
    int x,y;
    for (x=0; x<8; x++)
    {
        for (y=0; y<8; y++)
        {
                if (x==fx & y==fy)
                    D[x][y]='Ф';
                else if (x==fx || y==fy || abs(x-fx)==abs(y-fy))
                        D[x][y]='*';
                    else D[x][y]=' ';
        }
    }
    return;
}
 
 
 
void Show(int &D[8][8])
{
    int x,y;
    for (x=0; x<8; x++)
    {
        for (y=0; y<8; y++)
        {
                printf("%d|", D[x][y]);
        }
        printf("\n")
    }
    return;
}
в main запрашиваем fx, fy
0
Диссидент
Эксперт C
27349 / 17067 / 3771
Регистрация: 24.12.2010
Сообщений: 38,455
02.04.2017, 13:03 12
C
1
2
3
4
5
6
void Move (int fx, int fy, int D[8][8])  // В объявление и в реализации
...
 Move(fx, fy, D);  // Вызов
// Массив D должен быть перед вызовом объявлен
  int D[8][8];
// Или передан аналогичным образом из main в Menu
И все-таки я бы вам посоветовал почитать самые основы языка.
Ваши затруднения явно указывают на это.

Добавлено через 1 минуту
Можно сделать массив доски int D[8][8] глобальным. Это не поощеряется, как стиль, но допустимо.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.04.2017, 13:03
Помогаю со студенческими работами здесь

2 задачи про шахматы
Добрый день всем.по советам начала новую тему.у меня есть 2 задачи про шахматы.мне нужны советы от...

Задача про шахматы на Си
Добрый день всем.по советам начала новую тему.у меня есть задача про шахматы.мне нужны советы от...

Игра шахматы на си или с++
Всем большой привет! Мне нужно написать игру на си или си++ решатель шахматных задач, то есть...

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


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru