各位大佬小弟,最近无聊搞了个方块玩一玩,代码在二楼
c++吧
全部回复
仅看楼主
level 7
ORDRO1314 楼主
各位大佬小弟,最近无聊搞了个方块玩一玩,只是还不完善。希望各位多多指点
2017年04月25日 09点04分 1
level 7
ORDRO1314 楼主
#include <iostream>
#include <Windows.h>
#pragma warning(disable:4996)
#include <conio.h>
using namespace std;
int ar[24][18] = {
{ 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 2, 1, 1, 1, 1, 3 },
{ 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 6 },
{ 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 6 },
{ 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 6 },
{ 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 6 },
{ 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 6 },
{ 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 6 },
{ 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 6 },
{ 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 6 },
{ 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 6 },
{ 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 8, 9, 10, 0, 6 },
{ 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 6 },
{ 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 6 },
{ 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 6 },
{ 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 6 },
{ 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 6 },
{ 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 6 },
{ 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 6 },
{ 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 6 },
{ 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 6 },
{ 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 6 },
{ 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 6 },
{ 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 6 },
{ 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 4, 1, 1, 1, 1, 5 },
};
先定义一个数组
2017年04月25日 09点04分 2
level 7
ORDRO1314 楼主
class FK{
public:
void ShuXiaYi(int x, int s);//判断得分后使得分的消空,并把上面的下移
bool Zfx();//正方形的计算
voidPrint();//图形输出
int count(int ap);//计算得数,用于判断是否得分
private:
int pt[24][18];
};
正方形类
2017年04月25日 09点04分 3
level 7
ORDRO1314 楼主
bool FK::Zfx()
{
int x=1;//初始化方块的点
char key;//用来捕获键盘
int y=5;//初始化方块的点
int su = 150;//用来设定方块下落的速度
int cout = 23;//下边界
ar[x][y] = 7;//初始化方块
ar[x][y+1] = 7;//初始化方块
ar[x+1][y] = 7;//初始化方块
ar[x+1][y+1] = 7;//初始化方块
Print();
for (x = 1; x < cout; x++)
{
if (kbhit())//判断键盘是否有输入
{
switch (key = getch())//获取键盘值
{
case 75://左
y--;
if (y == 0)
{
y = 1;
ar[x - 2][y ] = 0;
ar[x-2][y + 1] = 0;
x -= 1;
break;
}
else
{
Sleep(su);
ar[x][y] = 7;
ar[x - 1][y] = 7;
ar[x - 1][y + 2] = 0;
ar[x][y + 2] = 0;
if (x > 2)
{
ar[x - 2][y + 1] = 0;
ar[x - 2][y + 2] = 0;
}
x -= 1;
break;
}
case 77://右
y++;
if (y >9)
{
y = 9;
ar[x - 2][y] = 0;
ar[x - 2][y + 1] = 0;
x -= 1;
break;
}
else
{
Sleep(su);
ar[x][y] = 7;
ar[x - 1][y] = 7;
if (x > 2)
{
ar[x - 1][y - 1] = 0;
ar[x - 2][y-1] = 0;
ar[x - 2][y] = 0;
}
x -= 1;
break;
}
break;
case 80://加速
su -= 150;
ar[x -1][y] = 0;
ar[x- 1][y+1] = 0;
ar[x- 2][y] = 0;
ar[x - 2][y+1] = 0;
break;
default:
su = 300;
break;
}
}
else
{
if (ar[x+1][y] == 0 && ar[x+1][y + 1] == 0)//判断下面有没有空位
{
if (y == 0)
y = 1;
ar[x + 1][y] = 7;
ar[x + 1][y + 1] = 7;
ar[x][y] = 7;
ar[x][y + 1] = 7;
Sleep(su);
if (x == 1)
Print();
else
{
ar[x - 1][y] = 0;
ar[x - 1][y + 1] = 0;
}
su = 150;
}
if ((count(x) == 70) && (count(x - 1) == 70))//判断是不是两组都可以消
{
ShuXiaYi(x,3);
Print();
}
if (count(x) == 70)//判断最后的一个是不是可以消
{
ShuXiaYi(x, 1);
Print();
}
if (count(x-1) == 70)//判断另一个是不是可发消
{
ShuXiaYi(x, 2);
Print();
}
else
{
Print();
}
//Print();
}
}
return true;
}
2017年04月25日 09点04分 4
level 7
ORDRO1314 楼主
居然沉了,我自己顶~@
2017年04月25日 23点04分 5
level 12
用控制台做,已经很好看了。不过,给你推荐一个绘图头文件,easyx,更好看一些。www.easyx.cn
2017年04月25日 23点04分 6
始终搞不懂,我的算法是没问题,单步调试也没问题,但实际跑起来就有问题,不得不多写几行代码来消除留下来的尾巴;
2017年04月26日 04点04分
level 12
厉害了老哥[太开心]
2017年04月26日 00点04分 7
~~[呵呵]
2017年04月26日 04点04分
1