C++ 贪吃蛇游戏代码解析 - 详细注释和功能解释
#include<stdio.h>#include<conio.h>#include<process.h>#include<stdlib.h>#include<windows.h>#include<time.h>#define framex 2#define framey 2#define wide 40#define high 25\using namespace std;\int i,j,a[2];//更改颜色\int color(int c){\SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), c); //更改文字颜色\return 0;}//将光标移动到指定位置 \void gotoxy(HANDLE hout,int x,int y){\ //COORD是WindowsAPI中定义的一种结构,表示一个字符在控制台屏幕上的坐标\ COORD pos;\ pos.X=x;\ pos.Y=y;\ //SetConsoleCursorPosition是API中定位光标位置的函数。\ SetConsoleCursorPosition(hout,pos);}\void cover (HANDLE hout);\void explation(HANDLE hout)\ {\ \ int i,j=1;\ \ system("cls");\ \ color(13);\ \ gotoxy(hout,44,3);\ \ cout << "游戏说明"; \ color(2);\ for(i=6;i<=22;i++)\ {\ \ for(j=20;j<=75;j++)\ \ {\ \ gotoxy(hout,j,i);\ \ if(i==6||i==22)cout << "=";\ \ else if(j==20||j==75)cout << "||";\ }\ }\ color(3);\ gotoxy(hout,25,8);\ cout << "1、不能穿墙,不能咬到自己"; \ color(10);\ gotoxy(hout,25,11);\ cout << "2、用 ↑(W) ↓(S) ←(A) →(D)分别控制蛇的移动";\ color(14);\ gotoxy(hout,25,14);\ cout << "3、按任意键(除去ESC)暂停游戏,方向键继续";\ color(11);\ gotoxy(hout,25,17);\ cout << "4、ESC:自爆,游戏结束";\ color(4);\ getch();//按任意键返回主界面\ system("cls");\ cover (hout); \ }//游戏封面\void cover (HANDLE hout){\ gotoxy(hout,35,1);\ color(6);\ printf("/^/^/");\ \ gotoxy(hout,34,2);\ printf("|| o|");\ \ gotoxy(hout,33,2);\ color(2);\ printf("");\ \ gotoxy(hout,25,3);\ color(12);\ printf("\/");\ \ gotoxy(hout,31,3);\ color(2);\ printf("/");\ \ gotoxy(hout,37,3);\ color(6);\ printf("\/");\ \ gotoxy(hout,41,3);\ color(10);\ printf(" \ ");\ \ gotoxy(hout,26,4);\ color(12);\ printf("\");\ \ gotoxy(hout,32,4);\ printf("");\ \ gotoxy(hout,31,4);\ color(2);\ printf("|");\ \ gotoxy(hout,43,4);\ color(10);\ printf("\ ");\ \ gotoxy(hout,32,5);\ color(2);\ printf("\");\ \ gotoxy(hout,44,5);\ color(10);\ printf("\ ");\ \ gotoxy(hout,39,6);\ printf("| | \ ");\ \ gotoxy(hout,38,7);\ printf("/ / \ ");\ \ gotoxy(hout,37,8);\ printf("/ / \ \ ");\ \ gotoxy(hout,35,9);\ printf("/ / \ \ ");\ \ gotoxy(hout,34,10);\ printf(" / / \ \ ");\ \ gotoxy(hout,33,11);\ printf("/ / ---- \ \ ");\ \ gotoxy(hout,32,12);\ printf("/ / -~ ~- | |");\ \ gotoxy(hout,31,13);\ printf("( ( -~ -- ~- / |");\ \ gotoxy(hout,32,14);\ printf("\ ~--~ -~ ~- ~--~ /");\ \ gotoxy(hout,33,15);\ printf("~- -~ ~- -~");\ \ gotoxy(hout,35,16);\ printf("~---~ ~--~"); \ \ color(9);\ gotoxy(hout,43,18);\ color(11);\ cout << "贪吃蛇大作战";\ color(14);\ for(i=20;i<=26;i++){\ for(j=27;j<=74;j++)\ {\ gotoxy(hout,j,i);\ if(i==20||i==26)\ {\ cout << "-";\ }\ else if(j==27||j==74)\ {\ cout << "|";\ }\ }\ }\ color(12);\ gotoxy(hout,35,22);\ cout << "1.开始游戏";\ gotoxy(hout,55,22);\ cout << "2.游戏说明";\ gotoxy(hout,35,24);\ cout << "3.退出游戏";\ color(9);\ gotoxy(hout,framex+wide2,framey+19);\ cout << "姓名:C++小将"; \ gotoxy(hout,framex+wide2,framey+21);\ cout << "来自:可达信奥"; \ gotoxy(hout,framex+wide2,framey+23);\ cout << "完成时间:2023年02月09日";\ gotoxy(hout,29,27);\ color(3);\ printf("做出你的选择:");\ color(14);\ int n;\ scanf("%d","&n");\ switch(n){\ case 1: \ system("cls");//清屏 \ break;\ case 2:\ explation(hout);\ break;\ case 3:\ exit(0);\ break;\ }}\ //定义蛇的结构体 \struct Snake{\ int x[100];\ int y[100];\ int speed;\ int length;\ int count;\ int tm1;//开始时间 \ int tm2;//持续时间 };//定义食物的结构体 \struct Food{\ int x;\ int y;};//制作框架 \void makeframe(struct Snake snake){\ //定义显示器变量句柄 \ HANDLE hout=GetStdHandle(STD_OUTPUT_HANDLE);\ gotoxy(hout,framex+wide2+5,framey);\ cout << " 贪吃蛇游戏"; \ gotoxy(hout,framex+wide2+5,framey+3);\ cout << "使用方向键或wasd移动";\ gotoxy(hout,framex+wide2+5,framey+5);\ cout << "长按方向键可加速";\ gotoxy(hout,framex+wide2+5,framey+7);\ cout << "按任意键暂停,方向键继续";\ //打印上边框 \ for(i=0;i<wide2+1;i++){\ gotoxy(hout,framex+i,framey);\ cout << "";\ }\ //打印下边框 \ for(i=0;i<wide2+2;i++){\ gotoxy(hout,framex+i,framey+high);\ cout << "";\ }\ //打印左边框 \ for(i=0;i<high;i++){\ gotoxy(hout,framex,framey+i);\ cout << "";\ }\ //打印右边框 \ for(i=0;i<high;i++){\ gotoxy(hout,framex+wide2+1,framey+i);\ cout << "";\ }}//游戏信息\void infor(HANDLE hout,struct Snake* snake){\ gotoxy(hout,framex+wide2+5,framey+15);\ printf("当前速度:%d",-snake->speed+500);\ gotoxy(hout,framex+wide2+5,framey+17);\ printf("当前得分:%d",snake->count);\ gotoxy(hout,framex+wide2+5,framey+19);\ printf("当前长度:%d",snake->length);\ gotoxy(hout,framex+wide2+5,framey+21);\ snake->tm2=time(NULL);\ snake->tm2-=snake->tm1;\ printf("蛇已经活了:%d秒",snake->tm2);}\ //初始化蛇 \void initsnake(struct Snake *snake){\ snake->x[0]=framex+2;\ snake->y[0]=framey+high/2;\ snake->count=0;\ snake->length=3;\ snake->speed=400;\ snake->tm1=time(NULL);\ \ //初始化由蛇尾至蛇头的坐标 \ for(i=1;i
原文地址: https://www.cveoy.top/t/topic/p9Ix 著作权归作者所有。请勿转载和采集!