Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Как переписать программу используя class? https://www.cyberforum.ru/ cpp-beginners/ thread2373453.html
vector<string> colourOptions = { "0 : Black" , "1 : Blue" , "2 : Green" , "3 : Aqua" , "4 : Red" , "5 : Purple" , ...
Инициализация полей в структуре через его конструктор C++
Необходимо инициализировать массив в структуре нулями если будет вызывается конструктор структуры с параметрами, а в случае вызова без параметров инициализация массива не нужна. Как правильно оформить структуру по первому приведенному примеру, или по второму? И я так подозреваю, что в первом примере массив всегда будет инициализирован нулями, я прав? struct Fakels { int X; char Name =...
C++ Найти произведение значений элементов строк матрицы https://www.cyberforum.ru/ cpp-beginners/ thread2373433.html
ввести с клавиатуры значения матрицы Т (100) (100) произвольного размера nxn , n<=10 найти произведение значений элементов строк искать произведение с верхней строки и заносить в массив В (100) начиная снизу
C++ Найти количество слов, которые начинаются и заканчиваются на гласные буквы Дана строка, состоящая из слов, разделенных пробелами (одним или несколькими). Найти количество слов, которые начинаются и заканчиваются на гласные буквы и вывести эти слова. https://www.cyberforum.ru/ cpp-beginners/ thread2373420.html
C++ Вывести произведение цифр числа записанного в строке
Дана строка, изображающая целое положительное число. вывести произведение цифр этого числа. с++
C++ Функция: найти периметр правильного n-угольника по заданной длине стороны и числу сторон https://www.cyberforum.ru/ cpp-beginners/ thread2373399.html
Помогите написать функцию, которая находит периметр правильного n-угольника по заданной длине стороны и числу сторон. Обратиться для n = 3,4,6,8,12.
C++ В каждой строке матрицы найти и вывести номер первого элемента >=7 в каждой строке найти номер первого элемента >=7 и вывести #include <iostream> #include <ctime> #include <cstdlib> #include <cmath> using namespace std; int main() { srand(time(0)); int a, i,j; https://www.cyberforum.ru/ cpp-beginners/ thread2373390.html C++ Найти подстроку максимальной длины, входящую в каждую строку
Даны две строки. Найти подстроку максимальной длины, входящую в каждую строку.
C++ Кто возмется скомпилировать dll Кто поможет скомпилировать dll файл , есть исходники , нужен исходный файл trayhook.dll x64 bit программы Glass Toast кому интересно , я в этом деле чайник абсолютный , думаю много времени это не займет , спасибо за помощь . https://www.cyberforum.ru/ cpp-beginners/ thread2373344.html C++ Вставка элементов в дек https://www.cyberforum.ru/ cpp-beginners/ thread2373327.html
Всем доброго времени суток. Помогите пожалуйста в написании метода, суть заключается в: 1. Есть шаблон класса, для формирования дека 2. Нужно, перед каждым узлом, содержащим число, значение которого меньше заданного с клавиатуры, добавить новый узел, в который поместить его копию Листинг того, что готово: #include <Windows.h> #include <iostream>
Найти суммарный объем горючего, хранящегося в шарообразных резервуарах C++
Разработать программу для обработки одномерных массивов согласно индивидуальному заданию и вывода результатов обработки на экран . Обработка массивов должна выполнятся в единственном цикле При заданных множествах положительных чисел {R1, R2, ..., Rn} и {H1, H2, ..., Hn} найти суммарный объем горючего, хранящегося в n шарообразных резервуарах , если rk - внутренний радиус k -го...
C++ GoogleTest. Тестирование потоков ввода/вывода для собственных классов https://www.cyberforum.ru/ cpp-beginners/ thread2373315.html
Доброго времени суток, форумчане! У меня есть класс, для которого я написал перегрузку оператора ввода/вывода из потока. Возник вопрос - как с помощью GTest'ов протестировать перегруженный оператор ввода/вывода из потока в C++?
1 / 1 / 0
Регистрация: 07.01.2017
Сообщений: 69
0

Замена массива на вектор и дальнейшая работа с ним - C++ - Ответ 13163839

16.12.2018, 11:50. Показов 1193. Ответов 0
Метки (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток. Столкнулся с проблемой замены массива на вектор. В теории знаю как это должно работать, но на практике мучаюсь 3 день.
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
#ifndef HEADER_HPP
#define HEADER_HPP
 
#include <time.h>
#include <stdlib.h>
#include  <glut.h>
 
const int coundSquarew = 30; //количесвто квадратиков по ширине 
const int coundSquareh = 20; //по высоте
const int scale = 25;//сколько пикселей занимает 1 квадратик
 
int width = scale * coundSquarew; //ширина поля в квадратиках
int height = scale * coundSquareh; //высота поля в квадратиков
 
int direction = 4; //направление
int num = 1; // текущее количество квадратиков змейки
 
struct snakes
{
    int x;
    int y;
}
s[100];// максимальное количество квадратиков в змейке
 
class Fructs
{
public:
    int x;
    int y;
    void New()
    {
        x = rand() % coundSquarew;
        y = rand() % coundSquareh;
    }
 
    void drawApple()
    {
        glColor3f(1.0, 1.0, 0.0);
        glRectf(x*scale, y*scale, (x + 1)*scale, (y + 1)*scale);
    }
}
m[10];
 
#endif //HEADER_HPP
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
#include "header.hpp"
 
void drawField() //рисует клеточки на экране
{
    glColor3f(0.2, 0.5, 0.4);
    glBegin(GL_LINES);
    for (int i = 0; i < width; i += scale) //от 0 до ширины с шагом scale рисуем вертикальные линии
    {
        glVertex2f(i, 0);
        glVertex2f(i, height);
    }
    for (int j = 0; j < height; j += scale) //от 0 до высоты с шагом scale рисуем горизонтальные линии
    {
        glVertex2f(0, j);
        glVertex2f(width, j);
    }
    glEnd();
}
 
void drawSnake()
{
    glColor3f(1.0, 0.8, 0.9); //цвет розовый
    for (int i = 0; i < num; i++) //в цикле от 0 до кол-ва змейки рисуем квадратик
    {
        glRectf(s[i].x*scale, s[i].y*scale, (s[i].x + 1)*scale, (s[i].y + 1)*scale);
    }
}
 
void keyBoard(int key, int a, int b) //принимаем ключ  
{
    switch (key)
    {
    case 101: //вверх
        direction = 0;
        break;
    case 102: //направо
        direction = 2;
        break;
    case 100: //налево
        direction = 1;
        break;
    case 103: //вниз
        direction = 3;
        break;
    }
}
 
void step()
{
    for (int i = num; i > 0; --i)  //перемещаем тело на позицию следующего элемента
    {
        s[i].x = s[i - 1].x;
        s[i].y = s[i - 1].y;
    }
 
    if (direction == 0) s[0].y += 1; //смотрим какая клавиша нажата и перещеаем голов
    if (direction == 1) s[0].x -= 1;
    if (direction == 2) s[0].x += 1;
    if (direction == 3) s[0].y -= 1;
 
    for (int i = 0; i < 10; i++) //
    {
        if ((s[0].x == m[i].x) && (s[0].y == m[i].y)) // проверяемесли головной 0 эл. равен положению яблока тогда
        {
            num++; // количество яблок увеличится
            m[i].New(); // вызывается функция зачистки яблока и создания нового яблока
        }
    }
 
    if (s[0].x > coundSquarew) //проверка на выход за границу и сразу меняем направление
    {
        direction = 1;
    };
 
    if (s[0].x < 0)
    {
        direction = 2;
    };
 
    if (s[0].y > coundSquareh)
    {
        direction = 3;
    };
 
    if (s[0].y < 0)
    {
        direction = 0;
    };
 
    for (int i = 1; i < num; i++) // цикл на столкновение с хвостом
    {
        if ((s[0].x == s[i].x) && (s[0].y == s[i].y))   // если головной элемент столкнулся с хвостом
        {
            num = i; //сокращаем до того элемента до которого столкнулись
        }
    };
};
 
void display()
{
 
    glClear(GL_COLOR_BUFFER_BIT);
    for (int i = 0; i < 10; i++)
    {
        m[i].drawApple();
    }
    drawField();
    drawSnake();
    glFlush();
}
 
void timer(int = 0)
{
    display();
 
    step();
 
    glutTimerFunc(70, timer, 0);
}
 
int main(int argc, char **argv)
{
    for (int i = 0; i < 10; i++)
    {
        m[i].New();
    };
 
    s[0].x = 0; //начальная позиция змейки
    s[0].y = 0;
 
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
    glutInitWindowSize(width, height); //создаем экраn
    glutCreateWindow("Snake");
    glClearColor(0.0, 0.3, 0.2, 0.5);  //цвет фона
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluOrtho2D(0, width, 0, height);
 
    glutDisplayFunc(display);
    glutTimerFunc(50, timer, 0);
    glutSpecialFunc(keyBoard);
 
    glutMainLoop();
}
это начальная прога с массивами для змейки и фруктов. Также покажу вам мою версию, только пожалуйста сильно не бейте
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
#include "header.hpp"
 
void drawField() //рисует клеточки на экране
{
    glColor3f(0.2, 0.5, 0.4);
    glBegin(GL_LINES);
    for (int i = 0; i < width; i += scale) //от 0 до ширины с шагом scale рисуем вертикальные линии
    {
        glVertex2f(i, 0);
        glVertex2f(i, height);
    }
    for (int j = 0; j < height; j += scale) //от 0 до высоты с шагом scale рисуем горизонтальные линии
    {
        glVertex2f(0, j);
        glVertex2f(width, j);
    }
    glEnd();
}
 
void drawSnake()
{
    glColor3f(1.0, 0.8, 0.9); //цвет розовый
    for (int i = 0; i < num; i++) //в цикле от 0 до кол-ва змейки рисуем квадратик
    {
        glRectf(s[i].x*scale, s[i].y*scale, (s[i].x + 1)*scale, (s[i].y + 1)*scale);
    }
}
 
void keyBoard(int key, int a, int b) //принимаем ключ  
{
    switch (key)
    {
    case 101: //вверх
        direction = 0;
        break;
    case 102: //направо
        direction = 2;
        break;
    case 100: //налево
        direction = 1;
        break;
    case 103: //вниз
        direction = 3;
        break;
    }
}
 
void step(std::vector<std::vector<Fructs>> &apple)
{
    for (int i = num; i > 0; --i)  //перемещаем тело на позицию следующего элемента
    {
        s[i].x = s[i - 1].x;
        s[i].y = s[i - 1].y;
    }
 
    if (direction == 0) s[0].y += 1; //смотрим какая клавиша нажата и перещеаем голов
    if (direction == 1) s[0].x -= 1;
    if (direction == 2) s[0].x += 1;
    if (direction == 3) s[0].y -= 1;
 
    std::for_each(apple.begin(), apple.end(), [](std::vector<Fructs> &apples)
    {
        if ((s[0].x == apples.operator[].x) && (s[0].y == apples.operator[].y)) // проверяемесли головной 0 эл. равен положению яблока тогда
        {
            num++; // количество яблок увеличится
            apples.operator[]->Fructs::drawApple; // вызывается функция зачистки яблока и создания нового яблока
        };
    });
 
    if (s[0].x > coundSquarew) //проверка на выход за границу и сразу меняем направление
    {
        direction = 1;
    };
 
    if (s[0].x < 0)
    {
        direction = 2;
    };
 
    if (s[0].y > coundSquareh)
    {
        direction = 3;
    };
 
    if (s[0].y < 0)
    {
        direction = 0;
    };
 
    for (int i = 1; i < num; i++) // цикл на столкновение с хвостом
    {
        if ((s[0].x == s[i].x) && (s[0].y == s[i].y))   // если головной элемент столкнулся с хвостом
        {
            num = i; //сокращаем до того элемента до которого столкнулись
        }
    };
};
 
void display(std::vector<std::vector<Fructs>> &apple)
{
 
    glClear(GL_COLOR_BUFFER_BIT);
    std::for_each(apple.begin(), apple.end(), [](std::vector<Fructs> &apples)
    {
        apples.operator[]->Fructs::drawApple();
    });
    drawField();
    drawSnake();
    glFlush();
}
 
//void timer(int = 0)
//{
    //display();
//
    //step();
 
    //glutTimerFunc(70, timer, 0);
//}
 
int main(int argc, char **argv)
{
    std::vector<std::vector<Fructs>> apple(10);
    std::for_each(apple.begin(), apple.end(), [](std::vector<Fructs> &apples)
    {
        apples.operator[]->Fructs::New();
    });
 
    s[0].x = 0; //начальная позиция змейки
    s[0].y = 0;
 
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
    glutInitWindowSize(width, height); //создаем экраn
    glutCreateWindow("Snake");
    glClearColor(0.0, 0.3, 0.2, 0.5);  //цвет фона
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluOrtho2D(0, width, 0, height);
 
    glutDisplayFunc();
    glutTimerFunc(50, timer, 0);
    glutSpecialFunc(keyBoard);
 
    glutMainLoop();
}
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
#include  <glut.h>
#include <vector>
#include <algorithm>
 
const int coundSquarew = 30; //количесвто квадратиков по ширине 
const int coundSquareh = 20; //по высоте
const int scale = 25;//сколько пикселей занимает 1 квадратик
 
int width = scale * coundSquarew; //ширина поля в квадратиках
int height = scale * coundSquareh; //высота поля в квадратиков
 
int direction = 4; //направление
int num = 1; // текущее количество квадратиков змейки
 
struct snakes
{
    int x;
    int y;
}s[100];// максимальное количество квадратиков в змейке
 
class Fructs
{
public:
    int x;
    int y;
 
    void New();
    void drawApple();
};
 
#endif //HEADER_HPP
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include "header.hpp"
 
void Fructs::New()
{
    x = rand() % coundSquarew;
    y = rand() % coundSquareh;
}
 
void Fructs::drawApple()
{
    glColor3f(1.0, 1.0, 0.0);
    glRectf(x*scale, y*scale, (x + 1)*scale, (y + 1)*scale);
}
собственно здесь уже появились проблемы, и в целом мне кажется я сильно напортачил(

Вернуться к обсуждению:
Замена массива на вектор и дальнейшая работа с ним C++
0
Заказать работу у эксперта
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.12.2018, 11:50
Готовые ответы и решения:

Считывание с бинарного файла большого массива и дальнейшая работа с ним
Здравствуйте. Подскажите пожалуйста. В общем передо мной стоит задача считать информацию из...

Результат select в массив и дальнейшая работа с ним
Выбираю с помощью mysql все товары с таблицы, заношу все в постоянный массив. Далее хочу работать с...

Динамическое добавление компонента в IDesignerHost и дальнейшая с ним работа
Добрый вечер!!! Подскажите пожалуйста, каким образом можно добавить Button в созданную мною форму....

Класс Вектор и работа с ним
Доброго времени суток! Решаю задания из учебника Блинова &quot;Java.Промышленное программирование&quot;....

0
16.12.2018, 11:50
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.12.2018, 11:50
Помогаю со студенческими работами здесь

Создание двумерного массива и работа с ним
создать двумерный массив размерностью (n,n),отсортировать таким образом,что бы поменялись элементы...

Заполнение двумерного массива и работа с ним
Здравствуйте!! Подскажите, как работать с массивами???

Передача двумерного массива в функцию и работа с ним
Имею вызов: fillSquareArrayRandom(&amp;arr, arrMax, arrMax1); и описание: void...

обявление двумерного ассоциативного массива и работа с ним
как сделать как написано в subj или посоветуйте доку где про это толково написано

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