精华内容
下载资源
问答
  • 贪吃蛇c语言源代码

    2011-09-29 16:57:59
    贪吃蛇c语言源代码.是吃的东西是彩色的..添加到自己尾巴上的也彩色的
  • 贪吃蛇 C语言 源代码

    2017-06-12 10:10:47
    贪吃蛇源代码及程序,使用C语言和EasyX图形库开发
  • 贪吃蛇C语言源代码

    2012-03-12 20:58:32
    贪吃蛇源代码,里面有具体注释,很容易理解。
  • 贪吃蛇 c语言源代码

    2013-01-14 17:35:41
    C语言编写的WIn32窗口程序,开发环境为visual stdio2005。可以实现简单的蛇吃豆,蛇撞死功能。
  • 贪吃蛇 c语言 源代码

    2010-04-15 09:02:42
    在本科阶段的课程设计的时候可以帮你通过设计报告。程序非常简单。只作为初级入门者的参考。
  • 贪吃蛇C语言源代码,包含手机和电脑版,电脑版包含.exe执行文件,手机可以自行编译
  • 基于51单片机的3216点阵贪吃蛇C语言源代码。另附proturs仿真原理图。
  • #include"stdio.h" #include"stdlib.h" #define MAX_NAME 11 #define MAX_DETAIL 21 #define MENU_COUNT 9 #define DATA_FILE "fa.dat" typedef wnum_fi_type { income=1, payout=-1 }fi_type; typedef struct_fi_in
  • #include #include#include#include /*引用的库函数*/#define LEFT 0x4b00#define RIGHT 0x4d00#define DOWN 0x5000#define UP 0x4800#define ESC 0x011b/*宏定义键名*/#define N 200inti,key;int level;...

    #include #include#include#include /*引用的库函数*/

    #define LEFT 0x4b00

    #define RIGHT 0x4d00

    #define DOWN 0x5000

    #define UP 0x4800

    #define ESC 0x011b/*宏定义键名*/

    #define N 200

    inti,key;int level;/*游戏等级*/

    int score=0;/*得分*/

    int gamespeed;/*游戏速度*/

    structFood

    {int x;/*食物的横坐标*/

    int y;/*食物的纵坐标*/

    int yes;/*判断是否要出现食物的变量*/}food;/*食物的结构体*/

    structSnake

    {intx[N];inty[N];int node;/*蛇的节数*/

    int direction;/*蛇移动方向*/

    int life;/*蛇的生命,0活着,1死亡*/}snake;/*蛇的结构体*/

    void Choicelevle(void);/*选择游戏等级*/

    void Init(void);/*图形驱动*/

    void Close(void);/*图形结束*/

    void DRAW(void);/*游戏区域*/

    void GameOver(void);/*结束游戏*/

    void GamePlay(void);/*玩游戏具体过程*/

    void PrScore(void);/*输出成绩*/

    /*主函数*/

    void main(void)

    {

    Init();/*图形驱动*/Choicelevle();/*选择游戏等级*/DRAW();/*游戏区域*/GamePlay();/*玩游戏具体过程*/Close();/*图形结束*/}/*图形驱动*/

    void Init(void)

    {int gd=DETECT,gm;

    initgraph(&gd,&gm,"\\turboc2"); /*初始化图形系统*/cleardevice();/*清除图形界面*/}/*选择游戏等级*/

    void Choicelevle(void)

    {char name[20];

    setcolor(YELLOW);

    settextstyle(0,0,6);

    outtextxy(150,150,"Snake");

    setcolor(GREEN);

    settextstyle(0,0,1);

    outtextxy(200,250,"please put in your English name:");

    outtextxy(200,270,"Choice levle from 1-9.");

    outtextxy(300,320,"name:yangzilong");/*制作人姓名*/outtextxy(300,350,"number:0902060226");/*制作人学号*/outtextxy(300,380,"class:computer science 0602");/*制作人班级*/getch();

    printf("please putin your name:");

    gets(name);

    printf("please choice levle:");

    scanf("%d",&level);

    gamespeed=100000-400*level-300*level*level;if(level>9||level<1)

    {cleardevice();/*清除图形界面*/setcolor(YELLOW);/*设置字体颜色*/settextstyle(0,0,2); /*设置字体类型*/outtextxy(150,200,"level input error"); /*显示文本*/getch();

    level=1;

    }

    }void DRAW(void)

    {cleardevice();/*清屏*/setcolor(2);

    setlinestyle(SOLID_LINE,0,THICK_WIDTH);/*设置线型*/rectangle(45,45,465,325);

    }/*玩游戏具体过程*/

    void GamePlay(void)

    {setcolor(5);

    setlinestyle(SOLID_LINE,0,THICK_WIDTH);/*设置线型*/randomize();/*随机数发生器*/food.yes=1;/*1表示需要出现新食物,0表示已经存在食物*/snake.life=0;/*活着*/snake.direction=1;/*方向往右*/snake.x[0]=320;snake.y[0]=240;/*蛇头*/snake.x[1]=330;snake.y[1]=240; /*蛇的第二节位置*/snake.node=3;/*节数*/PrScore();/*输出得分*/

    while(1)/*可以重复玩游戏,压ESC键结束*/{while(!kbhit())/*在没有按键的情况下,蛇自己移动身体*/{if(food.yes==1)/*需要出现新食物*/{

    food.x=rand()%360+70;

    food.y=rand()%250+60;while(food.x%10!=0)/*食物随机出现后必须让食物能够在整格内,这样才可以让蛇吃到*/food.x++;while(food.y%10!=0)

    food.y++;

    food.yes=0;/*画面上有食物了*/}if(food.yes==0)/*画面上有食物了就要显示*/{

    setcolor(GREEN);

    rectangle(food.x,food.y,food.x+10,food.y-10);

    }for(i=snake.node-1;i>0;i--)/*蛇的每个环节往前移动*/{

    snake.x[i]=snake.x[i-1];

    snake.y[i]=snake.y[i-1];

    }/*1,2,3,4表示右,左,上,下四个方向,通过这个控制来移动蛇头*/

    switch(snake.direction)

    {case 1: snake.x[0]+=10;break;case 2: snake.x[0]-=10;break;case 3: snake.y[0]-=10;break;case 4: snake.y[0]+=10;break;

    }for(i=3;i

    {

    GameOver();/*显示失败*/snake.life=1; /*蛇死*/

    break;

    }

    }/*如果蛇头碰到墙壁,蛇头从对面墙出来*/

    if(snake.x[0]<50)

    {snake.x[0]=450;/*如果蛇头越过左边界,则从右边界进入*/snake.y[0]=snake.y[0];/*纵坐标不变*/

    for(i=snake.node-1;i>0;i--)

    {snake.x[i]=snake.x[i-1];

    snake.y[i]=snake.y[i-1]; /*蛇的其他节数向前推进*/}

    {

    setfillstyle(SOLID_FILL,0); /*设置填充模式和颜色,0表示黑色*/bar(50,55,455,315);/*bar是表示填充的范围的函数*/}

    }else

    if(snake.x[0]>450)

    {snake.x[0]=50;/*如果蛇头越过右边界,则蛇头从左边界进入*/snake.y[0]=snake.y[0];/*纵坐标不变*/

    for(i=snake.node-1;i>0;i--)

    {snake.x[i]=snake.x[i-1];

    snake.y[i]=snake.y[i-1]; /*蛇的其他节数向前推进*/}

    {

    setfillstyle(SOLID_FILL,0); /*设置填充模式和颜色,0表示黑色*/bar(50,55,455,315);/*bar是表示填充的范围的函数*/}

    }else

    if(snake.y[0]<60)

    {snake.y[0]=320;/*如果蛇头越过上边界,则从下边界进入*/snake.x[0]=snake.x[0];/*横坐标不变*/

    for(i=snake.node-1;i>0;i--)

    {snake.x[i]=snake.x[i-1];

    snake.y[i]=snake.y[i-1]; /*蛇的其他节数向前推进*/}

    {

    setfillstyle(SOLID_FILL,0); /*设置填充模式和颜色,0表示黑色*/bar(50,55,455,315);/*bar是表示填充的范围的函数*/}

    }else

    if(snake.y[0]>320)

    {snake.y[0]=60;/*如果蛇头越过下边界,则从上边界进入*/snake.x[0]=snake.x[0];/*横坐标不变*/

    for(i=snake.node-1;i>0;i--)

    {snake.x[i]=snake.x[i-1];

    snake.y[i]=snake.y[i-1]; /*蛇的其他节数向前推进*/}

    {

    setfillstyle(SOLID_FILL,0); /*设置填充模式和颜色,0表示黑色*/bar(50,55,455,315);/*bar是表示填充的范围的函数*/}

    }if(snake.life==1)/*如果蛇死就跳出内循环,重新开始*/

    break;if(snake.x[0]==food.x&&snake.y[0]==food.y)/*吃到食物以后*/{

    setcolor(0);/*把画面上的食物东西去掉*/rectangle(food.x,food.y,food.x+10,food.y-10); /*用当前线型和颜色画一矩形*/snake.x[snake.node]=-20;snake.y[snake.node]=-20;/*新的一节先放在看不见的位置,下次循环就取前一节的位置*/snake.node++;/*蛇的身体长一节*/food.yes=1;/*画面上需要出现新的食物*/score+=10; /*每吃掉一食物,得分累加10分*/

    if(score%100==0)

    {level++;gamespeed=100000-400*level-300*level*level;/*每吃掉10食物提升一级,速度加快*/PrScore();/*输出新得分*/setcolor(YELLOW);/*设置字体颜色*/settextstyle(0,0,4); /*设置字体类型*/outtextxy(150,200,"LEVEL UP"); /*显示文本*/

    if(level==10)

    {level=1,gamespeed=100000-400*level-300*level*level;}

    delay(6000000);

    delay(6000000);

    delay(6000000);

    delay(6000000);

    delay(6000000);

    delay(6000000);

    delay(6000000);

    bar(50,55,455,315);/*bar是表示填充的范围的函数*/}

    PrScore();/*输出新得分*/}

    setcolor(4);/*画出蛇*/

    for(i=0;i

    rectangle(snake.x[i],snake.y[i],snake.x[i]+10,

    snake.y[i]-10);

    delay(gamespeed);/*控制游戏速度*/setcolor(0);

    rectangle(snake.x[snake.node-1],snake.y[snake.node-1],

    snake.x[snake.node-1]+10,snake.y[snake.node-1]-10);

    }/*endwhile(!kbhit)*/ /*用黑色去除蛇的的最后一节*/

    if(snake.life==1)/*如果蛇死就跳出循环*/

    break;

    key=bioskey(0);/*接收按键*/

    if(key==ESC)/*按ESC键退出*/

    break;else

    if(key==UP&&snake.direction!=4)/*判断是否往相反的方向移动*/snake.direction=3;else

    if(key==RIGHT&&snake.direction!=2)

    snake.direction=1;else

    if(key==LEFT&&snake.direction!=1)

    snake.direction=2;else

    if(key==DOWN&&snake.direction!=3)

    snake.direction=4;

    }/*endwhile(1)*/}/*游戏结束*/

    void GameOver(void)

    {

    cleardevice();/*清屏*/PrScore();

    setcolor(RED);/*设置字体颜色*/settextstyle(0,0,4); /*设置字体类型*/outtextxy(200,200,"GAME OVER"); /*显示文本*/getch();

    }/*输出成绩及游戏等级*/

    void PrScore(void)

    {char str1[20];/*设置字符型数组*/setfillstyle(SOLID_FILL,0);

    bar(50,15,390,35); /*填充矩形框*/setcolor(6); /*设置文本颜色*/settextstyle(0,0,2); /*设置数组显示位置*/sprintf(str1,"score %d level %d",score,level);/*显示数组内容*/outtextxy(55,20,str1);

    setcolor(YELLOW);/*设置字体颜色*/settextstyle(0,0,2); /*设置字体类型*/outtextxy(250,400,"EXIT=ESC");/*显示文本*/}void Close(void)

    {

    closegraph();

    }

    展开全文
  • 文章目录编写时间csdn链接源代码30s运行效果视频结尾//-------------第一更---------------//很多人评论说自己把代码复制过去跑不了,说这几点注意事项:1,这是c++代码,不要创建C语言源文件或者使用C语言编译器去...

    f4684bcad53c323727e1217c882a0fc3.png

    文章目录

    1. 编写时间
    2. csdn链接
    3. 源代码
    4. 30s运行效果视频
    5. 结尾

    //-------------第一更---------------//

    很多人评论说自己把代码复制过去跑不了,说这几点注意事项:

    1,这是c++代码,不要创建C语言源文件或者使用C语言编译器去编译它,肯定会报错。

    2,代码里我用到了c++11新增功能基于范围的for循环,因此你编译器的编译标准至少要是c++11。

    3,使用了STL双端队列容器deque。

    4,优化了原答案的代码。

    5,将运行截图更新为运行效果展示视频,欢迎观看

    //-----------第一更结束-------------//

    //---------第二更--------//

    变动如下:

    1.csdn有朋友说发现了bug,修复了一个bug并且将代码用类封装,提升了代码的整洁性。

    2.改动代码的过程中使用了c++17新特性,所以你的编译选项需要修改到c++17以支持代码的运行。

    if (char ch; ch=getchar()) {
        ;...
    }

    (这个特性的名字具体叫啥我忘记了,表达式初始项还是啥?不管了。。)

    3.重要的事情多说几遍,请把编译选项改到c++17及以上!!!

    4.改动的时候大部分代码还是不变的,因此很多函数我直接写在类中了(即:隐含内联形式),这样在编译的时候可能导致目标文件代码量膨胀影响效率,可以酌情自行修改。

    //--------第二更结束-------//

    //---------以下是原答案---------//

    1.编写时间

    编写时间:2020/01/10

    2.csdn链接

    c++:完整贪吃蛇源代码_游戏,队列,c++_qq_45849888的博客-CSDN博客blog.csdn.net
    a9a7879dc3328eb350b32756b0c5fb67.png

    这是我的csdn链接,我会在上面持续发布一些代码,欢迎关注。

    3.源代码(代码量:159行)

    虽然说贪吃蛇是一个比较简单的下游戏,但是这里面还是有比较多的细节的东西需要去处理好才能是一个好的贪吃蛇游戏。

    e.g. 1.如何控制蛇移动 2.用哪种数据结构存储蛇身比较方便 3.怎么解决屏幕闪烁严重的问题

    下面是代码(都已添加详细注释,相信都能看懂)

    #include

    大家发现bug了可以评论我。

    4.30s运行效果视频

    60294595a57c84282ea8dbf12528d51a.png
    c++贪吃蛇30秒运行效果视频https://www.zhihu.com/video/1214248292416212992

    运行效果参照上面的视频,可以自己改善界面或者自己增添相应功能。

    5.结尾以及后续工作

    虽然是个很简单的小游戏,但是只有自己真正上手敲代码才发现这其实是一个很有意思的小游戏。希望能对大家有启发或者帮助!感谢大家的支持!

    展开全文
  • 贪吃蛇c语言源程序,看到游戏其中真正的奥秘 激发初学者学习的兴趣
  • 初学C语言,自己编写了一个贪吃蛇的小代码,会的不多,代码很简单,希望初学的C语言的通知能有所借鉴,也希望大佬多批评指正.谢谢!
  • 简易的代码实现,大约有500多行的样子。每一行代码有详细的注解。不需要图形库什么的。编译就能运行。
  • 贪吃蛇C语言源代码

    2019-02-22 02:47:20
    自己随便开发的一个小游戏程序比较简陋,有需要的朋友可以拿去用,希望有大神可以指点一下小萌新,我做这个程序的意图是让大家可以互相交流,相互之间探讨,大家可以共同去进步。
  • 贪吃蛇c语言源代码

    2010-05-01 08:42:33
    这是贪吃蛇游戏的c语言代码 可供c语言编程用 节省你大量的输入时间
  • c.txt- - #include <stdlib.h> #include <graphics.h> #include <bios.h> #include <dos.h> #include <conio.h> #define Enter 7181 #define ESC 283 #define UP 18432 #define DOWN 20480 #define LEFT 19200 #def
  • 接上文《C/C++编程笔记:C语言贪吃蛇源代码控制台(一),会动的那种哦!》如果你在学习C语言开发贪吃蛇的话,零基础建议从上一篇开始哦!接下来正式开始吧!三、蛇的运动上次我已经教大家画出蛇了,现在我就教大家让...

    接上文《C/C++编程笔记:C语言贪吃蛇源代码控制台(一),会动的那种哦!》如果你在学习C语言开发贪吃蛇的话,零基础建议从上一篇开始哦!接下来正式开始吧!

    7dda07c6af5112006c928d1f6e33437d.png

    三、蛇的运动

    上次我已经教大家画出蛇了,现在我就教大家让蛇动起来。为了让大家更好理解,蛇的移动就用最简单的办法,这里就不用链表,顺序队列什么的了。蛇的移动就是头往前移动,然后后面的身体移动到前一节身体原来的位置上。就像这样:

    f875a6b213fa917f2b6778067eadef1d.png

    那蛇头怎么办呢?

    为了确定蛇头的位置,我们定义一个变量原来存储蛇现在的方向。

    intdirection; //蛇的方向

    我们可以通过direction的值来标记现在蛇的方向。比如0代表上,1代表下。。。

    为了方便,我们定义一些常量

    //定义direction的每个值代表的方向

    #defineUP 0

    #defineDOWN 1

    #defineLEFT 2

    #defineRIGHT 3

    这样,我们就可以这样写:

    9e5b0380a7b7683006ff5ea3db845032.png

    写好的move函数如下

    9c61cdeba3208ccb578c8b9d456f81c5.png

    然后move写好了,我们还要写个循环,这样就可以让蛇一直动了。地图画完一次并且画了蛇之后,我们要把光标移动到起始位置。最简单的办法是每一次画地图的时候都把光标移动到(0,0)。

    修改drawMap函数为下面这样。在开头加一个设置位置的语句。

    b1369a518085f25c5bffcb7289b29604.png

    然后建立一个循环,不断地画蛇,移动。

    300bbdc66bfedbac59920be8717fc57f.png

    然后观察一下,蛇确实走了,但是蛇的痕迹还在。

    1215ce8e84a41fac616193febb19ed41.gif

    这样我们可以在蛇移动函数里面,擦去上一次的尾巴。

    修改过后的move函数如下

    21ca3192eca0480f5d720c21dcf88bca.png

    运行一下,蛇动起来了。

    fd5b7adff8f38da6bbe03c15d4f6caac.gif

    然后试试修改下方向。在init函数最后写一个

    3082262834c6478bb201e20d5cf9662c.gif

    好,感觉很正常。

    现在我们可以通过给direction变量赋值来改变蛇的前进方向了。

    接下来,我们试试用键盘控制它。

    写一个新函数key,用来处理键盘输入。

    我们的输入不能在屏幕上有痕迹,并且不能输入一个按键就回车一下。。。所以我们用getch函数。

    加conio.h头文件。然后getch会暂停程序等待输入,而设置在转弯的时候需要输入。所以我们就需要一个判断有没有输入的函数

    636112e40a2bde55e587aa9b7d0ad890.png

    然后通过输入的字符是w还是a还是s或者d来控制蛇的方向。

    d420b1928bfda7a656c66704d48668c4.png

    好了,现在我们就能通过wasd这四个按键控制蛇到处走了。(进入游戏先切换为英文输入法)

    493c2394d1d545bf55ce2ffad0664ac0.gif

    下面附这一步的完整代码。

    1a2c910e86f5d6b680de9c59d43eeb79.png
    b32ef4b2a2936d3d17abf2a21c06a588.png
    51f6c3e09416f4226990935368340a5a.png
    2b64ab3aea9b7cec1d5b519034b31304.png

    好了,现在食物能正常投放了

    接下来我们就来实现一下蛇吃到食物的变长功能吧。

    首先设置一个变量标记蛇是否吃到食物

    bool eated=false; //标记是否吃到食物

    然后在main里面的判断吃到食物时,使eated变为true

    96fd20e8bcd5d42c0275cb1113afc293.png

    然后在move函数里面加下面的代码

    3540d5a356e1d6cecceeed6a6c75d556.png

    这样在下面的坐标移动环节,就不会舍弃掉上一次的尾巴节点。蛇就变长了。

    来看看效果:

    a4e9d9066b14b6443b56adbb991d5cb9.gif

    蛇可以变长了。不过有时候玩着玩着有事,又舍不得玩了这么长的蛇,要是有个暂停功能就好了。接下来我们就来顺便实现下。

    在key函数里面的switch里面加一个case

    ab86e6ae61f660310aa3d7dc9113012e.png

    这样就可以实现按p键暂停了。(记得玩的时候切换为英文输入法呀)

    bf738399d4009d451deec977c4773b14.gif

    来看看到现在为止的代码:

    73a6cd3386e9062013d54116c524f451.png
    fe2e6e5b957cbb793e4d14acf86b1509.png
    d6c08a178afced6a39d19014f40342c9.png
    8be880ee238cd5d3e833c4b2f86b77d3.png
    94fb2179204fb66f41c1daa1f7e7f0ad.png
    750bb1b93e3116e82d72f223aab72c74.png
    a4fd048437444d32d4794c3eccd93521.png

    后续更新:

    现在就来实现一下game over的功能吧。

    写个函数判断蛇是否撞到自己或者撞到墙:

    4cbb0a5d932a29372728ba05a13a8e23.png

    然后在main里面加这个实现gameOver

    b264df633907d2bf6c774e92cbbc612f.png
    99d0709c90b54111f268876cdc87c9c5.png

    主函数

    接下来,我们来显示一下成绩。

    声明一个变量来记录分数

    intscore=0;//得分

    然后当吃到食物时分数增加(main里面)

    756d0d7b037f992ffdc956e0c4318c6e.png

    然后写一个printScore函数来写分数

    d1c7a4ea43ba70f8c95c27728612a8be.png

    记得在main里面调用啊。看看效果:

    cb6cf5fb2691079ea2e27db48adefa23.png

    以上就是本期分享的全部内容,希望对大家有帮助哦!

    微信公众号:C语言编程学习基地,欢迎关注~

    学习C/C++编程知识,想要成为一个更加优秀的程序员,或者你学习C/C++的时候有难度,可以关注+私信小编【C/C++编程】笔者的C语言C++零基础编程学习圈,里面不仅有学习视频和文件源码,还有更多志同道合的朋友,欢迎转行也学习编程的伙伴,和大家一起交流成长会比自己琢磨更快哦!

    220d69bfed6298605250d7ad1b372665.png
    展开全文
  • 阅读学习了源代码,并做了简单的注释和修改,里面只用了链表数据结构,非常适合C语言入门者学习阅读。 程序可在VS2013下编译运行。 1 #include<stdio.h> 2 #include<time.h> 3 #include<...

    源代码下载地址为:www.clang.cc

    阅读学习了源代码,并做了简单的注释和修改,里面只用了链表数据结构,非常适合C语言入门者学习阅读。

    程序可在VS2013下编译运行。

      1 #include<stdio.h>
      2 #include<time.h>
      3 #include<windows.h>
      4 #include<stdlib.h>
      5 
      6 #define U 1
      7 #define D 2
      8 #define L 3 
      9 #define R 4       //蛇的状态,U:上 ;D:下;L:左 R:右
     10 
     11 typedef struct SNAKE //蛇身的一个节点
     12 {
     13     int x;
     14     int y;
     15     struct SNAKE *next;
     16 }snake;
     17 
     18 //全局变量//
     19 int score = 0, add = 10;//总得分与每次吃食物得分。
     20 int status, sleeptime = 200;//每次运行的时间间隔
     21 snake *head, *food;//蛇头指针,食物指针
     22 snake *q;//遍历蛇的时候用到的指针
     23 int endGamestatus = 0; //游戏结束的情况,1:撞到墙;2:咬到自己;3:主动退出游戏。
     24 
     25 //声明全部函数//
     26 void Pos();
     27 void creatMap();
     28 void initSnake();
     29 int biteSelf();
     30 void createFood();
     31 void cantCrossWall();
     32 void snakeMove();
     33 void pause();
     34 void runGame();
     35 void initGame();
     36 void endGame();
     37 void gameStart();
     38 
     39 void Pos(int x, int y)//设置光标位置
     40 {
     41     COORD pos;
     42     HANDLE hOutput;
     43     pos.X = x;
     44     pos.Y = y;
     45     hOutput = GetStdHandle(STD_OUTPUT_HANDLE);//返回标准的输入、输出或错误的设备的句柄,也就是获得输入、输出/错误的屏幕缓冲区的句柄
     46     SetConsoleCursorPosition(hOutput, pos);
     47 }
     48 
     49 void creatMap()//创建地图
     50 {
     51     int i;
     52     for (i = 0; i<58; i += 2)//打印上下边框
     53     {
     54         Pos(i, 0);
     55         printf("");//一个方块占两个位置
     56         Pos(i, 26);
     57         printf("");
     58     }
     59     for (i = 1; i<26; i++)//打印左右边框
     60     {
     61         Pos(0, i);
     62         printf("");
     63         Pos(56, i);
     64         printf("");
     65     }
     66 }
     67 
     68 void initSnake()//初始化蛇身
     69 {
     70     snake *tail;
     71     int i;
     72     tail = (snake*)malloc(sizeof(snake));//从蛇尾开始,头插法,以x,y设定开始的位置//
     73     tail->x = 24;
     74     tail->y = 5;
     75     tail->next = NULL;
     76     for (i = 1; i <= 4; i++)//初始长度为4
     77     {
     78         head = (snake*)malloc(sizeof(snake));
     79         head->next = tail;
     80         head->x = 24 + 2 * i;
     81         head->y = 5;
     82         tail = head;
     83     }
     84     while (tail != NULL)//从头到为,输出蛇身
     85     {
     86         Pos(tail->x, tail->y);
     87         printf("");
     88         tail = tail->next;
     89     }
     90 }
     91 //??
     92 int biteSelf()//判断是否咬到了自己
     93 {
     94     snake *self;
     95     self = head->next;
     96     while (self != NULL)
     97     {
     98         if (self->x == head->x && self->y == head->y)
     99         {
    100             return 1;
    101         } 
    102         self = self->next;
    103     }
    104     return 0;
    105 }
    106 
    107 void createFood()//随机出现食物
    108 {
    109     snake *food_1;
    110     srand((unsigned)time(NULL));//为了防止每次产生的随机数相同,种子设置为time
    111     food_1 = (snake*)malloc(sizeof(snake));
    112     while ((food_1->x % 2) != 0)    //保证其为偶数,使得食物能与蛇头对其
    113     {
    114         food_1->x = rand() % 52 + 2;
    115     }
    116     food_1->y = rand() % 24 + 1;
    117     q = head;
    118     while (q->next == NULL)
    119     {
    120         if (q->x == food_1->x && q->y == food_1->y) //判断蛇身是否与食物重合
    121         {
    122             free(food_1);
    123             createFood();
    124         }
    125         q = q->next;
    126     }
    127     Pos(food_1->x, food_1->y);
    128     food = food_1;
    129     printf("");
    130 }
    131 
    132 void cantCrossWall()//不能穿墙
    133 {
    134     if (head->x == 0 || head->x == 56 || head->y == 0 || head->y == 26)
    135     {
    136         endGamestatus = 1;
    137         endGame();
    138     }
    139 }
    140 
    141 void snakeMove()//蛇前进,上U,下D,左L,右R
    142 {
    143     snake * nexthead;
    144     cantCrossWall();
    145 
    146     nexthead = (snake*)malloc(sizeof(snake));
    147     if (status == U)
    148     {
    149         nexthead->x = head->x;
    150         nexthead->y = head->y - 1;
    151         if (nexthead->x == food->x && nexthead->y == food->y)//如果下一个有食物//
    152         {
    153             nexthead->next = head;
    154             head = nexthead;
    155             q = head;
    156             while (q != NULL)
    157             {
    158                 Pos(q->x, q->y);
    159                 printf("");
    160                 q = q->next;
    161             }
    162             score = score + add;
    163             createFood();
    164         }
    165         else                                               //如果没有食物//
    166         {
    167             nexthead->next = head;
    168             head = nexthead;
    169             q = head;
    170             while (q->next->next != NULL)
    171             {
    172                 Pos(q->x, q->y);
    173                 printf("");
    174                 q = q->next;
    175             }
    176             Pos(q->next->x, q->next->y);
    177             printf("  ");
    178             free(q->next);
    179             q->next = NULL;
    180         }
    181     }
    182     if (status == D)
    183     {
    184         nexthead->x = head->x;
    185         nexthead->y = head->y + 1;
    186         if (nexthead->x == food->x && nexthead->y == food->y)  //有食物
    187         {
    188             nexthead->next = head;
    189             head = nexthead;
    190             q = head;
    191             while (q != NULL)
    192             {
    193                 Pos(q->x, q->y);
    194                 printf("");
    195                 q = q->next;
    196             }
    197             score = score + add;
    198             createFood();
    199         }
    200         else                               //没有食物
    201         {
    202             nexthead->next = head;
    203             head = nexthead;
    204             q = head;
    205             while (q->next->next != NULL)
    206             {
    207                 Pos(q->x, q->y);
    208                 printf("");
    209                 q = q->next;
    210             }
    211             Pos(q->next->x, q->next->y);
    212             printf("  ");
    213             free(q->next);
    214             q->next = NULL;
    215         }
    216     }
    217     if (status == L)
    218     {
    219         nexthead->x = head->x - 2;
    220         nexthead->y = head->y;
    221         if (nexthead->x == food->x && nexthead->y == food->y)//有食物
    222         {
    223             nexthead->next = head;
    224             head = nexthead;
    225             q = head;
    226             while (q != NULL)
    227             {
    228                 Pos(q->x, q->y);
    229                 printf("");
    230                 q = q->next;
    231             }
    232             score = score + add;
    233             createFood();
    234         }
    235         else                                //没有食物
    236         {
    237             nexthead->next = head;
    238             head = nexthead;
    239             q = head;
    240             while (q->next->next != NULL)
    241             {
    242                 Pos(q->x, q->y);
    243                 printf("");
    244                 q = q->next;
    245             }
    246             Pos(q->next->x, q->next->y);
    247             printf("  ");
    248             free(q->next);
    249             q->next = NULL;
    250         }
    251     }
    252     if (status == R)
    253     {
    254         nexthead->x = head->x + 2;
    255         nexthead->y = head->y;
    256         if (nexthead->x == food->x && nexthead->y == food->y)//有食物
    257         {
    258             nexthead->next = head;
    259             head = nexthead;
    260             q = head;
    261             while (q != NULL)
    262             {
    263                 Pos(q->x, q->y);
    264                 printf("");
    265                 q = q->next;
    266             }
    267             score = score + add;
    268             createFood();
    269         }
    270         else                                         //没有食物
    271         {
    272             nexthead->next = head;
    273             head = nexthead;
    274             q = head;
    275             while (q->next->next != NULL)
    276             {
    277                 Pos(q->x, q->y);
    278                 printf("");
    279                 q = q->next;
    280             }
    281             Pos(q->next->x, q->next->y);
    282             printf("  ");
    283             free(q->next);
    284             q->next = NULL;
    285         }
    286     }
    287     if (biteSelf() == 1)       //判断是否会咬到自己
    288     {
    289         endGamestatus = 2;
    290         endGame();
    291     }
    292 }
    293 
    294 void pause()//暂停
    295 {
    296     while (1)
    297     {
    298         Sleep(300);
    299         if (GetAsyncKeyState(VK_SPACE))
    300         {
    301             break;
    302         }
    303 
    304     }
    305 }
    306 
    307 void runGame()//控制游戏        
    308 {
    309 
    310     Pos(64, 15);
    311     printf("不能穿墙,不能咬到自己\n");
    312     Pos(64, 16);
    313     printf("用↑.↓.←.→分别控制蛇的移动.");
    314     Pos(64, 17);
    315     printf("F1 为加速,F2 为减速\n");
    316     Pos(64, 18);
    317     printf("ESC :退出游戏.space:暂停游戏.");
    318     Pos(64, 20);
    319     printf("C语言研究中心 www.clang.cc");
    320     status = R;
    321     while (1)
    322     {
    323         Pos(64, 10);
    324         printf("得分:%d  ", score);
    325         Pos(64, 11);
    326         printf("每个食物得分:%d分", add);
    327         if (GetAsyncKeyState(VK_UP) && status != D)
    328         {
    329             status = U;
    330         }
    331         else if (GetAsyncKeyState(VK_DOWN) && status != U)
    332         {
    333             status = D;
    334         }
    335         else if (GetAsyncKeyState(VK_LEFT) && status != R)
    336         {
    337             status = L;
    338         }
    339         else if (GetAsyncKeyState(VK_RIGHT) && status != L)
    340         {
    341             status = R;
    342         }
    343         else if (GetAsyncKeyState(VK_SPACE))
    344         {
    345             pause();
    346         }
    347         else if (GetAsyncKeyState(VK_ESCAPE))
    348         {
    349             endGamestatus = 3;
    350             break;
    351         }
    352         else if (GetAsyncKeyState(VK_F1))
    353         {
    354             if (sleeptime >= 50)
    355             {
    356                 sleeptime = sleeptime - 30;
    357                 add = add + 2;
    358                 if (sleeptime == 320)
    359                 {
    360                     add = 2;//防止减到1之后再加回来有错
    361                 }
    362             }
    363         }
    364         else if (GetAsyncKeyState(VK_F2))
    365         {
    366             if (sleeptime<350)
    367             {
    368                 sleeptime = sleeptime + 30;
    369                 add = add - 2;
    370                 if (sleeptime == 350)
    371                 {
    372                     add = 1;  //保证最低分为1
    373                 }
    374             }
    375         }
    376         Sleep(sleeptime);
    377         snakeMove();
    378     }
    379 }
    380 
    381 void initGame()//开始界面
    382 {
    383     Pos(40, 12);
    384 
    385     system("title C语言研究中心   www.clang.cc");
    386     printf("欢迎来到贪食蛇游戏!");
    387     Pos(40, 25);
    388     printf("              C语言研究中心  www.clang.cc.\n");
    389     system("pause");
    390     system("cls");
    391     Pos(25, 12);
    392     printf("用↑.↓.←.→分别控制蛇的移动, F1 为加速,2 为减速\n");
    393     Pos(25, 13);
    394     printf("加速将能得到更高的分数。\n");
    395     system("pause");
    396     system("cls");
    397 }
    398 
    399 void endGame()//结束游戏
    400 {
    401 
    402     system("cls");
    403     Pos(24, 12);
    404     if (endGamestatus == 1)
    405     {
    406         printf("对不起,您撞到墙了。游戏结束.");
    407     }
    408     else if (endGamestatus == 2)
    409     {
    410         printf("对不起,您咬到自己了。游戏结束.");
    411     }
    412     else if (endGamestatus == 3)
    413     {
    414         printf("您的已经结束了游戏。");
    415     }
    416     Pos(24, 13);
    417     printf("您的得分是%d\n", score);
    418     while (getchar() != 'y')
    419     {    
    420         printf("close?[y]");
    421     }
    422     exit(0);
    423 }
    424 
    425 void gameStart()//游戏初始化
    426 {
    427     system("mode con cols=100 lines=30");
    428     initGame();
    429     creatMap();
    430     initSnake();
    431     createFood();
    432 }
    433 
    434 int main()
    435 {
    436     gameStart();
    437     runGame();
    438     endGame();
    439     return 0;
    440 }

     原博客地址:http://www.cnblogs.com/jacklu/p/5214692.html

    转载于:https://www.cnblogs.com/jacklu/p/5214692.html

    展开全文
  • 这是我大一上学期写的贪吃蛇程序,现在发上来大家共享一下,如果有什么不懂的我的资源里还有一份这个程序的课程设计报告,可以参考一下。 (一楼俄罗斯方块你妹啊)
  • 如果对你有所帮助的话,就请你下载下来,可能对你有所帮助,呵呵,谢谢合作
  • 基于C语言贪吃蛇游戏源代码 arm处理器;基于C语言贪吃蛇游戏源代码 arm处理器;完整详细的电路图
  • C语言贪吃蛇源代码

    2018-03-23 09:46:14
    C语言写的贪吃蛇小游戏,含源代码参考,欢迎大家使用
  • C语言 贪吃蛇源代码

    2012-05-30 11:29:02
    c语言 贪吃蛇 源代码 直接拷贝就可以使用。
  • 五子棋,贪吃蛇,俄罗斯方块小游戏 c语言源代码 实测可以玩

空空如也

空空如也

1 2 3 4 5 ... 14
收藏数 279
精华内容 111
关键字:

贪吃蛇c语言源代码

c语言 订阅