简单字符游戏——贪吃蛇

来源:互联网 发布:网络推广找 三尾狐 编辑:程序博客网 时间:2024/05/17 08:18

这里写图片描述
大家看到了,上图就是我们非常熟悉的一款游戏——贪吃蛇。
这星期作业就要我们尝试了怎么做一条智能蛇,要做智能蛇,我们要先做好一个贪吃蛇。贪吃蛇怎么做呢?
大致思路是,用自顶向下的方法,将问题分为食物放置,蛇的移动,进食,及死亡。其中在放置食物这里,我学到了一个取得随机变量的方法:即rand函数。关于蛇的移动,这里按教程的思路写了个move函数,其实蛇的移动按字符变化来看,就是蛇尾一个字符消失,蛇前进将要到的那个新出现一个头,然后原来的头就变为蛇身一部分。然后若它行进到达的下一个位置上有食物,则食物变为蛇头,原来的头就变为蛇身一部分。若蛇行进到达的下一个位置上是障碍物,或者是自身蛇就死亡。下面即一段简单的代码。
下面代码省去了一些开头

int len = 5;int life = 0;int food = 0;int foodx, foody; int X[SNAKE_MAX_LENGTH]={1,1,1,1,1};//sankeint Y[SNAKE_MAX_LENGTH]={1,2,3,4,5};//snakechar map[12][12] = {"************",                    "*XXXXH     *",                    "*          *",                    "*          *",                    "*          *",                    "*          *",                    "*          *",                    "*          *",                    "*          *",                    "*          *",                    "*          *",                    "************",};void snakeMove(int x, int y) {    put_money();    char ch;    int i;    if ((X[len - 1] - X[len - 2] == -x && Y[len - 1] == Y[len - 2]) || (Y[len - 1] - Y[len - 2] == -y && X[len - 1] == X[len - 2])) {        return;    }//若键盘输入的方向与蛇头方向相反,则什么事都不发生     if (map[X[len - 1] + x][Y[len - 1] + y] == WALL_CELL || map[X[len - 1] + x][Y[len - 1] + y] == SNAKE_BODY) {        life++;    }//若碰到墙壁或者自己就死掉         if (map[X[len - 1] + x][Y[len - 1] + y] == SNAKE_FOOD) {            map[X[len - 1]][Y[len - 1]] = SNAKE_BODY;            map[X[len - 1] + x][Y[len - 1] + y] = SNAKE_HEAD;            len++;            X[len - 1] = X[len - 2] + x;            Y[len - 1] = Y[len - 2] + y;            food--;         }//碰到食物就增长         else {            map[X[0]][Y[0]] = BLANK_CELL;            for (i = 0; i < len - 1; i++) {                X[i] = X[i + 1];                Y[i] = Y[i + 1];            }            X[len - 1] += x;            Y[len - 1] += y;            map[X[len - 1]][Y[len - 1]] = SNAKE_HEAD;            for (i = 0; i < len - 1; i++) {                map[X[i]][Y[i]] = SNAKE_BODY;            }        }//没碰到食物 }void put_money(void) {    if (food == 0) {        srand(time(NULL));        foodx = rand() % 9 + 1;        foody = rand() % 9 + 1;        if (map[foodx][foody] == BLANK_CELL) {            map[foodx][foody] = SNAKE_FOOD;            food++;        }    }}void output(void) {    int i, j;    for (i = 0; i < 12; i++) {        for (j = 0; j < 12; j++)            printf("%c", map[i][j]);        printf("\n");     }}void gameover(void) {        printf ("GAME OVER!!!");    return; }int main() {    output();    while (1) {        char ch =_getch();        switch (ch) {            case 'A':                snakeMove(0, -1); break;            case 'S':                snakeMove(1, 0); break;            case 'D':                snakeMove(0, 1); break;            case 'W':                snakeMove(-1, 0); break;        }        system("cls");        if (life != 0) {            gameover();            break;        }        if (len == 20) {            printf("you win!!!");            break;        }        output();    }}

就这样,一个简单的贪吃蛇游戏就出来了。

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 钢化膜歪了怎么办 水凝膜有味怎么办 水凝膜有水波纹怎么办 水凝膜起皱怎么办 苹果7贴膜有白边怎么办 金属钥匙套挡信怎么办 手机后盖刮花了怎么办 oppor9s定位弱怎么办 oppor9s信号弱怎么办 vivo信号差怎么办 三星手机信号差怎么办 手机无信号怎么办 移动手机号停机怎么办 ysl唇釉掉漆怎么办 巴西龟摔死了怎么办 手机指纹锁失灵怎么办 12123异常怎么办 忘记微信锁密码怎么办 che2-tl00m发卡怎么办 vivoy17w网速慢怎么办 指纹不灵敏怎么办 电脑没有截屏键怎么办 华为v9限速怎么办? 吃鸡卡怎么办mate9 oppon3太卡怎么办 金色印象会员卡怎么办 荣耀v9play死机怎么办 手机充不进电怎么办 华为 华为手机电池充不进电怎么办 华为m5锁定怎么办 荣耀v9充不进电怎么办 充电越充越少是怎么办 数据线不好用怎么办 mate9屏幕不灵怎么办 面部皮肤泛红怎么办 两腮通红怎么办 iphone8p太重怎么办 华为手机字太小怎么办 拨号界面不见了怎么办 华为mate9外音小怎么办 电视机频幕坏了怎么办