96编辑器旗下产品
找图
终身
ID:0
到期时间:永久
退出登录
您的位置:首页 > 百科管理 > 详情

贪吃蛇游戏素材资源-C语言的贪吃蛇源代码

原创:找图网 2023-04-24 17:18:57
  • 谁有用c++写的贪吃蛇源代码分享一个给我吧, 好人一生平安!

  • 游戏描述如下:

    1. 贪吃蛇可以自动直线前进,或者玩家可以通过方向键操纵贪吃蛇上下左右前进,每次前进一格。

    2. 贪吃蛇在规定的区域内活动,当:

    ①贪吃蛇触碰到墙壁时;

    ②贪吃蛇的蛇头触碰到蛇身或者蛇尾时;

    ③玩家的键盘输入不是方向键时;

    命令行显示“Game Over!”并且退出游戏。

    3. 贪吃蛇活动的区域内每次随机产生一颗“豆豆”,当贪吃蛇吃到“豆豆”后蛇身增长一格,自动前进时间缩

    短100ms(默认是1000ms,且不能少于100ms)。贪吃蛇长度每为8的倍数Improve a Level。

    C++代码如下:

    #include <bios.h> 

    #include <conio.h> 

    #include <dos.h> 

    #include <graphics.h> 

    #include <stdlib.h> 

    #include <time.h> 

    using namespace std; 

      

    inline void display(char gsDomain[][22], int level, int moveSpeed) 

    system("cls"); //清屏 

    cout << endl << endl; 

    for (int i = 0; i < 22; i++) 

    cout << "\t"; 

    for (int j = 0; j < 22; j++) 

    cout << gsDomain[i][j] << " "; 

    if (i == 0) 

    cout << "\tLevel:" << level; 

    else if (i == 3) 

    cout << "\t自动前进时间"; 

    else if (i == 5) 

    cout << "\t间隔:" << moveSpeed << " ms"; 

      

    cout << endl; 

      

    int main() 

    char gsDomain[22][22]; //贪吃蛇活动区域(包括墙壁) 

    //初始化贪吃蛇活动区域(不包括墙壁) 

    for (int i = 1; i <= 21; i++) 

    for (int j = 1; j <= 21; j++) 

    gsDomain[i][j] = ' '; 

    //初始化贪吃蛇活动区域的上下墙壁 

    for (int i = 0; i < 22; i++) 

    gsDomain[0][i] = gsDomain[21][i] = '-'; 

    //初始化贪吃蛇活动区域的左右墙壁 

    for (int i = 1; i < 21; i++) 

    gsDomain[i][0] = gsDomain[i][21] = '|'; 

    //初始化蛇身 

    for (int i = 1; i <= 3; i++) 

    gsDomain[1][i] = '*'; 

    //初始化蛇头 

    gsDomain[1][4] = '#'; 

      

    int snake[2][100]; //记录贪吃蛇每次出现的位置的坐标 

    for (int i = 0; i < 4; i++) 

    snake[0][i] = 1; //记录贪吃蛇所在位置的x坐标 

    snake[1][i] = i + 1; //记录贪吃蛇所在位置的y坐标 

    int head = 3, tail = 0, length = 4; 

      

    int beanX, beanY; //豆豆出现的位置 

    srand(time(0)); 

    do

    beanX = rand() % 20 + 1; 

    beanY = rand() % 20 + 1; 

    } while (gsDomain[beanX][beanY] != ' '); 

    gsDomain[beanX][beanY] = '*'; //豆豆 

      

    cout << "\n\n\t\t贪吃蛇游戏即将开始!\n"; 

    long start; 

    int level = 1, moveSpeed = 1000; 

    for (int i = 3; i >= 0; i--) 

    start = clock(); 

    while (clock() - start <= 1000){} 

    system("cls"); 

    if (i) 

    cout << "\n\n\t\t进入游戏倒计时:" << i << endl; 

    else

    display(gsDomain, level, moveSpeed); 

      

    char direction = 77; //贪吃蛇默认自动向右直线前进 

    while (true) 

    bool timeFlag = true; 

    int x, y; 

    start = clock(); 

      

    //若时间超过自动前进时间或者键盘上有键按下则终止循环 

    while ((timeFlag = (clock() - start <= moveSpeed)) && !kbhit()){} 

      

    if (timeFlag) 

    //键盘上有键按下时读取键盘输入 

    getch(); 

    direction = getch(); 

      

    switch (direction) 

    //向上 

    case 72: x = snake[0][head] - 1, y = snake[1][head]; 

    break; 

    //向下 

    case 80: x = snake[0][head] + 1, y = snake[1][head]; 

    break; 

    //向左 

    case 75: x = snake[0][head], y = snake[1][head] - 1; 

    break; 

    //向右 

    case 77: x = snake[0][head], y = snake[1][head] + 1; 

    break; 

    default: cout << "\tGame Over!\n"; 

    return 0; 

      

    if (x == 0 || x == 21 || y == 0 || y == 21) 

    //贪吃蛇触碰到墙壁 

    cout << "\tGame Over!\n"; 

    return 0; 

      

    if (gsDomain[x][y] != ' ' && !(x == beanX && y == beanY)) 

    //贪吃蛇的蛇头触碰到蛇身或者蛇尾 

    cout << "\tGame Over!\n"; 

    return 0; 

      

    if (x == beanX && y == beanY) 

    //吃豆豆 

    length++; //长度加1 

    if (length >= 8) 

    //游戏升级处理 

    length -= 8; 

    level++; 

    if (moveSpeed > 100) 

    moveSpeed -= 100; 

    gsDomain[snake[0][head]][snake[1][head]] = '*'; 

    gsDomain[x][y] = '#'; 

    head = (head + 1) % 100; 

    snake[0][head] = x; 

    snake[1][head] = y; 

    do

    beanX = rand() % 20 + 1; 

    beanY = rand() % 20 + 1; 

    } while (gsDomain[beanX][beanY] != ' '); 

    gsDomain[beanX][beanY] = '*'; 

      

    display(gsDomain, level, moveSpeed); //屏幕上显示 

    else

    //不吃豆豆 

    gsDomain[snake[0][tail]][snake[1][tail]] = ' '; //蛇尾前移一格 

    tail = (tail + 1) % 100; 

    gsDomain[snake[0][head]][snake[1][head]] = '*'; 

    head = (head + 1) % 100; 

    snake[0][head] = x; 

    snake[1][head] = y; 

    gsDomain[x][y] = '#'; //蛇头前移一格 

    display(gsDomain, level, moveSpeed); //屏幕上显示 

      

    return 0; 

    }

  • 贪吃蛇游戏的源代码

  • ?

    贪吃蛇源码:

    <!doctype html>

    <html>

    <body style='overflow:hidden'>

    <canvas id="can" width="400" height="400" style="background:Black;display: block;margin:20px auto;"></canvas>

    <script>

    var sn = [ 42, 41 ], dz = 43, fx = 1, n, ctx = ("can").getContext("2d");

    function draw(t, c) {

    = c;

    (t % 20 * 20 + 1, ~~(t / 20) * 20 + 1, 18, 18);

    }

    = function(e) {

    fx = sn[1] - sn[0] == (n = [ -1, -20, 1, 20 ][(e || event).keyCode - 37] || fx) ? fx : n

    };

    !function() {

    (n = sn[0] + fx);

    if ((n, 1) > 0 || n<0||n>399 || fx == 1 && n % 20 == 0 || fx == -1 && n % 20 == 19)

    return alert("GAME OVER");

    draw(n, "Lime");

    if (n == dz) {

    while ((dz = ~~(() * 400)) >= 0);

    draw(dz, "Yellow");

    } else

    draw((), "Black");

    setTimeout(, 130);

    }();

    </script>

    </body>

    </html>

  • C语言的贪吃蛇源代码

  •  

    //******友情提示:如想速度快点,请改小_sleep(500)函数中参数*****  

    #include <stdio.h>  

    #include <stdlib.h>  

    #include <conio.h>  

    #include <string.h>  

    #include <time.h>  

    const int H = 8;   //地图的高  

    const int L = 16;  //地图的长  

    char GameMap[H][L];   //游戏地图  

    int  key;  //按键保存  

    int  sum = 1, over = 0;  //蛇的长度, 游戏结束(自吃或碰墙)  

    int  dx[4] = {0, 0, -1, 1};  //左、右、上、下的方向  

    int  dy[4] = {-1, 1, 0, 0};  

    struct Snake   //蛇的每个节点的数据类型  

    {  

     int x, y;  //左边位置  

     int now;   //保存当前节点的方向, 0,1,2,3分别为左右上下  

    }Snake[H*L];  

    const char Shead = '@';  //蛇头  

    const char Sbody = '#';  //蛇身  

    const char Sfood = '*';  //食物  

    const char Snode = '.';  //'.'在地图上标示为空  

    void Initial();  //地图的初始化  

    void Create_Food(); //在地图上随机产生食物  

    void Show();   //刷新显示地图  

    void Button();  //取出按键,并判断方向  

    void Move();   //蛇的移动  

    void Check_Border();  //检查蛇头是否越界  

    void Check_Head(int x, int y);   //检查蛇头移动后的位置情况  

    int main()   

    {  

     Initial();  

     Show();  

     return 0;  

    }  

    void Initial()  //地图的初始化  

    {  

     int i, j;  

     int hx, hy;  

     system("title 贪吃蛇");  //控制台的标题  

     memset(GameMap, '.', sizeof(GameMap));  //初始化地图全部为空'.'  

     system("cls");  

     srand(time(0));   //随机种子  

     hx = rand()%H;    //产生蛇头  

     hy = rand()%L;  

     GameMap[hx][hy] = Shead;  

     Snake[0].x = hx;  Snake[0].y = hy;  

     Snake[0].now = -1;  

     Create_Food();   //随机产生食物  

     for(i = 0; i < H; i++)   //地图显示  

     {   

      for(j = 0; j < L; j++)  

       printf("%c", GameMap[i][j]);  

      printf("\n");  

     }  

         

     printf("\n小小C语言贪吃蛇\n");  

     printf("按任意方向键开始游戏\n");  

        

     getch();   //先接受一个按键,使蛇开始往该方向走  

     Button();  //取出按键,并判断方向  

    }  

    void Create_Food()  //在地图上随机产生食物  

    {  

     int fx, fy;  

     while(1)  

     {  

      fx = rand()%H;  

         fy = rand()%L;  

         

      if(GameMap[fx][fy] == '.')  //不能出现在蛇所占有的位置  

      {   

       GameMap[fx][fy] = Sfood;  

          break;  

      }  

     }  

    }  

    void Show()  //刷新显示地图  

    {  

     int i, j;  

     while(1)  

     {    

      _sleep(500); //延迟半秒(1000为1s),即每半秒刷新一次地图  

      Button();   //先判断按键在移动  

      Move();  

      if(over)  //自吃或碰墙即游戏结束  

      {   

       printf("\n**游戏结束**\n");  

       printf("     >_<\n");  

       getchar();  

          break;  

      }  

      system("cls");   //清空地图再显示刷新吼的地图  

      for(i = 0; i < H; i++)   

      {   

       for(j = 0; j < L; j++)  

        printf("%c", GameMap[i][j]);  

       printf("\n");  

      }  

         

      printf("\n小小C语言贪吃蛇\n");  

      printf("按任意方向键开始游戏\n");  

     }  

    }  

    void Button()  //取出按键,并判断方向  

    {  

     if(kbhit() != 0) //检查当前是否有键盘输入,若有则返回一个非0值,否则返回0  

     {   

      while(kbhit() != 0)  //可能存在多个按键,要全部取完,以最后一个为主  

          key = getch(); //将按键从控制台中取出并保存到key中  

      switch(key)  

      {   //左  

       case 75:  Snake[0].now = 0;  

              break;  

                //右  

                case 77:  Snake[0].now = 1;       

              break;  

                //上  

       case 72:  Snake[0].now = 2;  

              break;  

                //下  

       case 80:  Snake[0].now = 3;  

              break;  

      }  

     }  

    }  

    void Move()   //蛇的移动  

    {  

     int i, x, y;  

        int t = sum;  //保存当前蛇的长度  

     //记录当前蛇头的位置,并设置为空,蛇头先移动  

     x = Snake[0].x;  y = Snake[0].y;  GameMap[x][y] = '.';  

     Snake[0].x = Snake[0].x + dx[ Snake[0].now ];  

     Snake[0].y = Snake[0].y + dy[ Snake[0].now ];  

     Check_Border();   //蛇头是否越界  

     Check_Head(x, y);  //蛇头移动后的位置情况,参数为: 蛇头的开始位置  

     if(sum == t)  //未吃到食物即蛇身移动哦  

        for(i = 1; i < sum; i++)  //要从蛇尾节点向前移动哦,前一个节点作为参照  

     {  

      if(i == 1)   //尾节点设置为空再移动  

       GameMap[ Snake[i].x ][ Snake[i].y ] = '.';  

         

      if(i == sum-1)  //为蛇头后面的蛇身节点,特殊处理  

      {  

       Snake[i].x = x;  

             Snake[i].y = y;  

          Snake[i].now = Snake[0].now;  

      }  

      else   //其他蛇身即走到前一个蛇身位置  

      {  

       Snake[i].x = Snake[i+1].x;  

             Snake[i].y = Snake[i+1].y;  

          Snake[i].now = Snake[i+1].now;  

      }  

          

      GameMap[ Snake[i].x ][ Snake[i].y ] = '#'; //移动后要置为'#'蛇身   

     }  

    }  

    void Check_Border()  //检查蛇头是否越界  

    {  

     if(Snake[0].x < 0 || Snake[0].x >= H  

     || Snake[0].y < 0 || Snake[0].y >= L)  

         over = 1;  

    }  

    void Check_Head(int x, int y)  //检查蛇头移动后的位置情况  

    {  

        

     if(GameMap[ Snake[0].x ][ Snake[0].y ] == '.')  //为空  

      GameMap[ Snake[0].x ][ Snake[0].y ] = '@';  

     else 

      if(GameMap[ Snake[0].x ][ Snake[0].y ] == '*')  //为食物  

      {  

       GameMap[ Snake[0].x ][ Snake[0].y ] = '@';    

       Snake[sum].x = x;   //新增加的蛇身为蛇头后面的那个  

          Snake[sum].y = y;  

          Snake[sum].now = Snake[0].now;  

             GameMap[ Snake[sum].x ][ Snake[sum].y ] = '#';   

       sum++;  

       Create_Food();  //食物吃完了马上再产生一个食物  

      }  

      else 

       over = 1;  

    }

    最新文章 更多
    最新素材 更多
    公司介绍 网站地图 图片资讯
    Copyright © 2010-2022 山东找图网络科技有限公司  鲁ICP备18007836号-3  邮箱:15653358549@163.com