Форум программистов, компьютерный форум, киберфорум
Наши страницы

Условие if не становится истиным - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Вычислить значение функции для отрицательных элементов массива и подсчитать их количество http://www.cyberforum.ru/cpp-beginners/thread749506.html
Помогите решить задачу. Дано одномерный массив Р, состоящий из 32 элементов. Вычислить значение функции для отрицательных элементов массива и подсчитать их количество. Зарание спасибо. :)
C++ Поменять элемент, стоящий перед минимальным, на максимальный (Изменить программу) Дел http://www.cyberforum.ru/cpp-beginners/thread749498.html
C++ Строковый алгоритм
Помогите, пожалуйста, найти алгоритм (само решение писать не надо). Задача такова: Дан текст и список правил замены. Каждое правило заменяет одну или несколько букв текста на одну или несколько...
Строки. Посчитать, сколько раз входит сочетание, вставить пробел, вычеркнуть все буквы е C++
1) Дано слово, посчитать, сколько раз входит в него сочетание, скажем, le; 2) Нужно вставить в слове после каждой, стоящей на нечетном месте, пробел; 3) Потом вычеркнуть из слова все буквы e,...
C++ Класс (работа с текстовым файлом) http://www.cyberforum.ru/cpp-beginners/thread749478.html
Здравствуйте. помогите пожалуйста) есть класс: #include "stdafx.h" #include <iostream> #include <fstream> #include <stdlib.h> #include <conio.h> #include <string.h> #include <stdio.h>
C++ Циклические программы с регулярной сменой аргумента, содержащие ветвления Помогите написать программу задачи. Плиз. Вывести на печать значения, удовлетворяют условию y> 1.35 i y <2.4, и соответствующие значения аргумента. Аргумент х изменяется от 0.42 до 0.86 с шагом... подробнее

Показать сообщение отдельно
florgas
6 / 5 / 0
Регистрация: 28.09.2010
Сообщений: 355

Условие if не становится истиным - C++

29.12.2012, 12:31. Просмотров 239. Ответов 4
Метки (Все метки)

Всем привет. Пишу свою первую программу-игру на с++ с использованием OpenGL.
Ситуация такая: необходимо сравнить координаты по x и координаты по y, и если они окажутся одновременно равными, то переменной ColorMobR присвоить значение 1.0. Так проблема в том, что когда в момент игры я игроков наезжаю на моба (по сути координаты должны совпасть, хотя кто знает..), условие не становится истинным. Если вместо условия подставить if(1), то код выполняется. не могу найти ошибку. Были предположения, что это из-за проблемы с float, так как они не всегда равны и т.п., но я не знаю. Прошу помощи. Код ниже:
Функция сравнения координат:
C++
1
2
3
4
5
/* Пересечение игрока и моба */
void GamerOnMob(){
    if(fabs(gamer_x-mob_x) < 0.01 && fabs(gamer_y - mob_y) < 0.01){
                    ColorMobR = 1.0;
                }
Весь код игры:
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
#include <time.h>
#include <Windows.h>
#include <stdlib.h>
#include <GL/glut.h>
#include <GL/glu.h>
#include <GL/glaux.h>
#include <cstdio>
#include <cmath>
#pragma comment (lib,"glu32.lib")
#pragma comment (lib,"opengl32.lib")
#pragma comment (lib, "glaux.lib")
int dir;
float gamer_x=0, gamer_y=0, gamer_z=0, mob_x=0.03, mob_y=0.03, mob_z=0.03, ColorMobR=0.0, ColorMobG=0.0, ColorMobB=0.0;
GLuint gamingtxt;
 
/*GLuint LoadBMP(const char *fmt, ...)
{
    GLuint t;
    char filename[256];
    va_list ap;
    va_start(ap, fmt);
    vsprintf_s(filename, fmt, ap);
    va_end(ap);
 
    AUX_RGBImageRec *texture = auxDIBImageLoadA(filename);
    glGenTextures(1, &t);
    glBindTexture(GL_TEXTURE_2D, t);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
    glTexImage2D(GL_TEXTURE_2D, 0, 3, texture->sizeX, texture->sizeY, 0,
    GL_RGB, GL_UNSIGNED_BYTE, texture->data);
    
    return t;    
}*/
 
void display(void) { 
glClear (GL_COLOR_BUFFER_BIT);
/* Игрок */ 
glColor3f (1.0, 1.0, 1.0); 
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, gamingtxt);
glBegin(GL_POLYGON); 
glTexCoord2d(0, 0); glVertex3f (gamer_x, gamer_y, gamer_z + 0.0); 
glTexCoord2d(1, 0); glVertex3f (gamer_x + 0.03, gamer_y, gamer_z + 0.0); 
glTexCoord2d(1, 1); glVertex3f (gamer_x + 0.03, gamer_y + 0.03, gamer_z + 0.0); 
glTexCoord2d(0, 1); glVertex3f (gamer_x, gamer_y + 0.03, gamer_z + 0.0);
glEnd();
 
/* Противники */
glColor3f (ColorMobR, ColorMobG, ColorMobB); 
glBegin(GL_POLYGON); 
glVertex3f (mob_x + 0.22, mob_y + 0.22, mob_z + 0.0); 
glVertex3f (mob_x + 0.25, mob_y + 0.22, mob_z + 0.0); 
glVertex3f (mob_x + 0.25, mob_y + 0.25, mob_z + 0.0); 
glVertex3f (mob_x + 0.22, mob_y + 0.25, mob_z + 0.0);
glEnd();
glDisable(GL_TEXTURE_2D);
glutSwapBuffers();
} 
 
/* Движение мобов */
void MobMotion(){
    int RandomNumber = rand()%4;
    switch(RandomNumber)
    {
        case 0 :  mob_x-=0.01; break;
        case 1 :  mob_y+=0.01; break;
        case 2 :  mob_x+=0.01; break;        
        case 3 :  mob_y-=0.01; break;
    }
}
 
/* Пересечение игрока и моба */
void GamerOnMob(){
    if(fabs(gamer_x-mob_x) < 0.01 && fabs(gamer_y - mob_y) < 0.01){
                    ColorMobR = 1.0;
                }
}
 
/* Ограничение перемещения размерами экрана */
void Screen(){
    if(gamer_x>0.97){
            gamer_x = 0.97;
            }
    if(gamer_x<-1){
            gamer_x = -1;
            }
    if(gamer_y>0.97){
            gamer_y = 0.97;
            }
    if(gamer_y<-1){
            gamer_y = -1;
            }
    if(mob_x>0.97){
            mob_x = 0.97;
            }
    if(mob_x<-1){
            mob_x = -1;
            }
    if(mob_y>0.97){
            mob_y = 0.97;
            }
    if(mob_y<-1){
            mob_y = -1;
            }           
}
 
/* Функция времени */
void Timer(int){
    display();
    Screen();
    GamerOnMob();
    glutTimerFunc(10, Timer, 0);
}
 
/* Функция времени мобов*/
void TimerMob(int){ 
    //MobMotion();
    glutTimerFunc(100, TimerMob, 0);
}
 
/* Функция считывания нажатия клавиш и перемещения игрока */
void KeyboardEvent(int key, int a, int b)
{   
    switch(key)
    {
        case 100 :  gamer_x-=0.01; break;
        case 101 :  gamer_y+=0.01; break;
        case 102:   gamer_x+=0.01; break;        
        case 103 :  gamer_y-=0.01; break;
    }
}
 
/* Определим параметры окна */ 
int main(int argc, char** argv) 
{ 
glutInit(&argc, argv); 
glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB); 
glutInitWindowSize (800, 800); 
glutInitWindowPosition (100, 100); 
glutCreateWindow ("Game v0.1"); 
glClearColor (0.0,0.4,0.0,0.0); 
//gamingtxt = LoadBMP("texture.bmp");
glutDisplayFunc(display); 
glutTimerFunc(10, Timer, 0);
glutTimerFunc(100, TimerMob, 0);
glutSpecialFunc(KeyboardEvent);
glutMainLoop(); 
return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.