字符游戏贪吃蛇

来源:互联网 发布:淘宝拍摄 编辑:程序博客网 时间:2024/05/18 03:24

小时候拿着诺基亚玩贪吃蛇,觉得好好玩(尽管是像素游戏,只有黑白)
这里写图片描述
如今贪吃蛇版本非常多,颜色也非常鲜艳,但万变不离其宗的是蛇要吃食物才能变长,碰到墙(或者自己)就game over!(有些版本碰到自己不会死)
这里写图片描述

贪吃蛇

如今长大了,觉得贪吃蛇游戏就是小case,不值一提,但最近我对它另眼相看了……因为一个简单的字符贪吃蛇也写得特难受!!!
作业发布下来后的几天,我一直上网看相关代码,但却超出了我的知识范围……最后不得不向一位师兄借了一下代码“借鉴”,但最后还是写出了有巨大BUG的贪吃蛇,BUG如下:
①开始画面一切很正常,丝毫没有BUG的感觉,但是……
这里写图片描述
②输入s往下走的那一下,整个人是崩溃的,蛇身居然短了,而且食物出现在蛇永远吃不到的地方(左上角)!!!
这里写图片描述
最后不得不直接让这条蛇撞墙死了算了……
这里写图片描述
虽然不算完美,但是在其中还是学到了一些东西

源代码(有BUG!!!)

snake1.c代码

#include<stdio.h>#include<stdlib.h>#include"snake1.h"     void move();           //移动 void outputmap();       //输出地图 void gameover();       //游戏结束 void score();          //吃食物得分 void set();             //初始化地图 void score();          //吃食物得分 //主函数 int main(){              set();    outputmap();    gameover();    return 0;}

snake1.h代码

#include<stdio.h>#include<stdlib.h>int headx,heady,max,dir,begin;    //蛇头的坐标,方向,长度  char in;                        //读取字符 int map[12][12] = {0};        //地图 int i, j, foodx, foody;        //食物 //对于地图,根据初始化来定义地图,如-1为边界,0为内部,max为蛇身,100为食物 void outputmap(){    for(i=0;i<=11;i++){        for(j=0;j<=11;j++){        if(map[i][j]==-1)        printf("*");         if(map[i][j]==0)        printf(" ");        if(map[i][j]!=0&&map[i][j]!=-1&&map[i][j]!=max&&map[i][j]!=100)        printf("X");        if(map[i][j]==max)        printf("H");        if(map[i][j]==100)        printf("$");    }        printf("\n");    }    return;}//吃食物函数 当蛇头碰到食物,身长加一,游戏继续 void score(){    if(map[headx][heady]!=100){        map[headx][heady]=max+1;        for(i=1;i<11;i++){            for(j=1;j<11;j++){                if(!(map[i][j]==0||map[i][j]==-1)){                    map[i][j]--;                }            }        }        map[foodx][foody]=100;    }    else{        max++;        map[headx][heady]=max;    }    system("cls");         //清屏输出     outputmap();    return;}//移动函数,读取用户输入一个字符,S为向下一格,W为向上一格,A为向左一格,D为向右一格//不断输入,用EOF来作为结束判断 void move(){    if(begin==0){        dir='d';        begin++;    }    if(scanf("%c",&in)!=EOF)    dir=in;    switch(dir){        case 'd':            heady++;            break;        case 'a':            heady--;            break;        case 'w':            headx--;            break;        case 's':            headx++;            break;    }    return;}//游戏结束,当蛇头碰到边界或自己身体,判断游戏结束,跳出循环输出GAME OVER void gameover(){    while(1){        move();        if(map[headx][heady]!=0&&map[headx][heady]!=max&&map[headx][heady]!=100){            printf("Game Over!!!\n");            break;        }        else        score();    }}//初始化地图,将地图赋值化后输出,跟outputmap函数一起调用 void set(){    for (i=0;i<=11;i++) {                  map[i][0]=-1;                        map[i][11]=-1;                       map[0][i]=-1;                      map[11][i]=-1;                 }                                       for (i=1;i<=5;i++) {                 map[1][i]=i;                       }                                     max=5;                             headx=1;                          heady=5;                                           begin=0;                      }

总结

通过这次的学习,教会了我,千万不要小看那些简单的小游戏,看似简单,但其背后可能是几百行甚至上千行的代码量!!!可能是程序员不知道爆了多少肝才写出来的,所以我们要尊重每一个小游戏,要带着敬畏的心去玩……
这里写图片描述

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 肥水不落外人田张强 肥水想留外人田张柔张强 张彬 张彻 张微 张微个人简介 张德 张志 张忠伟 张忠谋 张忠 张忠智 张忠昌 张忠杰 张忠谋为何仇视大陆 张忠谋为什么敌视大陆 张怀民 张怀连 张怀军 张怀远 张怡 老中医张怡在线阅读 张恒 张恒资料 男张恒资料 张恒远 张恒男 张恒男演员 张恒情商 张恒照片 张恒图片 男张恒照片 张恒男图片 张恒许芷晴 张恒个人资料简介男 张恒个人资料 男张恒个人资料简介 张恒个人资料男 张恒个人资料家庭背景 张恒个人资料简介 张恒家庭背景