📄 snakemapdlg.cpp
字号:
void CSnakemapDlg::OnAppAbout()
{
CAboutDlg ad;
ad.DoModal();
}
void CSnakemapDlg::OnMenuitem32776() // save single
{
CFileDialog fd(FALSE,"","stage",OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"All files(*.*)|*.*||");
if(fd.DoModal()!=IDOK) return;
CFile file(fd.GetPathName(),CFile::modeCreate|CFile::typeBinary|CFile::modeWrite);
UpdateData(TRUE);
int i;
byte d[32];
for(i=0;i<32;i++){
d[i]=0x20;
}
for(i=0;i<m_curName.GetLength();i++){
if(i==32) break;
d[i]=(byte)m_curName.GetAt(i);
}
file.Write(d,32);
byte data;
data=(byte)(m_earth+1);
file.Write(&data,1);
data=(byte)m_speed;
file.Write(&data,1);
if(m_dir==0)data=1;
else if(m_dir==1)data=6;
else if(m_dir==2)data=2;
else if(m_dir==3)data=5;
file.Write(&data,1);
data=(byte)m_snake1x;
file.Write(&data,1);
data=(byte)m_snake1y;
file.Write(&data,1);
data=(byte)m_snake2x;
file.Write(&data,1);
data=(byte)m_snake2y;
file.Write(&data,1);
data=(byte)m_snakecolor1;
file.Write(&data,1);
data=(byte)m_snake3x;
file.Write(&data,1);
data=(byte)m_snake3y;
file.Write(&data,1);
data=(byte)m_snakecolor2;
file.Write(&data,1);
file.Write(map,480);
file.Close();
AfxMessageBox("Save complete!");
}
void CSnakemapDlg::OnMenuitem32775() // open
{
CFileDialog fd(TRUE,NULL,NULL,OFN_FILEMUSTEXIST,"All files(*.*)|*.*||");
if(fd.DoModal()!=IDOK) return;
if(openedfile==NULL){
openedfile=new CFile();
}else{
openedfile->Close();
}
openedfile->Open(fd.GetPathName(),CFile::modeReadWrite|CFile::typeBinary);
int num=openedfile->GetLength()/523;
int i;
unsigned char data;
unsigned char name[32];
m_lvlist.ResetContent();
for(i=0;i<num;i++){
openedfile->Seek(523*i,CFile::begin);
openedfile->Read(name,32);
m_lvlist.AddString(CString(name));
}
m_lvlist.SetCurSel(0);
openedfile->SeekToBegin();
openedfile->Read(name,32);
m_curName=CString(name);
openedfile->Read(&data,1);
m_earth=data-1;
openedfile->Read(&data,1);
m_speed=data;
openedfile->Read(&data,1);
if(data==1) m_dir=0;
else if(data==6) m_dir=1;
else if(data==2) m_dir=2;
else m_dir=3;
openedfile->Read(&data,1);
m_snake1x=data;
openedfile->Read(&data,1);
m_snake1y=data;
openedfile->Read(&data,1);
m_snake2x=data;
openedfile->Read(&data,1);
m_snake2y=data;
openedfile->Read(&data,1);
m_snakecolor1=data;
openedfile->Read(&data,1);
m_snake3x=data;
openedfile->Read(&data,1);
m_snake3y=data;
openedfile->Read(&data,1);
m_snakecolor2=data;
openedfile->Read(map,480);
UpdateData(FALSE);
}
void CSnakemapDlg::OnMenuitem32771() // Add map
{
if(openedfile==NULL){
AfxMessageBox("You cannot add map to a unsaved file.\nSave this file first ,then open it and add again.");
return;
}
m_dir=3;
m_earth=0;
m_item1=0;
m_snake1x=7;
m_snake2x=6;
m_snake3x=5;
m_snake1y=m_snake2y=m_snake3y=10;
m_snakecolor1=2;
m_snakecolor2=2;
curX=0;
curY=0;
int i;
for( i=0;i<480;i++){
map[i]=0;
}
m_lvlist.InsertString(-1,"SnakeMap");
m_speed=0;
m_curName="SnakeMap";
UpdateData(FALSE);
Invalidate();
openedfile->SeekToEnd();
byte d[32];
for(i=0;i<32;i++){
d[i]=0x20;
}
for(i=0;i<m_curName.GetLength();i++){
if(i==32) break;
d[i]=(byte)m_curName.GetAt(i);
}
openedfile->Write(d,32);
byte data;
data=(byte)(m_earth+1);
openedfile->Write(&data,1);
data=(byte)m_speed;
openedfile->Write(&data,1);
if(m_dir==0)data=1;
else if(m_dir==1)data=6;
else if(m_dir==2)data=2;
else if(m_dir==3)data=5;
openedfile->Write(&data,1);
data=(byte)m_snake1x;
openedfile->Write(&data,1);
data=(byte)m_snake1y;
openedfile->Write(&data,1);
data=(byte)m_snake2x;
openedfile->Write(&data,1);
data=(byte)m_snake2y;
openedfile->Write(&data,1);
data=(byte)m_snakecolor1;
openedfile->Write(&data,1);
data=(byte)m_snake3x;
openedfile->Write(&data,1);
data=(byte)m_snake3y;
openedfile->Write(&data,1);
data=(byte)m_snakecolor2;
openedfile->Write(&data,1);
openedfile->Write(map,480);
}
void CSnakemapDlg::OnMenuitem32777() // New
{
if(AfxMessageBox("Current unsaved map will be lost,continue?",MB_OKCANCEL)!=IDOK) return;
m_dir=3;
m_earth=0;
m_item1=0;
m_snake1x=7;
m_snake2x=6;
m_snake3x=5;
m_snake1y=m_snake2y=m_snake3y=10;
m_snakecolor1=2;
m_snakecolor2=2;
curX=0;
curY=0;
for(int i=0;i<480;i++){
map[i]=0;
}
m_lvlist.ResetContent();
delete openedfile;
openedfile=NULL;
m_speed=0;
m_curName="SnakeMap";
UpdateData(FALSE);
Invalidate();
}
void CSnakemapDlg::OnSelchangeList1()
{
if(openedfile==NULL) return;
//if(AfxMessageBox("The current stage will NOT be saved unless you choose save in the file menu,continue?",MB_OKCANCEL)!=IDOK)return;
int p=m_lvlist.GetCurSel();
openedfile->Seek(523*p,CFile::begin);
unsigned char name[32];
unsigned char data;
openedfile->Read(name,32);
m_curName=CString(name);
openedfile->Read(&data,1);
m_earth=data-1;
openedfile->Read(&data,1);
m_speed=data;
openedfile->Read(&data,1);
if(data==1) m_dir=0;
else if(data==6) m_dir=1;
else if(data==2) m_dir=2;
else m_dir=3;
openedfile->Read(&data,1);
m_snake1x=data;
openedfile->Read(&data,1);
m_snake1y=data;
openedfile->Read(&data,1);
m_snake2x=data;
openedfile->Read(&data,1);
m_snake2y=data;
openedfile->Read(&data,1);
m_snakecolor1=data;
openedfile->Read(&data,1);
m_snake3x=data;
openedfile->Read(&data,1);
m_snake3y=data;
openedfile->Read(&data,1);
m_snakecolor2=data;
openedfile->Read(map,480);
UpdateData(FALSE);
Invalidate();
}
void CSnakemapDlg::OnMenuitem32772() // save in file
{
if(openedfile==NULL){
AfxMessageBox("No files opened!");
return;
}
int i;
UpdateData(TRUE);
byte d[32];
openedfile->Seek(523*m_lvlist.GetCurSel(),CFile::begin);
for(i=0;i<32;i++){
d[i]=0x20;
}
for(i=0;i<m_curName.GetLength();i++){
if(i==32) break;
d[i]=(byte)m_curName.GetAt(i);
}
openedfile->Write(d,32);
byte data;
data=(byte)(m_earth+1);
openedfile->Write(&data,1);
data=(byte)m_speed;
openedfile->Write(&data,1);
if(m_dir==0)data=1;
else if(m_dir==1)data=6;
else if(m_dir==2)data=2;
else if(m_dir==3)data=5;
openedfile->Write(&data,1);
data=(byte)m_snake1x;
openedfile->Write(&data,1);
data=(byte)m_snake1y;
openedfile->Write(&data,1);
data=(byte)m_snake2x;
openedfile->Write(&data,1);
data=(byte)m_snake2y;
openedfile->Write(&data,1);
data=(byte)m_snakecolor1;
openedfile->Write(&data,1);
data=(byte)m_snake3x;
openedfile->Write(&data,1);
data=(byte)m_snake3y;
openedfile->Write(&data,1);
data=(byte)m_snakecolor2;
openedfile->Write(&data,1);
openedfile->Write(map,480);
AfxMessageBox("Save complete!");
}
void CSnakemapDlg::OnChangeEdit9()
{
// TODO: If this is a RICHEDIT control, the control will not
// send this notification unless you override the CDialog::OnInitDialog()
// function and call CRichEditCtrl().SetEventMask()
// with the ENM_CHANGE flag ORed into the mask.
// TODO: Add your control notification handler code here
if(m_lvlist.GetCurSel()==-1)return;
UpdateData(TRUE);
if(m_curName.GetLength()>32){
AfxMessageBox("Stage name must be shorter than 32 ltrs!");
m_curName=m_curName.Right(32);
UpdateData(FALSE);
return;
}
int i=m_lvlist.GetCurSel();
m_lvlist.DeleteString(i);
m_lvlist.InsertString(i,m_curName);
m_lvlist.SetCurSel(i);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -