Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 11.02.2014
Сообщений: 10
1

Как сделать так, что бы после начала игры, активным было OpenGL-окно, а не консольное?

13.06.2014, 18:10. Показов 1095. Ответов 4
Метки нет (Все метки)

Всем привет, у Меня тут такая проблемка, даже не знаю как искать ее решение в гугле, вот и решил написать сюда.
Я написал игру на с++ через OpenGL, дальше сделал меню через консоль, но вот незадача, когда игра стартует, активным окном остается окно консоли, и клавиши управления из-за этого не реагируют. Как сделать так, что бы после начала игры, активным было окно с игрой, а не консоль?
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.06.2014, 18:10
Ответы с готовыми решениями:

Как сделать так, чтобы консольное окно при открытии было определённого размера?
Для конкурса елок нужно))) https://www.cyberforum.ru/contests/thread1060675-page6.html#post5582150

Как мне сделать так что бы можно было ставить одну запятую после цифр в edit1 delphi?
Как мне сделать так что бы можно было ставить одну запятую после цифр в edit1 delphi? Добавлено...

Как сделать что бы не показывало консольное окно, а сразу графическое?
Добрый день, как сделать что бы не показывало консольное окно, а сразу графическое? #include...

Как сделать так, что бы окно перемещалось когда разворачиваешь окно
Например я сделал ГУИ, в AS3 А вот как сделать что бы окна были связаны в окне, кто не поймёт в...

4
Каратель
Эксперт С++
6601 / 4020 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
13.06.2014, 18:13 2
SetForegroundWindow
0
0 / 0 / 0
Регистрация: 11.02.2014
Сообщений: 10
13.06.2014, 18:29  [ТС] 3
Насколько Я понял, там для Win32 project и вроде как он не подходит для ConsoleApplication. Или Я не прав?

Добавлено через 8 минут
Код "меню" которое на самом деле обычная консоль
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
int main () { // основная функция main, из которой проходит инициализация всех функций.
    int a;
    cout << endl << "       WELCOME, TO SNAKE GAME v1.alfa by Jas 2014 " << endl << endl << endl << "1. START GAME " << endl;
    cin >> a;
    if (a == 1)
        cout
    <<system("cls") << " ***  BEFORE YOU START TO PLAY, LOOK AT THE CONTROL KEYS  ***" <<endl 
        << endl << "            Controly keys " << endl
        << " Arrow up - Move to top     "  << " Arrow down - Move to bottom " << endl
        << " Arrow left - Move to left  "  << " Arrow right - Move to right " << endl
        << " P - Pause game " << endl << " U - Unpause game     " <<  " Q - Close game " << endl 
        << endl << "            Snake's color :" << endl
        << " G - Set snake color on Green   "<< " R - Set snake color on Red " << endl
        << " B - Set snake color on Blue    " << " Y - Set snake color on Yellow " << endl 
        << endl << "            Snake's speed: " << endl
        << " 1 - Set snake speed on 50  " << " 2 - Set snake speed on 100  " << endl
        << " 3 - Set snake speed on 150 " << " 4 - Set snake speed on 200 " << endl
        << " 5 - Set snake speed on 250 " << " 6 - Set snake speed on 300 " << endl
        << " 7 - Set snake speed on 350 " << " 8 - Set snake speed on 400 " << endl
        << " 9 - Set snake speed on 450 "  << " 0 - Set snake speed on 500 " << endl
        << endl << "Press 1 to start game" << endl;
    cin >> a;
    if (a == 1) Start(1, __argv); // вызов функции Start.
 
};
0
Каратель
Эксперт С++
6601 / 4020 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
13.06.2014, 18:37 4
Цитата Сообщение от true_newfag Посмотреть сообщение
Start(1, __argv); // вызов функции Start.
и что это за Start? это должно о чем-то говорить?
0
0 / 0 / 0
Регистрация: 11.02.2014
Сообщений: 10
13.06.2014, 18:49  [ТС] 5
Это функция, которая запускает игру. Вот весь код:

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
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
 
// Mustafin Zhassulan CSSE 138R
//Practical work 02.06.14
// Snake game code
#include <iostream>
#include <fstream>
#include <time.h>
#include <GL/glut.h> // подключение графичесокй библиотеки OpenGL.
using namespace std;
 
int Q = 30, W = 20; // переменные содержащие информацию необходимые для построения высоте и ширины игрового поля.
int Scale = 25; // переменная сожержащая в себе инофрмацию масштабе одного "квадрата".
int w = Scale*Q;  // переменная сожержащая в себе инофрмацию о размере поля по ширине 750
int h = Scale*W; //переменная сожержащая в себе инофрмацию о размере поля по высоте 500
int dir; // переменная необходимая для хранения в себе, инофрмации о направлении змейки
int num = 4; // переменная задающая количество начальных блоков змейки.
int period = 0; // переменная отвечает за смену Яблока и Вишни.
int ms = 1000;  // переменная отвечающая за скорость игры.
int oms = 1; // переменная необходимая для реализации функции паузы и продолжения игры.
int Score = 0;
 
struct { // данная структура является непосредственно самой змейкой.
 
    int x, y; // переменная x отвечает за координату по ширине, а y по высоте.
 
}
s[777]; //максимально возможное количество "квадратиков" из которых может состоять змейка.
 
class Fruit{ // класс содержащий в себе инофрмацию необходимую для создания таких элементов игры как Яблоко и Вишня.
 
public:
 
    int x, y; // переменные x и y отвечают за хранение информации о положении змейки по координатам.
 
    void New() { // функция которая задает случайные координаты каждой новой Вишне/Яблоку.
        x = rand() % Q; 
        y = rand() % W;
        for (int i = 0; i < 8; i++){
            if (i == 7) Score = Score + 70;
            else Score = Score + 10;
        }
    }
 
    void DrawApple(){ // функция реализующая рисовку  Яблока, по заданному размеру и цвету. 
 
        glColor3f(0.0, 1.0, 0.0); // функция OpenGL позволяющая задавать цвет объекту, в данном случае зеленый.
        glRectf(x*Scale, y*Scale, (x + 1)*Scale, (y + 1)*Scale); // функция OpenGL благодоря которой рисуется яблоко, в данном случе размером квадрат 1 на 1.
    }
 
    void DrawCherry(){ // функция реализующая рисовку  Вишни, по заданному размеру и цвету. 
 
        glColor3f(1.0, 0.0, 0.0); // функция библиотеки OpenGL позволяющая задавать цвет объекту, в данном случае красный.
        glRectf(x*Scale, y*Scale, (x + 1)*Scale, (y + 1)*Scale); // функция OpenGL благодоря которой рисуется вишня, в данном случе размером квадрат 1 на 1.
    }
 
}
m[1]; // объект класа Fruit, необходимый для создания фрукта на игровом поле.
 
class Snake{    // класс содержащий в себе инофрмацию необходимую для создания таких элементов игры как Яблоко и Вишня.
 
public:
    int q = 1; // переменная необходимая для реализации метода смены цвета Змейки, в зависимости от значения, цвет будет меняться.
 
    void SetRedColor(){ // функция, устанавливающая значение переменной q равной 2.
        q = 2; 
    };
 
    void SetBlueColor(){ // функция, устанавливающая значение переменной q равной 3.
        q = 3; 
    }
    
    void SetGreenColor(){  // функция, устанавливающая значение переменной q равной 1.
        q = 1;
    }
    
    void SetYellowColor(){ // функция, устанавливающая значение переменной q равной 4.
        q = 4;
    }
 
    void DrawSnake(){ // в данной функции описана логика смены цвета змейки.
        if (q == 1){ // в нижеследующих условиях описывается, логика смены цвета змейки, если значение перменной q равно 1, то змейка окрасится в зеленый цвет.
            glColor3f(0.0, 1.0, 0.0);
        }
        if (q == 2){
            glColor3f(1.0, 0.0, 0.0);
        }
        if (q == 3){
            glColor3f(0.0, 0.0, 1.0);
        }
        if (q == 4){
            glColor3f(1.0, 1.0, 0.0);
        }
 
        for (int i = 0; i < num; i++) { // в данном цикле реализуется рисовка змейки.
            glRectf(s[i].x*Scale, s[i].y*Scale, (s[i].x + 1)*Scale, (s[i].y + 1) * Scale);
        }
 
    }
}
aaa; // объект класса Snake.
 
void DrawGameField(){ // функция отвечающая за рисовку игрового поля.
 
    glColor3f(0.0, 1.0, 0.0); // задается цвет, рисуемых ниже линий, в данном случае черный.
 
    glBegin(GL_LINES); // все игровое поле покрыто линиями, за отрисовку которых отвечает эта функция.
 
    for (int i = 0; i < w; i += Scale){
        glVertex2f(i, 1); glVertex2f(i,h); // функция непосредственной прорисовки поля, от координат (i,0) до координат (i,h) с шагом в Scale прорисовываются вертикальные черные линии.
    }
 
    for (int j = 0; j < h; j += Scale){
        glVertex2f(1, j); glVertex2f(w, j); // функция непосредственной прорисовки поля, от координат (j,0) до координат (j,w) с шагом в Scale прорисовываются горизонтальные черные линии.
 
    }
 
    glEnd(); // завершение функции  отрисовки.
 
};
void DrawMenuField(){
    glColor3f(1.0, 0.0, 0.0); // задается цвет, рисуемых ниже линий, в данном случае черный.
 
    glBegin(GL_LINES); // все игровое поле покрыто линиями, за отрисовку которых отвечает эта функция.
 
    for (int i = 0; i < w; i += Scale){
        glVertex2f(i, -50); glVertex2f(i, 0); // функция непосредственной прорисовки поля, от координат (i,0) до координат (i,h) с шагом в Scale прорисовываются вертикальные черные линии.
    }
 
    for (int j = -50; j < 1; j += Scale){
        glVertex2f(0, j); glVertex2f(w, j); // функция непосредственной прорисовки поля, от координат (j,0) до координат (j,w) с шагом в Scale прорисовываются горизонтальные черные линии.
 
    }
 
    glEnd(); // завершение функции  отрисовки.
 
}
 
void Display(){ // функция отвечающая за все, что отображается на экране.
 
    glClear(GL_COLOR_BUFFER_BIT);
 
    DrawGameField(); // вызов ранее описанного метода.
    DrawMenuField();
 
    for (int i = 0; i < 1; i++){ // в данном цикле описыватся, что если переменная period равна 7, то должна вызываться функция прорисовки вишни.
        if (period == 7) {          
            m[i].DrawCherry(); 
        }
 
        else{ // в любом другом случае вызывается функция прорисовки яблока.
            m[i].DrawApple();
        }
}   
    aaa.DrawSnake(); // вызов функции прорисовки змеи.
 
    glFlush(); // функция немедленного вывода на экран.
 
};
 
 
 
void Tick(){ //метод, реализующий движение змейки, поглощение фрукта, наезд на границы и наезд змейки на саму себя.
    
        for (int i = num; i > 0; i--){ // цикл содержащий в себе описание логики поведения элементов змейки, следующих за головной.
 
            s[i].x = s[i - 1].x; // последний элемент змейки, ставонится на координаты предпоследнего и т.д.
            s[i].y = s[i - 1].y; // последний элемент змейки, ставонится на координаты предпоследнего и т.д.
 
        }
 
        if (dir == 0) s[0].y += 1; // если направление = 0, то координата змейки по вертикали увеличивается на одну единицу.
        if (dir == 1) s[0].x -= 1; // если направление = 1, то координата змейки по горизонтали уменьшается на одну единицу.
        if (dir == 2) s[0].x += 1; // если направление = 2, то координата змейки по горизонтали увеличивается на одну единицу.
        if (dir == 3) s[0].y -= 1; // если направление = 3, то координата змейки по вертикали уменьшается на одну единицу.
 
        for (int i = 0; i < 1; i++) // в данном цикле, описывается что происходит, когда координаты первого квадрата змейки совпадают с координатами фрукта.
            if ((s[0].x == m[i].x) && (s[0].y == m[i].y)){
            num++; m[i].New(); // увеличение блоков змейки, и вызов функции отрисовки нового фрукта.
            period += 1; // увеличение переменной period на 1
            if (period >= 8) period = 0; // если значение переменной period станет равно 8, то обнулить значение данной переменной.
            }
 
        if (s[0].x > Q-1) exit(0); // если головной элемент змейки выходит за рамки координатов игрового поля - завершить работу программы.
        if (s[0].x < 0) exit(0); // если головной элемент змейки выходит за рамки координатов игрового поля - завершить работу программы.
        if (s[0].y > W-1) exit(0); // если головной элемент змейки выходит за рамки координатов игрового поля - завершить работу программы.
        if (s[0].y < 0)exit(0); // если головной элемент змейки выходит за рамки координатов игрового поля - завершить работу программы.
 
        for (int i = 1; i < num; i++) 
        if (s[0].x == s[i].x && s[0].y == s[i].y) exit(0); // если головной элемент змейки  сталкивается с любым другим элементом змейки - завершить работу программы.
    
};
 
void Timer(int = 0){//
    
    Display(); // вызывается функция Display.
 
        if (oms==1) // если значение переменной oms = 0, то вызывать функцию Tick.
        Tick();
        else{ // в любом другом случае не делать ничего.
        }
 
    glutTimerFunc(ms, Timer, 0); // вызвать функцию, содержащую в себе функцию Timer.
 
};
 
void MenuKeys(unsigned char key, int a, int b){ //метод для назначения функционала клавиш.
 
    switch (key){
 
    case'y':aaa.SetYellowColor(); break; // при нажатии клавишы Y, вызывается метод SetYellowColor.
    case'r':aaa.SetRedColor(); break; // при нажатии клавишы R, вызывается метод SetRedColor.
    case'b':aaa.SetBlueColor(); break; // при нажатии клавишы B, вызывается метод SetBlueColor.
    case'g':aaa.SetGreenColor(); break; // при нажатии клавишы G, вызывается метод SetGreenColor.
    case 'p':oms = 0; break; // при нажатии клавишы P, переменной oms задается значение 0, что приведет к паузе в игре.
    case 'u':oms = 1; break; // при нажатии клавишы U, переменной oms задается значение 1, что приведет к продолжению игры.
    case 'q':exit(0); break; // при нажатии клавишы Q, вызывается метод exit, что приведет к завершению программы.
    case '1':ms = 50; break; // при нажатии клавишы 1, переменной ms задается значение 50, что приведет к изменению скорости игры.
    case '2':ms = 100; break; // при нажатии клавишы 2, переменной ms задается значение 100, что приведет к изменению скорости игры.
    case '3':ms = 150; break; // при нажатии клавишы 3, переменной ms задается значение 150, что приведет к изменению скорости игры.
    case '4':ms = 200; break; // при нажатии клавишы 4, переменной ms задается значение 200, что приведет к изменению скорости игры.
    case '5':ms = 250; break; // при нажатии клавишы 5, переменной ms задается значение 250, что приведет к изменению скорости игры.
    case '6':ms = 300; break; // при нажатии клавишы 6, переменной ms задается значение 300, что приведет к изменению скорости игры.
    case '7':ms = 350; break; // при нажатии клавишы 7, переменной ms задается значение 350, что приведет к изменению скорости игры.
    case '8':ms = 400; break; // при нажатии клавишы 8, переменной ms задается значение 400, что приведет к изменению скорости игры.
    case '9':ms = 450; break; // при нажатии клавишы 9, переменной ms задается значение 550, что приведет к изменению скорости игры.
    case '0':ms = 500; break; // при нажатии клавишы 0, переменной ms задается значение 500, что приведет к изменению скорости игры.
 
    }
};
 
void MoveKeys(int key, int a, int b){ // метод отвечающий за направление движения змейки.
 
    switch (key){
 
    case 101: if (dir == 3) dir = 3; else dir = 0; break; // при нажатии на клавишу "стрелка вверх", змейке задается соответствущее направление.
    case 102: if (dir == 1) dir = 1; else dir = 2; break; // при нажатии на клавишу "стрелка вправо", змейке задается соответствущее направление.
    case 100: if (dir == 2) dir = 2; else dir = 1; break; // при нажатии на клавишу "стрелка влево", змейке задается соответствущее направление.
    case 103: if (dir == 0) dir = 0; else dir = 3; break; // при нажатии на клавишу "стрелка вниз", змейке задается соответствущее направление.
 
    }
};
 
void Start(int argc, char **argv){// функция, в которой собраны все методы библиотеки OpenGL, необходимые для запуска графического окна.
 
    for (int i = 0; i < 1; i++) m[i].New(); //
 
    s[0].x = rand() % Q; //начальные координаты появления змейки на игровом поле.
    s[0].y = rand() % W; //начальные координаты появления змейки на игровом поле.
 
    glutInit(&argc, argv); //
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
    glutInitWindowSize(w, h); // функуия отвечающая за размер появляющегося окна.
    glutInitWindowPosition(400,100);
    glutCreateWindow("Jas's Snake Game"); // функция задающая имя окна.
    glMatrixMode(GL_PROJECTION); //
    glLoadIdentity(); //
    gluOrtho2D(0, w, -50, h); //
    glutDisplayFunc(Display); // функция, в которой указывается функция содержащая в себе инофрмацию, которая должна отображаться.
    glutTimerFunc(50,Timer, 0);  //
    glutKeyboardFunc(MenuKeys); // функция OpenGL, которая перехватывает значение цифровых, буквенных и символьнх клавиш.
    glutSpecialFunc(MoveKeys); //специальная функция OpenGL, которая перехватывает значения клавиш F, Home, Insert, End, и клавиши стрелок.
    glutMainLoop();
};
 
int main () { // основная функция main, из которой проходит инициализация всех функций.
    int a;
    cout << endl << "       WELCOME, TO SNAKE GAME v1.alfa by Jas 2014 " << endl << endl << endl << "1. START GAME " << endl;
    cin >> a;
    if (a == 1)
        cout
    <<system("cls") << " ***  BEFORE YOU START TO PLAY, LOOK AT THE CONTROL KEYS  ***" <<endl 
        << endl << "            Controly keys " << endl
        << " Arrow up - Move to top     "  << " Arrow down - Move to bottom " << endl
        << " Arrow left - Move to left  "  << " Arrow right - Move to right " << endl
        << " P - Pause game " << endl << " U - Unpause game     " <<  " Q - Close game " << endl 
        << endl << "            Snake's color :" << endl
        << " G - Set snake color on Green   "<< " R - Set snake color on Red " << endl
        << " B - Set snake color on Blue    " << " Y - Set snake color on Yellow " << endl 
        << endl << "            Snake's speed: " << endl
        << " 1 - Set snake speed on 50  " << " 2 - Set snake speed on 100  " << endl
        << " 3 - Set snake speed on 150 " << " 4 - Set snake speed on 200 " << endl
        << " 5 - Set snake speed on 250 " << " 6 - Set snake speed on 300 " << endl
        << " 7 - Set snake speed on 350 " << " 8 - Set snake speed on 400 " << endl
        << " 9 - Set snake speed on 450 "  << " 0 - Set snake speed on 500 " << endl
        << endl << "Press 1 to start game" << endl;
    cin >> a;
    if (a == 1) Start(1, __argv); // вызов функции Start.
 
};
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.06.2014, 18:49

Unity имеется GameObject который при старте игры в Меню НЕ АКТИВНЫМ. нужно сделать его активным
Unity имеется GameObject под названием &quot;Player&quot;который при старте игры в (scene Menu) НЕ АКТИВНЫЙ....

Как мне сделать так, чтобы при запуске htm файла окно было определенных размеров?
Метод window.open() открывает новое окно броузера из уже открытого. Как мне сделать так, чтобы при...

Как сделать так, чтоб только после нажатия трёх кнопок начала работать функция?
Собственно есть 3 кнопки, нажатие каждой активирует свою функцию. Как сделать так, чтоб после...

Как сделать окно активным?
Как сделать активным другой процесс? Т.е есть моя программа на Windows Form и есть другой...

Как сделать окно активным?
господа как можно сделать окно активным? у меня окно в таком состаянии - ShowWindow (hwnd,...

как сделать так, что бы в 1 и 2 заказе не было скидки, а в последующих была?
Вы работаете в химчистке. Ваша химчистка осуществляет прием у населения вещей для выведения пятен....


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.