C#贪吃蛇游戏(初学简易版本)

写前小叙
学完c#程序设计,就赶紧想写个什么小程序感受一下编程乐趣,于是写了这个简单好玩又刺激的经典游戏–贪吃蛇;由于是初学,刚开始也是不知道从哪写起,我也是看了好多大哥写的,我的程序很多地方也是受他们启发写的。我这篇仅仅作为自己写程序的一个记录,也是存在有一些问题,望大佬指出,不过目前还是可以完美运行的,分享出来作为给我和一样的初学者一些借鉴。
为了提高我的激情,我的游戏名为 《虚空巨蟒》

效果展示
贪吃蛇GIF

大致思路
先创建新的食物和五节巨蟒身体(都为标签),打开定时器,初始化按键状态为“暂停”,通过各个按键触发时改变按键状态为此按键目标,比如按上键,按键状态变为上,在定时器定时来临时,通过按键状态来改变巨蟒头的坐标,然后巨蟒的最后一节移动到倒数第二节的位置,巨蟒的倒数第二节移动到巨蟒的倒数第三节位置…,其中,如果巨蟒头的坐标与食物坐标相同,就新创建一个身体实例,然后再创建新的食物,改变定时器的定时时间为巨蟒身长的反比,就可以实现随巨蟒边长移动速度加快。

参考代码

namespace Snake
{
    public partial class Form1 : Form
    {
        Label[] Snake_Body = new Label[500];//巨蟒身体数组,由label实例(标签)构成
        Label food = new Label();           //食物
        string Keyname = "stop";            //按键状态
        int x, y,b=0;
        int Snake_Long = 0, Snake_Tail_x, Snake_Tail_y;
        Random R = new Random();//随机数
        
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            Makefood();//创建食物
            for (int i = 0; i < 5; i++)
            {
                Label Snaker = new Label();//创造五个初始巨蟒身体实例
                Snaker.Height = 10;
                Snaker.Width = 10;
                Snaker.Top = 300;
                Snaker.Left = 150 - i * 10;
                Snaker.BackColor = Color.DeepPink;
                Snaker.Text = " ";
                Snaker.Tag = i;
                Snake_Body[i] = Snaker;
                this.Controls.Add(Snaker);
            }
            timer1.Tick += new EventHandler(timer1_Tick);
            timer1.Start();
        }
        private void START_Click(object sender, EventArgs e)
        {
            Keyname = "start";//开始游戏
        }
        private void STOP_Click(object sender, EventArgs e)
        {
            Keyname = "stop";//暂停游戏
        }
        private void button1_Click(object sender, EventArgs e)//上
        {
            Keyname = "up";//上
        }
        private void LEFT_Click(object sender, EventArgs e)
        {
            Keyname = "left";//左
        }
        private void RIGHT_Click(object sender, EventArgs e)
        {
            Keyname = "right";//右
        }
        private void DOWN_Click(object sender, EventArgs e)
        {
            Keyname = "down";//下
        }
        private void timer1_Tick(object sender, EventArgs e)
                {
            b++;//目前不知道为啥定时器每到时间会进入两次,此处b使每到时间执执行一次
            if (b == 10)
                b = 0;
            if (b % 2 == 1)
            {
            ;
            }
            else
            {
                x = Snake_Body[0].Left;
                y = Snake_Body[0].Top;
                if (Keyname == "start")
                {
                    Snake_Body[0].Left += 10;
                }
                if (Keyname == "up")
                {
                    Snake_Body[0].Top -= 10;
                }
                if (Keyname == "down")
                {
                    Snake_Body[0].Top += 10;
                }
                if (Keyname == "left")
                {
                    Snake_Body[0].Left -= 10;
                }
                if (Keyname == "right")
                {
                    Snake_Body[0].Left += 10;
                }
                if (Snake_Body[0].Left >= 450)
                {
                    Snake_Body[0].Left = 0;
                }
                if (Snake_Body[0].Left < 0)
                {
                    Snake_Body[0].Left = 450;
                }
                if (Snake_Body[0].Top >= 480)
                {
                    Snake_Body[0].Top = 0;
                }
                if (Snake_Body[0].Top < 0)
                {
                    Snake_Body[0].Top = 480;
                }
                if (Keyname != "stop")
                {
                    Snake_Move();
                }
                if (Snake_Body[0].Left == food.Left && Snake_Body[0].Top == food.Top)//巨蟒吃到食物
                {
                    food.Top = R.Next(0, 47) * 10;
                    food.Left = R.Next(0, 44) * 10;
                    Label Snaker = new Label();
                    Snaker.Height = 10;
                    Snaker.Width = 10;
                    Snaker.Top = Snake_Tail_y;
                    Snaker.Left = Snake_Tail_x;
                    Snaker.BackColor = Color.DeepPink;
                    Snaker.Text = " ";
                    Snaker.Tag = Snake_Long + 1;
                    Snake_Body[Snake_Long + 1] = Snaker;
                    this.Controls.Add(Snaker);
                }
            }
	}
        public void Snake_Move()//巨蟒移动
        {
            int i;
            Snake_Long = 0;
            for (i = 1; Snake_Body[i]!= null; i++)
            {
                Snake_Long++;
            }
            textBox2.Text = Convert.ToString(Snake_Long-4);//分数显示
            timer1.Interval = (int)(200 - Snake_Long * 10)+1;//随巨蟒长度增加,移动速度加快
            Snake_Tail_x = Snake_Body[Snake_Long].Left;
            Snake_Tail_y = Snake_Body[Snake_Long].Top;
            for (i = Snake_Long; i > 1; i--)
            {
                Snake_Body[i].Left = Snake_Body[i - 1].Left;
                Snake_Body[i].Top = Snake_Body[i - 1].Top;
            }
            Snake_Body[1].Left = x;
            Snake_Body[1].Top = y;
        }
	        public void Makefood()//创造食物实例
        {
            food.Width = 10;
            food.Height = 10;
            food.Top = R.Next(0,47) * 10;//食物y位置0-470
            food.Left = R.Next(0,44) * 10;//食物x位置0-470
            food.Text = " ";
            food.BackColor = Color.DarkSlateBlue;
            this.Controls.Add(food);
        }
    }
}

总结一下
我认为最重要的是思路,只要理解好游戏的步骤,明白哪一步改干嘛,至于程序语法手段嘛,哪里不会查一查问一问总是能解决的,所谓只要思想不滑坡,办法总比困难多!
若是需要工程源码的话,请移步下载:
链接: C#贪吃蛇工程源码.

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值