0 / 0 / 1
Регистрация: 01.11.2012
Сообщений: 30
1

Привести в движение один из квадратов

14.12.2013, 04:51. Показов 475. Ответов 2
Метки нет (Все метки)

Хочу написать простейшую игрушку на с++ и вот такой вопрос, как привести в движение один из квадратов нажатием w, a, d
Вот сам код в котором только поле и два квадрата(зеленый и красный) и немного функций для того как будут двигаться эти самые квадраты)
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 "stdafx.h"
#include <time.h>
#include <stdlib.h>
#include  <glut.h>
 
int w=800, h=600; //Размер поля
float gravity = 3.85; //Гравитация
float drag=0.8; //Переменная отвечающая за затухание
 
struct SQUARE1 
{
int x, y;
float dx, dy;
 
 
void move()
{
    dy=dy-gravity;
    
    x+=int(dx);
    y+=int(dy);
    
    if(y<0)
    {
        y=0;
        dy=-dy*drag;
        dx=dx*drag;
 
        if(x<0)
        {
            x=0;
            dx=-dx;
        }
        if(x>w)
        {
            x=w;
            dx=-dx;
        }
        }
}
    
 
void Draw()
{
    glColor3f(1.0,0.0,0.0);
    glRectf(x, y, x+40, y+40);
 
}
}square1;
 
 
 
struct SQUARE2
{
int x, y;
float dx, dy;
 
 
void move()
{
    dy=dy-gravity;
    
    x+=int(dx);
    y+=int(dy);
    
    if(y<0)
    {
        y=0;
        dy=-dy*drag;
        dx=dx*drag;
 
        if(x<0)
        {
            x=0;
            dx=-dx;
        }
        if(x>w)
        {
            x=w;
            dx=-dx;
        }
        }
}
    
 
void Draw()
{
    glColor3f(0.0,1.0,0.0);
    glRectf(x, y, x+40, y+40);
 
}
}square2;
 
 
void DrawField()
  {
   glColor3f(0.0,0.0,1.0);
}
 
void Tick()
 {
     square1.move();
     square2.move();
 
}
 
 void MyKeyboard(unsigned char key, int a, int b)
{  
    switch(key)
    {
    
    }
  
}
 
void display()
{
    glClear(GL_COLOR_BUFFER_BIT);
    square1.Draw();
    square2.Draw();
    DrawField();
 
 
    glFlush();
}
 
void timer(int = 0)
{
  display();
 
  Tick();
       
 glutTimerFunc(50,timer,0);
}
 
int main(int argc, char **argv)
{
    square1.dx=-10;
    square1.dy=0;
 
    square1.x=600;
    square1.y=600;
 
    square2.dx=-10;
    square2.dy=0;
 
    square2.x=300;
    square2.y=400;
 
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB );
glutInitWindowSize (w, h);
glutCreateWindow ("PEZDA SATANA"); 
glClearColor(0.0,0.5,1.0,0.7);  
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0,w,0,h);
 
glutDisplayFunc (display);
glutKeyboardFunc(MyKeyboard);
glutTimerFunc(50,timer,0);
 
glutMainLoop();
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.12.2013, 04:51
Ответы с готовыми решениями:

Не получается привести автомобиль в движение
Здравствуйте все. Проблема такова: имеется модель автомобиля, ей присвоен Box Collider, за ним...

Каким образом привести в движение фишку, отображёную в Image1?
Доброго времени суток! пишу я монополию...подкинте плиз идею каким образом можно привести в...

Астроиду привести в колебательное движение вокруг верхних точек
Астроиду привести в колебательное движение вокруг верхних точек с возможностью менять амплитуду в...

Движение квадратов по форме
Как сделать, чтобы компактный набор треугольников одного цвета и квадратов другого цвета...

2
57 / 57 / 10
Регистрация: 08.12.2013
Сообщений: 257
14.12.2013, 12:39 2
Цитата Сообщение от Stocky Посмотреть сообщение
Хочу написать простейшую игрушку на с++ и вот такой вопрос, как привести в движение один из квадратов нажатием w, a, d
Вот сам код в котором только поле и два квадрата(зеленый и красный) и немного функций для того как будут двигаться эти самые квадраты)
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 "stdafx.h"
#include <time.h>
#include <stdlib.h>
#include  <glut.h>
 
int w=800, h=600; //Размер поля
float gravity = 3.85; //Гравитация
float drag=0.8; //Переменная отвечающая за затухание
 
struct SQUARE1 
{
int x, y;
float dx, dy;
 
 
void move()
{
    dy=dy-gravity;
    
    x+=int(dx);
    y+=int(dy);
    
    if(y<0)
    {
        y=0;
        dy=-dy*drag;
        dx=dx*drag;
 
        if(x<0)
        {
            x=0;
            dx=-dx;
        }
        if(x>w)
        {
            x=w;
            dx=-dx;
        }
        }
}
    
 
void Draw()
{
    glColor3f(1.0,0.0,0.0);
    glRectf(x, y, x+40, y+40);
 
}
}square1;
 
 
 
struct SQUARE2
{
int x, y;
float dx, dy;
 
 
void move()
{
    dy=dy-gravity;
    
    x+=int(dx);
    y+=int(dy);
    
    if(y<0)
    {
        y=0;
        dy=-dy*drag;
        dx=dx*drag;
 
        if(x<0)
        {
            x=0;
            dx=-dx;
        }
        if(x>w)
        {
            x=w;
            dx=-dx;
        }
        }
}
    
 
void Draw()
{
    glColor3f(0.0,1.0,0.0);
    glRectf(x, y, x+40, y+40);
 
}
}square2;
 
 
void DrawField()
  {
   glColor3f(0.0,0.0,1.0);
}
 
void Tick()
 {
     square1.move();
     square2.move();
 
}
 
 void MyKeyboard(unsigned char key, int a, int b)
{  
    switch(key)
    {
    
    }
  
}
 
void display()
{
    glClear(GL_COLOR_BUFFER_BIT);
    square1.Draw();
    square2.Draw();
    DrawField();
 
 
    glFlush();
}
 
void timer(int = 0)
{
  display();
 
  Tick();
       
 glutTimerFunc(50,timer,0);
}
 
int main(int argc, char **argv)
{
    square1.dx=-10;
    square1.dy=0;
 
    square1.x=600;
    square1.y=600;
 
    square2.dx=-10;
    square2.dy=0;
 
    square2.x=300;
    square2.y=400;
 
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB );
glutInitWindowSize (w, h);
glutCreateWindow ("PEZDA SATANA"); 
glClearColor(0.0,0.5,1.0,0.7);  
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0,w,0,h);
 
glutDisplayFunc (display);
glutKeyboardFunc(MyKeyboard);
glutTimerFunc(50,timer,0);
 
glutMainLoop();
}
вы не знаете как отслеживать нажатие клавиши?
0
0 / 0 / 1
Регистрация: 01.11.2012
Сообщений: 30
14.12.2013, 20:15  [ТС] 3
Цитата Сообщение от Doksim Посмотреть сообщение
вы не знаете как отслеживать нажатие клавиши?
Я имел ввиду, нажал "w" например, квадрат переместился на 40 позиций в верх по полю, нажал "a", на 80 позиций влево и т. д.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.12.2013, 20:15

Задать движение квадратов по направлению стрелок.
СРОЧНО!

Нужно нарисовать красивого кота и привести в движение его лапы. Желательно комментируя все действия
Нужно нарисовать красивого кота и привести в движение его лапы. Желательно комментируя все действия

Один документ привести к виду другого
Добрый день уважаемые форумчане. На работе задали такое вот задание-написать макрос, но с макросами...

Философия. Можете привести примеры разных классов, в которых реализуется один и тот же интерфейс?
Причём классам должны соответствовать объекты или явления из как можно более далёких областей...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru