View difference between Paste ID: heWQLj27 and zyxJAmvA
SHOW: | | - or go back to the newest paste.
1
#include <GL/gl.h>
2
#include <GL/glut.h>
3
#include <iostream>
4
#include<cstdlib>
5
#include <time.h>
6
7
using namespace std;
8
9
#define len 8.0
10
int a[int(len)][int(len)] = {{0,0,0,0,9,9,0,0},
11-
							 {0,0,0,0,0,0,0,0},
11+
			     {0,0,0,0,0,0,0,0},
12-
							 {0,0,0,0,0,0,0,0},
12+
			     {0,0,0,0,0,0,0,0},
13-
							 {0,0,9,0,0,0,0,0},
13+
			     {0,0,9,0,0,0,0,0},
14-
							 {0,9,0,0,0,0,9,9},
14+
			     {0,9,0,0,0,0,9,9},
15-
							 {0,0,9,0,0,0,9,0},
15+
			     {0,0,9,0,0,0,9,0},
16-
							 {0,0,0,0,0,0,0,9},
16+
			     {0,0,0,0,0,0,0,9},
17-
							 {0,0,0,0,0,0,0,9}};
17+
			     {0,0,0,0,0,0,0,9}};
18
char b[int(len)][int(len)];
19
int minesnum = 10;
20
float step = 1 / len, delta = 0.005;
21
22
void dispPress(int x, int y) {
23
	
24
	glColor3f(0.95,0.95,0.95);
25
	glBegin(GL_TRIANGLES);
26
		glVertex3f(y*step+delta,(len-x)*step-delta,0);
27
		glVertex3f((y+1)*step-delta,(len-x)*step-delta,0);
28
		glVertex3f((y+1)*step-delta,(len-x-1)*step+delta,0);
29
	glEnd();
30
	
31
	glColor3f(0.9,0.9,0.9);
32
	glBegin(GL_TRIANGLES);
33
		glVertex3f((y+1)*step-delta,(len-x-1)*step+delta,0);
34
		glVertex3f(y*step+delta,(len-x-1)*step+delta,0);
35
		glVertex3f(y*step+delta,(len-x)*step-delta,0);
36
	glEnd();
37
	
38
	glFlush();
39
}
40
41
void dispBlank(int x, int y) {
42
	glColor3f(0.75,0.75,0.75);
43
	glBegin(GL_POLYGON);
44
		glVertex3f(y*step+delta,(len-x)*step-delta,0);
45
		glVertex3f((y+1)*step-delta,(len-x)*step-delta,0);
46
		glVertex3f((y+1)*step-delta,(len-x-1)*step+delta,0);
47
		glVertex3f(y*step+delta,(len-x-1)*step+delta,0);
48
	glEnd();	
49
}
50
51
void dispLeft(int x, int y) {
52
	
53
	int sum = 0;
54
	
55
	if(x-1 >= 0)
56
		sum += a[x-1][y];
57
		
58
	if(x+1 < len)
59
		sum += a[x+1][y];
60
		
61
	if(y-1 >= 0)
62
		sum += a[x][y-1];
63
		
64
	if(y+1 < len)
65
		sum += a[x][y+1];
66
		
67
	if(x-1 >= 0 && y+1 < len)
68
		sum += a[x-1][y+1];
69
		
70
	if(x+1 < len && y+1 < len)
71
		sum += a[x+1][y+1];
72
	
73
	if(x-1 >= 0 && y-1 >= 0)
74
		sum += a[x-1][y-1];
75
76
	if(x+1 < len && y-1 >= 0)
77
		sum += a[x+1][y-1];
78
	
79
	int num = sum / 9;
80
	b[x][y] = 48 + num;
81
	
82
	if(num==9) {
83
		glColor3f(0,0,0.5);
84
		glBegin(GL_POLYGON);
85
			glVertex3f(y*step,(len-x)*step,0);
86
			glVertex3f((y+1)*step,(len-x)*step,0);
87
			glVertex3f((y+1)*step,(len-x-1)*step,0);
88
			glVertex3f(y*step,(len-x-1)*step,0);
89
		glEnd();
90
	}
91
	
92
	switch(num) {
93
		case 0:
94
			dispBlank(x, y);
95
			break;
96
		case 1:
97
			glColor3f(0,0,1);
98
			glBegin(GL_POLYGON);
99
				glVertex3f(y*step,(len-x)*step,0);
100
				glVertex3f((y+1)*step,(len-x)*step,0);
101
				glVertex3f((y+1)*step,(len-x-1)*step,0);
102
				glVertex3f(y*step,(len-x-1)*step,0);
103
			glEnd();
104
			break;
105
		case 2:
106
			glColor3f(0,1,0);
107
			glBegin(GL_POLYGON);
108
				glVertex3f(y*step,(len-x)*step,0);
109
				glVertex3f((y+1)*step,(len-x)*step,0);
110
				glVertex3f((y+1)*step,(len-x-1)*step,0);
111
				glVertex3f(y*step,(len-x-1)*step,0);
112
			glEnd();
113
			break;
114
		case 3:
115
			glColor3f(0,1,1);
116
			glBegin(GL_POLYGON);
117
				glVertex3f(y*step,(len-x)*step,0);
118
				glVertex3f((y+1)*step,(len-x)*step,0);
119
				glVertex3f((y+1)*step,(len-x-1)*step,0);
120
				glVertex3f(y*step,(len-x-1)*step,0);
121
			glEnd();
122
			break;
123
		case 4:
124
			glColor3f(1,0,0);
125
			glBegin(GL_POLYGON);
126
				glVertex3f(y*step,(len-x)*step,0);
127
				glVertex3f((y+1)*step,(len-x)*step,0);
128
				glVertex3f((y+1)*step,(len-x-1)*step,0);
129
				glVertex3f(y*step,(len-x-1)*step,0);
130
			glEnd();
131
			break;
132
		case 5:
133
			glColor3f(1,0,1);
134
			glBegin(GL_POLYGON);
135
				glVertex3f(y*step,(len-x)*step,0);
136
				glVertex3f((y+1)*step,(len-x)*step,0);
137
				glVertex3f((y+1)*step,(len-x-1)*step,0);
138
				glVertex3f(y*step,(len-x-1)*step,0);
139
			glEnd();
140
			break;
141
		case 6:
142
			glColor3f(1,1,0);
143
			glBegin(GL_POLYGON);
144
				glVertex3f(y*step,(len-x)*step,0);
145
				glVertex3f((y+1)*step,(len-x)*step,0);
146
				glVertex3f((y+1)*step,(len-x-1)*step,0);
147
				glVertex3f(y*step,(len-x-1)*step,0);
148
			glEnd();
149
			break;
150
		case 7:
151
			glColor3f(1,1,1);
152
			glBegin(GL_POLYGON);
153
				glVertex3f(y*step,(len-x)*step,0);
154
				glVertex3f((y+1)*step,(len-x)*step,0);
155
				glVertex3f((y+1)*step,(len-x-1)*step,0);
156
				glVertex3f(y*step,(len-x-1)*step,0);
157
			glEnd();
158
			break;
159
		case 8:
160
			glColor3f(0.5,0.5,0.5);
161
			glBegin(GL_POLYGON);
162
				glVertex3f(y*step,(len-x)*step,0);
163
				glVertex3f((y+1)*step,(len-x)*step,0);
164
				glVertex3f((y+1)*step,(len-x-1)*step,0);
165
				glVertex3f(y*step,(len-x-1)*step,0);
166
			glEnd();
167
			break;
168
	}
169
	
170
	if(num==0) {
171
		if(x-1 >= 0 && (b[x-1][y] == '*' || b[x-1][y] == '9'))
172
			dispLeft(x-1,y);
173
174
		if(x+1 < len && (b[x+1][y] == '*' || b[x+1][y] == '9'))
175
			dispLeft(x+1,y);
176
177
		if(y-1 >= 0  && (b[x][y-1] == '*' || b[x][y-1] == '9'))
178
			dispLeft(x,y-1);
179
180
		if(y+1 < len && (b[x][y+1] == '*' || b[x][y+1] == '9'))
181
			dispLeft(x,y+1);
182
183
		if(x-1 >= 0 && y+1 < len && (b[x-1][y+1] == '*' || b[x-1][y+1] == '9'))
184
			dispLeft(x-1,y+1);
185
186
		if(x+1 < len && y+1 < len && (b[x+1][y+1] == '*' || b[x+1][y+1] == '9'))
187
			dispLeft(x+1,y+1);
188
189
		if(x-1 >= 0 && y-1 >= 0 && (b[x-1][y-1] == '*' || b[x-1][y-1] == '9'))
190
			dispLeft(x-1,y-1);
191
192
		if(x+1 < len && y-1 >= 0 && (b[x+1][y-1] == '*' || b[x+1][y-1] == '9'))
193
			dispLeft(x+1,y-1);
194
	}
195
	
196
	glFlush();
197
}
198
199
void display() {
200
	glClear (GL_COLOR_BUFFER_BIT);
201
202
	glColor3f (0.0, 0.0, 0.0);
203
	glLineWidth (3);
204
205
	float i;
206
	for(i = step; i< 1; i+=step) {
207
		glBegin(GL_LINES);
208
			glVertex3f(i,0,0);
209
			glVertex3f(i,1.0,0);
210
		glEnd();
211
		glBegin(GL_LINES);
212
			glVertex3f(0,i,0);
213
			glVertex3f(1.0,i,0);
214
		glEnd();
215
	}
216
	
217
	glFlush ();
218
}
219
220
void onMouse(int button, int state, int x, int y) {
221
	x = x / (500 / len);
222
	y = y / (500 / len);
223
//	cout<<y<<"\t"<<x;
224
225
	if(button == GLUT_LEFT_BUTTON && state == GLUT_DOWN)
226
		dispPress(y,x);
227
	
228
	if(button == GLUT_LEFT_BUTTON && state == GLUT_UP)
229
		dispLeft(y,x);
230
}
231
232
void reshape (int width, int height) {
233
	glViewport(0, 0, width, height);
234
	glMatrixMode(GL_PROJECTION);
235
	glLoadIdentity();
236
	glOrtho(0, width, 0, height, -1.0, 1.0);
237
	
238
	glFlush();
239
}
240
241
void init (void) {
242
/*  select clearing (background) color       */
243
    glClearColor (1.0, 1.0, 1.0, 0.0);
244
245
/*  initialize viewing values  */
246
    glMatrixMode(GL_PROJECTION);
247
    glLoadIdentity();
248
    glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);
249
}
250
251
int main(int argc, char** argv) {
252
	glutInit(&argc, argv);
253
	glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
254
	glutInitWindowSize (500, 500);
255
	glutInitWindowPosition (400, 300);
256
	glutCreateWindow ("MineSweeper");
257
	init ();
258
	
259
//	srand(time(NULL));
260
	int i,j,x,y;
261
	
262
	for (i = 0;i<len;i++)
263
		for(j=0;j<len;j++)
264
			b[i][j]='*';
265
		
266
/*	for (i =0 ;i<minesnum;i++) {
267
		ranst:
268
		x = rand()%8;
269
		y = rand()%8;
270
		if(a[x][y] != 9)
271
			a[x][y] = 9;
272
		else
273
			goto ranst;
274
	}
275
	*/
276
	
277
	glutDisplayFunc(display);
278
//	glutReshapeFunc(reshape);
279
//	display();
280
//	dispLeft(6,6);
281
//	reshape();
282
	glutMouseFunc(onMouse);
283
	glutMainLoop();
284
	return 0;
285
}