📄 diamonddlg.cpp
字号:
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 + -