俄罗斯方块
来源:互联网 发布:中国各省贸易数据库 编辑:程序博客网 时间:2024/05/17 23:51
在 我的资源 中提供下载
资源下载。
俄罗斯方块的思路:
(1)将每个小方块写在一个4*4的数组中。(数组中的值为1时,表示这个地方有块存在;为0时。表示这个地方没有块存在)
(2)定义3个25*20的数组,作为俄罗斯方块的面板。
a面板:使方块在上面移动;
b面板:储存已经固定的块;
c面板:将a,b面板上面的信息整合在一起,显示出来,并且在显示结束之后,立即清0;
(3)块在a面板上面移动的时候,一定要使用有块存在的边界,与b面板上的边界判断冲突,而不是使用块数组的边界。
0 0 0 0
1 1 1 0
0 0 1 0 使用本行为判断的边界
0 0 0 0 而不是使用本行
(4)在写消行时,一定要使这一行的所有数组元素为1时,才可以消行。
(5)写出块旋转的时候,是每个块的4种形式,都写出来,等待将来可以调用。
写出块的代码:
void block(int x, int y )//x,y
{
setfillcolor(RED);//设置填充颜色
fillrectangle(x, y, x + Block1, y + Block1);
}
void blockL(int b[][4], int m,int n )//x,y,状态,大小
{
switch (m)
{
case 1://第一个块 L
switch (n)
{
case 1:
b[0][0] = 1;
b[1][0] = 1;
b[2][0] = 1;
b[2][1] = 1;
break;
case 2:
b[0][0] = 1;
b[0][1] = 1;
b[0][2] = 1;
b[1][0] = 1;
break;
case 3:
b[0][0] = 1;
b[0][1] = 1;
b[1][1] = 1;
b[2][1] = 1;
break;
case 0:
b[0][0] = 1;
b[1][0] = 1;
b[1][2] = 1;
b[1][1] = 1;
break;
}
break;
case 2:// I 型
switch (n)
{
case 1:
b[0][0] = 1;
b[0][1] = 1;
b[0][2] = 1;
b[0][3] = 1;
break;
case 2:
b[1][0] = 1;
b[2][0] = 1;
b[3][0] = 1;
b[0][0] = 1;
break;
case 3:
b[0][0] = 1;
b[0][1] = 1;
b[0][2] = 1;
b[0][3] = 1;
break;
case 0:
b[1][0] = 1;
b[2][0] = 1;
b[3][0] = 1;
b[0][0] = 1;
break;
}
break;
case 3://反L
switch (n)
{
case 1:
b[2][0] = 1;
b[2][1] = 1;
b[1][1] = 1;
b[0][1] = 1;
break;
case 2:
b[0][0] = 1;
b[1][0] = 1;
b[1][1] = 1;
b[1][2] = 1;
break;
case 3:
b[0][0] = 1;
b[0][1] = 1;
b[1][0] = 1;
b[2][0] = 1;
break;
case 0:
b[0][0] = 1;
b[0][1] = 1;
b[0][2] = 1;
b[1][2] = 1;
break;
}
break;
case 4: //田 字型
switch (n)
{
case 1:
b[0][0] = 1;
b[0][1] = 1;
b[1][0] = 1;
b[1][1] = 1;
break;
case 2:
b[0][0] = 1;
b[0][1] = 1;
b[1][0] = 1;
b[1][1] = 1;
break;
case 3:
b[0][0] = 1;
b[0][1] = 1;
b[1][0] = 1;
b[1][1] = 1;
break;
case 0:
b[0][0] = 1;
b[0][1] = 1;
b[1][0] = 1;
b[1][1] = 1;
break;
}
break;
case 5: //土字型
switch (n)
{
case 1:
b[1][0] = 1;
b[1][1] = 1;
b[1][2] = 1;
b[0][1] = 1;
break;
case 2:
b[0][0] = 1;
b[1][0] = 1;
b[2][0] = 1;
b[1][1] = 1;
break;
case 3:
b[0][1] = 1;
b[0][2] = 1;
b[0][0] = 1;
b[1][1] = 1;
break;
case 0:
b[0][1] = 1;
b[1][1] = 1;
b[2][1] = 1;
b[1][0] = 1;
break;
}
break;
case 6://反Z
switch (n)
{
case 1:
b[0][0] = 1;
b[1][0] = 1;
b[1][1] = 1;
b[2][1] = 1;
break;
case 2:
b[1][0] = 1;
b[1][1] = 1;
b[0][2] = 1;
b[0][1] = 1;
break;
case 3:
b[0][0] = 1;;
b[1][0] = 1;;
b[1][1] = 1;;
b[2][1] = 1;;
break;
case 0:
b[1][0] = 1;
b[1][1] = 1;
b[0][2] = 1;
b[0][1] = 1;
break;
}
break;
case 0:
switch (n)
{
case 1:
b[0][1] = 1;
b[2][0] = 1;
b[1][1] = 1;
b[1][0] = 1;
break;
case 2:
b[0][0] = 1;
b[0][1] = 1;
b[1][1] = 1;
b[1][2] = 1;
break;
case 3:
b[0][1] = 1;
b[2][0] = 1;
b[1][1] = 1;
b[1][0] = 1;
break;
case 0:
b[0][0] = 1;
b[0][1] = 1;
b[1][1] = 1;
b[1][2] = 1;
break;
}
break;
}
}
主函数代码:
while (Game)
{//开始游戏
if (fly)//飞行状态
{
if (kbhit())//如果有键按下
{
char c;
c = getch();
switch (c)
{
case 'S'://加速下落moveSucc = move(a1, b, hang, lie + 2);//在临时面板上上移动成功为1
chongtu = chongtu1(a2, a1);//检查是否冲突,1为冲突
if (!chongtu&&moveSucc)//不冲突且移动成功
move(a1, b, hang, lie++);
break;
case 'A'://左移
if (hang - 1 >= 0)
{
moveSucc = move(a1, b, hang - 1, lie);//在临时面板上上移动成功为1
chongtu = chongtu1(a2, a1);//检查是否冲突,1为冲突
if (!chongtu&&moveSucc)//不冲突且移动成功
{
move(a1, b, hang--, lie);
}
}
break;
case 'W'://旋转
for (int i = 0; i < 4; i++)
for (int j = 0; j < 4; j++)
b[i][j] = 0;
if (n < 3)
blockL(b, m, n += 1);
else
{
n = 0;
blockL(b, m, n);
}
moveSucc = move(a1, b, hang, lie );//在临时面板上上移动成功为1
chongtu = chongtu1(a2, a1);//检查是否冲突,1为冲突
if (!chongtu&&moveSucc)//不冲突且移动成功
move(a1, b, hang, lie);
break;
case 'D'://右移
moveSucc = move(a1, b, hang+1, lie );//在临时面板上上移动成功为1
chongtu = chongtu1(a2, a1);//检查是否冲突,1为冲突
if (!chongtu&&moveSucc)//不冲突且移动成功
{
move(a1, b, hang++, lie );
}
break;
case 'P'://暂停
Pause();
break;
}
}
//自由下落
moveSucc = move(a1, b, hang, lie+1);//在临时面板上上移动成功为1
chongtu = chongtu1(a2,a1);//检查是否冲突,1为冲突
if (!chongtu&&moveSucc)//不冲突且移动成功
move(a1, b, hang, lie++);
else
{
move(a1, b, hang, lie--);
A1toA(a2,a1);
fly = 0;
}
clearrectangle((WEIGHT - Weight1) / 2, (HIGH - High1) / 2, WEIGHT - (WEIGHT - Weight1) / 2, HIGH - (HIGH - High1) / 2);
rectangle((WEIGHT - Weight1) / 2, (HIGH - High1) / 2, WEIGHT - (WEIGHT - Weight1) / 2, HIGH - (HIGH - High1) / 2);
A1toA(a,a1);
A1toA(a,a2);
print(a);
Sleep(diffcult);
for (int i = 0; i < 25; i++)
for (int j = 0; j < 20; j++)
a[i][j] = 0;
}
else
{
m = rand() % 7;
n = rand() % 4;
fly = 1;
lie = 0;
hang = 9;
for (int i = 0; i < 4; i++)
for (int j = 0; j < 4; j++)
b[i][j] = 0;
blockL(b, m, n);moveSucc = move(a1, b, hang, lie);//在临时面板上上移动成功为1
chongtu = chongtu1(a2, a1);
if (chongtu)
{
Game = 0;
TCHAR s[] = _T("游戏结束");
outtextxy(10, 20, s);
}
else
{
sorce1 = sorce(a2, sorce1);
TCHAR s[5];
_stprintf(s, _T("%d"), sorce1);
TCHAR s1[] = _T("分数:");outtextxy(500, 100, s1);
outtextxy(550, 100, s);
}
}
}
剩下的函数功能,需要大家自己补齐哦!!!相信自己可以完成。
这是大概的思路,若有问题,可以留言,我们讨论一下。
0 0
- 俄罗斯方块
- 俄罗斯方块
- 俄罗斯方块!
- 俄罗斯方块
- 俄罗斯方块
- 俄罗斯方块
- 俄罗斯方块
- 俄罗斯方块
- 俄罗斯方块
- 俄罗斯方块
- 俄罗斯方块
- 俄罗斯方块
- 俄罗斯方块
- 俄罗斯方块
- 俄罗斯方块
- 俄罗斯方块
- 俄罗斯方块
- 俄罗斯方块
- 内存映射机制
- oracle数据库迁移过程中的常见问题及常见操作命令
- 社交已经没机会了?创业者们可不同意这个说法
- js AMD support
- Shiro 权限管理
- 俄罗斯方块
- OpenGL 的渲染流水线
- const 修饰函数参数,返回值,函数体
- Java工程配置文件的管理
- 如何将一个HTML页面嵌套在另一个页面中
- Dijkstra C++实现
- 双目视觉【1】
- JavaScript--第一天,基础语法
- java学习线路