Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.54/323: Рейтинг темы: голосов - 323, средняя оценка - 4.54
0 / 0 / 0
Регистрация: 22.11.2008
Сообщений: 36

Вывод на экран шахматной доски

21.12.2008, 12:16. Показов 65102. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста написать код программы выводящей на экран шахматную доску.
P.S. Я только учусь.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.12.2008, 12:16
Ответы с готовыми решениями:

Программа, которая выводит на экран изображение шахматной доски
и снова привет! мне опять нужна ваша помощь. вот код, который жутко глючит((( { // Напишите программу, которая выводит на экран...

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

Разрезание шахматной доски
Написать программу нахождения всех способов разрезания шахматной доски с числом клеток nxn (n-четное) на две одинаковые по форме части (не...

20
1 / 1 / 0
Регистрация: 14.12.2008
Сообщений: 26
21.12.2008, 12:20
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include<stdio.h>
int main() {
  int i, j;
  printf("Pered vami - shahmatnaya doska:\n");
  for (i=0; i<=7; i++){ //* izmenenie stolbcov
    for (j=0; j<=7; j++) { //* izmenenie strok
      if(i%2==1) 
        if (j%2==1) printf("  ");
        else printf("*");
      else 
        if (j%2==1) printf("*");
        else printf("  ");
    }
  printf("\n");
  }
}
попробуй так
0
0 / 0 / 0
Регистрация: 22.11.2008
Сообщений: 36
25.12.2008, 21:45  [ТС]
Большое спасибо!
0
 Аватар для Grayswandir
10 / 10 / 1
Регистрация: 05.02.2010
Сообщений: 12
05.02.2010, 22:51
Доброго времени суток.
Даны 2 задачи на вариацию шахматной доски.

1. Высота и ширина доски задаётся пользователем.
Нарисовать шахматную доску в консоли. Размер ячейки доски фиксирован - одно знакоместо.
Чёрные клетки - символ 'x', белый - символ '-'.
Тут сложностей нет.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
        int h, w, i, j;
        
    cout << "Введите высоту шахматной доски.\nh = ";
    cin >> h;
    cout << "Введите ширину шахматной доски.\nw = ";
    cin >> w;
 
    for (i=0; i<h; i++)
    {
        for (j=0; j<w; j++)
        {
            ((j%2 && i%2) || (!(j%2) && !(i%2))) ? (cout << 'x') : (cout << '-');
        }
        cout << '\n';
    }
    cout << "\n\n\n";
2. условия те же, только размер ячейки не фиксирован, а задаётся пользователем.
Т.е., например, высота доски - 3, ширина - 4, размер ячейки - 3 знакоместа.
На выводе должно быть так:

xxx---xxx---
xxx---xxx---
xxx---xxx---
---xxx---xxx
---xxx---xxx
---xxx---xxx
xxx---xxx---
xxx---xxx---
xxx---xxx---

И вот тут у меня проблемы.
Помогите пожалуйста подсказкой как это реализовать, готовый код не надо - хочется самому разобраться.
Из обязательных условий: использование только циклов - никаких массивов, консольный вывод (cout).

Добавлено через 3 часа 53 минуты
Вторую задачу-таки победил

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
#include <iostream>
using namespace std;
void main()
{
    setlocale (LC_CTYPE, ".1251");  
    int h, a, w;
    cout << "Введите высоту шахматной доски.\nh = ";
    cin >> h;
    cout << "Введите ширину шахматной доски.\nw = ";
    cin >> w;
    cout << "Введите величину ячейки шахматной доски.\na = ";
    cin >> a;
    for (int i=0; i<h; i++)
    {
        for (int jj=0; jj<a; jj++)
        {
            for (int j=0; j<w; j++)
            {
                for (int ii=0; ii<a; ii++)
                {
                ((i+j)%2) ? (cout << '-') : (cout << 'x');
                }
            }
            cout << '\n';
        }
    }
    cout << "\n\n\n";
}
Если у кого-то есть идеи по оптимизации решения - с интересом бы посмотрел.
2
Day
 Аватар для Day
1180 / 990 / 83
Регистрация: 29.10.2009
Сообщений: 1,385
05.02.2010, 23:24
Тут сложностей нет.
Grayswandir, Задача решена совершенно грамотно.
И никаких оптимизаций тут в принципе быть не может
1
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3617 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
05.02.2010, 23:28
Day, ошибаешься, очень даже может. Как минимум так
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
#include <iostream>
using namespace std;
int main()
{
        setlocale (LC_CTYPE, ".1251");  
        int h, a, w;
        cout << "Введите высоту шахматной доски.\nh = ";
        cin >> h;
        cout << "Введите ширину шахматной доски.\nw = ";
        cin >> w;
        cout << "Введите величину ячейки шахматной доски.\na = ";
        cin >> a;
        int i, jj, j, ii;
        for (i=0; i<h; i++)
        {
                for (jj=0; jj<a; jj++)
                {
                        for (j=0; j<w; j++)
                        {
                                for (ii=0; ii<a; ii++)
                                {
                                        (!(i+j) & 1) ? (cout << '-') : (cout << 'x');
                                }
                        }
                        cout << '\n';
                }
        }
        cout << "\n\n\n";
        return 0;
}
0
 Аватар для Grayswandir
10 / 10 / 1
Регистрация: 05.02.2010
Сообщений: 12
05.02.2010, 23:52
M128K145, Ваш вариант работает неверно
И хотелось бы узнать, в чём именно заключается Ваша оптимизация, за исключением объявления счётчиков цикла до их начала, и присваивание функции main типа int?
1
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3617 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
06.02.2010, 01:55
Grayswandir, в 22 надо убрать отрицание, т.е. так
C++
1
2
3
4
5
6
int i, jj, j, ii;
for (i = 0; i < h; ++i)
    for (jj = 0; jj < a; ++jj, std::cout<<std::endl)
        for (j = 0; j < w; ++j)
            for (ii = 0; ii < a; ++ii)
                std::cout<<((i + j) & 1 ? '-' : 'x');
Оптимизация? Да никакой в принципе, если не учитывать затраты на создание N переменных типа int. Для вашего кода N = h * a * w + 1, для моего N = 4. А если взять значения h, a, w немногим более тысячи? Еще вопросы?
2
 Аватар для Grayswandir
10 / 10 / 1
Регистрация: 05.02.2010
Сообщений: 12
06.02.2010, 02:01
Спасибо. Об этом как-то и не подумал.
0
1 / 1 / 0
Регистрация: 19.01.2017
Сообщений: 1
19.01.2017, 16:26
Я только учусь . Но Вот так вот доска шахматная должна выглядеть.
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
#include <iostream>
using namespace std;
void main()
{
    setlocale(LC_ALL, "rus");
    int h, a, w;
    cout << "Введите высоту шахматной доски.\nh = ";
    cin >> h;
    cout << "Введите ширину шахматной доски.\nw = ";
    cin >> w;
    cout << "Введите величину ячейки шахматной доски.\na = ";
    cin >> a;
    for (int i = 0; i < h; i++)      //проход по высоте доски
    {
        if (i % 2 == 0)
            for (int i = 0; i < w/2; i++)     //проход  ***---  по ширине доски
            {
                for (int i = 0; i < a; i++)
                    cout << "*";
                for (int i = 0; i < a; i++)
                    cout << "-";
            }
        else 
            for (int i = 0; i < w/2; i++)     //проход  ---*** по ширине доски
            {
                for (int i = 0; i < a; i++)
                    cout << "-";
                for (int i = 0; i < a; i++)
                    cout << "*";
            }
        cout << "\n";
    }
    cout << "\n\n";
}
1
19.01.2017, 16:32

Не по теме:

angelwarcode, теме 7 лет ,как вы ее нашли..

0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
19.01.2017, 16:52
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
 
int main()
{
    const int N = 8;
    bool flag = true;
    for (int i = 0; i < N * N; i++)
    {
        if (i % N == 0)
        {
            std::cout << '\n';
            flag = !flag;
        }
        std::cout << (i & 1 ^ flag ? '*' : ' ');
    }
}
0
0 / 0 / 0
Регистрация: 12.11.2017
Сообщений: 1
30.11.2017, 14:11
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
#include <iostream>
#include<iomanip>
#include <Windows.h>
#include <conio.h>
#include <time.h>
#include <ostream>
 
using namespace std;
 
 
 
void main()
{
    bool x = true;
    int answer; answer = 0;
    while (x) {
        setlocale(LC_ALL, "Russian");
        system("pause");
        system("cls");
 
        char simbol, simbol1;
        int k, n;
        cout << "Введите ширину" << endl;
        cin >> k;
        cout << "Введите символ # и -" << endl;
        cin >> simbol;
        cin >> simbol1;
        cout << "Введите высоту" << endl;
        cin >> n;
        for (int l2 = 1; l2 <= n; l2++) {
            for (int l1 = 1; l1 <= n; l1++)
            {
                for (int l = 0; l <= k; l++)
                {
                    for (int i = 0; i <= k; i++)
                    {
                    // simbol=k;
                        cout << ' ' << simbol;
                    }
 
                    for (int j = 0; j <= k; j++)
                    {
                        // simbol1=k;
                        cout << ' ' << simbol1;
                    }
 
 
 
                }
            }
            for (int l = 1; l <= n; l++)
            {
                for (int l = 1; l <= n; l++)
                {
                    for (int i = 0; i <= k; i++)
                    {
                        //simbol1 = k;
                        cout << ' ' << simbol1;
                    }
 
                    for (int j = 0; j <= k; j++)
                    {
                        //simbol = k;
                        cout << ' ' << simbol;
                    }
 
 
 
                }
            }
        }
        cout << endl;
        cout << endl;
        cout << "Желаете продолжить работу?" << endl;
        cout << "Да - 1, нет - 0: ";
        cin >> answer;
        if (answer = 1) x = true;
        else x = false;
 
    }
}
Добавлено через 33 секунды
Немного доделать.)))
0
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
30.11.2017, 14:54
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
 
using std::cout;
 
int main()
{
    cout << "\xDA\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xBF\n";
    cout << "\xB3\xDE\xDB\xDD \xDE\xDB\xDD \xDE\xDB\xDD \xDE\xDB\xDD  \xB3\n";
    cout << "\xB3  \xDE\xDB\xDD \xDE\xDB\xDD \xDE\xDB\xDD \xDE\xDB\xDD\xB3\n";
    cout << "\xB3\xDE\xDB\xDD \xDE\xDB\xDD \xDE\xDB\xDD \xDE\xDB\xDD  \xB3\n";
    cout << "\xB3  \xDE\xDB\xDD \xDE\xDB\xDD \xDE\xDB\xDD \xDE\xDB\xDD\xB3\n";
    cout << "\xB3\xDE\xDB\xDD \xDE\xDB\xDD \xDE\xDB\xDD \xDE\xDB\xDD  \xB3\n";
    cout << "\xB3  \xDE\xDB\xDD \xDE\xDB\xDD \xDE\xDB\xDD \xDE\xDB\xDD\xB3\n";
    cout << "\xB3\xDE\xDB\xDD \xDE\xDB\xDD \xDE\xDB\xDD \xDE\xDB\xDD  \xB3\n";
    cout << "\xB3  \xDE\xDB\xDD \xDE\xDB\xDD \xDE\xDB\xDD \xDE\xDB\xDD\xB3\n";
    cout << "\xC0\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xD9\n";
}
1
9933 / 2936 / 494
Регистрация: 05.10.2013
Сообщений: 7,983
Записей в блоге: 239
02.12.2017, 11:45
SFML, OpenGL 3.3 Core, проект VS2015: Chessboard_SFML.zip



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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
#define GLEW_STATIC
#include <GL/glew.h>
 
#include <SFML/Graphics.hpp>
 
#include <glm/glm.hpp>
#include <glm/gtc/matrix_transform.hpp>
#include <glm/gtc/type_ptr.hpp>
 
#include <Windows.h>
#include <iostream>
#include <string>
#include <sstream>
#include <fstream>
 
extern "C" _declspec(dllexport) DWORD NvOptimusEnablement = 0x00000001;
 
unsigned int CreateShaderProgram(const GLchar* vertexShaderText, const GLchar* fragmentShaderText);
std::string LoadFileContents(const std::string filePath);
 
int main()
{
    sf::ContextSettings settings;
 
    settings.majorVersion = 3;
    settings.minorVersion = 3;
    settings.depthBits = 24;
 
    sf::RenderWindow window(sf::VideoMode(500, 500), "Chessboard", sf::Style::Titlebar | sf::Style::Close, settings);
    window.setActive(true);
 
    glewExperimental = true;
    GLenum result = glewInit();
    if (result != GLEW_OK)
    {
        std::cout << "Glew failed to initialize: " << glewGetErrorString(result) << std::endl;
    }
 
    float vertices[] = {
        0.0f, 1.0f, // (x, y)
        0.0f, 0.0f,
        1.0f, 1.0f,
        1.0f, 0.0f
    };
 
    GLuint vbo;
    GLuint vao;
 
    glGenBuffers(1, &vbo);
    glBindBuffer(GL_ARRAY_BUFFER, vbo);
    glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
 
    glGenVertexArrays(1, &vao);
    glBindVertexArray(vao);
 
    glVertexAttribPointer(0, 2, GL_FLOAT, false, 0, (GLvoid*)0);
    glEnableVertexAttribArray(0);
 
    //std::string vertexShaderText = LoadFileContents("shader.vert.glsl");
    //std::string fragmentShaderText = LoadFileContents("shader.frag.glsl");
 
    std::string vertexShaderSource =
        "#version 330 core\n"
        "layout(location = 0) in vec2 a_position;"
        "uniform mat4 u_mpMatrix;"
        "void main()"
        "{"
        "    gl_Position = u_mpMatrix * vec4(a_position, 0.0, 1.0);"
        "}";
 
    std::string fragmentShaderSource =
        "#version 330 core\n"
        "uniform vec3 u_color;"
        "out vec4 outColor;"
        "void main()"
        "{"
        "    outColor = vec4(u_color, 1.0);"
        "}";
 
    GLuint shaderProgram = CreateShaderProgram(vertexShaderSource.c_str(), fragmentShaderSource.c_str());
    glUseProgram(shaderProgram);
 
    GLint u_Color = glGetUniformLocation(shaderProgram, "u_color");
 
    glm::mat4x4 modelMatrix;
    glm::mat4 mpMatrix;
    glm::mat4 projectionMatrix = glm::ortho(0.0f, 8.0f, 0.0f, 8.0f);
 
    glViewport(20, 20, 460, 460);
 
    GLint u_mpMatrix = glGetUniformLocation(shaderProgram, "u_mpMatrix");
 
    while (window.isOpen())
    {
        sf::Event ev;
        while (window.pollEvent(ev))
        {
            if (ev.type == sf::Event::Closed)
            {
                window.close();
            }
        }
 
        glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
        glClear(GL_COLOR_BUFFER_BIT);
 
        for (size_t row = 0; row < 8; row++)
        {
            for (size_t col = 0; col < 8; col++)
            {
                modelMatrix = glm::translate(glm::mat4(), glm::vec3(col, row, 0.0f));
                mpMatrix = projectionMatrix * modelMatrix;
                glUniformMatrix4fv(u_mpMatrix, 1, false, &mpMatrix[0][0]);
                if ((row % 2 == 0 && col % 2 == 0) || (row % 2 != 0 && col % 2 != 0))
                {
                    glUniform3f(u_Color, 0.0f, 0.0f, 0.0f);
                }
                else
                {
                    glUniform3f(u_Color, 0.823f, 0.690f, 0.356f);
                }
                glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
            }
        }
 
        window.display();
    }
 
    return 0;
}
 
GLuint CreateShaderProgram(const GLchar * vertexShaderText, const GLchar * fragmentShaderText)
{
    GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER);
    GLuint fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
    GLuint shaderProgram = glCreateProgram();
 
    glShaderSource(vertexShader, 1, &vertexShaderText, nullptr);
    glCompileShader(vertexShader);
 
    GLint success;
    GLchar infoLog[512];
    glGetShaderiv(vertexShader, GL_COMPILE_STATUS, &success);
    if (!success)
    {
        glGetShaderInfoLog(vertexShader, 512, nullptr, infoLog);
        std::cout << "Vertex Shader compilation failed: " << infoLog << std::endl;
    }
 
    glShaderSource(fragmentShader, 1, &fragmentShaderText, nullptr);
    glCompileShader(fragmentShader);
    glGetShaderiv(fragmentShader, GL_COMPILE_STATUS, &success);
    if (!success)
    {
        glGetShaderInfoLog(fragmentShader, 512, nullptr, infoLog);
        std::cout << "Fragment Shader compilation failed: " << infoLog << std::endl;
    }
 
    glAttachShader(shaderProgram, vertexShader);
    glAttachShader(shaderProgram, fragmentShader);
 
    glLinkProgram(shaderProgram);
 
    glGetProgramiv(shaderProgram, GL_LINK_STATUS, &success);
    if (!success)
    {
        glGetProgramInfoLog(shaderProgram, 512, nullptr, infoLog);
        std::cout << "Program failed to link: " << infoLog << std::endl;
    }
 
    glDeleteShader(vertexShader);
    glDeleteShader(fragmentShader);
 
    return shaderProgram;
}
 
std::string LoadFileContents(const std::string filePath)
{
    std::ifstream file(filePath);
    std::stringstream sstream;
 
    if (!file.is_open())
    {
        std::cout << "Could not find the file: " << filePath << std::endl;
    }
 
    sstream << file.rdbuf();
 
    return sstream.str();
}
2
02.12.2017, 12:05

Не по теме:

Ждем следующую доску в 3D :D

0
694 / 7027 / 265
Регистрация: 11.08.2016
Сообщений: 3,956
02.12.2017, 17:05
Неплохо бы знать, какой у тебя C++. Borland C++ 3.0? Visual C++? Builder? MinGW? DevCPP? Ещё что-нибудь?
0
9933 / 2936 / 494
Регистрация: 05.10.2013
Сообщений: 7,983
Записей в блоге: 239
02.12.2017, 18:36
Цитата Сообщение от Ivandur Посмотреть сообщение
Неплохо бы знать, какой у тебя C++. Borland C++ 3.0? Visual C++? Builder? MinGW? DevCPP? Ещё что-нибудь?
Автор создал тему в 2008 году.

Цитата Сообщение от QuakerRUS Посмотреть сообщение
Ждем следующую доску в 3D
SFML, OpenGL 3.3 Core, проект VS2015: Chessboard3D.zip



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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
#define GLEW_STATIC
#include <GL/glew.h>
 
#include <SFML/Graphics.hpp>
 
#include <glm/glm.hpp>
#include <glm/gtc/matrix_transform.hpp>
#include <glm/gtc/type_ptr.hpp>
 
#include <Windows.h>
#include <iostream>
#include <string>
#include <sstream>
#include <fstream>
 
extern "C" _declspec(dllexport) DWORD NvOptimusEnablement = 0x00000001;
 
unsigned int CreateShaderProgram(const GLchar* vertexShaderText, const GLchar* fragmentShaderText);
std::string LoadFileContents(const std::string filePath);
void DrawCube(glm::vec3 pos, GLfloat r, GLfloat g, GLfloat b);
 
glm::mat4 mvpMatrix;
glm::mat4 modelMatrix;
glm::mat4 normalMatrix;
glm::mat4 viewMatrix;
glm::mat4 projectionMatrix;
 
GLint u_color;
GLint u_normalMatrix;
GLint u_mvpMatrix;
 
int main()
{
    sf::ContextSettings settings;
 
    settings.majorVersion = 3;
    settings.minorVersion = 3;
    settings.depthBits = 24;
 
    sf::RenderWindow window(sf::VideoMode(500, 500), "Chessboard", sf::Style::Titlebar | sf::Style::Close, settings);
    window.setActive(true);
 
    glewExperimental = true;
    GLenum result = glewInit();
    if (result != GLEW_OK)
    {
        std::cout << "Glew failed to initialize: " << glewGetErrorString(result) << std::endl;
    }
 
    //    v6----- v5
    //   /|      /|
    //  v1------v0|
    //  | |     | |
    //  | |v7---|-|v4
    //  |/      |/
    //  v2------v3
 
    GLfloat vertices[] = {
        0.5, 0.5, 0.5, -0.5, 0.5, 0.5, -0.5, -0.5, 0.5, 0.5, -0.5, 0.5,     // v0-v1-v2-v3 front
        0.5, 0.5, 0.5, 0.5, -0.5, 0.5, 0.5, -0.5, -0.5, 0.5, 0.5, -0.5,     // v0-v3-v4-v5 right
        0.5, 0.5, 0.5, 0.5, 0.5, -0.5, -0.5, 0.5, -0.5, -0.5, 0.5, 0.5,     // v0-v5-v6-v1 up
        -0.5, 0.5, 0.5, -0.5, 0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, 0.5, // v1-v6-v7-v2 left
        -0.5, -0.5, -0.5, 0.5, -0.5, -0.5, 0.5, -0.5, 0.5, -0.5, -0.5, 0.5, // v7-v4-v3-v2 down
        0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, 0.5, -0.5, 0.5, 0.5, -0.5  // v4-v7-v6-v5 back
    };
 
    GLfloat normals[] = {
        0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0,     // v0-v1-v2-v3 front
        1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0,     // v0-v3-v4-v5 right
        0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0,     // v0-v5-v6-v1 up
        -1.0, 0.0, 0.0, -1.0, 0.0, 0.0, -1.0, 0.0, 0.0, -1.0, 0.0, 0.0, // v1-v6-v7-v2 left
        0.0, -1.0, 0.0, 0.0, -1.0, 0.0, 0.0, -1.0, 0.0, 0.0, -1.0, 0.0, // v7-v4-v3-v2 down
        0.0, 0.0, -1.0, 0.0, 0.0, -1.0, 0.0, 0.0, -1.0, 0.0, 0.0, -1.0  // v4-v7-v6-v5 back
    };
 
    GLushort indices[] = {
        0, 1, 2, 0, 2, 3,           // front
        4, 5, 6, 4, 6, 7,           // right
        8, 9, 10, 8, 10, 11,        // up
        12, 13, 14, 12, 14, 15,     // left
        16, 17, 18, 16, 18, 19,     // down
        20, 21, 22, 20, 22, 23      // back
    };
 
    GLuint vao;
    glGenVertexArrays(1, &vao);
    glBindVertexArray(vao);
 
    GLuint vertexVBOID;
    glGenBuffers(1, &vertexVBOID);
    glBindBuffer(GL_ARRAY_BUFFER, vertexVBOID);
    glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
    glVertexAttribPointer(0, 3, GL_FLOAT, false, 0, (GLvoid*)0);
    glEnableVertexAttribArray(0);
 
    GLuint normalVBOID;
    glGenBuffers(1, &normalVBOID);
    glBindBuffer(GL_ARRAY_BUFFER, normalVBOID);
    glBufferData(GL_ARRAY_BUFFER, sizeof(normals), normals, GL_STATIC_DRAW);
    glVertexAttribPointer(1, 3, GL_FLOAT, false, 0, (GLvoid*)0);
    glEnableVertexAttribArray(1);
 
    GLuint indexVBOID;
    glGenBuffers(1, &indexVBOID);
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indexVBOID);
    glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);
 
    //std::string vertexShaderText = LoadFileContents("shader.vert.glsl");
    //std::string fragmentShaderText = LoadFileContents("shader.frag.glsl");
 
    std::string vertexShaderSource =
        "#version 330 core\n"
        "layout(location = 0) in vec3 a_position;"
        "layout(location = 1) in vec3 a_normal;"
        "uniform vec3 u_lightDir;"
        "uniform mat4 u_normalMatrix;"
        "uniform mat4 u_mvpMatrix;"
        "out float v_dot;"
        "void main()"
        "{"
        "    gl_Position = u_mvpMatrix * vec4(a_position, 1.0);"
        "    vec4 normal = u_normalMatrix * vec4(a_normal, 1.0);"
        "    v_dot = max(dot(normalize(normal.xyz), u_lightDir), 0.0);"
        "}";
 
    std::string fragmentShaderSource =
        "#version 330 core\n"
        "uniform vec3 u_color;"
        "out vec4 outColor;"
        "in float v_dot;"
        "void main()"
        "{"
        "    vec3 diffuse = vec3(u_color * v_dot);"
        "    vec3 ambient = vec3(0.2, 0.2, 0.2) * u_color;"
        "    outColor = vec4(diffuse + ambient, 1.0);"
        "}";
 
    GLuint shaderProgram = CreateShaderProgram(vertexShaderSource.c_str(), fragmentShaderSource.c_str());
    glUseProgram(shaderProgram);
 
    u_color = glGetUniformLocation(shaderProgram, "u_color");
 
    viewMatrix = glm::lookAt(
        glm::vec3(12, 15, 23), // Camera is at (x, y, z), in World Space
        glm::vec3(3, 2, 4), // and looks at the origin
        glm::vec3(0, 1, 0)  // Head is up (set to 0,-1,0 to look upside-down)
    );
 
    GLint u_lightDir = glGetUniformLocation(shaderProgram, "u_lightDir");
    glm::vec4 lightDir = glm::vec4(2.0f, 10.0f, 4.0f, 0.0f);
    lightDir = glm::normalize(lightDir);
    glm::vec3 lightDir_eye = viewMatrix * lightDir;
    lightDir_eye = glm::normalize(lightDir_eye);
    glUniform3f(u_lightDir, lightDir_eye.x, lightDir_eye.y, lightDir_eye.z);
 
    u_normalMatrix = glGetUniformLocation(shaderProgram, "u_normalMatrix");
 
    projectionMatrix = glm::perspective(glm::radians(30.0f), 1.0f, 0.1f, 1000.0f);
 
    u_mvpMatrix = glGetUniformLocation(shaderProgram, "u_mvpMatrix");
 
    glEnable(GL_DEPTH_TEST);
 
    while (window.isOpen())
    {
        sf::Event ev;
        while (window.pollEvent(ev))
        {
            if (ev.type == sf::Event::Closed)
            {
                window.close();
            }
        }
 
        glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
 
        //modelMatrix = glm::translate(glm::mat4(), glm::vec3(0.0f, 0.0f, 0.0f));
 
        //mvpMatrix = projectionMatrix * viewMatrix * modelMatrix;
        //glUniformMatrix4fv(u_mvpMatrix, 1, false, &mvpMatrix[0][0]);
 
        //normalMatrix = glm::inverse(modelMatrix);
        //normalMatrix = glm::transpose(normalMatrix);
        //glUniformMatrix4fv(u_normalMatrix, 1, false, &normalMatrix[0][0]);
 
        //glUniform3f(u_color, 0.823f, 0.690f, 0.356f);
        //glDrawElements(GL_TRIANGLES, 36, GL_UNSIGNED_SHORT, (GLvoid*)0);
 
        // Cells
        for (size_t row = 0; row < 8; row++)
        {
            for (size_t col = 0; col < 8; col++)
            {
                modelMatrix = glm::translate(glm::mat4(), glm::vec3(col, 0.0f, row));
                mvpMatrix = projectionMatrix * viewMatrix * modelMatrix;
                glUniformMatrix4fv(u_mvpMatrix, 1, false, &mvpMatrix[0][0]);
 
                normalMatrix = glm::inverse(modelMatrix);
                normalMatrix = glm::transpose(normalMatrix);
                glUniformMatrix4fv(u_normalMatrix, 1, false, &normalMatrix[0][0]);
 
                if ((row % 2 == 0 && col % 2 == 0) || (row % 2 != 0 && col % 2 != 0))
                {
                    glUniform3f(u_color, 0.0f, 0.0f, 0.0f);
                }
                else
                {
                    glUniform3f(u_color, 0.823f, 0.690f, 0.356f);
                }
                glDrawElements(GL_TRIANGLES, 36, GL_UNSIGNED_SHORT, (GLvoid*)0);
            }
        }
 
        GLfloat color[] = { 0.368, 0.188, 0.109 };
 
        // Front border
        for (size_t i = 0; i < 8; i++)
        {
            DrawCube(glm::vec3(i, 0.0f, 8.0), color[0], color[1], color[2]);
        }
 
        // Left border
        for (int i = -1; i < 9; i++)
        {
            DrawCube(glm::vec3(-1.0f, 0.0f, i), color[0], color[1], color[2]);
        }
 
        // Back border
        for (size_t i = 0; i < 8; i++)
        {
            DrawCube(glm::vec3(i, 0.0f, -1.0), color[0], color[1], color[2]);
        }
 
        // Right border
        for (int i = -1; i < 9; i++)
        {
            DrawCube(glm::vec3(8.0f, 0.0f, i), color[0], color[1], color[2]);
        }
 
        window.display();
    }
 
    return 0;
}
 
void DrawCube(glm::vec3 pos, GLfloat r, GLfloat g, GLfloat b)
{
    modelMatrix = glm::translate(glm::mat4(), pos);
    mvpMatrix = projectionMatrix * viewMatrix * modelMatrix;
    glUniformMatrix4fv(u_mvpMatrix, 1, false, &mvpMatrix[0][0]);
 
    normalMatrix = glm::inverse(modelMatrix);
    normalMatrix = glm::transpose(normalMatrix);
    glUniformMatrix4fv(u_normalMatrix, 1, false, &normalMatrix[0][0]);
    glUniform3f(u_color, r, g, b);
 
    glDrawElements(GL_TRIANGLES, 36, GL_UNSIGNED_SHORT, (GLvoid*)0);
}
 
GLuint CreateShaderProgram(const GLchar * vertexShaderText, const GLchar * fragmentShaderText)
{
    GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER);
    GLuint fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
    GLuint shaderProgram = glCreateProgram();
 
    glShaderSource(vertexShader, 1, &vertexShaderText, nullptr);
    glCompileShader(vertexShader);
 
    GLint success;
    GLchar infoLog[512];
    glGetShaderiv(vertexShader, GL_COMPILE_STATUS, &success);
    if (!success)
    {
        glGetShaderInfoLog(vertexShader, 512, nullptr, infoLog);
        std::cout << "Vertex Shader compilation failed: " << infoLog << std::endl;
    }
 
    glShaderSource(fragmentShader, 1, &fragmentShaderText, nullptr);
    glCompileShader(fragmentShader);
    glGetShaderiv(fragmentShader, GL_COMPILE_STATUS, &success);
    if (!success)
    {
        glGetShaderInfoLog(fragmentShader, 512, nullptr, infoLog);
        std::cout << "Fragment Shader compilation failed: " << infoLog << std::endl;
    }
 
    glAttachShader(shaderProgram, vertexShader);
    glAttachShader(shaderProgram, fragmentShader);
 
    glLinkProgram(shaderProgram);
 
    glGetProgramiv(shaderProgram, GL_LINK_STATUS, &success);
    if (!success)
    {
        glGetProgramInfoLog(shaderProgram, 512, nullptr, infoLog);
        std::cout << "Program failed to link: " << infoLog << std::endl;
    }
 
    glDeleteShader(vertexShader);
    glDeleteShader(fragmentShader);
 
    return shaderProgram;
}
 
std::string LoadFileContents(const std::string filePath)
{
    std::ifstream file(filePath);
    std::stringstream sstream;
 
    if (!file.is_open())
    {
        std::cout << "Could not find the file: " << filePath << std::endl;
    }
 
    sstream << file.rdbuf();
 
    return sstream.str();
}
6
1 / 1 / 0
Регистрация: 17.08.2018
Сообщений: 1
17.08.2018, 13:20
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
#include <iostream> 
using namespace std;
int main() {
    setlocale(LC_ALL, "rus");
    cout << "Размер= ";
    int a, k = 1, p = 1, v = 0; cin >> a;
    while (k <= a) {
        for (int r = 0; r < 4; r++) {
            for (int k = 0; k < a; ) {
                cout << "*"; k++;
                if (k == a) {
                    for (int l = 0; l < a; l++) {
                        cout << "-";
                    }
                }
            }
 
        }
        cout << endl; k++;
    }
    while (p <= a) {
        for (int r = 0; r < 4; r++) {
            for (int k = 0; k < a; ) {
                cout << "-"; k++;
                if (k == a) {
                    for (int l = 0; l < a; l++) {
                        cout << "*";
                    }
                }
            }
 
        }
        cout << endl; p++;
    }
    while (v <= a) {
        for (int r = 0; r < 4; r++) {
            for (int k = 0; k < a; ) {
                cout << "*"; k++;
                if (k == a) {
                    for (int l = 0; l < a; l++) {
                        cout << "-";
                    }
                }
            }
 
        }
        cout << endl; v++;
    }
    system("pause");
}
1
5 / 5 / 1
Регистрация: 20.07.2018
Сообщений: 24
17.08.2018, 15: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
#include <iostream>
#include <string>
 
int main() {
    const char WHITE = '#';
    const char BLACK = ' ';
    int x,y,w;
    std::cout << "Enter size : ";
    std::cin >> x;
    y = x;
    std::cout << "Enter width of cell : ";
    std::cin >> w;
 
    int c,z,r;
    for(c = 0;c<y;c++) {
        for(z = 0;z<w;z++) {
            for(r = 0;r<x;r++)
                std::cout << (c%2==0 ?r%2==0 ?std::string(w,WHITE):std::string(w,BLACK):r%2==0?std::string(w,BLACK):std::string(w,WHITE));
            std::cout << std::endl;
        }
    }
 
    return 0;
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.08.2018, 15:01
Помогаю со студенческими работами здесь

Король шахматной доски
Король шахматной доски размером 8х8 находится на коне в одной из клеток своего королевства. Он очень озабочен тем, что некоторые клетки его...

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

Обход конём шахматной доски
Приветствую всех форумчан! Нужно решить задачу: обойти конём шахматное поле размером n*n (n&lt;=8), побывав на каждой клетке не более...

Обход шахматной доски конем
Добрый вечер , форумчане. Передо мной стоит проблема написать программу на С++ (задача о ходе конем -довольно распространенная , конь...

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru