贪吃蛇(改进)

该程序分成3个文件:
第一个文件:Fang.cs

using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.Drawing;

namespace Snake
{
    public class Fang:Button
    {
        public const int Len = 20;

        //列索引
        public int X
        {
            set
            {
                this.Left = value * Fang.Len;
            }
            get
            {
                return this.Left / Fang.Len;
            }
        }

        //行索引
        public int Y
        {
            set
            {
                this.Top = value * Fang.Len;
            }
            get
            {
                return this.Top / Fang.Len;
            }
        }

        //坐标
        public Point newLaction
        {
            set
            {
                this.X = ((Point)value).X;
                this.Y = ((Point)value).Y;
            }
            get
            {
                return new Point(this.X, this.Y);
            }
        }
       
        //构造函数

        public Fang()
        {
            this.Size = new Size(Fang.Len, Fang.Len);
            this.Enabled = false;
        }

    }
}
(这个文件定义了一个Fang类,继承于Button,蛇身是一个Fang的集合,食物是一个Fang类的对象)

 

第二个文件:Form1.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Collections;

 

namespace Snake
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }


        public ArrayList Snake = new ArrayList();
        public int snakeLen = 5;
        public byte SnkDrt=6;
        public bool sign;
        public Fang food = new Fang();
        public Fang first = new Fang();
    

       
       

        //初始状态
        public void Start()
        {
            this.panel1.Controls.Clear();

            Snake.Clear();
            SnkDrt = 6;
            snakeLen = 5;
            for (int i = 0; i<snakeLen; i++)
            {
                Fang body;
                body = new Fang();
                Snake.Add(body);
                ((Fang)Snake[i]).X = i;
                ((Fang)Snake[i]).Y = 0;
            }
          
        }

        //食物
        public void Food()
        {
           
            Random Ram = new Random();

            food.X = Ram.Next(0, 19);
            food.Y = Ram.Next(0, 12);

            food.BackColor = Color.DarkGray;
            this.panel1.Controls.Add(food);
           
                           

        }
       
        //开始按钮
        private void menuItem2_Click(object sender, EventArgs e)
        {
            Start();
            Food();
          

            for (int i = 0; i < snakeLen; i++)
            {
                this.panel1.Controls.Add((Fang)Snake[i]);
            }
            this.timer1.Enabled = true;
          
               
        }
        //判断
        public bool Sign()
        {
            int ss;
            ss = Math.Abs(((Fang)Snake[snakeLen - 1]).X - food.X) +
                Math.Abs(((Fang)Snake[snakeLen - 1]).Y - food.Y);
            if (ss == 1) return true;
            else return false;
        }

        void timer1_Tick(object sender, System.EventArgs e)
        {
            Fang one = new Fang();
            one.X = ((Fang)Snake[0]).X;
            one.Y = ((Fang)Snake[0]).Y;
            sign = Sign();
            if (sign == false)
            {
                Forward(SnkDrt);
            }
            else
            {
              
              
                if (Eated()==false) Forward(SnkDrt);
                else
                {
                    Fang body = new Fang();
                    body.X = food.X;
                    body.Y = food.Y;
                    snakeLen++;
                    Snake.Add(body);
                    this.panel1.Controls.Add((Fang)Snake[snakeLen - 1]);
                    this.panel1.Controls.Remove(food);
                    Food();
                  
                }
            }
            if (Dead())
            {
                this.panel1.Controls.Add(one);
                this.timer1.Enabled = false;
                MessageBox.Show("游戏结束    ",":(",MessageBoxButtons.OK,MessageBoxIcon.Information);
            }
        }

        //行走
        public void Forward(int drc)
        {
            Point pt=new Point();
            pt.X=((Fang)Snake[snakeLen-1]).X;
            pt.Y=((Fang)Snake[snakeLen-1]).Y;
            for (int i = 0; i < snakeLen-1; i++)
            {
                ((Fang)Snake[i]).X = ((Fang)Snake[i + 1]).X;
                ((Fang)Snake[i]).Y = ((Fang)Snake[i + 1]).Y;
            }
            switch (drc)
            {
                case 6:
                    {
                        ((Fang)Snake[snakeLen - 1]).X = pt.X + 1;
                        ((Fang)Snake[snakeLen - 1]).Y = pt.Y;
                        break;
                    }
                case 8:
                    {
                        ((Fang)Snake[snakeLen - 1]).X = pt.X;
                        ((Fang)Snake[snakeLen - 1]).Y = pt.Y - 1;
                        break;
                    }
                case 5:
                    {
                        ((Fang)Snake[snakeLen - 1]).X = pt.X;
                        ((Fang)Snake[snakeLen - 1]).Y = pt.Y + 1;
                        break;
                    }
                case 4:
                    {
                        ((Fang)Snake[snakeLen - 1]).X = pt.X - 1;
                        ((Fang)Snake[snakeLen - 1]).Y = pt.Y;
                        break;
                    }
            }

                   
                   
        }

        void Form1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
        {
            switch (e.KeyChar)
            {
                case '6':
                    {
                        if (SnkDrt != 4)
                            SnkDrt = 6;
                        break;
                    }
                case '8':
                    {
                        if (SnkDrt != 5)
                            SnkDrt = 8;
                        break;
                    }
                case '5':
                    {
                        if (SnkDrt != 8)
                            SnkDrt = 5;
                        break;
                    }
                case '4':
                    {
                        if (SnkDrt != 6)
                            SnkDrt = 4;
                        break;
                    }
            }


        }

        public bool Eated()
        {
            Fang body = new Fang();
            body.X = food.X;
            body.Y = food.Y;

            switch (SnkDrt)
            {
                case 6:
                    {
                        if ((((Fang)Snake[snakeLen - 1]).X + 1) == body.X)
                            return true;
                        else return false;
                     
                    }
                case 8:
                    {
                        if ((((Fang)Snake[snakeLen - 1]).Y - 1) == body.Y)
                            return true;
                        else return false;
                      
                    }
                case 5:
                    {
                        if ((((Fang)Snake[snakeLen - 1]).Y + 1) == body.Y)
                            return true;
                        else return false;
                      
                    }
                case 4:
                    {
                        if ((((Fang)Snake[snakeLen - 1]).X - 1) == body.X)
                            return true;
                        else return false;
                     
                    }
                default: return false;
            }


          

        }
        //Dead

        public bool Dead()
        {
            for (int i = 0; i < snakeLen - 1; i++)
            {
                if (((Fang)Snake[snakeLen - 1]).X == ((Fang)Snake[i]).X &&
                    ((Fang)Snake[snakeLen - 1]).Y == ((Fang)Snake[i]).Y)
                    return true;
            }
            switch (SnkDrt)
            {
                case 6:
                    {
                        if (((Fang)Snake[snakeLen - 1]).X  == 20)
                            return true;
                        else return false;

                    }
                case 8:
                    {
                        if (((Fang)Snake[snakeLen - 1]).Y  ==-1)
                            return true;
                        else return false;

                    }
                case 5:
                    {
                        if (((Fang)Snake[snakeLen - 1]).Y ==13 )
                            return true;
                        else return false;

                    }
                case 4:
                    {
                        if (((Fang)Snake[snakeLen - 1]).X == -1)
                            return true;
                        else return false;

                    }
                default: return false;
            }

 

        }
        #region 难度选择
        private void menuItem8_Click(object sender, EventArgs e)
        {
            this.timer1.Interval = 400;
        }

        private void menuItem9_Click(object sender, EventArgs e)
        {
            timer1.Interval = 200;
        }

        private void menuItem10_Click(object sender, EventArgs e)
        {
            timer1.Interval = 100;
        }
        #endregion

        private void menuItem12_Click(object sender, EventArgs e)
        {
            MessageBox.Show("by p6    ", "作者", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
        }


    }
}

(这个文件主要是一些方法)

第3个文件是Form1.designer.cs,窗体设计代码,大多是VS自动生成的,代码很长就不帖出来了。
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值