📄 renderer.java
字号:
gl.glColor3i(random.nextInt() * 255, random.nextInt() * 255, random.nextInt() * 255); // Pick A Random Color
glPrint(gl, 472, 20, 1, "GAME OVER"); // Write GAME OVER To The Screen
glPrint(gl, 456, 40, 1, "PRESS SPACE"); // Write PRESS SPACE To The Screen
}
for (int loop1 = 0; loop1 < lives - 1; loop1++) { // Loop Through Lives Minus Current Life
gl.glLoadIdentity(); // Reset The View
gl.glTranslatef(490 + (loop1 * 40.0f), 40.0f, 0.0f); // Move To The Right Of Our Title Text
gl.glRotatef(-player.spin, 0.0f, 0.0f, 1.0f); // Rotate Counter Clockwise
gl.glColor3f(0.0f, 1.0f, 0.0f); // Set Player Color To Light Green
gl.glBegin(GL.GL_LINES); // Start Drawing Our Player Using Lines
gl.glVertex2d(-5, -5); // Top Left Of Player
gl.glVertex2d(5, 5); // Bottom Right Of Player
gl.glVertex2d(5, -5); // Top Right Of Player
gl.glVertex2d(-5, 5); // Bottom Left Of Player
gl.glEnd(); // Done Drawing The Player
gl.glRotatef(-player.spin * 0.5f, 0.0f, 0.0f, 1.0f); // Rotate Counter Clockwise
gl.glColor3f(0.0f, 0.75f, 0.0f); // Set Player Color To Dark Green
gl.glBegin(GL.GL_LINES); // Start Drawing Our Player Using Lines
gl.glVertex2d(-7, 0); // Left Center Of Player
gl.glVertex2d(7, 0); // Right Center Of Player
gl.glVertex2d(0, -7); // Top Center Of Player
gl.glVertex2d(0, 7); // Bottom Center Of Player
gl.glEnd(); // Done Drawing The Player
}
filled = true; // Set Filled To True Before Testing
gl.glLineWidth(2.0f); // Set Line Width For Cells To 2.0f
gl.glDisable(GL.GL_LINE_SMOOTH); // Disable Antialiasing
gl.glLoadIdentity(); // Reset The Current Modelview Matrix
for (int loop1 = 0; loop1 < 11; loop1++) { // Loop From Left To Right
for (int loop2 = 0; loop2 < 11; loop2++) { // Loop From Top To Bottom
gl.glColor3f(0.0f, 0.5f, 1.0f); // Set Line Color To Blue
if (hline[loop1][loop2]) { // Has The Horizontal Line Been Traced
gl.glColor3f(1.0f, 1.0f, 1.0f); // If So, Set Line Color To White
}
if (loop1 < 10) { // Dont Draw To Far Right
if (!hline[loop1][loop2]) { // If A Horizontal Line Isn't Filled
filled = false; // filled Becomes False
}
gl.glBegin(GL.GL_LINES); // Start Drawing Horizontal Cell Borders
gl.glVertex2d(20 + (loop1 * 60), 70 + (loop2 * 40));// Left Side Of Horizontal Line
gl.glVertex2d(80 + (loop1 * 60), 70 + (loop2 * 40));// Right Side Of Horizontal Line
gl.glEnd(); // Done Drawing Horizontal Cell Borders
}
gl.glColor3f(0.0f, 0.5f, 1.0f); // Set Line Color To Blue
if (vline[loop1][loop2]) { // Has The Horizontal Line Been Traced
gl.glColor3f(1.0f, 1.0f, 1.0f); // If So, Set Line Color To White
}
if (loop2 < 10) { // Dont Draw To Far Down
if (!vline[loop1][loop2]) { // If A Verticle Line Isn't Filled
filled = false; // filled Becomes False
}
gl.glBegin(GL.GL_LINES); // Start Drawing Verticle Cell Borders
gl.glVertex2d(20 + (loop1 * 60), 70 + (loop2 * 40));// Left Side Of Horizontal Line
gl.glVertex2d(20 + (loop1 * 60), 110 + (loop2 * 40));// Right Side Of Horizontal Line
gl.glEnd(); // Done Drawing Verticle Cell Borders
}
gl.glEnable(GL.GL_TEXTURE_2D); // Enable Texture Mapping
gl.glColor3f(1.0f, 1.0f, 1.0f); // Bright White Color
gl.glBindTexture(GL.GL_TEXTURE_2D, textures[1]); // Select The Tile Image
if ((loop1 < 10) && (loop2 < 10)) { // If In Bounds, Fill In Traced Boxes
// Are All Sides Of The Box Traced?
if (hline[loop1][loop2] && hline[loop1][loop2 + 1] && vline[loop1][loop2] && vline[loop1 + 1][loop2]) {
gl.glBegin(GL.GL_QUADS); // Draw A Textured Quad
gl.glTexCoord2f((loop1 / 10.0f) + 0.1f, 1.0f - ((loop2 / 10.0f)));
gl.glVertex2d(20 + (loop1 * 60) + 59, (70 + loop2 * 40 + 1)); // Top Right
gl.glTexCoord2f((loop1 / 10.0f), 1.0f - ((loop2 / 10.0f)));
gl.glVertex2d(20 + (loop1 * 60) + 1, (70 + loop2 * 40 + 1)); // Top Left
gl.glTexCoord2f((loop1 / 10.0f), 1.0f - ((loop2 / 10.0f) + 0.1f));
gl.glVertex2d(20 + (loop1 * 60) + 1, (70 + loop2 * 40) + 39); // Bottom Left
gl.glTexCoord2f((loop1 / 10.0f) + 0.1f, 1.0f - ((loop2 / 10.0f) + 0.1f));
gl.glVertex2d(20 + (loop1 * 60) + 59, (70 + loop2 * 40) + 39); // Bottom Right
gl.glEnd(); // Done Texturing The Box
}
}
gl.glDisable(GL.GL_TEXTURE_2D); // Disable Texture Mapping
}
}
gl.glLineWidth(1.0f); // Set The Line Width To 1.0f
if (anti) { // Is Anti TRUE?
gl.glEnable(GL.GL_LINE_SMOOTH); // If So, Enable Antialiasing
}
if (hourglass.fx == 1) { // If fx=1 Draw The Hourglass
gl.glLoadIdentity(); // Reset The Modelview Matrix
gl.glTranslatef(20.0f + (hourglass.x * 60), 70.0f + (hourglass.y * 40), 0.0f); // Move To The Fine Hourglass Position
gl.glRotatef(hourglass.spin, 0.0f, 0.0f, 1.0f); // Rotate Clockwise
gl.glColor3f(random.nextFloat(), random.nextFloat(), random.nextFloat()); // Set Hourglass Color To Random Color
gl.glBegin(GL.GL_LINES); // Start Drawing Our Hourglass Using Lines
gl.glVertex2d(-5, -5); // Top Left Of Hourglass
gl.glVertex2d(5, 5); // Bottom Right Of Hourglass
gl.glVertex2d(5, -5); // Top Right Of Hourglass
gl.glVertex2d(-5, 5); // Bottom Left Of Hourglass
gl.glVertex2d(-5, 5); // Bottom Left Of Hourglass
gl.glVertex2d(5, 5); // Bottom Right Of Hourglass
gl.glVertex2d(-5, -5); // Top Left Of Hourglass
gl.glVertex2d(5, -5); // Top Right Of Hourglass
gl.glEnd(); // Done Drawing The Hourglass
}
gl.glLoadIdentity(); // Reset The Modelview Matrix
gl.glTranslatef(player.fx + 20.0f, player.fy + 70.0f, 0.0f); // Move To The Fine Player Position
gl.glRotatef(player.spin, 0.0f, 0.0f, 1.0f); // Rotate Clockwise
gl.glColor3f(0.0f, 1.0f, 0.0f); // Set Player Color To Light Green
gl.glBegin(GL.GL_LINES); // Start Drawing Our Player Using Lines
gl.glVertex2d(-5, -5); // Top Left Of Player
gl.glVertex2d(5, 5); // Bottom Right Of Player
gl.glVertex2d(5, -5); // Top Right Of Player
gl.glVertex2d(-5, 5); // Bottom Left Of Player
gl.glEnd(); // Done Drawing The Player
gl.glRotatef(player.spin * 0.5f, 0.0f, 0.0f, 1.0f); // Rotate Clockwise
gl.glColor3f(0.0f, 0.75f, 0.0f); // Set Player Color To Dark Green
gl.glBegin(GL.GL_LINES); // Start Drawing Our Player Using Lines
gl.glVertex2d(-7, 0); // Left Center Of Player
gl.glVertex2d(7, 0); // Right Center Of Player
gl.glVertex2d(0, -7); // Top Center Of Player
gl.glVertex2d(0, 7); // Bottom Center Of Player
gl.glEnd(); // Done Drawing The Player
for (int loop1 = 0; loop1 < (stage * level); loop1++) { // Loop To Draw Enemies
gl.glLoadIdentity(); // Reset The Modelview Matrix
gl.glTranslatef(enemy[loop1].fx + 20.0f, enemy[loop1].fy + 70.0f, 0.0f);
gl.glColor3f(1.0f, 0.5f, 0.5f); // Make Enemy Body Pink
gl.glBegin(GL.GL_LINES); // Start Drawing Enemy
gl.glVertex2d(0, -7); // Top Point Of Body
gl.glVertex2d(-7, 0); // Left Point Of Body
gl.glVertex2d(-7, 0); // Left Point Of Body
gl.glVertex2d(0, 7); // Bottom Point Of Body
gl.glVertex2d(0, 7); // Bottom Point Of Body
gl.glVertex2d(7, 0); // Right Point Of Body
gl.glVertex2d(7, 0); // Right Point Of Body
gl.glVertex2d(0, -7); // Top Point Of Body
gl.glEnd(); // Done Drawing Enemy Body
gl.glRotatef(enemy[loop1].spin, 0.0f, 0.0f, 1.0f); // Rotate The Enemy Blade
gl.glColor3f(1.0f, 0.0f, 0.0f); // Make Enemy Blade Red
gl.glBegin(GL.GL_LINES); // Start Drawing Enemy Blade
gl.glVertex2d(-7, -7); // Top Left Of Enemy
gl.glVertex2d(7, 7); // Bottom Right Of Enemy
gl.glVertex2d(-7, 7); // Bottom Left Of Enemy
gl.glVertex2d(7, -7); // Top Right Of Enemy
gl.glEnd(); // Done Drawing Enemy Blade
}
}
public void display(GLAutoDrawable drawable) {
GL gl = drawable.getGL();
drawGLScene(gl);
// Update (roughly) every (steps[adjust] * 2.0) ms
long currentTime = getTime();
long elapsedTime = currentTime - lastUpdateTime;
if (elapsedTime > steps[adjust] * 2) {
update();
lastUpdateTime = getTime();
}
}
private long getTime() {
return System.currentTimeMillis();
}
public void reshape(GLAutoDrawable drawable,
int xstart,
int ystart,
int width,
int height) {
GL gl = drawable.getGL();
height = (height == 0) ? 1 : height;
gl.glViewport(0, 0, width, height);
gl.glMatrixMode(GL.GL_PROJECTION);
gl.glLoadIdentity();
gl.glOrtho(0.0f, width, height, 0.0f, -1.0f, 1.0f); // Create Ortho 640x480 View (0,0 At Top Left)
gl.glMatrixMode(GL.GL_MODELVIEW);
gl.glLoadIdentity();
}
public void displayChanged(GLAutoDrawable drawable,
boolean modeChanged,
boolean deviceChanged) {
}
private static class GameObject { // Create A Structure For Our Player
public int fx, fy; // Fine Movement Position
public int x, y; // Current Player Position
public float spin; // Spin Direction
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -