C语言贪吃蛇

#include<stdio.h>
#include<stdlib.h>
int main(){
    
            Player P = new Player();
            P.Play();
            return 0;
}
 class Snake
    {
        public int x, y;
      public   Snake() { }
      public   Snake(int x,int y) { this.x = x;this.y = y; }
       public  Snake(Snake S) { this.x = S.x;this.y =S.y; }
    }
class Player
    {
        int seeld = 100;//速度
        Random R = new Random();//随机
         public enum Move
        {
            up,down,left,right
        }
        Move monment = Move.right;//开局移动方向
        int[,] Map = new int[40, 40];
        List<Snake> list = new List<Snake>() {new Snake(10,10),new Snake(11,10),new Snake(12,10) };
        void A()
        {
            foreach (var item in list)
            {
                Crose(item.x, item.y, 0);
            }
        }
       void RandFriut()
        {
            int X = R.Next(1, 39);
            int Y = R.Next(1, 39);
            if (Map[X, Y] == 0)
            {
                Map[X, Y] = 2;
                Crose(X, Y, 3);
            }
            else RandFriut();
        }
        void SnakeMove()
        {
            Snake Head = list.ElementAt(list.Count - 1);
            switch (monment)
            {
                case Move.up:
                    if (Head.y != 1&&Map[Head.x,Head.y-1]!=1)
                    {
                        list.Add(new Snake(Head.x, Head.y - 1));
                        Crose(Head.x, Head.y-1, 1);
                    }
                    else Gameover();
                    break;
                case Move.down:
                    if (Head.y != 38 && Map[Head.x, Head.y + 1] !=1)
                    {
                        list.Add(new Snake(Head.x, Head.y+ 1));
                        Crose(Head.x, Head.y+1, 1);
                    }
                    else Gameover();
                    break;
                case Move.left:
                    if (Head.x != 1 && Map[Head.x-1, Head.y ] !=1)
                    {
                        list.Add(new Snake(Head.x-1, Head.y ));
                        Crose(Head.x-1, Head.y, 1);
                    }
                    else Gameover();
                    break;
                case Move.right:
                    if (Head.x != 38 && Map[Head.x+1, Head.y ] !=1)
                    {
                        list.Add(new Snake(Head.x+1, Head.y));
                        Crose(Head.x+1, Head.y, 1);
                    }
                    else Gameover();
                    break;
                default:
                    break;
            }
        }

        private void Gameover()
        {
            print("游戏结束");
            Environment.Exit(0);
        }

        void Crose(int x,int y,int z)
        {
            if (z == 0)
            {
                Console.SetCursorPosition(x * 2, y);
                Console.Write("□");
                Map[x, y] = 1;
                
            } 
            if (z ==1)
            {
                Console.SetCursorPosition(x * 2, y);
                print("□");
                if (Map[x, y] != 2) Delete();
                else RandFriut();
                Map[x, y] = 1;
            } 
            if (z == 2)
            {
                Console.SetCursorPosition(x * 2, y);
                print("  ");
                Map[x, y] = 0;
            }  
            if (z == 3)
            {
                Console.SetCursorPosition(x * 2, y);
                print("◆");
            }
            Console.SetCursorPosition(0,41);
        }
        void K()
        {

            A();
            RandFriut();
            while (true)
            {
                Thread.Sleep(seeld);
                SnakeMove();
            }
        }
        void InputKey()
        {
            while (true)
            {
                char a = Console.ReadKey().KeyChar;
                Snake snake1 = list[list.Count - 1];
                Snake snake2 = list[list.Count-2];
                if (a == 'w' || a == 'W')
                {
                    if (snake1.y != snake2.y + 1) monment = Move.up;
                } 
                if (a == 's' || a == 'S')
                {
                    if (snake1.y != snake2.y -1) monment = Move.down;
                }
                if (a == 'a' || a == 'A')
                {
                    if (snake1.x-1 != snake2.x) monment = Move.left;
                } 
                if (a == 'd' || a == 'D')
                {
                    if (snake1.x + 1 != snake2.x) monment = Move.right;
                }
            }
        }
        private void Delete()
        {
            Snake W = list[0];
            Crose(W.x, W.y, 2);
            list.RemoveAt(0);
        }

        public void Play()
        {
            
            Show(); 
            new Thread(InputKey).Start();
            K();

        }
         void Show()
        {
            for (int i = 0; i <40 ; i++)
            {
                for (int j = 0; j < 40; j++)
                {
                   if(i==0||i==39||j==0||j==39)print("55");
                    else print("  ");
                }
                print("\n");
            }
        }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现移动,吃食变长游戏把子上下左右控制蛇的方向,寻找吃的东西,每吃一口就能得到一定的积分,而且蛇的身子会越吃越长,身子越长玩的难度就越大,不能碰墙,不能咬到自己的身体,更不能咬自己的尾巴,等到了一定的分数,就能过关,然后继续玩下一关。[3] 二、“贪吃蛇”游戏的发展编辑 改变此款游戏的特别多。比如在蛋的方面,可能放上带道具的蛋,使蛇吃完后具有保护,穿墙等特种功能,而且难度逐渐变难,游戏制作的精细度和画面的质量也随着版本的提高而不断提高,且有单人及团队联机对战版本陆续推出。 参考资料游戏把子上下左右控制蛇的方向,寻找吃的东西,每吃一口就能得到一定的积分,而且蛇的身子会越吃越长,身子越长玩的难度就越大,不能碰墙,不能咬到自己的身体,更不能咬自己的尾巴,等到了一定的分数,就能过关,然后继续玩下一关。[3] 二、“贪吃蛇”游戏的发展编辑 改变此款游戏的特别多。比如在蛋的方面,可能放上带道具的蛋,使蛇吃完后具有保护,穿墙等特种功能,而且难度逐渐变难,游戏制作的精细度和画面的质量也随着版本的提高而不断提高,且有单人及团队联机对战版本陆续推出。 游戏把子上下左右控制蛇的方向,寻找吃的东西,每吃一口就能得到一定的积分,而且蛇的身子会越吃越长,身子越长玩的难度就越大,不能碰墙,不能咬到自己的身体,更不能咬自己的尾巴,等到了一定的分数,就能过关,然后继续玩下一关。[3] 二、“贪吃蛇”游戏的发展编辑 改变此款游戏的特别多。比如在蛋的方面,可能放上带道具的蛋,使蛇吃完后具有保护,穿墙等特种功能,而且难度逐渐变难,游戏制作的精细度和画面的质量也随着版本的提高而不断提高,且有单人及团队联机对战版本陆续推出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值