c# 游戏设计:地图移动

想实现一个小游戏,先做地图移动。步骤记录如下:

1、百度到一张大的迷宫地图,放在项目的debug目录下,备用。

2、创建一个winform项目,不添加任何界面元素。

3、添加数据成员如下:

        PictureBox pictureBox1;
        Bitmap myBitmap;
        Bitmap currBitmap;
        Point mypoint;

分别用于显示图片、存储地图,存储界面上的地图,界面上的地图显示的左上角坐标。

4、设置窗体启动后最大化

public Form1()
        {
            InitializeComponent();
            this.WindowState = FormWindowState.Maximized;            
        }

5、窗口启动后添加图片和做其他各种预备工作。

        private void Form1_Shown(object sender, EventArgs e)
        {
            this.MaximumSize = this.Size;
            this.MinimumSize = this.Size;
            pictureBox1 = new PictureBox();
            pictureBox1.Location = new System.Drawing.Point(0, 0);
            pictureBox1.Size = this.Size;
            this.Controls.Add(pictureBox1);

            myBitmap = new Bitmap("map.jpeg");
            currBitmap = new Bitmap(this.Size.Width, this.Size.Height);
            pictureBox1.Image = currBitmap;
            mypoint = new Point(0, 0);
            var g = Graphics.FromImage(pictureBox1.Image);
            g.DrawImage(myBitmap, mypoint);
        }

6、处理asdw按键按下消息,让地图可以移动。

        private void Form1_KeyDown(object sender, KeyEventArgs e)
        {
            var key = e.KeyValue;
            var g = Graphics.FromImage(pictureBox1.Image);
            if (key >= 'a' && key <= 'z') key -= ('a' - 'A');
            switch(key)
            {
                case 'A':
                    mypoint.X -= 10;
                    if (mypoint.X + myBitmap.Size.Width <currBitmap.Size.Width) mypoint.X = currBitmap.Size.Width-myBitmap.Size.Width;
                    break;
                case 'D':
                    mypoint.X += 10;
                    if (mypoint.X>0) mypoint.X = 0;
                    break;
                case 'W':
                    mypoint.Y -= 10;
                    if (mypoint.Y + myBitmap.Size.Height < currBitmap.Size.Height) mypoint.Y = currBitmap.Size.Height - myBitmap.Size.Height;
                    break;
                case 'S':
                    mypoint.Y += 10;
                    if (mypoint.Y>0) mypoint.Y = 0;
                    break;
                default: break;
            }
            g.DrawImage(myBitmap, mypoint);
            pictureBox1.Refresh();
        }

完毕。

显示效果如下:

 下一步找一些小人加上去。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

健忘的松鼠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值