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

Пишу игру пятнашки

22.05.2015, 21:15. Показов 1468. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Пишу игру пятнашки с использованием openGL(библиотеки glut) и ООП. Проблема возникла в следущей части:
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
void on_keyboard(int key,int a,int b) {
    switch(key) {
case GLUT_KEY_UP:
        { 
                    for(int i=0;i<4;i++)
                        for(int j=0;j<4;j++)
                            if((C[3][0].get_x()==C[i][j].get_x()) && (C[3][0].get_y()+1==C[i][j].get_y()))
                            {
                                int u=C[i][j].get_x();
                                int h=C[i][j].get_y();
                                C[i][j].set_x(C[3][0].get_x());
                                C[i][j].set_y(C[3][0].get_y());
                                C[3][0].set_x(u);
                                C[3][0].set_y(h);
                                break;
                            }
            break;
        }
case GLUT_KEY_DOWN:
        {
                    for(int i=0;i<4;i++)
                        for(int j=0;j<4;j++)
                            //if(i!=3 && j!=0)
                            if((C[3][0].get_x()==C[i][j].get_x()) && (C[3][0].get_y()-1==C[i][j].get_y()))
                            {
                                int u=C[i][j].get_x();
                                int h=C[i][j].get_y();
                                C[i][j].set_x(C[3][0].get_x());
                                C[i][j].set_y(C[3][0].get_y());
                                C[3][0].set_x(u);
                                C[3][0].set_y(h);
                            }
                break;
        }
case GLUT_KEY_LEFT:
        { 
            if ((C[3][0].get_x())!=0) 
                {
                    for(int i=0;i<4;i++)
                        for(int j=0;j<4;j++)[ATTACH]532069[/ATTACH]
                            if((C[3][0].get_x()-1==C[i][j].get_x()) && (C[3][0].get_y()==C[i][j].get_y()))
                            {
                                int u=C[i][j].get_x();
                                int h=C[i][j].get_y();
                                C[i][j].set_x(C[3][0].get_x());
                                C[i][j].set_y(C[3][0].get_y());
                                C[3][0].set_x(u);
                                C[3][0].set_y(h);
                            }
                }
            break;
        }
case GLUT_KEY_RIGHT:
        { 
                    for(int i=0;i<4;i++)
                        for(int j=0;j<4;j++)
                            if((C[3][0].get_x()+1==C[i][j].get_x()) && (C[3][0].get_y()==C[i][j].get_y()))
                            {
                                int u=C[i][j].get_x();
                                int h=C[i][j].get_y();
                                C[i][j].set_x(C[3][0].get_x());
                                C[i][j].set_y(C[3][0].get_y());
                                C[3][0].set_x(u);
                                C[3][0].set_y(h);
                            }
            break;
        }
    }
}
Инициализирую положения кубиков так:
C++
1
2
3
4
5
6
7
8
void initialize() {
    for(int i=0;i<4;i++)
        for(int j=0;j<4;j++)
            {
                C[i][j].set_x(i);
                C[i][j].set_y(j);
            }
}
Добавлено через 12 минут
Проблема возникла с перемещением пустого места C[3][0]. Сначало нормально, но немного пробежавшись, оно часто перескакивает через 1.

Добавлено через 3 минуты
Прикладываю полный код
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
#include <gl/glut.h> 
#include <iostream>
 
class Cube {
private:
    int x,y,num;
public:
    void Drow();
    void set_x(int x) { this->x=x; }
    void set_y(int y) { this->y=y; }
    int get_x() { return x; }
    int get_y() { return y; }
    Cube() { }
    ~Cube() { }
};
 
class DrowBoard {
private:
    int M;
public:
    static const int Resolution=100;
    DrowBoard(int a) { this->M=a; }
    ~DrowBoard() { }
    void Drow();
    int get_M() { return M; }
};
 
 
 
void DrowBoard::Drow() {
        glBegin(GL_LINES);
    for(int i=0;i<=this->M;i++) {
        glVertex2f(0.0,i*Resolution);
        glVertex2f(this->M*Resolution,i*Resolution);
    }
    for(int i=0;i<=this->M;i++) {
        glVertex2f(i*Resolution,0.0);
        glVertex2f(i*Resolution,this->M*Resolution);
    }
    glEnd();
}
 
void Cube::Drow() {
    glRectf(x*DrowBoard::Resolution,y*DrowBoard::Resolution,(x+1)*DrowBoard::Resolution,(y+1)*DrowBoard::Resolution);
}
 
Cube C[4][4];
 
 
void initialize() {
    for(int i=0;i<4;i++)
        for(int j=0;j<4;j++)
            {
                C[i][j].set_x(i);
                C[i][j].set_y(j);
            }
}
 
DrowBoard B(4);
 
void display() {
int Resolution=100;
glClearColor(0.5, 0.5, 0.5, 0);
glClear(GL_COLOR_BUFFER_BIT);
B.Drow();
for(int i=0;i<3;i++)
    for(int j=0;j<4;j++)
        C[i][j].Drow();
C[3][1].Drow();
C[3][2].Drow();
C[3][3].Drow();
glFlush();
glutSwapBuffers();
}
 
 
void on_timer(int value) {
    display();
    glutTimerFunc(50,on_timer,0);
}
 
void on_keyboard(int key,int a,int b) {
    switch(key) {
case GLUT_KEY_UP:
        { 
                    for(int i=0;i<4;i++)
                        for(int j=0;j<4;j++)
                            if((C[3][0].get_x()==C[i][j].get_x()) && (C[3][0].get_y()+1==C[i][j].get_y()))
                            {
                                int u=C[i][j].get_x();
                                int h=C[i][j].get_y();
                                C[i][j].set_x(C[3][0].get_x());
                                C[i][j].set_y(C[3][0].get_y());
                                C[3][0].set_x(u);
                                C[3][0].set_y(h);
                                break;
                            }
            break;
        }
case GLUT_KEY_DOWN:
        {
                    for(int i=0;i<4;i++)
                        for(int j=0;j<4;j++)
                            //if(i!=3 && j!=0)
                            if((C[3][0].get_x()==C[i][j].get_x()) && (C[3][0].get_y()-1==C[i][j].get_y()))
                            {
                                int u=C[i][j].get_x();
                                int h=C[i][j].get_y();
                                C[i][j].set_x(C[3][0].get_x());
                                C[i][j].set_y(C[3][0].get_y());
                                C[3][0].set_x(u);
                                C[3][0].set_y(h);
                            }
                break;
        }
case GLUT_KEY_LEFT:
        { 
            if ((C[3][0].get_x())!=0) 
                {
                    for(int i=0;i<4;i++)
                        for(int j=0;j<4;j++)
                            if((C[3][0].get_x()-1==C[i][j].get_x()) && (C[3][0].get_y()==C[i][j].get_y()))
                            {
                                int u=C[i][j].get_x();
                                int h=C[i][j].get_y();
                                C[i][j].set_x(C[3][0].get_x());
                                C[i][j].set_y(C[3][0].get_y());
                                C[3][0].set_x(u);
                                C[3][0].set_y(h);
                            }
                }
            break;
        }
case GLUT_KEY_RIGHT:
        { 
                    for(int i=0;i<4;i++)
                        for(int j=0;j<4;j++)
                            if((C[3][0].get_x()+1==C[i][j].get_x()) && (C[3][0].get_y()==C[i][j].get_y()))
                            {
                                int u=C[i][j].get_x();
                                int h=C[i][j].get_y();
                                C[i][j].set_x(C[3][0].get_x());
                                C[i][j].set_y(C[3][0].get_y());
                                C[3][0].set_x(u);
                                C[3][0].set_y(h);
                            }
            break;
        }
    }
}
 
int main(int argc, char **argv) {
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB );
glutInitWindowSize (800, 600);
glutCreateWindow ("Test");
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0,800,0,600);
initialize();
glutDisplayFunc (display);
glutSpecialFunc(on_keyboard);
glutTimerFunc(50,on_timer,0);
glutMainLoop();
return(0);
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.05.2015, 21:15
Ответы с готовыми решениями:

Пишу игру танчики, нужен совет по рисованию мира
карта в основном состоять будет из кирпичей, разрушается &quot;строчками&quot;, блок из 4 строк, первое, что...

Написать игру «Пятнашки»
Кто знает, как на С++ написать игру «Пятнашки». Программа должна содержать следующие функции: ...

Написать игру Пятнашки
Необходимо написать игру &quot;Пятнашки&quot; на WPF. Загружаем картинку, она разбивается на 16 квадратов,...

Написать игру пятнашки на qt
Задали написать игру пятнашки на qt. на qt писал ранее калькулятор. подскажите, с чего начать...

0
22.05.2015, 21:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.05.2015, 21:15
Помогаю со студенческими работами здесь

Подправьте игру пятнашки
Решил написать игрушку 15-ки я хочу что бы прога содержала такие функции: заполнение поля...

Вставить изображение в игру Пятнашки
Вот у меня есть игра &quot;пятнашки&quot; и цифры нужно заменить рисунками. Плиз, подскажите как это сделать?...

Написать простую игру, например, пятнашки
Помогите пожалуйста написать игру на Си (пятнашки или можно любую другую, но как можно проще без...

Как лучше всего реализовать игру пятнашки?
Мне хотелось бы услышать советы по реализации такой игры. Интересует вопросы, как лучше сделать...


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

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

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