新闻资讯

    贪吃蛇(也叫做贪食蛇)游戏是一款休闲益智类游戏,有PC和手机等多平台版本。既简单又耐玩。该游戏通过控制蛇头方向吃蛋,从而使得蛇变得越来越长。

    我们的今天的目标就是:用C语言来实现一个贪吃蛇项目,也不用太复杂c语言小游戏程序c语言小游戏程序,初学者能看懂就行!

    贪吃蛇小程序,主要采用C语言描述,采用数组进行数据存储的图形化操作界面,会涉及一点点C++ 知识(特别少的一点点),但是有C语言基础就够用了,编译器:,会涉及部分库函数的安装及使用,不过也很简单啦!

    效果展示:

    看到了这个效果之后,那我们就动手来实现吧!

    希望大家都能轻松实现这个项目!另外涉及到的# 需要额外安装图形库插件easyX哦~

    代码如下:

    #include #include #include #include #include #include "snake.h" int score = 0;int gamespeed = 100;                //蛇运行速度 static void Init(void);             /*图形驱动*/static void Close(void);            /*图形结束*/static void Game_interface(void);   /*游戏界面*/static void GameOver(void);         /*结束游戏*/static void GamePlay(void);         /*游戏过程*/static void PrScore(void);          /*输出成绩*/ /*主函数*/int main(void){     Init();                      Game_interface();                      GamePlay();                   Close();                      return 0;} /*图形驱动*/static void Init(void){    int gd=9,gm=2;     initgraph(&gd,&gm," ");    cleardevice();} /* 开始画面,左上角坐标为(50,40),右下角坐标为(610,460)的围墙 */static void Game_interface(void){     int i;      setcolor(LIGHTCYAN);                           /*setbkcolor(LIGHTGREEN);*/     setlinestyle(PS_SOLID,0,1);                    /*设置线型*/     for(i=50;i<=600;i+=10)                          /*画边框*/     {         rectangle(i,40,i+10,49);                   /*上边框*/         rectangle(i,451,i+10,460);                 /*下边框*/     }     for(i=40;i<=450;i+=10)     {         rectangle(50,i,59,i+10);                   /*左边框*/         rectangle(601,i,610,i+10);                 /*右边框*/     }} /* 游戏主函数 */static void GamePlay(void){     int i;           srand(time(NULL));                             /*随机数发生器*/     food.yes = 1;                                  /*1表示需要出现新食物,0表示已经存在食物*/     snake.life = 0;                                /*活着*/     snake.direction = 1;                           /*方向往右*/     snake.x[0] = 100;     snake.y[0] = 100;                                   snake.x[1] = 110;     snake.y[1] = 100;     snake.node = 2;                                /*节数*/      PrScore();                                     /*输出得分*/     while(1)                                       /*可以重复玩游戏,压ESC键结束*/     {         while( !kbhit() )                          /*在没有按键的情况下,蛇自己移动*/         {             if(food.yes == 1)                      /*需要出现新食物*/             {                 food.x = rand()%400 + 60;                 food.y = rand()%350 + 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             {                 if((snake.x[i] == snake.x[0]) && (snake.y[i] == snake.y[0]))                 {                     GameOver();                  /*显示失败*/                     snake.life = 1;                     break;                 }             }             if((snake.x[0] < 55) || (snake.x[0] > 595) || (snake.y[0] < 55) || (snake.y[0] > 455))     /*蛇是否撞到墙壁*/             {                   GameOver();                                            /*本次游戏结束*/                 snake.life = 1;                                        /*蛇死*/             }             if(snake.life == 1)                                        /*以上两种判断以后,如果蛇死就跳出内循环,重新开始*/                 break;             if((snake.x[0] == food.x) && (snake.y[0] == food.y))       /*吃到食物以后*/             {                 setcolor(BLACK);                                       /*把画面上的食物东西去掉*/                 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;                 PrScore();                         /*输出新得分*/             }             setcolor(RED);                         /*画出蛇*/               for(i=0;i                 rectangle(snake.x[i],snake.y[i],snake.x[i]+10,snake.y[i]-10);             Sleep(gamespeed);             setcolor(BLACK);                        /*用黑色去除蛇的的最后一节*/             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=getch();                          /*接收按键*/         if (key == ESC) break;                  /*按ESC键退出*/                   switch(key)         {                                              case UP:                 if(snake.direction != 4)           /*判断是否往相反的方向移动*/                     snake.direction = 3;                 break;             case RIGHT:                 if(snake.direction != 2)                     snake.direction = 1;                 break;             case LEFT:                 if(snake.direction != 1)                     snake.direction = 2;                 break;             case DOWN:                 if(snake.direction != 3)                     snake.direction = 4;                 break;         }      }/*endwhile(1)*/} /*游戏结束*/static void GameOver(void){     cleardevice();     PrScore();     setcolor(RED);     setfont(56,0,"黑体");     outtextxy(200,200,"GAME OVER");     getch();} /*输出成绩*/static void PrScore(void){     char str[10];      setfillstyle(YELLOW);     bar(50,15,220,35);     setcolor(BROWN);     setfont(16,0,"宋体");     sprintf(str,"score:%d",score);     outtextxy(55,16,str);} static void Close(void){     closegraph();}
    #ifndef SNAKE_H#define SNAKE_H #define LEFT 'a'#define RIGHT 'd'#define DOWN 's'#define UP 'w'#define ESC 27 #define N 200 /*蛇的最大长度*/ char key; /*控制按键*/ struct Food{ int x; /*食物的横坐标*/ int y; /*食物的纵坐标*/ int yes; /*判断是否要出现食物的变量*/}food; /*食物的结构体*/ struct Snake{ int x[N]; int y[N]; int node; /*蛇的节数*/ int direction; /*蛇移动方向*/ int life; /* 蛇的生命,0活着,1死亡*/}snake; #endif

    此外,我也给大家分享我收集的其他资源,从最零基础开始的教程到C语言C++项目案例,帮助大家在学习C语言的道路上披荆斩棘!

    整理分享(多年学习的源码、项目实战视频、项目笔记,基础入门教程)最重要的是你可以在群里面交流提问编程问题哦!

    欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!

网站首页   |    关于我们   |    公司新闻   |    产品方案   |    用户案例   |    售后服务   |    合作伙伴   |    人才招聘   |   

地址:北京市海淀区    电话:010-     邮箱:@126.com

备案号:冀ICP备2024067069号-3 北京科技有限公司版权所有