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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Лимит памяти http://www.cyberforum.ru/cpp/thread1206191.html
На сайте е-олимп решал данную задачу:http://www.e-olimp.com/problems/6372 тут задача в том чтобы вывести правильную последовательность арифметических действий и посчитать ответ вот мой код: #include <stdio.h> #include <string> #include <iostream> #include <algorithm> #include <vector> #include <queue> #include <set> #include <sstream>
C++ Как переделать код для р8я частиц Надо чтобы они имели скоростя одинаковы но соответсвенно их цвету--то есть как их поделить хотя бы на трир цвета с разными скоростями #include <stdio.h> #include <cstdlib> #include <time.h> #include <math.h> #include <iostream> #include "windows.h" #include <gl\glut.h> http://www.cyberforum.ru/cpp/thread1205668.html
Вычисление матриц? C++
1. Составить алгоритм программы для вычисления матриц 2. Написать программу на языке С + + для вычисления матриц
Microsoft Visual C++ C++
Объясните, пожалуйста, что значит эта ошибка: error MSB4062: Невозможно загрузить задачу "MIBPreProcessDependencyGraph" из сборки "Microsoft.Build.CppTasks.Common, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a". Проверьте правильность объявления <UsingTask>, доступность сборки со всеми ее зависимостями и наличие в задаче общего класса, реализующего...
C++ Шифратор Дешифратор http://www.cyberforum.ru/cpp/thread1204590.html
Ребят, нужна очень программа которая будет шифровать и дешифровать информацию, слова например. Метод не важен, можно Цезаря например Ключ так же, закрытый или открытый неважно Буду очень признателен, до диплома осталась неделя, а без такой проги мне капут :(
C++ Переименовать окно приложения Добрый день. Хочу сделать, чтобы в том случае, если приложение было открыто несколько раз, то их названия писались по разному: 1е окно - "App", 2 окно - "App", 3 окно "App" и т.д. Пытаюсь делать следующим образом: HWND window_op; window_op = FindWindow(NULL, L"App"); подробнее

Показать сообщение отдельно
true_newfag
0 / 0 / 0
Регистрация: 11.02.2014
Сообщений: 8
13.06.2014, 18:49  [ТС]     Как сделать так, что бы после начала игры, активным было OpenGL-окно, а не консольное?
Это функция, которая запускает игру. Вот весь код:

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.
 
};
 
Текущее время: 22:37. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru