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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Подскажите библиотеку GUI, реализующую графический интерфейс http://www.cyberforum.ru/cpp-beginners/thread1098407.html
Доброй ночи. Подскажите, пожалуйста, лёгкую и простую библиотеку реализующую графический интерфейс. Сам интерфейс примитивен - пара кнопок и диалоговых окон. Это всё, что мне нужно от библиотеки. ОС - Windows, компилятор - VC++. Спасибо.
C++ Выведение на экран фигуры, которая изображает множество точек, которые удовлетворяют неравенству Исправьте, пожалуйста, ошибки. Задача. Выведение на экран фигуры, которая изображает множество точек, которые удовлетворяют неравенство: x^2+y^2<=2(abs(x)+abs(y)) #include <math.h> #include <bios.h> int x0, y0; void main() int x, y; int gdriver - DETECT, gmode, errorcode; initgraph (&gdriver, &gmode, "g:\\bc31\\bg1"); http://www.cyberforum.ru/cpp-beginners/thread1098406.html
C++ Как разрешить ввод только чисел типа int?
Доброго времени суток. Подскажите, пожалуйста, как разрешить ввод только чисел типа int. Преподаватель очень любит заваливать на этом, введя например букву, там где нужно число. Очень важно, чтобы код был негромоздким. #include <iostream> #include <cstdio> #include <conio.h> using namespace std; int roman (int,int,char); int main()
Некорректно работает вывод вещественных чисел в массиве 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> #include <locale.h> using namespace std; int main (){
C++ Добавить в конец программы строчку cout << "Your number is", не задев цикл Здравстуйте! Подскажите, пожалуйста, как добавить в конец программы cout << "Your number is" не задев цикл. #include <iostream> #include <cstdio> #include <conio.h> using namespace std; int roman (int,int,char); int main() { подробнее

Показать сообщение отдельно
Bretbas
22 / 17 / 1
Регистрация: 05.08.2013
Сообщений: 467
Завершенные тесты: 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;
}

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