• 大小: 23KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-08-16
  • 语言: 其他
  • 标签: OpenGL  游戏  代码  

资源简介

用OpenGL编写的俄罗斯方块,运行良好,界面也很不错。

资源截图

代码片段和文件信息

#include “main.h“
#include 

void init ()
{
x0 = 200 y0 = 10;

curMatrix_n = rand () % 7;
for (int j = 0; j < 33; j++)
{
grid [j][20] = 1;
grid [j][21] = 1;
grid [j][22] = 1;
}

glClearColor (0.0 0.0 0.0 1.0);
glMatrixMode (GL_PROJECTION);
gluOrtho2D (x0-1 x0+viewWidth+1 y0-2 y0+viewHeight+1); //下边界在下方两像素处 右边界在右方两像素处
glViewport (x0-1 y0-2 viewWidth+3 viewHeight+3);
}

//********************************************************************************************************************

void drawSquare (GLint x GLint y) //画小正方形
{
glBegin (GL_QUADS);
glVertex2i (x y);
glVertex2i (x+19 y);
glVertex2i (x+19 y+19);
glVertex2i (x y+19);
glEnd();
}

void drawCurMatrix (int x int y) //画当前方块,参数为当前方块的最左下格 左下角坐标
{
glPushMatrix ();
glColor3f (0.0 0.6 0.0);
for (int k=0; k<5; k++)
for (int l=0; l<6; l++)
{
if (curMatrix [curMatrix_n][curMatrix_f][k][l] == 1)
drawSquare (x+20*(l-1) y+20*(k-1));
}
glPopMatrix ();
}

void drawMatrix (int x int y) //画已累积的方块,从左下角开始,参数为最左下格子 左下角坐标
{
glPushMatrix ();
if (isOver) //game over时
glColor3f (0.5 0.5 0.5);
else
glColor3f (0.0 0.6 0.0);

for (int i=0; i<20; i++)
for (int j=0; j<30; j++)
{
static int tmp = 1; //保证只执行一次,得到方块 初始化 时的左下角坐标
if (tmp==1 && i==initCurMatrix_i && j==initCurMatrix_j)
{
initCurMatrix_x = x+20*i;
initCurMatrix_y = y+20*j;
tmp = 0;
}

if (grid [j][i] == 1)
drawSquare (x+20*i y+20*j);
}
glPopMatrix ();
}

void draw1() //执行画 框线 已累积的方块 当前方块
{
glPushMatrix ();
glColor3f (0.5 0.5 0.5);
glBegin (GL_LINE_LOOP);
glVertex2i (x0-1 y0+viewHeight);
glVertex2i (x0-1 y0-2);
glVertex2i (x0+viewWidth+1 y0-2);
glVertex2i (x0+viewWidth+1 y0+viewHeight);
glEnd ();
glPopMatrix ();

for (int i = 0; i<20; i++)
{
if (grid [29][i] == 1) //game over判断
{
isOver = 1;
KillTimer (hWnd timer);
break;
}
}

drawMatrix (x0 y0);

if (!isOver)
{
if (needNewMatrix) //保证执行次数,每次生成新方块时
{
curMatrix_j = initCurMatrix_j;
curMatrix_i = initCurMatrix_i;

curMatrix_x = initCurMatrix_x;
curMatrix_y = initCurMatrix_y;
needNewMatrix = 0;
}
drawCurMatrix (curMatrix_x curMatrix_y);
}
}

//********************************************************************************************************************

void needCutlayer ()
{
for (int j = 0; j<30; j++)
{
int tmp = 0;
for (int i = 0; i<20; i++)
{
if (grid [j][i] == 1)
tmp++;
}

if (20 == tmp)
{
for (int k = j; k < 30; k++)
for (int l = 0; l < 20; l++)
grid [k][l] = grid [k+1][l];

j--;
}
}//for
}

bool canMove (int direction)
{
switch (direction)
{
case DOWN:
for (int k=0; k<5; k++)
for (int l=0; l<6; l++)
{
if (curMatrix [curMatrix_n][curMatrix_f][k][l] == 2 || curMatrix [curMatrix_n][curMatrix_f][k][l] == 6 |

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      39424  2008-11-01 21:18  tetris.exe

     文件       6774  2008-11-01 21:13  main.cpp

     文件       4204  2008-11-01 21:17  main.h

     文件      13217  2008-11-01 21:12  7种方块.xlsx

----------- ---------  ---------- -----  ----

                63619                    4


评论

共有 条评论