#include "Els.H"
//srand((unsigned)time(NULL));
ElsType::ElsType():m_type(Els::typearray()[rand()%7]),m_degree(rand()%4)
{
}
void ElsType::reset()
{
m_type=Els::typearray()[rand()%7];
m_degree=rand()%4;
}
Els::Type ElsType::gettype()const
{
return m_type;
}
int ElsType::getdegree()const
{
return m_degree;
}
bool Els::changeright()
{
if(0==m_pb)
return false;
int i;
for(i=0;i<8;++i)
m_valid[i]=-1;
i=0;
switch(m_type)
{
case One:
return true;
case Two:
if(0==m_degree%2)
{
if(0==m_ypos)
{
m_pb[m_ypos][m_xpos+1]=FALSE;
m_valid[i++]=MAKELONG(m_xpos+1,m_ypos);
++m_degree>3?m_degree=0:0;
return true;
}
else if(1==m_ypos)
{
if(m_pb[m_ypos-1][m_xpos+1])
{
if(m_pb[m_ypos][m_xpos-1])
return false;
m_pb[m_ypos][m_xpos-1]=TRUE;
m_pb[m_ypos][m_xpos]=m_pb[m_ypos][m_xpos+1]=FALSE;
m_valid[i++]=MAKELONG(m_xpos-1,m_ypos);
m_valid[i++]=MAKELONG(m_xpos+1,m_ypos);
m_valid[i++]=MAKELONG(m_xpos+1,m_ypos);
--m_xpos;
++m_degree>3?m_degree=0:0;
return true;
}
m_pb[m_ypos-1][m_xpos+1]=TRUE;
m_pb[m_ypos-1][m_xpos-1]=m_pb[m_ypos][m_xpos+1]=FALSE;
m_valid[i++]=MAKELONG(m_xpos+1,m_ypos-1);
m_valid[i++]=MAKELONG(m_xpos-1,m_ypos-1);
m_valid[i++]=MAKELONG(m_xpos+1,m_ypos);
++m_degree>3?m_degree=0:0;
return true;
}
else
{
if(m_pb[m_ypos-1][m_xpos+1] || m_pb[m_ypos-2][m_xpos+1])//左移
{
if(m_ypos<=CYDIVISIONS-2&&!m_pb[m_ypos-1][m_xpos+1]&&!m_pb[m_ypos+1][m_xpos])
{
m_pb[m_ypos-1][m_xpos+1]=m_pb[m_ypos+1][m_xpos]=TRUE;
m_pb[m_ypos-1][m_xpos-1]=m_pb[m_ypos-1][m_xpos]=FALSE;
m_valid[i++]=MAKELONG(m_xpos+1,m_ypos-1);
m_valid[i++]=MAKELONG(m_xpos,m_ypos+1);
m_valid[i++]=MAKELONG(m_xpos-1,m_ypos-1);
m_valid[i++]=MAKELONG(m_xpos,m_ypos-1);
++m_degree>3?m_degree=0:0;
++m_ypos;
return true;
}
if(m_pb[m_ypos][m_xpos-1] || m_pb[m_ypos-2][m_xpos])
return false;
m_pb[m_ypos][m_xpos-1]=m_pb[m_ypos-2][m_xpos]=TRUE;
m_pb[m_ypos][m_xpos]=m_pb[m_ypos][m_xpos+1]=FALSE;
m_valid[i++]=MAKELONG(m_xpos-1,m_ypos);
m_valid[i++]=MAKELONG(m_xpos,m_ypos-2);
m_valid[i++]=MAKELONG(m_xpos,m_ypos);
m_valid[i++]=MAKELONG(m_xpos+1,m_ypos);
--m_xpos;
++m_degree>3?m_degree=0:0;
return true;
}
m_pb[m_ypos-1][m_xpos+1]=m_pb[m_ypos-2][m_xpos+1]=TRUE;
m_pb[m_ypos-1][m_xpos-1]=m_pb[m_ypos][m_xpos+1]=FALSE;
m_valid[i++]=MAKELONG(m_xpos+1,m_ypos-1);
m_valid[i++]=MAKELONG(m_xpos+1,m_ypos-2);
m_valid[i++]=MAKELONG(m_xpos-1,m_ypos-1);
m_valid[i++]=MAKELONG(m_xpos+1,m_ypos);
++m_degree>3?m_degree=0:0;
return true;
}
}
else
{
if(0==m_ypos)
{
if(0==m_xpos)
{
if(m_pb[m_ypos][m_xpos+1] || m_pb[m_ypos][m_xpos+2])
return false;
m_pb[m_ypos][m_xpos+1]=m_pb[m_ypos][m_xpos+2]=TRUE;
m_pb[m_ypos][m_xpos]=FALSE;
m_valid[i++]=MAKELONG(m_xpos+1,m_ypos);
m_valid[i++]=MAKELONG(m_xpos+2,m_ypos);
m_valid[i++]=MAKELONG(m_xpos,m_ypos);
++m_xpos;
++m_degree>3?m_degree=0:0;
return true;
}
else if(m_pb[m_ypos][m_xpos+1])
{
if(1==m_xpos)
return false;
m_pb[m_ypos][m_xpos-1]=TRUE;
m_valid[i++]=MAKELONG(m_xpos-1,m_ypos);
--m_xpos;
++m_degree>3?m_degree=0:0;
return true;
}
else
{
m_pb[m_ypos][m_xpos+1]=TRUE;
m_valid[i++]=MAKELONG(m_xpos+1,m_ypos);
++m_degree>3?m_degree=0:0;
return true;
}
}
else if(1==m_ypos)
{
if(0==m_xpos)
{
if(m_pb[m_ypos][m_xpos+1] || m_pb[m_ypos][m_xpos+2])
return false;
m_pb[m_ypos][m_xpos+1]=m_pb[m_ypos][m_xpos+2]=TRUE;
m_pb[m_ypos][m_xpos]=FALSE;
m_valid[i++]=MAKELONG(m_xpos+1,m_ypos);
m_valid[i++]=MAKELONG(m_xpos+2,m_ypos);
m_valid[i++]=MAKELONG(m_xpos,m_ypos);
++m_degree>3?m_degree=0:0;
++m_xpos;
return true;
}
else if(m_pb[m_ypos][m_xpos+1])
{
if(1==m_xpos)
return false;
if(m_pb[m_ypos][m_xpos-1] || m_pb[m_ypos-1][m_xpos-1] || m_pb[m_ypos-1][m_xpos-2])
return false;
m_pb[m_ypos][m_xpos-1]=m_pb[m_ypos-1][m_xpos-1]=m_pb[m_ypos-1][m_xpos-2]=TRUE;
m_pb[m_ypos-1][m_xpos]=m_pb[m_ypos-1][m_xpos+1]=FALSE;
m_valid[i++]=MAKELONG(m_xpos-1,m_ypos);
m_valid[i++]=MAKELONG(m_xpos-1,m_ypos-1);
m_valid[i++]=MAKELONG(m_xpos-2,m_ypos-1);
m_valid[i++]=MAKELONG(m_xpos,m_ypos-1);
m_valid[i++]=MAKELONG(m_xpos+1,m_ypos-1);
--m_xpos;
++m_degree>3?m_degree=0:0;
return true;
}
else
{
if(m_pb[m_ypos-1][m_xpos-1])
{
if(m_xpos>=CXDIVISIONS-2 || m_pb[m_ypos][m_xpos+1] || m_pb[m_ypos][m_xpos+2])
return false;
m_pb[m_ypos][m_xpos+1]=m_pb[m_ypos][m_xpos+2]=TRUE;
m_pb[m_ypos][m_xpos]=FALSE;
m_valid[i++]=MAKELONG(m_xpos+1,m_ypos);
m_valid[i++]=MAKELONG(m_xpos+2,m_ypos);
m_valid[i++]=MAKELONG(m_xpos,m_ypos);
++m_degree>3?m_degree=0:0;
++m_xpos;
return true;
}
m_pb[m_ypos-1][m_xpos-1]=m_pb[m_ypos][m_xpos+1]=TRUE;
m_pb[m_ypos-1][m_xpos+1]=FALSE;
m_valid[i++]=MAKELONG(m_xpos-1,m_ypos-1);
m_valid[i++]=MAKELONG(m_xpos+1,m_ypos);
m_valid[i++]=MAKELONG(m_xpos+1,m_ypos-1);
++m_degree>3?m_degree=0:0;
return true;
}
}
else
{
if(0==m_xpos)
{
if(m_pb[m_ypos][m_xpos+1] || m_pb[m_ypos][m_xpos+2])
return false;
m_pb[m_ypos][m_xpos+1]=m_pb[m_ypos][m_xpos+2]=TRUE;
m_pb[m_ypos][m_xpos]=m_pb[m_ypos-2][m_xpos+1]=FALSE;
m_valid[i++]=MAKELONG(m_xpos+1,m_ypos);
m_valid[i++]=MAKELONG(m_xpos+2,m_ypos);
m_valid[i++]=MAKELONG(m_xpos,m_ypos);
m_valid[i++]=MAKELONG(m_xpos+1,m_ypos-2);
++m_degree>3?m_degree=0:0;
++m_xpos;
return true;
}
else if(m_pb[m_ypos][m_xpos+1])
{
if(1==m_xpos)
return false;
if(m_pb[m_ypos][m_xpos-1] || m_pb[m_ypos-1][m_xpos-1] || m_pb[m_ypos-1][m_xpos-2])
return false;
m_pb[m_ypos][m_xpos-1]=m_pb[m_ypos-1][m_xpos-1]=m_pb[m_ypos-1][m_xpos-2]=TRUE;
m_pb[m_ypos-1][m_xpos]=m_pb[m_ypos-1][m_xpos+1]=m_pb[m_ypos-2][m_xpos+1]=FALSE;
m_valid[i++]=MAKELONG(m_xpos-1,m_ypos);
m_valid[i++]=MAKELONG(m_xpos-1,m_ypos-1);
m_valid[i++]=MAKELONG(m_xpos-2,m_ypos-1);
m_valid[i++]=MAKELONG(m_xpos,m_ypos-1);
m_valid[i++]=MAKELONG(m_xpos+1,m_ypos-1);
m_valid[i++]=MAKELONG(m_xpos+1,m_ypos-2);
--m_xpos;
++m_degree>3?m_degree=0:0;
return true;
}
else
{
if(m_pb[m_ypos-1][m_xpos-1])
{
if(m_xpos>=CXDIVISIONS-2 || m_pb[m_ypos][m_xpos+1] || m_pb[m_ypos][m_xpos+2])
return false;
m_pb[m_ypos][m_xpos+1]=m_pb[m_ypos][m_xpos+2]=TRUE;
m_pb[m_ypos][m_xpos]=m_pb[m_ypos-2][m_xpos+1]=FALSE;
m_valid[i++]=MAKELONG(m_xpos+1,m_ypos);
m_valid[i++]=MAKELONG(m_xpos+2,m_ypos);
m_valid[i++]=MAKELONG(m_xpos,m_ypos);
m_valid[i++]=MAKELONG(m_xpos+1,m_ypos-2);
++m_degree>3?m_degree=0:0;
++m_xpos;
return true;
}
m_pb[m_ypos-1][m_xpos-1]=m_pb[m_ypos][m_xpos+1]=TRUE;
m_pb[m_ypos-1][m_xpos+1]=m_pb[m_ypos-2][m_xpos+1]=FALSE;
m_valid[i++]=MAKELONG(m_xpos-1,m_ypos-1);
m_valid[i++]=MAKELONG(m_xpos+1,m_ypos);
m_valid[i++]=MAKELONG(m_xpos+1,m_ypos-1);
m_valid[i++]=MAKELONG(m_xpos+1,m_ypos-2);
++m_degree>3?m_degree=0:0;
return true;
}
}
}
return false;
case Three:
if(0==m_degree%2)
{
if(0==m_ypos)
{
m_pb[m_ypos][m_xpos-1]=FALSE;
m_valid[i++]=MAKELONG(m_xpos-1,m_ypos);
++m_degree>3?m_degree=0:0;
return true;
}
else if(1==m_ypos)
{
if(m_pb[m_ypos-1][m_xpos-1])
{
if(m_pb[m_ypos][m_
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
以前上传过俄罗斯方块1.0版,只支持单机,现在的2.0版在1.0版的基础上加了自己的socket类,实现了局域网联机对战功能,并附有源码(服务器端与客户端对战,没有同时开始功能,速度也可以不一样,下落方块的种类也不是按同样的次序,没有道具功能,只是将自己的战况实时传输给对方)。 说明:由于我的socket类支持多个客户端连接,但是联机时只有两个视窗,一个自己的,一个对家的,所以当多个客户端接入服务器端时具体表现为:服务器端的战况都会广播给所有客户端,相当于大家观看服务器端演示,但是服务器端不显示任何一个客户端的战况;而当只有一个客户端连接服务器端时,才显示这个客户端的战况。 注意:加入游戏,断开连接这两个功能在执行时,是另开线程的,我故意让关闭按钮和拖曳客户端区域移动窗口功能失效,看上去像是程序当住了,其实没当住,因为此时拖曳标题栏还是能移动窗口,右键菜单也可以弹出,这个“当住”过程会在3秒钟左右,当客户端比较多时,服务器端的这个时间会相对长一点。 有问题联系:hastings1986@163.com
资源推荐
资源详情
资源评论
收起资源包目录
俄罗斯方块2.0版.rar (28个子文件)
run.wav 9KB
12.dsp 5KB
12.cpp 37KB
12.plg 238B
stdafx.h 1KB
icon1.ico 766B
12.opt 50KB
1.bmp 33KB
Res.aps 44KB
12.ncb 97KB
Wnd.h 1KB
Els.h 907B
XPStyle.manifest 556B
2.bmp 57KB
emf.h 428B
SocketClient.cpp 22KB
Els01.cpp 66KB
俄罗斯方块2.0版.exe 200KB
Res.rc 5KB
SocketServer.cpp 25KB
resource.h 2KB
Els02.cpp 115KB
emf.cpp 3KB
12.dsw 527B
SocketClient.h 3KB
SocketServer.h 3KB
Lock.h 506B
Wnd.cpp 3KB
共 28 条
- 1
hastings
- 粉丝: 119
- 资源: 55
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
前往页