📄 llkform.cs
字号:
panelDif1.Controls[0].Dispose() ;
}
DeleData = new int[9,14];
//开始游戏
menuOptConfig.Enabled = false ;
GameShow(panelDif1);
}
private void menuGameDif2_Click(object sender, System.EventArgs e)
{
//配置中级参数
Status = 1 ;
MouseNum = 0 ;
NumDif = 2 ;
if(NumLev == 0) { NumLev = 1 ; }
if(NumHint == 0) { NumHint = 6 ; }
if(NumRedo == 0) { NumRedo = 4 ; }
if(NumTimeAdd == 0) { NumTimeAdd = 2 ; }
if(NumTimeMax == 0) { NumTimeMax = 180 ; }
NumTime = NumTimeMax ;
NumPlanDec = panelSchedule.Width/NumTimeMax ;
labelAchievement.Text = "0" ;
labelSchedule.Left = panelSchedule.Width ;
panelPause.Visible = false ;
panelDif1.Visible = false ;
panelDif3.Visible = false ;
StatusShow() ;
//对象初始化
int PicNum = panelDif2.Controls.Count ;
for(int i=0;i<PicNum;i++)
{
panelDif2.Controls[0].Dispose() ;
}
DeleData = new int[10,16];
//开始游戏
menuOptConfig.Enabled = false ;
GameShow(panelDif2);
}
private void menuGameDif3_Click(object sender, System.EventArgs e)
{
//配置高级参数
Status = 1 ;
MouseNum = 0 ;
NumDif = 3 ;
if(NumLev == 0) { NumLev = 1 ; }
if(NumHint == 0) { NumHint = 7 ; }
if(NumRedo == 0) { NumRedo = 5 ; }
if(NumTimeAdd == 0) { NumTimeAdd = 3 ; }
if(NumTimeMax == 0) { NumTimeMax = 240 ; }
NumTime = NumTimeMax ;
NumPlanDec = panelSchedule.Width/NumTimeMax ;
labelAchievement.Text = "0" ;
labelSchedule.Left = panelSchedule.Width ;
panelPause.Visible = false ;
panelDif1.Visible = false ;
panelDif2.Visible = false ;
StatusShow() ;
//对象初始化
int PicNum = panelDif3.Controls.Count ;
for(int i=0;i<PicNum;i++)
{
panelDif3.Controls[0].Dispose() ;
}
DeleData = new int[11,18];
//开始游戏
menuOptConfig.Enabled = false ;
GameShow(panelDif3);
}
private void menuGameStop_Click(object sender, System.EventArgs e)
{
//停止游戏
GameTime.Stop();
menuOptConfig.Enabled = true ;
panelDif1.Visible = false ;
panelDif2.Visible = false ;
panelDif3.Visible = false ;
panelPause.Visible = true ;
MouseNum = 0 ;
Status = 0 ;
}
private void menuGameExit_Click(object sender, System.EventArgs e)
{
//退出操作
this.Close() ;
}
private void menuOptHint_Click(object sender, System.EventArgs e)
{
//提示操作
if ( NumHint > 0)
{
NumHint--;
Panel PanelTmp = panelDif1 ;
switch (NumDif)
{
case 1 :
PanelTmp = panelDif1 ;
break;
case 2 :
PanelTmp = panelDif2 ;
break;
case 3 :
PanelTmp = panelDif3 ;
break;
}
int TmpCount = PanelTmp.Controls.Count ;
int result = 0 ;
for(int i=0;i<TmpCount-1;i++)
for(int j=i+1;j<TmpCount;j++)
{
if(Connexity((PictureBox)PanelTmp.Controls[i],(PictureBox)PanelTmp.Controls[j]))
{
//提示可连图片
PathShow((PictureBox)PanelTmp.Controls[i],(PictureBox)PanelTmp.Controls[j]) ;
//直接删除可连图片
//PicDelete((PictureBox)PanelTmp.Controls[i],(PictureBox)PanelTmp.Controls[j]) ;
i = TmpCount ;
j = TmpCount ;
result = 1 ;
}
}
if(result == 0)
{
NumRedo++;
menuOptRedo_Click(sender,e);
}
}
StatusShow() ;
}
private void menuOptRedo_Click(object sender, System.EventArgs e)
{
//洗牌操作
if (NumRedo > 0)
{
NumRedo--;
Panel PanelTmp = panelDif1 ;
switch (NumDif)
{
case 1 :
PanelTmp = panelDif1 ;
break;
case 2 :
PanelTmp = panelDif2 ;
break;
case 3 :
PanelTmp = panelDif3 ;
break;
}
int TmpCount = PanelTmp.Controls.Count ;
int result = 0 ;
for(int i=0;i<TmpCount;i++)
{
Random NumRand = new Random();
int NumTmp = NumRand.Next(0,TmpCount-1) ;
int left = PanelTmp.Controls[i].Left ;
int top = PanelTmp.Controls[i].Top ;
PanelTmp.Controls[i].Left = PanelTmp.Controls[NumTmp].Left ;
PanelTmp.Controls[i].Top = PanelTmp.Controls[NumTmp].Top ;
PanelTmp.Controls[NumTmp].Left = left ;
PanelTmp.Controls[NumTmp].Top = top ;
}
//验证正连性
for(int i=0;i<TmpCount-1;i++)
for(int j=i+1;j<TmpCount;j++)
{
if(Connexity((PictureBox)PanelTmp.Controls[i],(PictureBox)PanelTmp.Controls[j]))
{
i = TmpCount ;
j = TmpCount ;
result = 1 ;
}
}
if(result == 0)
{ menuOptRedo_Click(sender,e); }
}
StatusShow() ;
}
private void menuOptPause_Click(object sender, System.EventArgs e)
{
//暂停操作
if ( Status == 1)
{
Status = 0 ;
GameTime.Stop() ;
menuOptHint.Enabled = false ;
menuOptRedo.Enabled = false;
if (NumDif == 1 ) { panelDif1.Visible = false ; }
if (NumDif == 2 ) { panelDif2.Visible = false ; }
if (NumDif == 3 ) { panelDif3.Visible = false ; }
panelPause.Visible = true ;
panelPause.Focus() ;
}
else
{
Status = 1 ;
GameTime.Start();
menuOptHint.Enabled = true ;
menuOptRedo.Enabled = true ;
panelPause.Visible = false;
if (NumDif == 1 ) { panelDif1.Visible = true ; }
if (NumDif == 2 ) { panelDif2.Visible = true ; }
if (NumDif == 3 ) { panelDif3.Visible = true ; }
}
}
private void menuOptConfig_Click(object sender, System.EventArgs e)
{
//配置初始参数信息
LLKConfig LLKCF = new LLKConfig() ;
LLKCF.Show() ;
}
private void GameTime_Tick(object sender, System.EventArgs e)
{
//记时操作
NumTime-- ;
if (NumTime == 0)
{ //时间已用完,游戏结束
GameTime.Stop();
MessageBox.Show("时间已到,Game Over!");
switch (NumDif)
{
case 1 :
menuGameDif1_Click(sender,e);
break;
case 2 :
menuGameDif2_Click(sender,e);
break;
case 3 :
menuGameDif3_Click(sender,e);
break;
}
}
else
{
labelSchedule.Left = (int)(NumTime * NumPlanDec);
labelSchedule.Width = panelSchedule.Width - labelSchedule.Left;
}
}
private void StatusShow()
{
//显示游戏状态信息
switch (NumDif)
{
case 1 :
labelDif.Text = "难度:初级" ;
break;
case 2 :
labelDif.Text = "难度:中级" ;
break;
case 3 :
labelDif.Text = "难度:高级" ;
break;
}
switch (NumLev)
{
case 1 :
labelMode.Text = "方式:不变" ;
break;
case 2 :
labelMode.Text = "难度:向下" ;
break;
case 3 :
labelMode.Text = "难度:向上" ;
break;
case 4 :
labelMode.Text = "方式:向左" ;
break;
case 5 :
labelMode.Text = "难度:向右" ;
break;
case 6 :
labelMode.Text = "难度:左右" ;
break;
case 7 :
labelMode.Text = "难度:上下" ;
break;
case 8 :
labelMode.Text = "难度:左右集中" ;
break;
case 9 :
labelMode.Text = "难度:上下集中" ;
break;
}
labelLev.Text = "级别:" + NumLev ;
labelHint.Text = "提示:" + NumHint ;
labelRedo.Text = "刷新:" + NumRedo ;
}
private void GameShow(Panel faceplate)
{
//显示游戏面板
faceplate.Visible = true ;
int PanelWidth = faceplate.Width ;
int PanelHeight = faceplate.Height ;
NumWidth = PanelWidth/40 - 1 ;
NumHeight = PanelHeight/40 - 1;
int NumPic = NumHeight*NumWidth/4 ;
//初始空闲空间
for(int i=0;i<NumHeight+2;i++)
for(int j=0;j<NumWidth+2;j++)
{
DeleData[i,j] = 0 ;
if((i == 0)||(i == NumHeight+1) ) { DeleData[i,j] = 1 ; }
if((j == 0)||(j == NumWidth+1) ) { DeleData[i,j] = 1 ; }
}
//生成所需坐标组
GridData = new DataTable("Grid") ;
GridData.Columns.Add("X", typeof(Int32));
GridData.Columns.Add("Y", typeof(Int32));
for(int j=0;j<NumHeight;j++)
for (int i=0;i<NumWidth;i++)
{
DataRow workRow = GridData.NewRow();
workRow["X"] = i*40 + 20 ;
workRow["Y"] = j*40 + 20 ;
GridData.Rows.Add(workRow);
}
Random NumRand = new Random();
for(int i=1;i<= NumPic;i++)
{ //循环生成图片对象
string imagesfile = @"images\LLK\"+i.ToString()+".bmp";
for(int j=1;j<=4;j++)
{
PictureBox MyPic = new PictureBox() ;
Bitmap MyImage = new Bitmap(AppDomain.CurrentDomain.SetupInformation.ApplicationBase+imagesfile);
MyPic.Name = "Pic_"+i.ToString()+"_"+j.ToString() ;
MyPic.Parent = faceplate ;
MyPic.SizeMode = PictureBoxSizeMode.StretchImage ;
MyPic.ClientSize = new Size(40, 40);
int NumTmp = NumRand.Next(0,GridData.Rows.Count - 1) ;
MyPic.Left = (int)GridData.Rows[NumTmp]["X"] ;
MyPic.Top = (int)GridData.Rows[NumTmp]["Y"] ;
MyPic.Image = (Image) MyImage ;
MyPic.Visible = true;
MyPic.Click += new System.EventHandler(this.MyPic_Click);
GridData.Rows[NumTmp].Delete() ;
}
}
GameTime.Start();
}
private void MyPic_Click(object sender, System.EventArgs e)
{
PictureBox MyPic = (PictureBox)sender ;
MyPic.BorderStyle = BorderStyle.Fixed3D ;
if(MouseNum == 0)
{
//点选第一张图片
MouseNum = 1;
OldSender = MyPic ;
}
else
{
//点选第二张图片
MouseNum = 0;
if( Connexity(OldSender,MyPic) )
{ //图片可连
//销毁这两个对类
PicDelete(OldSender,MyPic) ;
}
else
{
//图片不可连
MyPic.BorderStyle = BorderStyle.None ;
OldSender.BorderStyle = BorderStyle.None ;
}
}
}
private bool Connexity(PictureBox Pic1,PictureBox Pic2)
{
//对图片对象进行可连性判断
//初始变量信息
int Pic1LeftNum = (Pic1.Left-20)/40+1 ;
int Pic1TopNum = (Pic1.Top-20)/40+1 ;
int Pic2LeftNum = (Pic2.Left-20)/40+1 ;
int Pic2TopNum = (Pic2.Top-20)/40+1 ;
int add = 0 ;
int Pic1Status = 0 ;
int Pic2Status = 0 ;
int LineStatus = 0 ;
int i = 0 ;
//记录路由信息
Path = new int[4,4];
PathCount = 4 ;
Path[0,0] = Pic1.Left + 20 ;
Path[0,1] = Pic1.Top + 20 ;
//0.判断图片类型是否一样
if((Pic1.Name == Pic2.Name)||(Pic1.Name.Substring(0,6) != Pic2.Name.Substring(0,6)))
{
//图片类型不一样
Pic1.BorderStyle = BorderStyle.None ;
Pic2.BorderStyle = BorderStyle.None ;
return false ;
}
//1.判断是否相邻
if(Pic1LeftNum == Pic2LeftNum)
{
if((Pic1TopNum-1 == Pic2TopNum)||(Pic2TopNum-1 == Pic1TopNum))
{
Path[1,0] = Pic1.Left + 20 ;
Path[1,1] = Pic1.Top + 20 ;
Path[2,0] = Pic2.Left + 20 ;
Path[2,1] = Pic2.Top + 20 ;
Path[3,0] = Pic2.Left + 20 ;
Path[3,1] = Pic2.Top + 20 ;
return true ;
}
}
if(Pic1TopNum == Pic2TopNum)
{
if((Pic1LeftNum-1 == Pic2LeftNum)||(Pic2LeftNum-1 == Pic1LeftNum))
{
Path[1,0] = Pic1.Left + 20 ;
Path[1,1] = Pic1.Top + 20 ;
Path[2,0] = Pic2.Left + 20 ;
Path[2,1] = Pic2.Top + 20 ;
Path[3,0] = Pic2.Left + 20 ;
Path[3,1] = Pic2.Top + 20 ;
return true ;
}
}
//2.水平扫描
for(int col=0;col<NumWidth+2;col++)
{
LineStatus = 0 ;
Pic1Status = 0 ;
Pic2Status = 0 ;
//2.1检测扫描线的可连性
if(Pic1LeftNum == col)
{ //扫描线与Pic1在同一列
if(Pic1TopNum == Pic2TopNum)
{ //Pic1与Pic2在同一行
//扫描线可用
LineStatus = 1 ;
}
if(Pic2LeftNum == col)
{ //扫描线与Pic2在同一列
if(Pic1TopNum > Pic2TopNum)
{ //Pic1在Pic2下方
add = 0 ;
for(i=Pic2TopNum+1;i<Pic1TopNum;i++)
{
add = add + DeleData[i,col] ;
}
if(add == (Pic1TopNum-Pic2TopNum-1))
{
//扫描线可用
LineStatus = 1 ;
}
}
if(Pic1TopNum < Pic2TopNum)
{ //Pic1在Pic2上方
add = 0 ;
for(i=Pic1TopNum+1;i<Pic2TopNum;i++)
{
add = add + DeleData[i,col] ;
}
if(add == (Pic2TopNum-Pic1TopNum-1))
{
//扫描线可用
LineStatus = 1 ;
}
}
}
else
{
if(Pic1TopNum > Pic2TopNum)
{ //Pic1在Pic2下方
add = 0 ;
for(i=Pic2TopNum;i<Pic1TopNum;i++)
{
add = add + DeleData[i,col] ;
}
if(add == (Pic1TopNum-Pic2TopNum))
{
//扫描线可用
LineStatus = 1 ;
}
}
if(Pic1TopNum < Pic2TopNum)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -