📄 edge.cpp
字号:
// Edge.cpp: implementation of the Edge class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "TE.h"
#include "Edge.h"
#define FORHEAD _MakeUp+WIDE+2+WIDE/2
#define LOOKFORHEAD _Look+WIDE+2+WIDE/2
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
Edge::~Edge()
{
}
/*------------------------------Constructors---------------------*/
Edge::Edge():_Score(0){
for(int i=0;i<WIDE*HIGH;i++){
if(i>=WIDE*(HIGH-1)){
_MakeUp[i]=3;
}
else{
if(!(i%WIDE)||!((i+1)%WIDE)){
_MakeUp[i]=2;
}
else{
_MakeUp[i]=0;
}
}
}
for(i=0;i<WIDE;i++){
_MakeUp[i]=4;
}
_Location=FORHEAD;
}
/*------------------------Move Object left(1) right(2)-----------------*/
void Edge::ObjectMove(Model *model,int dirctor){
int *mod=model->Mod()+15;
int check=0;
int *location;
if(dirctor==1){
location=_Location-1;
}
else{
location=_Location+1;
}
int *loc=location;
for(int i=0;i<4;i++){
location=loc-i*WIDE;
for(int j=0;j<4;j++){
if(*mod!=0&&*location!=0)
return;
if(*location==4){
_Location=loc;
return;
}
if(*location==2)
check=1;
mod--;
location--;
}
}
if(check==0){
_Location=loc;
}
if(check==1&&dirctor==1)
model->MoveLeft();
if(check==1&&dirctor==2)
model->MoveRight();
return;
}
/*-----------------Object Down-return 0:never mind-return 1:down the floor--------------------------*/
int Edge::ObjectDown(Model *model,int color){
int *mod=model->Mod()+15;
int *location=_Location+WIDE;
int *loc=location;
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
if((*mod==1&&*location>ADDDATA)||(*location==3&&*mod==1)){
int *locate=_Location;
int *make=model->Mod()+15;
for(int c=0;c<4;c++){
locate=_Location-c*WIDE;
for(int d=0;d<4;d++){
if(*locate==0&&*make==1)
*locate=color+ADDDATA;
if(*locate==4){
_Location=FORHEAD;
return 1;
}
locate--;make--;
}
}
_Location=FORHEAD;
return 1;
}
if(*(location)==4){
_Location=loc;
return 0;
}
mod--;
location--;
}
location=_Location-i*WIDE;
}
_Location=loc;
return 0;
}
/*------------------------if the model down to the floor----------------*/
int Edge::OnTheFloor(){
for(int j=1;j<HIGH-1;j++){
int check=0;
for(int i=1;i<WIDE-1;i++){
if(_MakeUp[j*WIDE+i]>ADDDATA)
check++;
}
if(check==WIDE-2){
int *temp=_MakeUp+j*WIDE+WIDE-1;
int *temp2=temp-WIDE;
// int *looktemp=_Look+j*WIDE+WIDE-1;
// int *looktemp2=looktemp-WIDE;
if(temp!=0){
for(int u=1;u<j-2;u++){
for(int v=0;v<WIDE;v++){
*temp=*temp2;
temp--;
temp2--;
// *looktemp=*looktemp2;
// looktemp--;
// looktemp2--;
}
}
}
return j;
}
}
return j;
}
/*-----------------------Lines(0,1,2,3,4),Lines(100)die--------------------*/
int Edge::Lines(){
int Lines=0;
for(int j=1;j<HIGH-1;j++){
int check=0;
for(int i=1;i<WIDE-1;i++){
if(_MakeUp[j*WIDE+i]>ADDDATA)
check++;
}
if(check==WIDE-2)
Lines++;
}
if(Lines!=0)
_Score=_Score+Lines*Lines;
if(*(_MakeUp+WIDE/2+WIDE)!=0||*(_MakeUp+WIDE/2+WIDE+1)!=0||*(_MakeUp+WIDE/2+WIDE-1)!=0)
Lines=100; /*the single of die*/
return Lines;
}
/*---------------------------turn object------------------------------------*/
void Edge::ObjectTurn(Model *mod){
int *Check=mod->turn(0)+15;
for(int j=0;j<4;j++){
int *temp=_Location;
for(int i=0;i<4;i++){
if((*Check)!=0&&(*temp)!=0)
return;
temp--;Check--;
}
}
mod->turn(1);
return;
}
/*------------------------------------------*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -