Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.63
strange_man
9 / 9 / 0
Регистрация: 17.05.2012
Сообщений: 118
#1

Нарисовать шахматную доску - C++

15.07.2013, 00:27. Просмотров 2418. Ответов 3
Метки нет (Все метки)

Задание из книги Страуструпа "Принципы и практика использования С++":
"Нарисуйте доску для шахмат 8x8, чередуя белые и красные квадраты".

Вот отрывок кода (здесь магические константы, но это подождет, пока я не разберусь с проблемой)
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
int main()
try
{ 
    Point tl(100,100);  
 
    Simple_window win(tl,600,400,"Canvas");
 
    int x = 100, y = 30;
 
    for (int i = 0; i < 64; i++)
    {
        Graph_lib::Rectangle r(Point(x,y),30,30);
        if (i % 2 == 0) r.set_fill_color(Color::white);
        else r.set_fill_color(Color::red);
        win.attach(r);
        //win.wait_for_button();
        x += 30;
        if (x >= 340)
        {
            x = 100;
            y += 3;
        }
    }
 
    win.wait_for_button();
}
Как видно, с каждым витком цикла создается новый объект типа Rectangle с заданной координатой верхней левой вершины, а также длиной и шириной фигуры. По окончании работы цикла результат разочаровывает, поскольку окно win пусто. Получается, что эти квадраты создаются и уничтожаются после каждого прохода.
Я решил заглянуть в .cpp файл, относящийся к классу Rectangle. Оказалось, что когда происходит выполнение функции-члена attach(), то она в качестве аргумента принимает ссылку на объект Rectangle и прикрепляет к окну объект по ссылке. А так как после каждого прохода переменная уничтожается, следовательно, уничтожается и прикрепленный к окну квадрат.
Я пробовал создавать вектор из объектов Rectangle, но компилятор ругался, что нет доступа к приватному члену. Модифицировать код я не хочу, да и не предполагаю пока как. Ведь автор писал задание в книге, исходя из того кода что он создал для работы над главой.
Но я не предполагаю каких-либо иных способов решения. Мне, вроде бы, и не стоило бы беспокоиться, но ведь впереди еще несколько глав, где я буду работать с библиотекой FLTK и исходным кодом, предоставленным автором.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.07.2013, 00:27
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Нарисовать шахматную доску (C++):

Нарисовать шахматную доску - C++
Ввести число N и нарисовать шахматную доску размера NxN, где верхнее левое - белое. Белые поля обозначить O, черные - X. Использовать цикл...

создать шахматную доску - C++
прошу помощи 1 Поле шахматної дошки визначаться парою натуральних чисел,кожне з яких не перевищує 8:перше число – номер вертикалі (при...

Вывод на экран консоли шахматную доску - C++
Дело в том, что алгоритм у меня есть. Но я совсем не могу разобраться в скрипте. for (int i = 1; i &lt;= 10; i++) { for (int...

Обойти шахматную доску ходом коня - C++
Обязательные условия: 1. Рекурсивный алгоритм. 2. Размер доски вводит пользователь. 3. Использовать динамический массив. #include...

Реализовать программу на рекурсию про шахматную доску - C++
Магараджа - шахматная фигура, сочетающая возможности ферзя и коня. Найти число способов расставить на доске с заданной размерностью NxN...

Подсчитать количество способов замостить шахматную доску доминошками - C++
На шахматной доске,размером N*N клеток(2&lt;=N&lt;=8),подсчитать кол-во способов,которыми можно замостить данную доску стандартными...

3
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,926
Записей в блоге: 1
15.07.2013, 00:42 #2
Похоже, в этой библиотеке можно нарисовать ровно столько прямоугольников, сколько экземпляров объектов класса rectangle.
Сначала, хотел предложить вынести за цикл Graph_lib::Rectangle r, а в цикле присваивать ему разные координаты...
Но нет. спасёт только массив
C++
1
Graph_lib::Rectangle r[64];
0
strange_man
9 / 9 / 0
Регистрация: 17.05.2012
Сообщений: 118
15.07.2013, 09:40  [ТС] #3
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Похоже, в этой библиотеке можно нарисовать ровно столько прямоугольников, сколько экземпляров объектов класса rectangle.
Сначала, хотел предложить вынести за цикл Graph_lib::Rectangle r, а в цикле присваивать ему разные координаты...
Но нет. спасёт только массив
C++
1
Graph_lib::Rectangle r[64];
"error: для класса "Graph_lib::Rectangle" не существует конструктор по умолчанию"

Добавлено через 7 минут
Поправка: В коде ошибка, там
C++
1
y+=30
0
strange_man
9 / 9 / 0
Регистрация: 17.05.2012
Сообщений: 118
15.07.2013, 14:34  [ТС] #4
У меня получилось, но для этого пришлось заглянуть аж в следующую главу, где было рассказано о том, как делать вектора из фигур.
Страуструп что, пытался меня заставить создавать 64 разных квадратика ? -_- я ж не китаец

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
int main()
try
{ 
    Point tl(100,100);  
 
    Simple_window win(tl,600,400,"Canvas");
 
    int x = 100, y = 30;
    Vector_ref<Graph_lib::Rectangle> r;
 
    for (int i = 0; i < 8; i++)
    {
        for (int j = 0; j < 8; j++)
        {
            r.push_back(new Graph_lib::Rectangle(Point(x,y),30,30));
            if ((i+j) % 2 == 0) r[r.size()-1].set_fill_color(Color::white);
            else r[r.size()-1].set_fill_color(Color::red);
            win.attach(r[r.size()-1]);
            x += 30;
        }
        x = 100;
        y += 30;
    }
 
    win.wait_for_button();
}
И результат работы:
0
Миниатюры
Нарисовать шахматную доску  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.07.2013, 14:34
Привет! Вот еще темы с ответами:

Написать программу, которая выводит на экран шахматную доску - C++
Добрый день, Помогите пожалуйста решить задание на с++, &quot;Написать программу, которая выводит на экран шахматную доску. Количество...

Как можно сформировать массив кнопок, моделирующий шахматную доску? - C++
Как можно сформировать массив кнопок, моделирующий шахматную доску?

Нарисовать шахматную доску - C# WPF
Начал писать шахматы и задался вопросом: что лучше - нарисовать шахматную доску целиком и на неё накладывать изображения фигур или...

Нарисовать шахматную доску - Pascal ABC
Уважаемые программисты , помогите пожалуйста нарисовать на pascal abc шахматную доску . И если Вам не будет трудно , я бы хотел попросить...


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

Или воспользуйтесь поиском по форуму:
4
Yandex
Объявления
15.07.2013, 14:34
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru