用winform(c#窗体应用程序)实现推箱子小游戏
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace 推箱子_窗体版_
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
void mapshow_agrin()//从新开始时运行,根据地图信息重新编译图片位置;
{
for (int i = 0; i < 13; i++)
{
for (int j = 0; j < 14; j++)
{
if (map_3[i, j] == 1)
{
qiang[qt].Top = i * 20;
qiang[qt].Left = j * 20;
qiang[qt].Image = Image.FromFile(@"C:UsersAdministratorDesktop/photo/qt.jpg");
qiang[qt].BackgroundImageLayout = ImageLayout.Center;
qt++;
}
if (map_3[i, j] == 2)
{
xiangzi[xz].Top = i * 20;
xiangzi[xz].Left = j * 20;
xiangzi[xz].Image = Image.FromFile(@"C:UsersAdministratorDesktop/photo/xz.jpg");
xiangzi[xz].BackgroundImageLayout = ImageLayout.Center;
xz++;
}
if (map_3[i, j] == 4)
{
mubiao[mb].Top = i * 20;
mubiao[mb].Left = j * 20;
mubiao[mb].Image = Image.FromFile(@"C:UsersAdministratorDesktop/photo/mb1.jpg");
mubiao[mb].BackgroundImageLayout = ImageLayout.Center;
mb++;
}
if (map_3[i, j] == 3)
{
y = i;
x = j;
}
}
}
xiaoren1.Height = xiaoren1.Width = 20;
xiaoren1.Top = y * 20;
xiaoren1.Left = x * 20;
//xiaoren.borderstyle = borderstyle.fixedsingle;
xiaoren1.Show();
}
void mapshow()//程序启动时要运行的地图编译程序,按照地图信息生成图片框,实行下一关时也会运行;
{
for (int i = 0; i < 13; i++)
{
for (int j = 0; j < 14; j++)
{
if (map_1[i, j] == 1)
{
PictureBox h = new PictureBox();//生成一个新的图片盒子,盒子总体上限可调;
h.Width = h.Height = 20;
h.Top = i*20;
h.Left = j*20;
h.Image = Image.FromFile(@"C:UsersAdministratorDesktop/photo/qt.jpg");//图片的绝对地址;
h.BackgroundImageLayout = ImageLayout.Center;
//h.BackColor = Color.Peru;
h.BorderStyle = BorderStyle.FixedSingle;
qiang[qt] = h;
this.Controls.Add(h);//将生成的图片添加到控件中;
qt++;
}
if (map_1[i, j] == 2)
{
PictureBox h = new PictureBox();
h.Width = h.Height = 20;
h.Top = i * 20;
h.Left = j * 20;
h.Image = Image.FromFile(@"C:UsersAdministratorDesktop/photo/xz.jpg");
h.BackgroundImageLayout = ImageLayout.Center;
//h.BackColor = Color.PaleGreen;
//h.BorderStyle=BorderStyle.FixedSingle;
xiangzi[xz] = h;
this.Controls.Add(h);
xz++;
}
if (map_1[i, j] == 4)
{
PictureBox h = new PictureBox();
h.Width = h.Height = 20;
h.Top = i * 20;
h.Left = j * 20;
h.Image = Image.FromFile(@"C:UsersAdministratorDesktop/photo/mb1.jpg");
h.BackgroundImageLayout = ImageLayout.Center;
//h.BackColor = Color.Yellow;
//h.BorderStyle = BorderStyle.FixedSingle;
h.AutoSize = false;
mubiao[mb] = h;
this.Controls.Add(h);
mb++;
}
if (map_1[i, j] == 3)
{
y = i ;
x = j ;
}
}
}
xiaoren1.Height = xiaoren1.Width = 20;
xiaoren1.Top = y * 20;
xiaoren1.Left = x * 20;
//xiaoren.borderstyle = borderstyle.fixedsingle;
xiaoren1.Show();
}
private void move(object sender, KeyEventArgs e)//整个游戏需要用到的键盘按键控制;
{
if (gamestart==true &&(e.KeyCode == Keys.Up || e.KeyCode == Keys.W))
{
m = Convert.ToInt32(move_m.up);
moveup();
}
if (gamestart == true && (e.KeyCode == Keys.Down || e.KeyCode == Keys.S))
{
m = Convert.ToInt32(move_m.down);
movedown();
}
if (gamestart == true && (e.KeyCode == Keys.Left || e.KeyCode == Keys.A))
{
m = Convert.ToInt32(move_m.left);
moveleft();
}
if (gamestart == true && (e.KeyCode == Keys.Right || e.KeyCode == Keys.D))
{
m = Convert.ToInt32(move_m.right);
moveright();
}
if (gamestart == true && e.KeyCode == Keys.R)
{
congwan_Click(sender,e);
}
}
public void moveup()//向上运动时所需的控制程序;
{
if (map_1[y - 1, x] == 0 || map_1[y - 1, x] == 4)//小人的下一个目标点为空地时;
{
if (map_2[y, x] == 4)//如果小人现在的坐标是目标点的坐标
{
map_1[y, x] = 4;
map_1[y - 1, x] = 3;
xiaoren1.Top -= 20;
y--;
}
else//如果小人现在的坐标不是目标点的坐标
{
map_1[y - 1, x] = 3;
xiaoren1.Top -= 20;
map_1[y, x] = 0;
y--;
}
}
else if (map_1[y - 1, x] == 1)//小人的下一个坐标为墙,跳过此次循环
{ }
else if (map_1[y - 1, x] == 2 || map_1[y - 1, x] == 5)//小人的下一个坐标为未到达目标的箱子或到达目标的箱子
{
if (map_1[y - 2, x] == 1 || map_1[y - 2, x] == 2 || map_1[y - 2, x] == 5)//箱子的下一个目标为墙或空箱子或到达目标的箱子
{ }
else if (map_1[y - 2, x] == 0)//箱子的下一个目标为空地
{
if (map_2[y, x] == 4)//如果小人现在的坐标是目标点的坐标
{
map_1[y - 2, x] = 2;
movexz();
map_1[y, x] = 4;
//movemb();
map_1[y - 1, x] = 3;
xiaoren1.Top -= 20;
//movembxz();
y--;
}
else//如果小人现在的坐标不是目标点的坐标
{
map_1[y - 2, x] = 2;
movexz();
//movembxz();
map_1[y - 1, x] = 3;
xiaoren1.Top -= 20;
map_1[y, x] = 0;
y--;
}
}
else if (map_1[y - 2, x] == 4)//箱子的下一个目标为目标点
{
if (map_2[y, x] == 4)//如果小人现在的坐标是目标点的坐标
{
map_1[y - 2, x] = 5;
movexz();
//movemb();
map_1[y, x] = 4;
//movembxz();
map_1[y - 1, x] = 3;
xiaoren1.Top -= 20;
y--;
}
else//如果小人现在的坐标不是目标点的坐标
{
map_1[y - 2, x] = 5;
movexz();
//movemb();
//movembxz();
map_1[y - 1, x] = 3;
xiaoren1.Top -= 20;
map_1[y, x] = 0;
y--;
}
}
}
movemb();
movembxz();
}
void movedown()//向下运动时所需的程序;
{
if (map_1[y + 1, x] == 0 || map_1[y + 1, x] == 4)//小人的下一个坐标为空地,进行移动
{
if (map_2[y, x] == 4)//如果小人现在的坐标是目标点的坐标
{
map_1[y, x] = 4;
//movembxz();
//movemb();
map_1[y + 1, x] = 3;
xiaoren1.Top += 20;
y++;
}
else//如果小人现在的坐标不是目标点的坐标
{
map_1[y + 1, x] = 3;
xiaoren1.Top += 20;
//movembxz();
//movemb();
map_1[y, x] = 0;
y++;
}
}
else if (map_1[y + 1, x] == 1)//小人的下一个坐标为墙,跳过此次循环
{ }
else if (map_1[y + 1, x] == 2 || map_1[y + 1, x] == 5)//小人的下一个坐标为未到达目标的箱子或到达目标的箱子
{
if (map_1[y + 2, x] == 1 || map_1[y + 2, x] == 2 || map_1[y + 2, x] == 5)//箱子的下一个目标为墙或空箱子或到达目标的箱子
{ }
else if (map_1[y + 2, x] == 0)//箱子的下一个目标为空地
{
if (map_2[y, x] == 4)//如果小人现在的坐标是目标点的坐标
{
map_1[y + 2, x] = 2;
movexz();
map_1[y, x] = 4;
//movembxz();
map_1[y + 1, x] = 3;
xiaoren1.Top += 20;
y++;
}
else//如果小人现在的坐标不是目标点的坐标
{
map_1[y + 2, x] = 2;
movexz();
//movembxz();
map_1[y + 1, x] = 3;
xiaoren1.Top += 20;
map_1[y, x] = 0;
y++;
}
}
else if (map_1[y + 2, x] == 4)//箱子的下一个目标为目标点
{
if (map_2[y, x] == 4)//如果小人现在的坐标是目标点的坐标
{
map_1[y + 2, x] = 5;
movexz();
//movemb();
map_1[y, x] = 4;
//movembxz();
map_1[y + 1, x] = 3;
xiaoren1.Top += 20;
y++;
}
else//如果小人现在的坐标不是目标点的坐标
{
map_1[y + 2, x] = 5;
movexz();
//movemb();
//movembxz();
map_1[y + 1, x] = 3;
xiaoren1.Top += 20;
map_1[y, x] = 0;
y++;
}
}
}
movemb();
movembxz();
}
void moveleft()//向左运动时所需的程序;
{
if (map_1[y, x - 1] == 0 || map_1[y, x - 1] == 4)//小人的下一个坐标为空地,进行移动
{
if (map_2[y, x] == 4)//如果小人现在的坐标是目标点的坐标
{
map_1[y, x] = 4;
//movembxz();
//movemb();
map_1[y, x - 1] = 3;
xiaoren1.Left -= 20;
x--;
}
else//如果小人现在的坐标不是目标点的坐标
{
map_1[y, x - 1] = 3;
xiaoren1.Left -= 20;
//movembxz();
//movemb();
map_1[y, x] = 0;
x--;
}
}
else if (map_1[y, x - 1] == 1)//小人的下一个坐标为墙,跳过此次循环
{ }
else if (map_1[y, x - 1] == 2 || map_1[y, x - 1] == 5)//小人的下一个坐标为未到达目标的箱子或到达目标的箱子
{
if (map_1[y, x - 2] == 1 || map_1[y, x - 2] == 2 || map_1[y, x - 2] == 5)//箱子的下一个目标为墙或空箱子或到达目标的箱子
{ }
else if (map_1[y, x - 2] == 0)//箱子的下一个目标为空地
{
if (map_2[y, x] == 4)//如果小人现在的坐标是目标点的坐标
{
map_1[y, x - 2] = 2;
movexz();
map_1[y, x] = 4;
//movembxz();
map_1[y, x - 1] = 3;
xiaoren1.Left -= 20;
x--;
}
else//如果小人现在的坐标不是目标点的坐标
{
map_1[y, x - 2] = 2;
movexz();
//movembxz();
map_1[y, x - 1] = 3;
xiaoren1.Left -= 20;
map_1[y, x] = 0;
x--;
}
}
else if (map_1[y, x - 2] == 4)//箱子的下一个目标为目标点
{
if (map_2[y, x] == 4)//如果小人现在的坐标是目标点的坐标
{
map_1[y, x - 2] = 5;
movexz();
//movemb();
map_1[y, x] = 4;
//movembxz();
map_1[y, x - 1] = 3;
xiaoren1.Left -= 20;
x--;
}
else//如果小人现在的坐标不是目标点的坐标
{
map_1[y, x - 2] = 5;
movexz();
//movemb();
//movembxz();
map_1[y, x - 1] = 3;
xiaoren1.Left -= 20;
map_1[y, x] = 0;
x--;
}
}
}
movemb();
movembxz();
}
void moveright()//向右运动时所需的程序;
{
if (map_1[y, x + 1] == 0 || map_1[y, x + 1] == 4)//小人的下一个坐标为空地,进行移动
{
if (map_2[y, x] == 4)//如果小人现在的坐标是目标点的坐标
{
map_1[y, x] = 4;
//movembxz();
//movemb();
map_1[y, x + 1] = 3;
xiaoren1.Left += 20;
x++;
}
else//如果小人现在的坐标不是目标点的坐标
{
map_1[y, x + 1] = 3;
xiaoren1.Left += 20;
//movemb();
//movembxz();
map_1[y, x] = 0;
x++;
}
}
else if (map_1[y, x + 1] == 1)//小人的下一个坐标为墙,跳过此次循环
{ }
else if (map_1[y, x + 1] == 2 || map_1[y, x + 1] == 5)//小人的下一个坐标为未到达目标的箱子或到达目标的箱子
{
if (map_1[y, x + 2] == 1 || map_1[y, x + 2] == 2 || map_1[y, x + 2] == 5)//箱子的下一个目标为墙或空箱子或到达目标的箱子
{ }
else if (map_1[y, x + 2] == 0)//箱子的下一个目标为空地
{
if (map_2[y, x] == 4)//如果小人现在的坐标是目标点的坐标
{
map_1[y, x + 2] = 2;
movexz();
map_1[y, x] = 4;
//movembxz();
map_1[y, x + 1] = 3;
xiaoren1.Left += 20;
x++;
}
else//如果小人现在的坐标不是目标点的坐标
{
map_1[y, x + 2] = 2;
movexz();
//movembxz();
map_1[y, x + 1] = 3;
xiaoren1.Left += 20;
map_1[y, x] = 0;
x++;
}
}
else if (map_1[y, x + 2] == 4)//箱子的下一个目标为目标点
{
if (map_2[y, x] == 4)//如果小人现在的坐标是目标点的坐标
{
map_1[y, x + 2] = 5;
movexz();
//movemb();
map_1[y, x] = 4;
//movembxz();
map_1[y, x + 1] = 3;
xiaoren1.Left += 20;
x++;
}
else//如果小人现在的坐标不是目标点的坐标
{
map_1[y, x + 2] = 5;
movexz();
//movemb();
//movembxz();
map_1[y, x + 1] = 3;
xiaoren1.Left += 20;
map_1[y, x] = 0;
x++;
}
}
}
movemb();
movembxz();
}
void movexz()//箱子移动时所需的程序,在小人接触到箱子后调用;
{
for(int i = xz_1; xiangzi[i] != null; i++)
{
if (xiangzi[i].Left == xiaoren1.Left && xiangzi[i].Bottom == xiaoren1.Top && m == Convert.ToInt32(move_m.up))
{
xiangzi[i].Top -= 20;
}
else if (xiangzi[i].Left == xiaoren1.Left && xiangzi[i].Top == xiaoren1.Bottom && m == Convert.ToInt32(move_m.down))
{
xiangzi[i].Top += 20;
}
else if (xiangzi[i].Top == xiaoren1.Top && xiangzi[i].Right == xiaoren1.Left && m == Convert.ToInt32(move_m.left))
{
xiangzi[i].Left -= 20;
}
else if (xiangzi[i].Top == xiaoren1.Top && xiangzi[i].Left == xiaoren1.Right && m == Convert.ToInt32(move_m.right))
{
xiangzi[i].Left += 20;
}
}
}
void movemb()//箱子到达目标时所需程序,判断当前有哪些箱子与目标点重合;
{
for (int i = mb_1; mubiao[i] != null; i++)
{
for (int j = xz_1; xiangzi[j] != null; j++)
{
if (xiangzi[j].Location == mubiao[i].Location)
{
mubiao[i].Image = Image.FromFile(@"C:UsersAdministratorDesktop/photo/mb2.jpg");
mubiao[i].BackgroundImageLayout = ImageLayout.None;
xiangzi[j].SendToBack();
}
}
}
}
void movembxz()//箱子在目标点移动时的函数,判断是否有箱子被推出目标点;
{
for (int i = mb_1; mubiao[i] != null; i++)
{
if (mubiao[i].Location==xiaoren1.Location)
{
mubiao[i].Image = Image.FromFile(@"C:UsersAdministratorDesktop/photo/mb1.jpg");
mubiao[i].BackgroundImageLayout = ImageLayout.Center;
}
}
}
void xuanguan()//地图阵列,总共12关;
{
//“0”表示空地;
//“1”表示墙体;
//“2”表示箱子;
//“3”表示小人;
//“4”表示目标点;
//“5”表示已完成的目标点;
if (kq == 1)
{
map_1=map_2=map_3= new int[13, 14]
{
{0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,1,1,1,1,1,1,0,0,0,0},
{0,0,0,0,1,0,4,0,4,1,0,0,0,0},
{0,0,0,0,1,0,2,2,2,1,0,0,0,0},
{0,0,0,0,1,3,0,1,0,1,0,0,0,0},
{0,0,0,0,1,4,0,0,0,1,0,0,0,0},
{0,0,0,0,1,1,1,1,1,1,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0}
};
}
if (kq == 2)
{
map_1 = map_2 = map_3 = new int[13, 14]
{
{0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,1,1,1,1,1,1,1,0},
{0,0,0,0,0,0,1,0,0,1,0,0,1,0},
{0,0,0,0,0,0,1,0,0,2,2,0,1,0},
{0,1,1,1,1,1,1,0,2,1,0,0,1,0},
{0,1,4,4,4,1,1,1,0,1,0,0,1,1},
{0,1,4,0,0,1,0,0,2,0,1,0,0,1},
{0,1,4,0,0,0,0,2,0,2,0,2,0,1},
{0,1,4,0,0,1,0,0,2,0,1,0,0,1},
{0,1,4,4,4,1,1,1,0,1,0,0,1,1},
{0,1,1,1,1,1,1,0,2,0,0,0,1,0},
{0,0,0,0,0,0,1,0,3,1,0,0,1,0},
{0,0,0,0,0,0,1,1,1,1,1,1,1,0}
};
}
if (kq == 3)
{
map_1 = map_2 = map_3 = new int[13, 14]
{
{0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,1,1,1,1,1,0,0,0,0,0,0,0},
{0,0,1,3,0,0,1,1,1,1,1,0,0,0},
{0,0,1,0,1,2,1,0,0,0,1,0,0,0},
{0,0,1,0,2,0,0,0,0,0,1,0,0,0},
{0,0,1,1,1,0,1,1,2,1,1,0,0,0},
{0,0,0,1,0,0,1,0,4,4,1,1,0,0},
{0,0,0,1,0,0,2,4,4,4,4,1,0,0},
{0,0,0,1,1,2,1,1,0,1,0,1,0,0},
{0,0,0,1,0,2,0,0,0,1,0,1,0,0},
{0,0,0,1,0,0,0,1,0,0,0,1,0,0},
{0,0,0,1,1,1,1,1,1,1,1,1,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0}
};
}
if (kq == 4)
{
map_1 = map_2 = map_3 = new int[13, 14]
{
{0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,1,1,1,1,1,1,0,0,0,0},
{0,0,0,1,1,0,0,0,0,1,1,0,0,0},
{0,0,0,1,0,2,0,2,2,0,1,0,0,0},
{0,0,0,1,4,4,4,4,4,4,1,0,0,0},
{0,0,0,1,0,2,2,0,2,0,1,0,0,0},
{0,0,0,1,1,1,0,3,1,1,0,0,0,0},
{0,0,0,0,0,1,1,1,1,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0}
};
}
if (kq == 5)
{
map_1 = map_2 = map_3 = new int[13, 14]
{
{0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,1,1,1,1,1,0,0,0,0,0},
{0,0,0,0,1,0,3,0,1,1,1,0,0,0},
{0,0,0,1,1,2,1,2,0,0,1,0,0,0},
{0,0,0,1,0,0,0,0,1,0,1,0,0,0},
{0,0,0,1,0,4,4,2,2,4,1,0,0,0},
{0,0,0,1,1,0,4,0,1,1,1,0,0,0},
{0,0,0,0,1,1,0,0,1,0,0,0,0,0},
{0,0,0,0,0,1,1,1,1,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0},
};
}
if (kq == 6)
{
map_1 = map_2 = map_3 = new int[13, 14]
{
{0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,1,1,1,1,1,1,1,0,0,0,0},
{0,0,0,1,4,0,4,0,4,1,0,0,0,0},
{0,0,0,1,0,2,2,2,0,1,0,0,0,0},
{0,0,0,1,4,2,3,2,4,1,0,0,0,0},
{0,0,0,1,0,2,2,2,0,1,0,0,0,0},
{0,0,0,1,4,0,4,0,4,1,0,0,0,0},
{0,0,0,1,1,1,1,1,1,1,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0},
};
}
if (kq == 7)
{
map_1 = map_2 = map_3 = new int[13, 14]
{
{0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,1,1,1,1,1,0,0,0,0,0},
{0,0,0,0,1,0,3,0,1,1,1,0,0,0},
{0,0,0,1,1,2,1,2,0,0,1,0,0,0},
{0,0,0,1,0,4,4,0,4,0,1,0,0,0},
{0,0,0,1,0,0,2,2,0,1,1,0,0,0},
{0,0,0,1,1,1,0,1,4,1,0,0,0,0},
{0,0,0,0,0,1,0,0,0,1,0,0,0,0},
{0,0,0,0,0,1,1,1,1,1,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0}
};
}
if (kq == 8)
{
map_1 = map_2 = map_3 = new int[13, 14]
{
{0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,1,1,1,1,1,1,1,1,1,0,0},
{0,0,0,1,3,0,0,0,0,0,0,1,0,0},
{0,0,0,1,0,1,0,1,1,0,0,1,0,0},
{0,0,0,1,4,1,4,1,4,0,4,1,0,0},
{0,0,0,1,2,2,2,2,2,2,2,1,0,0},
{0,0,0,1,0,4,0,4,0,4,0,1,0,0},
{0,0,0,1,0,0,0,0,0,0,0,1,0,0},
{0,0,0,1,1,1,1,1,1,1,1,1,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0}
};
}
if (kq == 9)
{
map_1 = map_2 = map_3 = new int[13, 14]
{
{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{ 0,0,0,0,0,1,1,1,1,1,0,0,0,0},
{ 0,0,0,0,1,1,0,0,0,1,0,0,0,0},
{ 0,0,0,1,1,0,0,0,0,1,1,1,0,0},
{ 0,0,0,1,0,0,1,4,4,0,0,1,0,0},
{ 0,0,0,1,0,2,2,4,2,0,0,1,0,0},
{ 0,0,0,1,1,3,2,4,1,1,1,1,0,0},
{ 0,0,0,0,1,1,0,0,1,0,0,0,0,0},
{ 0,0,0,0,0,1,1,1,1,0,0,0,0,0},
{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0}
};
}
if (kq == 10)
{
map_1 = map_2 = map_3 = new int[13, 14]
{
{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{ 0,0,0,0,0,1,1,1,1,1,1,1,0,0},
{ 0,0,0,1,1,1,0,4,2,0,0,1,0,0},
{ 0,0,0,1,3,2,2,4,4,0,0,1,0,0},
{ 0,0,0,1,0,2,4,4,1,0,0,1,0,0},
{ 0,0,0,1,0,2,2,4,2,0,1,1,0,0},
{ 0,0,0,1,1,3,2,4,1,1,1,0,0,0},
{ 0,0,0,1,0,2,4,4,0,0,1,0,0,0},
{ 0,0,0,1,1,1,1,1,1,1,1,0,0,0},
{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0}
};
}
if (kq == 11)
{
map_1 = map_2 = map_3 = new int[13, 14]
{
{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{ 0,0,0,0,0,0,1,1,1,1,1,1,0,0},
{ 0,0,0,0,0,1,1,1,3,0,0,1,0,0},
{ 0,0,0,0,0,1,4,0,2,0,4,1,0,0},
{ 0,0,0,0,0,1,0,0,2,0,1,1,0,0},
{ 0,0,0,0,1,1,1,0,1,1,1,0,0,0},
{ 0,0,0,1,1,0,2,0,0,1,0,0,0,0},
{ 0,0,0,1,0,0,0,0,0,1,0,0,0,0},
{ 0,0,0,1,4,0,0,1,1,1,0,0,0,0},
{ 0,0,0,1,1,1,1,1,0,0,0,0,0,0},
{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0}
};
}
if (kq == 12)
{
map_1 = map_2 = map_3 = new int[13, 14]
{
{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{ 0,0,1,1,1,1,1,1,0,0,0,0,0,0},
{ 0,0,1,0,0,0,0,1,0,0,0,0,0,0},
{ 0,0,1,0,0,2,0,1,1,1,1,0,0,0},
{ 0,0,1,0,2,2,0,1,0,0,1,1,0,0},
{ 0,0,1,0,1,0,1,1,2,0,0,1,0,0},
{ 0,0,1,4,4,4,0,0,4,4,0,1,0,0},
{ 0,0,1,1,1,1,1,1,1,0,1,1,0,0},
{ 0,0,1,0,0,0,1,1,0,0,0,1,0,0},
{ 0,0,1,3,2,0,0,0,4,2,0,1,0,0},
{ 0,0,1,0,0,0,1,1,0,0,0,1,0,0},
{ 0,0,1,0,0,0,1,1,1,1,1,1,0,0},
{ 0,0,1,1,1,1,1,0,0,0,0,0,0,0}
};
}
}
void clean()//点击下一关时运行的清除程序,用于清除当前关卡的控件;
{
for(int i=0; qiang[i] != null; i++)
{
this.Controls.Remove(qiang[i]);
}
for (int i = 0; xiangzi[i] != null; i++)
{
this.Controls.Remove(xiangzi[i]);
}
for (int i = 0; mubiao[i] != null; i++)
{
this.Controls.Remove(mubiao[i]);
}
}
enum move_m
{
up,
down,
left,
right
}
int[,] map_1,map_2,map_3;//构建地图所需阵列;
int y ,x;//用于表示当前位子,也就是小人的位子;
int m;//用于记录当前按键信息;
PictureBox[] qiang = new PictureBox[10000000];//构建墙体所需图片框集合;有上限
int qt = 0;//用于墙体生成时的变量;从新生成地图时需要复位;
PictureBox[] xiangzi = new PictureBox[1000000];//构建箱子所需图片框集合;有上限
int xz = 0;//用于生成箱子时的变量;从新生成地图时需要复位;
PictureBox[] mubiao = new PictureBox[1000000];//构建目标点所需图片框集合;有上限
int mb = 0;//用于生成目标点时的变量;从新生成地图时需要复位;
int kq;//用于表示关卡的变量;
int qt_1=0, xz_1=0, mb_1=0;//用于存放qt、xz、mb、变量信息的暂存器;
bool gamestart = false;//表示游戏开始的开关;点击开始按钮后启动;
private void move(object sender, PreviewKeyDownEventArgs e)
{
}
//重开按钮;
private void congwan_Click(object sender, EventArgs e)
{
qt = qt_1;//读取暂存的地图构建所需控件变量;
xz = xz_1;//读取暂存的地图构建所需控件变量;
mb = mb_1;//读取暂存的地图构建所需控件变量;
xuanguan();//重新加载一遍地图信息;
movembxz();//将已完成的目标点还原;
mapshow_agrin();//运行重开时的地图加载函数;
}
private void Form1_Load(object sender, EventArgs e)
{
kaishi.Hide();
txt1.Text = "请选择你的关卡";
}
//关卡选择按钮,对应12个关卡;
private void guanqia1_Click(object sender, EventArgs e)
{
kq = 1;
txt1.Hide();
xuanguan();
kaishi.Show();
guanqia2.Hide();
guanqia3.Hide();
guanqia4.Hide();
guanqia5.Hide();
guanqia6.Hide();
guanqia7.Hide();
guanqia8.Hide();
guanqia9.Hide();
guanqia10.Hide();
guanqia11.Hide();
guanqia12.Hide();
}
private void guanqia2_Click(object sender, EventArgs e)
{
kq = 2;
txt1.Hide();
xuanguan();
kaishi.Show();
guanqia1.Hide();
guanqia3.Hide();
guanqia4.Hide();
guanqia5.Hide();
guanqia6.Hide();
guanqia7.Hide();
guanqia8.Hide();
guanqia9.Hide();
guanqia10.Hide();
guanqia11.Hide();
guanqia12.Hide();
}
private void playagrin(object sender, MouseEventArgs e)//无用的函数,请忽略;
{
//qt = 0;
//xz = 0;
//mb = 0;
//map_3 = map_2;
//map_1 = map_3;
//xuanguan();
//mapshow_agrin();
}
private void guanqia3_Click(object sender, EventArgs e)
{
kq = 3;
txt1.Hide();
xuanguan();
kaishi.Show();
guanqia1.Hide();
guanqia2.Hide();
guanqia4.Hide();
guanqia5.Hide();
guanqia6.Hide();
guanqia7.Hide();
guanqia8.Hide();
guanqia9.Hide();
guanqia10.Hide();
guanqia11.Hide();
guanqia12.Hide();
}
private void guanqia4_Click(object sender, EventArgs e)
{
kq = 4;
txt1.Hide();
xuanguan();
kaishi.Show();
guanqia1.Hide();
guanqia2.Hide();
guanqia3.Hide();
guanqia5.Hide();
guanqia6.Hide();
guanqia7.Hide();
guanqia8.Hide();
guanqia9.Hide();
guanqia10.Hide();
guanqia11.Hide();
guanqia12.Hide();
}
private void guanqia5_Click(object sender, EventArgs e)
{
kq = 5;
txt1.Hide();
xuanguan();
kaishi.Show();
guanqia1.Hide();
guanqia2.Hide();
guanqia3.Hide();
guanqia4.Hide();
guanqia6.Hide();
guanqia7.Hide();
guanqia8.Hide();
guanqia9.Hide();
guanqia10.Hide();
guanqia11.Hide();
guanqia12.Hide();
}
private void guanqia6_Click(object sender, EventArgs e)
{
kq = 6;
txt1.Hide();
xuanguan();
kaishi.Show();
guanqia1.Hide();
guanqia2.Hide();
guanqia3.Hide();
guanqia4.Hide();
guanqia5.Hide();
guanqia7.Hide();
guanqia8.Hide();
guanqia9.Hide();
guanqia10.Hide();
guanqia11.Hide();
guanqia12.Hide();
}
private void guanqia7_Click(object sender, EventArgs e)
{
kq = 7;
txt1.Hide();
xuanguan();
kaishi.Show();
guanqia1.Hide();
guanqia2.Hide();
guanqia3.Hide();
guanqia4.Hide();
guanqia5.Hide();
guanqia6.Hide();
guanqia8.Hide();
guanqia9.Hide();
guanqia10.Hide();
guanqia11.Hide();
guanqia12.Hide();
}
private void guanqia8_Click(object sender, EventArgs e)
{
kq = 8;
txt1.Hide();
xuanguan();
kaishi.Show();
guanqia1.Hide();
guanqia2.Hide();
guanqia3.Hide();
guanqia4.Hide();
guanqia5.Hide();
guanqia6.Hide();
guanqia7.Hide();
guanqia9.Hide();
guanqia10.Hide();
guanqia11.Hide();
guanqia12.Hide();
}
private void guanqia9_Click(object sender, EventArgs e)
{
kq = 9;
txt1.Hide();
xuanguan();
kaishi.Show();
guanqia1.Hide();
guanqia2.Hide();
guanqia3.Hide();
guanqia4.Hide();
guanqia5.Hide();
guanqia6.Hide();
guanqia7.Hide();
guanqia8.Hide();
guanqia10.Hide();
guanqia11.Hide();
guanqia12.Hide();
}
private void guanqia10_Click(object sender, EventArgs e)
{
kq = 10;
txt1.Hide();
xuanguan();
kaishi.Show();
guanqia1.Hide();
guanqia2.Hide();
guanqia3.Hide();
guanqia4.Hide();
guanqia5.Hide();
guanqia6.Hide();
guanqia7.Hide();
guanqia8.Hide();
guanqia9.Hide();
guanqia11.Hide();
guanqia12.Hide();
}
private void guanqia11_Click(object sender, EventArgs e)
{
kq = 11;
txt1.Hide();
xuanguan();
kaishi.Show();
guanqia1.Hide();
guanqia2.Hide();
guanqia3.Hide();
guanqia4.Hide();
guanqia5.Hide();
guanqia6.Hide();
guanqia7.Hide();
guanqia8.Hide();
guanqia9.Hide();
guanqia10.Hide();
guanqia12.Hide();
}
private void guanqia12_Click(object sender, EventArgs e)
{
kq = 12;
txt1.Hide();
xuanguan();
kaishi.Show();
guanqia1.Hide();
guanqia2.Hide();
guanqia3.Hide();
guanqia4.Hide();
guanqia5.Hide();
guanqia6.Hide();
guanqia7.Hide();
guanqia8.Hide();
guanqia9.Hide();
guanqia10.Hide();
guanqia11.Hide();
}
//下一关的按钮程序;
private void next_Click(object sender, EventArgs e)
{
qt_1 = qt;//先暂存地图构建所需的控件变量;
xz_1 = xz;//先暂存地图构建所需的控件变量;
mb_1 = mb;//先暂存地图构建所需的控件变量;
kq++;//将关卡变量加一;
clean();//清除当前关卡里的控件和变量;
xuanguan();//重新加载地图;地图阵列更新为下一关的阵列;
mapshow();//重新生成新的地图;
}
private void fanhui_Click(object sender, EventArgs e)
{
Application.Restart();
}
//开始按钮,用于打开游戏开始开关和隐藏不需要的控件;
private void kaishi_Click(object sender, EventArgs e)
{
gamestart = true;
kaishi.Hide();
mapshow();
congwan.Show();
fanhui.Show();
next.Show();
guanqia1.Hide();
guanqia2.Hide();
guanqia3.Hide();
guanqia4.Hide();
guanqia5.Hide();
guanqia6.Hide();
guanqia7.Hide();
guanqia8.Hide();
guanqia9.Hide();
guanqia10.Hide();
guanqia11.Hide();
guanqia12.Hide();
}
//取消方向键对控件的焦点的控件,用自己自定义的函数处理各个方向键的处理函数;
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
switch (keyData)
{
case Keys.Up:
if (gamestart==true)
{
m = Convert.ToInt32(move_m.up);
moveup();
}
return true;//不继续处理
case Keys.Down:
if (gamestart==true)
{
m = Convert.ToInt32(move_m.down);
movedown();
}
return true;
case Keys.Left:
if (gamestart==true)
{
m = Convert.ToInt32(move_m.left);
moveleft();
}
return true;
case Keys.Right:
if (gamestart==true)
{
m = Convert.ToInt32(move_m.right);
moveright();
}
return true;
}
return base.ProcessCmdKey(ref msg, keyData);
}
}
}
以下为程序所需的图片:
窗体控件位置截图:
游戏内截图:
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
二维码