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

Создание игр в текстовом режиме - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Подскажите библиотеку GUI, реализующую графический интерфейс http://www.cyberforum.ru/cpp-beginners/thread1098407.html
Доброй ночи. Подскажите, пожалуйста, лёгкую и простую библиотеку реализующую графический интерфейс. Сам интерфейс примитивен - пара кнопок и диалоговых окон. Это всё, что мне нужно от библиотеки. ОС...
C++ Выведение на экран фигуры, которая изображает множество точек, которые удовлетворяют неравенству Исправьте, пожалуйста, ошибки. Задача. Выведение на экран фигуры, которая изображает множество точек, которые удовлетворяют неравенство: x^2+y^2<=2(abs(x)+abs(y)) #include <math.h> #include... http://www.cyberforum.ru/cpp-beginners/thread1098406.html
C++ Как разрешить ввод только чисел типа int?
Доброго времени суток. Подскажите, пожалуйста, как разрешить ввод только чисел типа int. Преподаватель очень любит заваливать на этом, введя например букву, там где нужно число. Очень важно, чтобы...
Некорректно работает вывод вещественных чисел в массиве C++
#include "stdafx.h" #include <conio.h> #include <stdio.h> void ReadArray(double a)
C++ Вывести информацию в виде таблицы http://www.cyberforum.ru/cpp-beginners/thread1098387.html
помогите, после введения данных , в конце программами должна выводится инф. в виде таблицы #include <stdio.h> #include <iostream> #include <stdlib.h> #include <time.h> #include <conio.h>...
C++ Добавить в конец программы строчку cout << "Your number is", не задев цикл Здравстуйте! Подскажите, пожалуйста, как добавить в конец программы cout << "Your number is" не задев цикл. #include <iostream> #include <cstdio> #include <conio.h> using namespace std; int... подробнее

Показать сообщение отдельно
Bretbas
Каждому свое
344 / 114 / 31
Регистрация: 05.08.2013
Сообщений: 1,220
Завершенные тесты: 1
23.02.2014, 00:42  [ТС]
Так, наконец нашел время все поправить в лучшую сторону. По вашим комментарием собрал вот это:

Файл Interface.h
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
#ifndef INTERFACE_H_
#define INTERFACE_H_
 
#include <iostream>
#include <vector>
#include <string>
 
#include "msoftcon.h"
 
 
/* ## Cтруктура списка интерфейса ## */
struct ListMenu 
{
    vector<wstring> item;
};
 
 
/* ## Абстрактный класс интерфейса ## */
class Interface
{
protected:
    int current_menu() const;                       // Получение текущего списка меню
    int current_cursor() const;                     // Получение каретки текущего пункта меню
    static void next_menu();                        // Следующий список меню
    static void back_menu();                        // Предыдущий список меню
    void add_list_menu(wstring);                    // Добавить пункт в список меню
    void clear_list_menu();                         // Очистить список меню
    int size_list_menu() const;                         // Размер списка меню
    void draw_menu();                               // Прорисовка списка меню
 
private:
    static int number_current_menu_;                // Текущий список меню
    int current_cursor_;                            // Каретка текущего пункта меню
    int x_, y_;                                     // Координаты прорисовки списка на экране
    static ListMenu *menu_;                         // Структура списка меню
 
public:
    Interface(int,int);                             // Конструктор
    virtual ~Interface() = 0;                       // Деструктор
 
    virtual void run() = 0;                         // Запуск статической системы меню
    virtual void run(ListMenu*) = 0;                // Запуск динамической системы меню
};
 
#endif  INTERFACE_H_

Файл Inteface.cpp
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
#include "Interface.h"
 
 
int Interface :: number_current_menu_ = 1;
ListMenu* Interface :: menu_ = NULL;
 
 
/* ## Конструктор ## */
Interface :: Interface(int x,int y) : x_(x),y_(y)
{ 
    init_graphics();
    menu_ = new ListMenu;
}
 
 
/* ## Деструктор ## */
Interface :: ~Interface()
{ 
    delete menu_;
}
 
 
/* ## Следующий список меню ## */
void Interface :: next_menu()
{
    number_current_menu_++;
}
 
 
/* ## Предыдущий список меню ## */
void Interface :: back_menu()
{
    number_current_menu_--;
}
 
 
/* ## Получение текущего списка меню ## */
int Interface :: current_menu() const
{
    return number_current_menu_;
}
 
 
/* ## Получение каретки текущего пункта меню ## */
int Interface :: current_cursor() const
{
    return current_cursor_;
}
 
 
/* ## Добавить пункт в список меню ## */
void Interface :: add_list_menu(wstring item)
{
    menu_ -> item.push_back(item);
}
 
 
/* ## Очистить список меню ## */
void Interface :: clear_list_menu()
{
    menu_ -> item.clear();
}
 
 
/* ## Размер списка меню ## */
int Interface :: size_list_menu() const
{
    return menu_ -> item.size();
}
 
 
/* ## Прорисовка списка меню ## */
void Interface :: draw_menu()
{
    if ( (menu_ == nullptr) || (menu_ -> item.empty()) )
    {
        clear_screen();
        cout << "Check your list menu!It is empty!";
        _getch();
        exit(0);
    }
 
    set_color(cWHITE,cBLACK);
    clear_screen();
 
    for(unsigned int i = 0; i < menu_ -> item.size(); i++) 
    {
        set_cursor_pos(x_ + 4,y_ + i);
        wcout << menu_ -> item[i] << endl;
    }
 
    set_cursor_pos(x_,y_);
    current_cursor_ = 1;
    char c;
 
    do
    {
        for(int i = 0; i < size_list_menu(); i++)
        {
            if(i == current_cursor_ - 1)
            { set_color(cBLACK,cYELLOW); }
            else
            { set_color(cBLACK,cBLUE); }
 
            set_cursor_pos(x_,y_ + i);
            cout << "->";
        }
 
        c = _getch();
 
        switch(c)
        {
        case 72: if(current_cursor_ != 1) { current_cursor_--; } break;
        case 80: if(current_cursor_ != size_list_menu()) { current_cursor_++; } break;
        }
    }
    while(c != 13);
 
    clear_list_menu();
}
 
 
/* ## Запуск динамической системы меню ## */
void Interface :: run(ListMenu *list)
{
    if ( (list == nullptr) || (list -> item.empty()) )
    {
        clear_screen();
        cout << "Check your list menu!It is empty!";
        _getch();
        exit(0);
    }
}

Файл InterfaceChild.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#ifndef INTERFACECHILD_H_
#define INTERFACECHILD_H_
 
#include "Interface.h"
 
 
/* ## Производный класс от класса интерфейса ## */
class InterfaceChild : public Interface
{
public:
    InterfaceChild(int,int);        // Конструктор
    ~InterfaceChild();              // Деструктор
 
    void run();                     // Запуск статической системы меню
    void run(ListMenu*);            // Запуск динамической системы меню
};
 
#endif INTERFACECHILD_H_

Файл InterfaceChild.cpp
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
#include "InterfaceChild.h"
 
 
/* ## Конструктор ## */
InterfaceChild :: InterfaceChild(int x,int y) : Interface(x,y)
{ }
 
 
/* ## Деструктор ## */
InterfaceChild :: ~InterfaceChild()
{ }
 
 
/* ## Запуск системы ## */
void InterfaceChild :: run()
{
    set_color(cWHITE,cBLACK);
 
    switch(current_menu())
    {
    case 1: // Первое меню - START  OPTION  EXIT
        {
            add_list_menu(L"START");
            add_list_menu(L"OPTION");
            add_list_menu(L"EXIT");
 
            draw_menu();
 
            switch(current_cursor())
            {
            case 1:
                {
                    clear_screen();
                    cout << "hello world";
                    _getch();
                }
            break;
 
            case 2:
                {
                    next_menu();
                }
            break;
 
            case 3:
                {
                    exit(0);
                }
            break;
            }
        }
    break;
 
    case 2: // Второе меню - DINAMIC CREATE MENU   MESSAGE   BACK
        {
            add_list_menu(L"DINAMIC CREATE MENU");
            add_list_menu(L"MESSAGE");
            add_list_menu(L"BACK");
 
            draw_menu();
 
            switch(current_cursor())
            {
            case 1:
                {
                    clear_screen();
                    ListMenu* DinamicMenu = new ListMenu;
                    wstring item;
 
                    for(int i = 0; i < 6; i++)
                    {
                        cout << "Input item of menu";
                        wcin >> item;
                        DinamicMenu -> item.push_back(item);
                    }
 
                    run(DinamicMenu);
                }
            break;
 
            case 2:
                {
                    clear_screen();
                    cout << "I Love CyberForum";
                    _getch();
                    back_menu();
                }
            break;
 
            case 3:
                {
                    back_menu();
                }
            break;
            }
        }
    break;
 
    }
 
    run(); // Рекурсивно вызываем эту же функцию
}
 
 
void InterfaceChild :: run(ListMenu *list)
{
    Interface :: run(list);
    set_color(cWHITE,cBLACK);
 
    for(unsigned int i = 0; i < list -> item.size(); i++)
    {
        add_list_menu(list -> item[i]);                 // Инициализируем список с формальным параметром
    }
 
    draw_menu();                                        // Прорисовка списка меню
 
    switch(current_cursor())
    {
    case 1: back_menu(); break;
    case 2: back_menu(); break;
    case 3: back_menu(); break;
    }
}

Ну и конечно же сам main.cpp
C++
1
2
3
4
5
6
7
8
9
10
#include "InterfaceChild.h"
 
 
int main()
{
    InterfaceChild *inter = new InterfaceChild(38,10);
    inter -> run();
 
    return 0;
}

Вроде все, ничего не забыл) Ну теперь жду ваших новых комментариев по новому "улучшенному коду". Что скажете? Так оставлять или можно что-то еще изменить?)
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru