c语言贪吃蛇

  • Q1_217774
    了解作者
  • 6.6MB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • VIP专享
    资源类型
  • 0
    下载次数
  • 2022-04-04 07:17
    上传日期
本程序是用c语言实现贪吃蛇游戏,希望大家喜欢
贪吃蛇.rar
  • 贪吃蛇
  • Debug
  • class10_2.tlog
  • cl.command.1.tlog
    1.3KB
  • class10_2.lastbuildstate
    174B
  • CL.read.1.tlog
    37.6KB
  • link.read.1.tlog
    5KB
  • link.write.1.tlog
    844B
  • CL.write.1.tlog
    910B
  • link.command.1.tlog
    2KB
  • vc60.pdb
    76KB
  • vc120.pdb
    164KB
  • vc60.idb
    145KB
  • class10_2.log
    2.7KB
  • class10_2.ilk
    1.2MB
  • class10_2.pdb
    2.5MB
  • source.obj
    51.2KB
  • vc120.idb
    851KB
  • class10_2.exe
    527.5KB
  • Backup
  • Backup1
  • class10_2.sln
    963B
  • class10_2.v12.suo
    13KB
  • Release
  • vc60.idb
    41KB
  • source.obj
    14.7KB
  • class10_2.exe
    40KB
  • class10_2.dsw
    543B
  • class10_2.sln
    963B
  • class10_2.ncb
    33KB
  • class10_2.opt
    47.5KB
  • class10_2.vcxproj
    6.1KB
  • class10_2.vcxproj.filters
    902B
  • source.cpp
    7.7KB
  • UpgradeLog.htm
    33.4KB
  • UpgradeLog2.htm
    33.9KB
  • class10_2.plg
    1.3KB
  • class10_2.sdf
    27.1MB
  • class10_2.v12.suo
    18.5KB
  • class10_2.dsp
    4.2KB
内容介绍
#include<stdio.h> #include<windows.h> #include<stdlib.h> #include<conio.h> #include<time.h> #define height 28//方块高度 #define width 60//方块宽度 必须偶数 //--------------------------------------------------------- //函数声明 void GameStart();//启动画面 void GameOver();//结束画面 void draw_cube();//画框框 void initialization();//初始化最初的蛇身 void gotoxy(int x,int y);//移动坐标 void move();//决定蛇身如何移动 void p_move();//处理蛇头移动后蛇身指针的移动 void food();//产生食物 void judge_head();//判断蛇头的位置 void static_info();//静态信息,如游戏侧栏文字提示 void dynamic_info();//动态信息,如游戏得分 //--------------------------------------------------------- //全局变量 struct snake { short x; short y; struct snake *next; }*head=NULL,*scan=NULL,*pf=NULL,*pb=NULL; int speed=250;//蛇移动的速度(毫秒) short length=4;//初始蛇身长度 char direction='d';//蛇头方向有 w/a/s/d short food_x,food_y,tail_x,tail_y; short snake_xy[1024];//存储蛇身上每一个节点的坐标 供改变结构体指针坐标使用 short score=0;//游戏得分 short music=1;//吃到食物后是否响铃,默认响 //--------------------------------------------------------- //函数定义区 void initialization()//初始化最初的蛇身 { short i; draw_cube(); for(i=1;i<=length;i++) { pb=(struct snake*)malloc(sizeof(struct snake)); pb->y=17; if(i==1) { head=scan=pf=pb; pb->x=28; gotoxy(pb->x,pb->y);printf("■"); } else { pb->x=pf->x-2; gotoxy(pb->x,pb->y);printf("■"); pf->next=pb; } pf=pb; pf->next=NULL; } } void draw_cube()//画框框 { short i; for(i=1;i<=height;i++)//画左右两列方块 { gotoxy(0,i);printf("■"); gotoxy(width,i);printf("■"); } for(i=0;i<=width+1;i+=2)//画上下两行方块 { gotoxy(i,0);printf("■"); gotoxy(i,height+1);printf("■"); } } void gotoxy(int x,int y) //移动坐标 { COORD coord; coord.X=x; coord.Y=y; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord); } void GameStart()//游戏开始 { draw_cube(); gotoxy(25,10);printf("贪吃蛇游戏"); gotoxy(21,13);printf("欢迎"); gotoxy(8,14);printf("您好"); gotoxy(22,17);system("pause"); } void GameOver()//游戏结束 { system("cls"); draw_cube(); gotoxy(25,10);printf("Game Over"); gotoxy(25,12);printf("得分:%d",score); gotoxy(22,17); printf("请按任意键继续..."); getch(); exit(0); } void static_info()//静态信息,如游戏侧栏文字提示 { gotoxy(width+4,2);printf("%c %c %c %c控制",24,25,26,27); gotoxy(width+4,3);printf("按任意键暂停"); gotoxy(width+4,4);printf("F1加速,F2减速"); gotoxy(width+4,5);printf("F3开关声音"); gotoxy(width+4,8);printf("得分:"); gotoxy(width+4,10);printf("蛇头位置:"); gotoxy(width+4,12);printf("食物位置:"); gotoxy(width+4,14);printf("声音:"); gotoxy(width+4,16);SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED|FOREGROUND_INTENSITY);printf("F4:■");//红色 gotoxy(width+4,18);SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN|FOREGROUND_RED| FOREGROUND_INTENSITY);printf("F5:■");//黄色 gotoxy(width+4,20);SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN|FOREGROUND_INTENSITY);printf("F6:■");//绿 色 gotoxy(width+4,22);SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_BLUE|FOREGROUND_RED| FOREGROUND_INTENSITY);printf("F7:■");//紫色 gotoxy(width+4,24);SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_RED| FOREGROUND_INTENSITY);printf("F8:■");//亮白色 gotoxy(width+4,26);SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_RED);printf ("F9:■");//灰色 } void dynamic_info()//动态信息,如游戏得分 { gotoxy(width+9,8);printf("%d",score); gotoxy(width+13,10);printf("%2d,%2d",head->x,head->y); gotoxy(width+13,12);printf("%2d,%2d",food_x,food_y); gotoxy(width+9,14);music==1?printf("开"):printf("关"); } void move()//游戏核心 怎么移动蛇身 { short a,b;//接收上下左右键 char key_direction='d'; while(!kbhit())//判断是否有按键输入//蛇身移动 { loop: gotoxy(food_x,food_y);printf("■"); switch(direction) { case 'w':gotoxy(scan->x,scan->y-1);printf("■");p_move(); head->y=head->y-1;break; case 'a':gotoxy(scan->x-2,scan->y);printf("■");p_move(); head->x=head->x-2;break; case 's':gotoxy(scan->x,scan->y+1);printf("■");p_move(); head->y=head->y+1;break; case 'd':gotoxy(scan->x+2,scan->y);printf("■");p_move(); head->x=head->x+2; } dynamic_info(); scan=head; judge_head(); Sleep(speed); } scan=head; a=getch(); b=getch(); switch(a) { case 224:switch(b) { case 72:key_direction='w';if(direction=='s')key_direction=0; break; case 75:key_direction='a';if(direction=='d')key_direction=0; break; case 80:key_direction='s';if(direction=='w')key_direction=0; break; case 77:key_direction='d';if(direction=='a')key_direction=0; }break; case 0: switch(b) { case 59:speed-=20;break; case 60:speed+=20;break; case 61:music=music==1?0:1;break; case 62:system("color 0C");static_info();SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED| FOREGROUND_INTENSITY);break;//红色 case 63:system("color 0E");static_info();SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN|FOREGROUND_RED| FOREGROUND_INTENSITY);break;//黄色 case 64:system("color 0A");static_info();SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN| FOREGROUND_INTENSITY);break;//绿色 case 65:system("color 0D");static_info();SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_BLUE|FOREGROUND_RED| FOREGROUND_INTENSITY);break;//紫色 case 66:system("color 0F");static_info();SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN|FOREGROUND_BLUE| FOREGROUND_RED|FOREGROUND_INTENSITY);break;//亮白色 case 67:system("color 08");static_info();SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN|FOREGROUND_BLUE| FOREGROUND_RED);//灰色 }break; default: goto loop; } if(key_direction) direction=key_direction; else goto loop; goto loop; } void p_move()//处理蛇头移动后蛇身指针的移动 { short i=0; while(scan->next!=NULL) scan=scan->next;//scan最终指向蛇尾 gotoxy(scan->x,scan->y);printf(" ");//上一个函数中,打印了蛇头,这里消去了蛇尾 scan=head;//scan指向 原来 的蛇头位置 while(scan->next!=NULL)//存储蛇头到蛇尾前一个节点的坐标 { snake_xy[i]=scan->x; i++; snake_xy[i]=scan->y; i++; scan=scan->next; } tail_x=scan->x; tail_y=scan->y;//存储蛇尾坐标 为的是在吃到食物时 给这个坐标输出方块 i=0; scan=head->next; while(scan->next!=NULL)//把存储的坐标逐个赋给蛇头打下一个节点到蛇尾 { scan->x=snake_xy[i]; i++; scan->y=snake_xy[i]; i++; scan=scan->next; } scan->x=snake_xy[i]; i++; scan->y=snake_xy[i]; } void food()// 产生食物 { short i=0; srand((unsigned)time(NULL)); do { food_x=rand()%(width-3)+2; }while(food_x%2); food_y=rand()%(height-1)+1; gotoxy(food_x,food_y);printf("■"); scan=head; } void judge_head()// 判断蛇头的位置 { short i=0; if(head->x==0 || head->x==width || head->y==0 || head->y==height+1)//首先判断是不是撞墙了 GameOver(); while(scan->next!=NULL)//判断是不是咬着自己了 { if(head->x==snake_xy[i]) if(head->y==snake_xy[++i]) GameOver(); else i++; else i+=2; scan=scan->next; } if(head->x==snake_xy[i]) if(head->y==snake_xy[++i]) GameOver(); if(head->x==food_x && head->y==food_y)//如果吃到食物,给尾巴加上一节 { if(music) putchar(7);//响铃 score+=100; pb=(struct snake*)malloc(sizeof(struct snake)); pf->next=pb; pb->next=NULL; pf=pb; pb->x=tail_x; pb->y=tail_y; gotoxy(pb->x,pb->y);printf("■"); food(); } scan=head; } //--------------------------------------------------------- //main函数 int main() { system("mode con: cols=80 lines=31");//设置成80列30行 GameStart(); system("cls"); initialization(); food(); static_info(); move(); return 0; }
评论
    相关推荐
    • 谭浩强C语言
      这是谭浩强C语言的新版,有兴趣想学C语言的童鞋们可以下载来看看啊!
    • 谭浩强c语言
      谭浩强c语言,国内最权威的c语言学习宝典,从零基础开始,成为c语言高手。
    • Makefile c语言
      Makefile c语言Makefile c语言Makefile c语言Makefile c语言 四本资料!自己学习的时候整理的!
    • c语言教程
      c语言教程,优秀的c语言教程,简单基础,是学习c语言的好教程
    • C语言 实现
      C语言 项目实现 《计算方法》课件 俄罗斯方块游戏 C语言实训 综合案例-学生成绩管理程序 C语言程序设计学习与实践指导(源代码)
    • c语言
      c语言
    • C语言库函数
      C语言函数库,里面包括C语言的函数库,方便直接调用,还可以了解很多C语言一些函数模板
    • C语言
      C语言
    • 谭浩强C语言
      谭浩强C语言word版,学习C语言的,经典教材。 使用的编译工具有些老旧,建议是使用visual stdio 2008。
    • 水滴石穿C语言
      学习C语言的有用文档 水滴石穿C语言C语言的底层操作 水滴石穿C语言之extern声明辨析 水滴石穿C语言之static辨析 水滴石穿C语言之typedef的问题 水滴石穿C语言之编译器引出的问题 水滴石穿C语言之代码检查工具 ...