Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/21: Рейтинг темы: голосов - 21, средняя оценка - 4.71
859 / 448 / 112
Регистрация: 06.07.2013
Сообщений: 1,491
1

Поздравления

29.12.2017, 09:53. Показов 3852. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет, сегодня у многих крайний рабочий день перед праздниками, почти 2 недельки отдохнем от программирования!
Поздравляю всех C++, С, Borland C++ программистов с наступающим Новым Годом
Чтобы код у нас всегда компилился, а проекты собирались, и везде и всегда нам сопутствовала степень двойки!

Сделал маленькую программку, обязательно выставите у себя правильные размеры консоли, а то все поедет -
C++
1
2
#define WIDTH 120
#define HEIGHT 30
Кликните здесь для просмотра всего текста
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
#include <thread>
#include <iostream>
#include <list>
#include <cstdlib>
 
// УСТАНАВЛИВАЕМ ПРАВИЛЬНЫЕ РАЗМЕРЫ СВОЕЙ КОНСОЛИ (иначе все поедет)
#define WIDTH 120
#define HEIGHT 30
 
class Surface
{
    const int width = WIDTH;
    const int height = HEIGHT;
    char data[WIDTH * HEIGHT + 1];
 
public:
 
    Surface()
    {
        std::fill(data, data + WIDTH * HEIGHT, ' ');
        data[WIDTH * HEIGHT] = 0;
    }
 
    void clear(char c = ' ')
    {
        std::fill(data, data + WIDTH * HEIGHT, c);
    }
 
    void draw(char c, int x, int y)
    {
        data[y * WIDTH + x] = c;
    }
 
    void draw(char c, int index)
    {
        data[index] = c;
    }
 
    void draw(char* data, int width, int height, int x, int y)
    {
        for(int xw = 0; xw < width; ++xw)
            for(int yh = 0; yh < height; ++yh)
                draw(data[yh * width + xw], x + xw, y + yh);
    }
 
    char getData(int x, int y)
    {
        return data[y * WIDTH + x];
    }
 
    void blit()
    {
        std::cout << data;
    }
 
    void blit(Surface* surface)
    {
        int i = 0;
        for(auto d : data)
        {
            if(d != ' ')
                surface->draw(d, i);
            ++i;
        }
    }
};
 
class Emitter
{
    class Particle
    {
        float x;
        float y;
        float speed;
 
    public:
 
        Particle(int x, int y, float speed) : x(x), y(y), speed(speed) {}
 
        void update(float dt)
        {
            y += speed * dt;
        }
 
        void draw(Surface* s)
        {
            s->draw('*', x, y);
        }
 
        bool isDead(int groundHeight, Surface* surfAccumulated)
        {
            if(y < groundHeight - 1)
            {
                if(surfAccumulated->getData(x, y + 1) != ' ')
                    return true;
            }
 
            if(y >= groundHeight - 1)
                return true;
 
            return false;
        }
    };
 
    std::list<Particle*> particles;
    Surface* surfAccumulated;
 
public:
 
    Emitter(Surface* surfAccumulated) : surfAccumulated(surfAccumulated) {}
 
    void update(float dt)
    {
        std::list<Particle*> toRemove;
 
        if(rand() % 100 < 25)
        {
            Particle* p = new Particle(rand() % WIDTH, 0, rand() % 100 + 50);
            particles.push_back(p);
        }
 
        for(auto p : particles)
        {
            p->update(dt);
            if(p->isDead(HEIGHT, surfAccumulated))
                toRemove.push_back(p);
        }
 
        for(auto p : toRemove)
        {
            p->draw(surfAccumulated);
            particles.remove(p);
            delete p;
        }
    }
 
    void draw(Surface* s)
    {
        for(auto p : particles)
            p->draw(s);
    }
};
 
void clear()
{
    system("cls || clear");
}
 
int main()
{
    Surface surf;
    Surface surfAccumulated;
    Emitter emitter(&surfAccumulated);
 
    char* fir =
        "   ^   "
        "  / \\  "
        " / _ \\ "
        "  / \\  "
        " /   \\ "
        "/__ __\\"
        "   T   "
        "   I   ";
 
    char* stars = new char[WIDTH * HEIGHT];
    std::fill(stars, stars + WIDTH * HEIGHT - 1, ' ');
 
    for(int y=0;y<HEIGHT / 3 * 2; ++y)
        for(int x = 0; x < WIDTH; ++x)
            if(rand() % 100 < 2)
                stars[y * WIDTH + x] = '.';
 
    surfAccumulated.draw(fir, 7, 8, WIDTH / 2, HEIGHT - 8);
 
    while(true)
    {
        clear();
        surf.clear();
 
        surf.draw(stars, WIDTH, HEIGHT, 0, 0);
 
        emitter.update(10.0f / 1000.0f);
        emitter.draw(&surf);
 
        surfAccumulated.blit(&surf);
        surf.blit();
 
        std::this_thread::sleep_for(std::chrono::milliseconds(10));
    }
 
    return 0;
}


По правилам форума задам вопрос - как сделать кроссплатформенно, чтобы оно не моргало, и кроссплатформенно задать размеры окна консоли? ( наверное никак )
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.12.2017, 09:53
Ответы с готовыми решениями:

Написать программу, которая запрашивает у пользователя его имя, фамилию и отчество, и выводит поздравления
Написать программу, которая запрашивает у пользователя его имя, фамилию и отчество, и выводит...

Поздравления от Яндекс
Уважаемые коллеги, умные люди, хочу искренне поздравить Вас с наступающим Новым Годом, пожелать Вам...

Поздравления в Паскаль
Все привет! Помогите пожалуйста написать программу которая выводит на экран поздравления с днём...

Поздравления и пожелания Янлексу на НГ
Ну что, пару дней осталось до НГ. Пишем свои поздравления и пожелания любимому Яндексу!

1
Любитель чаепитий
3742 / 1798 / 566
Регистрация: 24.08.2014
Сообщений: 6,016
Записей в блоге: 1
29.12.2017, 10:03 2
Цитата Сообщение от Raali Посмотреть сообщение
как сделать кроссплатформенно, чтобы оно не моргало, и кроссплатформенно задать размеры окна консоли?
в винде, вроде, нельзя размер консоли по горизонтали менять.
чтобы не моргало можно использовать pdcurses(Win)/ncurses(*nix), но там надо будет заголовки для разных платформ правильно разруливать.

P.S. и вас с Новым годом.
1
29.12.2017, 10:03
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.12.2017, 10:03
Помогаю со студенческими работами здесь

Поздравления с днем защитника Отечества!
Двадцать третьего февраля Поздравляем мужчин мы не зря: Так надежно мужское плечо. Поздравляем...

Сюжет для мульт-поздравления
Помогите плиз срочно придумать сюжет для коротенького мультика секунд на 40 максимум 60. Хочу...

А че не видно поздравления Oken с Днем рождения?!
Ленка, поздравляем! ;)

Код для поздравления к дню рождения
Здравствуйте, бескорыстные программисты.:) Помогите, пожалуйста, порадовать человека, который...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru