Форум программистов, компьютерный форум 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
14.03.2014, 23:53  [ТС]     Создание игр в текстовом режиме
Короче разделил я на 2 сущности мой класс меню.В итоге вот что получил:

Файл Menu.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
46
47
48
49
50
51
52
53
54
55
#ifndef MENU_H_
#define MENU_H_
 
#include <iostream>
#include <vector>
#include <string>
#include <conio.h>
#include <windows.h>
 
 
class MenuView;
 
 
/* ## Класс меню - МОДЕЛЬ ## */
class MenuModel
{
private:
    int number_current_menu_;                           // Номер текущего списка меню
    int current_cursor_;                                // Каретка текущего пункта меню
    int x_, y_;                                         // Координаты прорисовки списка на экране
    static std :: vector<std :: wstring> list_menu_;    // Список меню
 
public:
    MenuModel(int,int);                                 // Конструктор
    ~MenuModel();                                       // Деструктор
 
    void add_list_menu(std :: wstring);                 // Добавить пункт в список меню
    int current_menu() const;                           // Получение номера текущего списка меню
    int current_cursor() const;                         // Получение каретки текущего пункта меню
    void next_menu();                                   // Следующий список меню
    void back_menu();                                   // Предыдущий список меню
 
    friend MenuView;
};
 
 
 
/* ## Класс меню - ПРЕДСТАВЛЕНИЕ ## */
class MenuView
{
private:
    MenuModel *menu_model_;                         // Модель меню
    static HANDLE h_console_;                       // Дескриптор окна консоли
 
    void set_cursor_pos_(int x,int y);              // Установка позиции курсора
    void clear_screen_();                           // Стирание экрана
 
public:
    MenuView(MenuModel*);                           // Конструктор                      
    ~MenuView();                                    // Деструктор
 
    void draw_menu();                               // Прорисовка списка меню
};
 
#endif  MENU_H_
Файл Menu.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
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
#include "Menu.h"
 
 
std :: vector<std :: wstring> MenuModel :: list_menu_;
 
 
/* ## Конструктор ## */
MenuModel :: MenuModel(int x,int y) : x_(x),y_(y)
{
    number_current_menu_ = 1;
}
 
 
/* ## Деструктор ## */
MenuModel :: ~MenuModel()
{ }
 
 
/* ## Следующий список меню ## */
void MenuModel :: next_menu()
{
    if(number_current_menu_ != list_menu_.size())
    { number_current_menu_++; }
}
 
 
/* ## Предыдущий список меню ## */
void MenuModel :: back_menu()
{
    if(number_current_menu_ != 0)
    { number_current_menu_--; }
}
 
 
/* ## Получение текущего списка меню ## */
int MenuModel :: current_menu() const
{
    return number_current_menu_;
}
 
 
/* ## Получение каретки текущего пункта меню ## */
int MenuModel :: current_cursor() const
{
    return current_cursor_;
}
 
 
/* ## Добавить пункт в список меню ## */
void MenuModel :: add_list_menu(std :: wstring item)
{
    list_menu_.push_back(item);
}
 
 
HANDLE MenuView :: h_console_ = NULL;
 
 
/* ## Конструктор ## */
MenuView :: MenuView(MenuModel *menu_model)
{
    menu_model_ = menu_model;
 
    COORD console_size = {80,25};
 
    h_console_ = CreateFile( L"CONOUT$",
                            GENERIC_WRITE |
                            GENERIC_READ,
                            FILE_SHARE_READ |
                            FILE_SHARE_WRITE,
                            0L,
                            OPEN_EXISTING,
                            FILE_ATTRIBUTE_NORMAL,
                            0L );
 
    SetConsoleScreenBufferSize(h_console_,console_size);
 
    SetConsoleTextAttribute(h_console_,(WORD)((0<<4) | 15));
 
    clear_screen_();
}
 
 
/* ## Деструктор ## */
MenuView :: ~MenuView()
{ }
 
 
/* ## Стирание экрана ## */
void MenuView :: clear_screen_()
{
    set_cursor_pos_(1,25);
 
    for(int j = 0;j < 25;j++)
    { std :: cout << "\n"; }
 
    set_cursor_pos_(1,1);
}
 
 
/* ## Установка позиции курсора ## */
void MenuView :: set_cursor_pos_(int x,int y)
{
    COORD cursor_pos;
    cursor_pos.X = x - 1;
    cursor_pos.Y = y - 1;
 
    SetConsoleCursorPosition(h_console_,cursor_pos);
}
 
 
/* ## Прорисовка списка меню ## */
void MenuView :: draw_menu()
{
    if (menu_model_ -> list_menu_.empty())
    {
        clear_screen_();
        std :: cout << "Check your list menu!It is empty!";
        _getch();
        exit(0);
    }
 
    SetConsoleTextAttribute(h_console_,(WORD)((15<<4) | 0));
    clear_screen_();
 
    for(unsigned int i = 0; i < menu_model_ -> list_menu_.size(); i++) 
    {
        set_cursor_pos_(menu_model_ -> x_ + 4,menu_model_ -> y_ + i);
        std :: wcout << menu_model_ -> list_menu_[i] << std :: endl;
    }
 
    set_cursor_pos_(menu_model_ -> x_,menu_model_ -> y_);
    menu_model_ -> current_cursor_ = 1;
    char c;
 
    do
    {
        for(unsigned int i = 0; i < menu_model_ -> list_menu_.size(); i++)
        {
            if(i == menu_model_ -> current_cursor_ - 1)
            { SetConsoleTextAttribute(h_console_,(WORD)((14<<4) | 0)); }
            else
            { SetConsoleTextAttribute(h_console_,(WORD)((9<<4) | 0)); }
 
            set_cursor_pos_(menu_model_ -> x_,menu_model_ -> y_ + i);
            std :: cout << "->";
        }
 
        c = _getch();
 
        switch(c)
        {
        case 72: if (menu_model_ -> current_cursor_ != 1)
                 { menu_model_ -> current_cursor_--; }
        break;
        case 80: if (menu_model_ -> current_cursor_ != menu_model_ -> list_menu_.size())
                 { menu_model_ -> current_cursor_++; } 
        break;
        }
    }
    while(c != 13);
 
    menu_model_ -> list_menu_.clear();
}
Файл Grafic.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
#ifndef GRAFIC_H_
#define GRAFIC_H_
 
#include <iostream>
#include <windows.h>
 
 
/* ## Список перечисления ## */
enum color
{
    cBLACK=0, cDARK_BLUE=1, cDARK_GREEN=2, DARK_CYAN=3, cDARK_RED=4, cDARK_MAGENTA=5, cBROWN=6, cLIGHT_GRAY=7,
    cDARK_GRAY=8, cBLUE=9, cGREEN=10, cCYAN=11, cRED=12, cMAGENTA=13, cYELLOW=14, cWHITE=15
};
 
 
/* ## Класс графики ## */
class Grafic
{
private:
    static HANDLE h_console_;                       // Дескриптор окна консоли
 
public:
    Grafic();                                       // Конструктор
    ~Grafic();                                      // Деструктор
 
    void set_color(color fg,color bg = cBLACK);     // Установка цвета
    void set_cursor_pos(int x,int y);               // Установка позиции курсора
    void clear_screen();                            // Стирание экрана
};
 
#endif GRAFIC_H_
Файл Grafic.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
#include "Grafic.h"
 
 
HANDLE Grafic :: h_console_ = NULL;
 
 
Grafic :: Grafic()
{
    COORD console_size = {80,25};
 
    h_console_ = CreateFile( L"CONOUT$",
                            GENERIC_WRITE |
                            GENERIC_READ,
                            FILE_SHARE_READ |
                            FILE_SHARE_WRITE,
                            0L,
                            OPEN_EXISTING,
                            FILE_ATTRIBUTE_NORMAL,
                            0L );
 
    SetConsoleScreenBufferSize(h_console_,console_size);
 
    SetConsoleTextAttribute(h_console_,(WORD)((0<<4) | 15));
 
    clear_screen();
}
 
 
Grafic :: ~Grafic()
{ }
 
 
void Grafic :: set_color(color foreground,color background)
{
    SetConsoleTextAttribute(h_console_,(WORD)((background<<4) | foreground));
}
 
 
void Grafic :: set_cursor_pos(int x,int y)
{
    COORD cursor_pos;
    cursor_pos.X = x - 1;
    cursor_pos.Y = y - 1;
 
    SetConsoleCursorPosition(h_console_,cursor_pos);
}
 
 
void Grafic :: clear_screen()
{
    set_cursor_pos(1,25);
 
    for(int j = 0;j < 25;j++)
    { std :: cout << "\n"; }
 
    set_cursor_pos(1,1);
}
Ну и файл main.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
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
#include <iostream>
#include <conio.h>
 
#include "Menu.h"
#include "Grafic.h"
 
using namespace std;
 
int main()
{
    Grafic grafic;
    MenuModel menu_model(38,12);
    MenuView menu_view(&menu_model);
    
    for(;;)
    {
        switch(menu_model.current_menu())
        {
        case 1: // Первое меню - START  OPTION  EXIT
            {
                menu_model.add_list_menu(L"START");
                menu_model.add_list_menu(L"OPTION");
                menu_model.add_list_menu(L"EXIT");
 
                menu_view.draw_menu();
 
                switch(menu_model.current_cursor())
                {
                case 1:
                    {
                        grafic.clear_screen();
                        cout << "hello world";
                        _getch();
                    }
                break;
 
                case 2:
                    {
                        menu_model.next_menu();
                    }
                break;
 
                case 3:
                    {
                        exit(0);
                    }
                break;
                }
            }
        break;
 
        case 2: // Второе меню - DINAMIC CREATE MENU   MESSAGE   BACK
            {
                menu_model.add_list_menu(L"DINAMIC CREATE MENU");
                menu_model.add_list_menu(L"MESSAGE");
                menu_model.add_list_menu(L"BACK");
 
                menu_view.draw_menu();
 
                switch(menu_model.current_cursor())
                {
                case 1:
                    {
                        grafic.clear_screen();
                        wstring item;
                        vector<wstring> dimanic_menu;
 
                        for(int i = 0; i < 6; i++)
                        {
                            cout << "Input item of menu";
                            wcin >> item;
                            menu_model.add_list_menu(item);
                        }
 
                        menu_view.draw_menu();
 
                        switch(menu_model.current_cursor())
                        {
                        case 1: menu_model.back_menu(); break;
                        case 2: menu_model.back_menu(); break;
                        case 3: menu_model.back_menu(); break;
                        }
                    }
                break;
 
                case 2:
                    {
                        grafic.clear_screen();
                        cout << "I Love CyberForum";
                        _getch();
                        menu_model.back_menu();
                    }
                break;
 
                case 3:
                    {
                        menu_model.back_menu();
                    }
                break;
                }
            }
        break;
        }
    }
 
    return 0;
}
Вроде вот так)
 
Текущее время: 10:08. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru