• 贪吃蛇—C—基于easyx图形库(上):基本控制函数实现 画图程序


    自从学了c语言,就一直想做个游戏,今天将之付之行动,第一次写的特别烂,各种bug;就不贴了。今天网上看了好几个贪吃蛇,重新写了一次,做出来的效果还可以。

     p.s.  easyx图形库是为了方便图形学教学,从turbo-c移植的图形库,适用于vc,使用很方便。详情可见官网http://www.easyx.cn/

    下面是详细的构建过程,本节因为时间限制,先贴出比较重要的控制函数实现,并用它做一个很简单很简单很有趣的画图程序。

    首先,要对贪吃蛇的结构有一个大概的了解;要有一个控制系统控制蛇上下左右移动,而且不能往反方向移动;要有食物产生系统,食物出现位置随机;吃到食物后蛇要变长;要有死亡判定系统......

    总结起来,就是这样:

    我写的这个结构有点乱,不过大体上就是这样的啦~

    第一次尝试的失败告诉我想要一次实现完整的贪吃蛇对好久没碰c的我而言,比较困难。所以我这次的做法是慢慢来,我先做一个可以在窗口里移动方块的小游戏。

    具体而言就是只有控制模块的”贪吃蛇“。

    蛇有四个移动方向,我们可以用向量来表示它。

    因为屏幕的坐标坐标系是这样的

    所以向量与方向对应如下

    左 (-1,0)

    右 (1,0)

    上(0,-1)

    下(0,1)

     

    我们用”w a s d“作为控制键,这样我们得到控制函数:

     1 void command()                              //获取键盘命令
     2 {
     3     if (_kbhit())       //如果有键盘消息
     4         switch (_getch())  /*这里不能用getchar()*/
     5         {
     6         case 'a':
     7                 array.x = -1;  // array是一个有两个值 x 和 y 的结构体,用于表示坐标和向量。(名字是不是叫vector更好点。。)
     8                 array.y = 0;
     9             break;
    10         case 'd':
    11                 array.x = 1;
    12                 array.y = 0;
    13             break;
    14         case 'w':
    15                 array.x = 0;
    16                 array.y = -1;
    17             break;
    18         case 's':
    19                 array.x = 0;
    20                 array.y = 1;
    21             break;
    22         }
    23 } 

    简便起见,我们假设我们的蛇只有一个方块,而且可以自由向四个方向移动

    那么我们的移动函数可以写成这样:

    1 void move()    //修改头节点坐标以达到移动的目的
    2 {
    3     snake.x += array.x*10;             //每次移动10pix
    4     snake.y += array.y*10;
    5 
    6         setcolor(BLUE);    //设置蛇颜色
    7         //画出蛇
    8         rectangle(snake.x - 5, snake.y - 5, snake.x + 5, snake.y + 5);     
    9 }

    然后写个驱动程序   

     1 #include<graphics.h> 
    2 #include<conio.h>
    3
    4 typedef struct Position //坐标结构 5 { 6 int x; 7 int y; 8 }Pos; 9 10 Pos snake; 11 Pos array; 12 13 int main() 14 { 15 snake.x = 300;snake.y = 300; 16 array.x = 1;array.y = 0;
    initgraph(640,480); //初始化图形界面
    17 while(true) 18 { 19 command(); 20 move();
               Sleep(100);  
    21 } 22 return 0; 23 }

     这个小程序就像个画图程序,而且因为没有边界判定,他会一直跑到我们看不到的地方去~~效果如下:(乱画的~)

     完整代码如下:

     1 #include<graphics.h>
     2 #include<conio.h>
     3 
     4 typedef struct Position  //坐标结构
     5 {
     6     int x;
     7     int y;
     8 }Pos;
     9 
    10 Pos snake;
    11 Pos array;
    12 
    13 void command()                              //获取键盘命令
    14 {
    15     if (_kbhit())       //如果有键盘消息
    16         switch (_getch())  /*这里不能用getchar()*/
    17         {
    18         case 'a':
    19             array.x = -1;
    20             array.y = 0;
    21             break;
    22         case 'd':
    23             array.x = 1;
    24             array.y = 0;
    25             break;
    26         case 'w':
    27             array.x = 0;
    28             array.y = -1;
    29             break;
    30         case 's':
    31             array.x = 0;
    32             array.y = 1;
    33             break;
    34         }
    35 }
    36 
    37 void move()    //修改头节点坐标以达到移动的目的
    38 {
    39     snake.x += array.x * 10;             //每次移动10pix
    40     snake.y += array.y * 10;
    41 
    42     setcolor(BLUE);    //设置蛇颜色
    43                        //画出蛇
    44     rectangle(snake.x - 5, snake.y - 5, snake.x + 5, snake.y + 5);
    45 }
    46 
    47 int main()
    48 {
    49     snake.x = 300; snake.y = 300;
    50     array.x = 1; array.y = 0;
    51     initgraph(640, 480);  //初始化图形界面
    52     while (true)
    53     {
    54         command();
    55         move();
    56         Sleep(100);
    57     }
    58     return 0;
    59 }
    画图程序

    嗯嗯,貌似我做了一个蛮好玩的沙盒游戏~~~

    下一篇:https://www.cnblogs.com/kirito-c/p/5596160.html

    末尾附上我拍的垂丝海棠~~

  • 相关阅读:
    Linux(centos)下安装JDK
    springmvc的面试知识点总结
    建造者模式
    PHP原型模式
    PHP适配器模式
    php备忘录模式
    PHP代理模式proxy
    单例模式
    工厂模式
    结构模式
  • 原文地址:https://www.cnblogs.com/kirito-c/p/5595355.html
Copyright © 2020-2023  润新知