用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
分享
二维码

)">
< <上一篇

)">
下一篇>>