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

📄 diamonddlg.cpp

📁 This file can be directly edited in Microsoft Visual C++.新的俄罗师方块游戏
💻 CPP
📖 第 1 页 / 共 3 页
字号:
		case 5:
			break;
		case 6:	//
			i=m_CurBlock[1].y;
			j=m_CurBlock[1].x;
			if(i==0) i++;
			if(m_Matrix[i+1][j][0]+m_Matrix[i][j][0]+m_Matrix[i-1][j][0]+m_Matrix[i-1][j+1][0]==0)
			{
				m_CurBlock[0].x=j;
				m_CurBlock[0].y=i+1;
				m_CurBlock[1].x=j;
				m_CurBlock[1].y=i;
				m_CurBlock[2].x=j;
				m_CurBlock[2].y=i-1;
				m_CurBlock[3].x=j+1;
				m_CurBlock[3].y=i-1;
				m_OldIndex=14;
			}
			break;
		case 7:
			i=m_CurBlock[1].y;
			j=m_CurBlock[1].x;
			if(i==0) i++;
			if(m_Matrix[i+1][j][0]+m_Matrix[i][j][0]+m_Matrix[i-1][j][0]+m_Matrix[i+1][j+1][0]==0)
			{
				m_CurBlock[0].x=j;
				m_CurBlock[0].y=i+1;
				m_CurBlock[1].x=j;
				m_CurBlock[1].y=i;
				m_CurBlock[2].x=j;
				m_CurBlock[2].y=i-1;
				m_CurBlock[3].x=j+1;
				m_CurBlock[3].y=i+1;
				m_OldIndex=17;
			}

			break;
		case 8:	//以m_CurBlock[2]为中心逆时针旋转
			//首先判断m_CurBlock[2]的左右是否有连续的4个空位
			i=m_CurBlock[2].y;
			j=m_CurBlock[2].x+1;
			count=0;
			while(m_Matrix[i][j][0]==0) { count++; j++;}	//向右搜索
			j=m_CurBlock[2].x-1;
			while(m_Matrix[i][j][0]==0) { count++; j--;}	//向左搜索
			if(count<4) break;
			///////////////////////////////////////////////
			i=m_CurBlock[2].y;
			j=m_CurBlock[2].x;

			m_CurBlock[0].x=j-1;
			m_CurBlock[0].y=i;
			m_CurBlock[1].x=j;
			m_CurBlock[1].y=i;
			m_CurBlock[2].x=j+1;
			m_CurBlock[2].y=i;
			m_CurBlock[3].x=j+2;
			m_CurBlock[3].y=i;
			while(m_CurBlock[0].x<0||m_Matrix[m_CurBlock[0].y][m_CurBlock[0].x][0]==1)	//如果左边出界或有BLOCK
				for(i=0;i<4;i++) m_CurBlock[i].x++;
			while(m_CurBlock[3].x>9||m_Matrix[m_CurBlock[3].y][m_CurBlock[3].x][0]==1)	//如果右边出界或有BLOCK
				for(i=0;i<4;i++) m_CurBlock[i].x--;
			if(m_Matrix[i+1][j-1][0]+m_Matrix[i+1][j][0]+m_Matrix[i+1][j+1][0]+m_Matrix[i+1][j+1][0]==0)	//在正常情况下避免旋转上升
				for(i=0;i<4;i++)
					m_CurBlock[i].y++;
			m_OldIndex=1;
			break;
		case 9:
			//先以m_CurBlock[1]为中心旋转
			i=m_CurBlock[1].y;
			j=m_CurBlock[1].x;
			if(j==0) j++;
			if(m_Matrix[i][j][0]+m_Matrix[i][j+1][0]+m_Matrix[i-1][j][0]+m_Matrix[i-1][j-1][0]==0)	//如果有空位
			{
			 m_CurBlock[0].x=j-1;
			 m_CurBlock[0].y=i;
			 m_CurBlock[1].x=j;
			 m_CurBlock[1].y=i;
			 m_CurBlock[2].x=j;
			 m_CurBlock[2].y=i+1;
			 m_CurBlock[3].x=j+1;
			 m_CurBlock[3].y=i+1;
			}
			else	//以m_CurBlock[2]为中心旋转
			{
			 i=m_CurBlock[2].y;
			 j=m_CurBlock[2].x;
			 if(j==21) j--;
			 if(m_Matrix[i][j][0]+m_Matrix[i+1][j+1][0]+m_Matrix[i+1][j][0]+m_Matrix[i][j-1][0]==0)
			 {
				m_CurBlock[0].x=j-1;
				m_CurBlock[0].y=i;
				m_CurBlock[1].x=j;
				m_CurBlock[1].y=i;
				m_CurBlock[2].x=j;
				m_CurBlock[2].y=i+1;
				m_CurBlock[3].x=j+1;
				m_CurBlock[3].y=i+1;
			 }
			 else 
				break;
			}
			m_OldIndex=2;
			break;
		case 10:
			//先以m_CurBlock[1]为中心旋转
			i=m_CurBlock[1].y;
			j=m_CurBlock[1].x;
			if(j==9) j--;
			if(m_Matrix[i][j][0]+m_Matrix[i][j+1][0]+m_Matrix[i+1][j][0]+m_Matrix[i+1][j-1][0]==0)
			{
				m_CurBlock[0].x=j-1;
				m_CurBlock[0].y=i+1;
				m_CurBlock[1].x=j;
				m_CurBlock[1].y=i+1;
				m_CurBlock[2].x=j;
				m_CurBlock[2].y=i;
				m_CurBlock[3].x=j+1;
				m_CurBlock[3].y=i;
				if(m_Matrix[m_CurBlock[0].y-1][m_CurBlock[0].x][0]+m_Matrix[m_CurBlock[1].y-1][m_CurBlock[0].x][0]+m_Matrix[m_CurBlock[2].y-1][m_CurBlock[0].x][0]+m_Matrix[m_CurBlock[3].y-1][m_CurBlock[0].x][0]==0)
					for(i=0;i<4;i++)	//避免正常情况下加速下降
						m_CurBlock[i].y--;
			}
			//以m_CurBlock[2]为中心旋转
			else if(m_Matrix[i][j][0]+m_Matrix[i-1][j+1][0]+m_Matrix[i-1][j][0]+m_Matrix[i][j-1][0]==0)
			{
				i=m_CurBlock[2].y;
				j=m_CurBlock[2].x;
				if(j==0) j++;
				m_CurBlock[0].x=j-1;
				m_CurBlock[0].y=i+1;
				m_CurBlock[1].x=j;
				m_CurBlock[1].y=i+1;
				m_CurBlock[2].x=j;
				m_CurBlock[2].y=i;
				m_CurBlock[3].x=j+1;
				m_CurBlock[3].y=i;
			}
			else break;
			m_OldIndex=3;
			break;
		case 11:
			i=m_CurBlock[1].y;
			j=m_CurBlock[1].x;
			if(j==0) j++;
			if(m_Matrix[i][j][0]+m_Matrix[i][j+1][0]+m_Matrix[i][j-1][0]+m_Matrix[i-1][j][0]==0)	//逆转成12
			{
				m_CurBlock[0].x=j+1;
				m_CurBlock[0].y=i;
				m_CurBlock[1].x=j;
				m_CurBlock[1].y=i;
				m_CurBlock[2].x=j-1;
				m_CurBlock[2].y=i;
				m_CurBlock[3].x=j;
				m_CurBlock[3].y=i-1;
				m_OldIndex=12;
			}
			else if(m_Matrix[i][j-1][0]+m_Matrix[i][j+1][0]+m_Matrix[i+1][j][0]==0)	//顺转成4
			{
				m_CurBlock[0].x=j-1;
				m_CurBlock[0].y=i;
				m_CurBlock[1].x=j;
				m_CurBlock[1].y=i;
				m_CurBlock[2].x=j+1;
				m_CurBlock[2].y=i;
				m_CurBlock[3].x=j;
				m_CurBlock[3].y=i+1;
				m_OldIndex=4;
			}
			break;
		case 12:
			i=m_CurBlock[1].y;
			j=m_CurBlock[1].x;
			if(m_Matrix[i-1][j][0]+m_Matrix[i+1][j][0]+m_Matrix[i][j-1][0]==0)	//逆转成13
			{
				m_CurBlock[0].x=j;
				m_CurBlock[0].y=i-1;
				m_CurBlock[2].x=j;
				m_CurBlock[2].y=i+1;
				m_CurBlock[3].x=j-1;
				m_CurBlock[3].y=i;
				m_OldIndex=13;
			}
			else if(m_Matrix[i+1][j][0]+m_Matrix[i-1][j][0]+m_Matrix[i][j+1][0]==0)	//顺转成11
			{
				m_CurBlock[0].x=j;
				m_CurBlock[0].y=i+1;
				m_CurBlock[2].x=j;
				m_CurBlock[2].y=i-1;
				m_CurBlock[3].x=j+1;
				m_CurBlock[3].y=i;
				m_OldIndex=11;
			}
			break;
		case 13:
			i=m_CurBlock[1].y;
			j=m_CurBlock[1].x;
			if(j==9) j--;
			if(m_Matrix[i][j][0]+m_Matrix[i][j-1][0]+m_Matrix[i][j+1][0]+m_Matrix[i+1][j][0]==0)	//逆转成4
			{
				m_CurBlock[0].x=j-1;
				m_CurBlock[0].y=i;
				m_CurBlock[1].x=j;
				m_CurBlock[1].y=i;
				m_CurBlock[2].x=j+1;
				m_CurBlock[2].y=i;
				m_CurBlock[3].x=j;
				m_CurBlock[3].y=i+1;
				m_OldIndex=4;
			}
			else if(m_Matrix[i][j+1][0]+m_Matrix[i][j-1][0]+m_Matrix[i-1][j][0]==0)	//顺转成12
			{
				m_CurBlock[0].x=j+1;
				m_CurBlock[0].y=i;
				m_CurBlock[1].x=j;
				m_CurBlock[1].y=i;
				m_CurBlock[2].x=j-1;
				m_CurBlock[2].y=i;
				m_CurBlock[3].x=j;
				m_CurBlock[3].y=i-1;
				m_OldIndex=12;
			}
			break;
		case 14:
			i=m_CurBlock[1].y;
			j=m_CurBlock[1].x;
			if(j==0) j++;
			if(m_Matrix[i][j+1][0]+m_Matrix[i][j][0]+m_Matrix[i][j-1][0]+m_Matrix[i-1][j-1][0]==0)
			{
				m_CurBlock[0].x=j+1;
				m_CurBlock[0].y=i;
				m_CurBlock[1].x=j;
				m_CurBlock[1].y=i;
				m_CurBlock[2].x=j-1;
				m_CurBlock[2].y=i;
				m_CurBlock[3].x=j-1;
				m_CurBlock[3].y=i-1;
				m_OldIndex=15;
			}
			break;
		case 15:
			i=m_CurBlock[1].y;
			j=m_CurBlock[1].x;
			if(j==21) j--;
			if(m_Matrix[i-1][j][0]+m_Matrix[i][j][0]+m_Matrix[i+1][j][0]+m_Matrix[i+1][j-1][0]==0)
			{
				m_CurBlock[0].x=j;
				m_CurBlock[0].y=i-1;
				m_CurBlock[1].x=j;
				m_CurBlock[1].y=i;
				m_CurBlock[2].x=j;
				m_CurBlock[2].y=i+1;
				m_CurBlock[3].x=j-1;
				m_CurBlock[3].y=i+1;
				m_OldIndex=16;
			}
			break;
		case 16:
			i=m_CurBlock[1].y;
			j=m_CurBlock[1].x;
			if(j==9) j--;
			if(m_Matrix[i][j-1][0]+m_Matrix[i][j][0]+m_Matrix[i][j+1][0]+m_Matrix[i+1][j+1][0]==0)
			{
				m_CurBlock[0].x=j-1;
				m_CurBlock[0].y=i;
				m_CurBlock[1].x=j;
				m_CurBlock[1].y=i;
				m_CurBlock[2].x=j+1;
				m_CurBlock[2].y=i;
				m_CurBlock[3].x=j+1;
				m_CurBlock[3].y=i+1;
				m_OldIndex=6;
			}
			break;
		case 17:
			i=m_CurBlock[1].y;
			j=m_CurBlock[1].x;
			if(j==0) j++;
			if(m_Matrix[i][j+1][0]+m_Matrix[i][j][0]+m_Matrix[i][j-1][0]+m_Matrix[i-1][j+1][0]==0)
			{
				m_CurBlock[0].x=j+1;
				m_CurBlock[0].y=i;
				m_CurBlock[1].x=j;
				m_CurBlock[1].y=i;
				m_CurBlock[2].x=j-1;
				m_CurBlock[2].y=i;
				m_CurBlock[3].x=j+1;
				m_CurBlock[3].y=i-1;
				m_OldIndex=18;
			}
			break;
		case 18:
			i=m_CurBlock[1].y;
			j=m_CurBlock[1].x;
			if(j==21) j--;
			if(m_Matrix[i-1][j][0]+m_Matrix[i][j][0]+m_Matrix[i+1][j][0]+m_Matrix[i-1][j-1][0]==0)
			{
				m_CurBlock[0].x=j;
				m_CurBlock[0].y=i-1;
				m_CurBlock[1].x=j;
				m_CurBlock[1].y=i;
				m_CurBlock[2].x=j;
				m_CurBlock[2].y=i+1;
				m_CurBlock[3].x=j-1;
				m_CurBlock[3].y=i-1;
				m_OldIndex=19;
			}
			break;
		case 19:
			i=m_CurBlock[1].y;
			j=m_CurBlock[1].x;
			if(j==9) j--;
			if(m_Matrix[i][j-1][0]+m_Matrix[i][j][0]+m_Matrix[i][j+1][0]+m_Matrix[i+1][j-1][0]==0)
			{
				m_CurBlock[0].x=j-1;
				m_CurBlock[0].y=i;
				m_CurBlock[1].x=j;
				m_CurBlock[1].y=i;
				m_CurBlock[2].x=j+1;
				m_CurBlock[2].y=i;
				m_CurBlock[3].x=j-1;
				m_CurBlock[3].y=i+1;
				m_OldIndex=7;
			}
			break;
		default:
			break;
	}	//End of switch
	DrawCurBlock();
	return;
}

void CDiamondDlg::Acceleration()
{
 for(int i=0;i<m_AccelerateSpeed;i++) DropDown();
}

void CDiamondDlg::OnHelpAbout() 
{
	// TODO: Add your command handler code here
	CAboutDlg AboutDlg;
	AboutDlg.DoModal();
}

void CDiamondDlg::OnFileRestart() 
{
	// TODO: Add your command handler code here
	OnFileNewgame();
}

void CDiamondDlg::OnFileExit() 
{
	// TODO: Add your command handler code here
	PostQuitMessage(0);	
}

void CDiamondDlg::OnFileResume() 
{
	// TODO: Add your command handler code here
	m_bPause=FALSE;
	SetTimer(1,600-50*m_Level,NULL);
}

void CDiamondDlg::OnOptionConfig() 
{
	// TODO: Add your command handler code here
	CConfigDlg ConfigDlg;
	char str[128];

	ConfigDlg.m_AccelerateSpeed=m_AccelerateSpeed;
	ConfigDlg.m_Level=m_SettingLevel;
	ConfigDlg.m_bShowRaster=m_bShowRaster;
	if(ConfigDlg.DoModal()==IDOK)
	{
		m_SettingLevel=m_Level=ConfigDlg.m_Level;
		m_AccelerateSpeed=ConfigDlg.m_AccelerateSpeed;
		m_bShowRaster=ConfigDlg.m_bShowRaster;
		Invalidate();
		sprintf(str,"%d",m_Score);
		m_ScoreCtrl.SetWindowText(str);
		sprintf(str,"%d",m_Level);
		m_LevelCtrl.SetWindowText(str);
	}
//	SetTimer(1,700-60*m_Level,NULL);
}

void CDiamondDlg::OnQueryRecord() 
{
	// TODO: Add your command handler code here
	if(!m_pRecordDlg1)
		m_pRecordDlg1=new CRecordDlg();
	if(m_pRecordDlg1->IsOpen()==FALSE)
		m_pRecordDlg1->Create(IDD_RECORDS);
	////////////////////////////////////
	char msg[12];
	m_pRecordDlg1->m_RecordList.DeleteAllItems();
	for(int i=0;i<m_recordCount;i++)
	{
		sprintf(msg,"%d",i+1);
		m_pRecordDlg1->m_RecordList.InsertItem(i, msg);
		m_pRecordDlg1->m_RecordList.SetItemText(i, 1, m_recordName[i]);
		sprintf(msg,"%ld",m_recordScore[i]);
		m_pRecordDlg1->m_RecordList.SetItemText(i, 2, msg);
		sprintf(msg,"%d",m_recordLevel[i]);
		m_pRecordDlg1->m_RecordList.SetItemText(i, 3, msg);
		m_pRecordDlg1->m_RecordList.SetItemText(i, 4, m_recordDate[i]);
	}
	////////////////////////////////////
	if(m_pRecordDlg1->IsVisible()==FALSE)
		m_pRecordDlg1->ShowWindow(SW_SHOW);
	return;
}

void CDiamondDlg::NewRecord()
{
	CNewRecordDlg NewRecordDlg;
	NewRecordDlg.DoModal();
	if(strcmp(NewRecordDlg.m_recordName,"")==0)
		NewRecordDlg.m_recordName.Format("Anonymous");
	if(m_recordCount<10) m_recordCount++;
	for(int i=m_recordCount-1;i>0;i--)
	{
		strcpy(m_recordName[i],m_recordName[i-1]);
		m_recordScore[i]=m_recordScore[i-1];
		m_recordLevel[i]=m_recordLevel[i-1];
		strcpy(m_recordDate[i],m_recordDate[i-1]);
	}
	strcpy(m_recordName[0],NewRecordDlg.m_recordName);
	m_recordScore[0]=m_Score;
	m_recordLevel[0]=m_Level;
	CTime time;
	sprintf(m_recordDate[0],"%d/%d/%d",time.GetCurrentTime().GetMonth(),time.GetCurrentTime().GetDay(),time.GetCurrentTime().GetYear());
	for(i=0;i<m_recordCount;i++)
		m_recordNo[i]=i+1;

	FILE *fp;
	fp=fopen("diamond.dat","w");
	if(fp==NULL) return;
	fprintf(fp,"%d\n",m_recordCount);
	for(i=0;i<m_recordCount;i++)
	{
		fprintf(fp,"%d\t%s\t%ld\t%d\t%s\n",i+1,m_recordName[i],m_recordScore[i],m_recordLevel[i],m_recordDate[i]);
	}
	fclose(fp);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -