⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 edge.cpp

📁 俄罗斯方块,带背景音乐,带扩展窗口,操作同qq游戏的疯狂俄罗斯
💻 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 + -