首页 > 代码库 > 命令贪吃蛇2_0

命令贪吃蛇2_0

命令贪吃蛇2_0

游戏规则

  吃食物变长,撞到墙里或咬到自己死亡,占满全屏算赢。

代码

  运行前先把输入法调至英文!(我因为没调在测试时死了无数次)

  http://www.cnblogs.com/cbattle/p/6383867.html

过程 

  看了大佬推荐的博客( http://blog.sina.com.cn/s/articlelist_2233904382_0_1.html ),通过移动光标插入字符解决了频繁闪烁的问题。 

  

        Console.SetCursorPosition(2 * y, x);
        Console.Write(c);

 

 

 

  百度到可以隐藏光标的方法

 

Console.CursorVisible = false;

 

  

  输入后字母依旧存在。用空格遮盖。

 

  但是输入较快时个别字母跳至后面位置,无法清除。用了个笨办法,写了个循环,强行进行4次替换。

 

  后来发现每次计算光标跳转位置(x、y是反的,还有2倍关系)太麻烦,就写了个函数,实现跳转替换调回

  

        void draw(int x, int y, char c)
        {
            Console.SetCursorPosition(2 * y, x);
            Console.Write(c);
            Console.SetCursorPosition(0, _sca);
        }    

 

 

 

  把读取按键和移动写在一个循环里,运行是发现卡顿明显。用多线程解决。

 

        Thread th = new Thread(new ThreadStart(ReadKey));//Thread th = new Thread(new ThreadStart(fun_name));
        th.Start();

 

 

  想加入按下按键时的声音,用Console.Beep(),但是运行时延时严重,放弃了。

 

  运行时发现有一个回头的bug

    假设现在方向是向右,快速按上(w)左(a)或下(s)左(a)蛇会原路返回,撞向自己的身体,如果未吃任何食物,身体不够长,会穿透过去,有吃过食物就直接死了。

  后来发现是读取按键时间间隔小于移动时间间隔导致的。读取按键时间间隔不能比移动时间间隔大太多,会卡顿明显。故把读取按键时间间隔设为比移动时间间隔多

  1ms。

 

  字母bug(未解决)

    有时字母会直接出现在游戏框中

    大概是因为多线程造成的。光标跳到框内时正好输入

    尝试用一个bool型drawing来表示draw()函数的运行状态,drawing==true时不运行ReadKey,无效。没有读入,但是可以输入显示在屏幕上。

玩家体验

  偶尔会有bug,字母会显示出来。但是对游戏影响不大。

  

命令贪吃蛇2_0