当前位置: 首页 > news >正文

阿里云oss可以做网站qq恢复官方网站

阿里云oss可以做网站,qq恢复官方网站,做网站上传图片多大合适,深圳网站设计 制作元文章目录案例一案例二案例三案例四案例五案例六案例七案例八案例九案例一 #include stdio.h#include windows.h#include conio.h#include time.h//游戏窗口#define FrameX 4//游戏窗口左上角的X轴坐标#define FrameY 4//游戏窗口左上角的Y轴坐… 文章目录案例一案例二案例三案例四案例五案例六案例七案例八案例九案例一 #include stdio.h#include windows.h#include conio.h#include time.h//游戏窗口#define FrameX 4//游戏窗口左上角的X轴坐标#define FrameY 4//游戏窗口左上角的Y轴坐标#define Frame_height 20//游戏窗口的高度#define Frame_width 20//游戏窗口的宽度//定义全局变量char reg_name[30],reg_pwd[10];char on_name[30],on_pwd[10];int i,j;int a[2];//用于记住蛇尾坐标其中a[0]、a[1]分别表示横、竖坐标//声明蛇的结构体struct Snake {int x[100];//蛇的横坐标其中x[0]表示蛇尾的横坐标x[N-1]表示蛇头的横坐标int y[100];//蛇的竖坐标其中y[0]表示蛇尾的竖坐标y[N-1]表示蛇头的竖坐标int count;//蛇吃食物的个数int length;//蛇的长度int speed;//蛇的速度};//声明食物的结构体struct Food {int x;//食物的横坐标int y;//食物的竖坐标};/******光标移到指定位置**************************************************************/void gotoxy(HANDLE hOut, int x, int y) {COORD pos;pos.X x;//横坐标pos.Y y;//纵坐标SetConsoleCursorPosition(hOut, pos);//设置控制台(cmd)光标位置 }/******设置文本为绿色*****************************************************************/void Set_TextColor_Green (void) {HANDLE Handle GetStdHandle(STD_OUTPUT_HANDLE);//HANDLE句柄是Windows用来表示对象的不是C的对象HWND是其中一种HWND是HANDLE但HANDLE不只是HWNDHANDLE是一个通用句柄表示HWND是一个专用表示窗口的句柄。更具体的可查找MSDN。包含在winnt.h头文件中。//GetStdHandle是一个Windows API函数。它用于从一个特定的标准设备标准输入、标准输出或标准错误中取得一个句柄用来标识不同设备的数值。SetConsoleTextAttribute(Handle, FOREGROUND_INTENSITY | FOREGROUND_GREEN);//SetConsoleTextAttribute是一个可以在API应用程序编程接口中设置控制台窗口字体颜色和背景色的计算机函数该函数被广泛应用于电脑编程与软件开发中。}/******制作游戏窗口******************************************************************/void make_frame() {HANDLE hOut GetStdHandle(STD_OUTPUT_HANDLE);//定义显示器句柄变量gotoxy(hOut,FrameX2*Frame_width3,FrameY13);//打印选择菜单printf(Esc 退出游戏);gotoxy(hOut,FrameX2*Frame_width3,FrameY15);printf(长按方向键加速);gotoxy(hOut,FrameX,FrameY);//打印框角printf(╔);gotoxy(hOut,FrameX2*Frame_width-2,FrameY);printf(╗);gotoxy(hOut,FrameX,FrameYFrame_height);printf(╚);gotoxy(hOut,FrameX2*Frame_width-2,FrameYFrame_height);printf(╝);for(i2; i2*Frame_width-2; i2) {gotoxy(hOut,FrameXi,FrameY);printf(═);//打印上横框}for(i2; i2*Frame_width-2; i2) {gotoxy(hOut,FrameXi,FrameYFrame_height);printf(═);//打印下横框}for(i1; iFrame_height; i) {gotoxy(hOut,FrameX,FrameYi);printf(║);//打印左竖框}for(i1; iFrame_height; i) {gotoxy(hOut,FrameX2*Frame_width-2,FrameYi);printf(║);//打印右竖框}gotoxy(hOut,FrameXFrame_width-5,FrameY-2);//打印游戏名称Set_TextColor_Green ();//设置蛇为绿色printf(贪吃蛇游戏);}/******结束菜单*******************************************************************/over_game() {system(cls);printf(\n\n\n\n\n\n\n\n\t\t\t\t游戏结束\n\n\n);Sleep(2000);return 0;}/******菜单信息***************************************************************/print_information(HANDLE hOut,struct Snake *snake,struct Food *food) {gotoxy(hOut,FrameX2*Frame_width3,FrameY1);printf(level : %d,snake-count/51);//打印游戏等级gotoxy(hOut,FrameX2*Frame_width3,FrameY3);printf(score : %d,10*snake-count);//打印游戏得分gotoxy(hOut,FrameX2*Frame_width3,FrameY5);printf(eat food : %d,snake-count);//打印产生食物个数?gotoxy(hOut,FrameX2*Frame_width3,FrameY7);printf(speed : %dms,snake-speed);//打印游戏速度gotoxy(hOut,FrameX2*Frame_width3,FrameY9);printf(foodX : %d,food-x);//打印食物的横坐标gotoxy(hOut,FrameX2*Frame_width3,FrameY11);printf(foodY : %d,food-y);//打印食物的竖坐标}/******初始化蛇**********************************************************************/void init_snake(struct Snake *snake) {snake-x[0]FrameX2;//初始化蛇的横坐标snake-y[0]FrameYFrame_height/2;//初始化蛇的竖坐标 snake-speed300;//初始化蛇的速度为300mssnake-length3;//初始化蛇的长度为3节snake-count0;//初始化蛇吃的个数为0for(i1; isnake-length; i){/* 依次得到蛇身、蛇头的坐标 */snake-x[i]snake-x[i-1]2;snake-y[i]snake-y[i-1];}}/******移动蛇*************************************************************************/void move_snake(HANDLE hOut,struct Snake *snake) {gotoxy(hOut,snake-x[0],snake-y[0]);printf( );/* 清除蛇尾*/for(i1; isnake-length; i) {/* 后一节的坐标依次取代前一节的坐标 */snake-x[i-1]snake-x[i];snake-y[i-1]snake-y[i];}}/******打印蛇*************************************************************************/void print_snake(HANDLE hOut,struct Snake *snake){for(i0; isnake-length; i){gotoxy(hOut,snake-x[i],snake-y[i]);if(i0){printf(○);//打印蛇尾}else if(isnake-length-1){printf(¤);//打印蛇头}else{printf(⊙);//打印蛇身}}}/******随机产生食物*******************************************************************/void get_food(HANDLE hOut,struct Snake *snake,struct Food *food) {srand((unsigned)time(NULL));//初始化随机数,srand函数是随机数发生器的初始化函数,防止每次产生的随机数相同 while(1) {/* 产生食物的条件1.在游戏窗口内 2.不在蛇的身上 */food-x rand() % (Frame_width-1); //rand()函数是Excel中产生随机数的一个随机函数。返回的随机数是大于等于 0 及小于 1 的均匀分布随机实数food-y rand() % Frame_height;if( food-x0 || food-y0 ) {continue;}food-x 2*food-x FrameX;//得到食物的横坐标food-yFrameY;//得到食物的竖坐标for(i0; isnake-length; i){/* 判断食物是否在蛇的身上如果在蛇身上则重新产生否则打印蛇身 */if( food-xsnake-x[i] food-ysnake-y[i] ){break;}}if(isnake-length){gotoxy(hOut,food-x,food-y);printf(⊙);break;}}}/******吃食物***************************************************************************/void eat_food(HANDLE hOut,struct Snake *snake,struct Food *food){if( snake-x[snake-length-1]food-x snake-y[snake-length-1]food-y ){/* 如果蛇头位置与食物位置相同吃食物 */snake-length;//吃一个食物蛇身增长一节for(isnake-length-1; i1; i--){/* 蛇后节坐标依次赋值给蛇前一节的坐标依次得到蛇身及蛇头的坐标 */snake-x[i]snake-x[i-1];snake-y[i]snake-y[i-1];}snake-x[0]a[0];//得到蛇尾移动前的横坐标snake-y[0]a[1];//得到蛇尾移动前的竖坐标get_food(hOut,snake,food);//重新产生食物snake-count;//食物的个数增1if( snake-count%50 ){/* 当蛇吃Up_level个食物时速度加快Up_speed毫秒并且升一级 */snake-speed-50;}}}/******判断蛇是否死**************************************************************************/int if_die(struct Snake *snake){/* 当蛇头碰到自身时蛇死 返回值为0 */for(i0; isnake-length-1; i){if( snake-x[snake-length-1]snake-x[i] snake-y[snake-length-1]snake-y[i] ){return 0;}}return 1;}/******登录界面*******************************************************************************/ void regist() {system(pause);system(cls);printf(\n\n\t\t\t欢迎使用贪吃蛇注册系统\n\n);while(1){//输入用户名printf(\t\t请输入用户名[不能大于10个字符]);scanf(%s,reg_name);//判断用户名if(strlen(reg_name)10){while(1){//输入密码printf(\n\t\t请输入密码[密码长度为八位]);scanf(%s,reg_pwd);//判断密码if(strlen(reg_pwd)8){printf(\n\n\t\t注册成功您的用户名是%s,密码是%s\n\n,reg_name,reg_pwd);break;}else{printf(\n\t\t密码的长度为%d请重新输入\n,strlen(reg_pwd));}}break;} else{printf(\n\t\t用户名的长度为%d请重新输入\n\n,strlen(reg_name)); //strlen所作的是一个计数器的工作它从内存的某个位置可以是字符串开头中间某个位置甚至是某个不确定的内存区域开始扫描直到碰到第一个字符串结束符\0为止然后返回计数器值(长度不包含\0)。}} }//判断是否注册int judge(){if(strcmp(reg_name,)0strcmp(reg_pwd,)0) //strcmp函数是string compare(字符串比较)的缩写用于比较两个字符串并根据比较结果返回整数。基本形式为strcmp(str1,str2)若str1str2则返回零若str1str2则返回负数若str1str2则返回正数{printf(\n\n\t\t您尚未注册请先注册\n\n);return 0;}else{return 1;} }/******开始游戏*******************************************************************************/start_game() {system(pause);system(cls);unsigned char ch77;//定义用于接收键盘输入的字符变量HANDLE hOut GetStdHandle(STD_OUTPUT_HANDLE);//定义显示器句柄变量struct Snake s,*snakes;//定义蛇的结构体指针并指向蛇的结构体struct Food f,*foodf;//定义食物的结构体指针并指向食物的结构体make_frame();//制作游戏窗口init_snake(snake);//初始化蛇get_food(hOut,snake,food);//随机产生食物while(1){print_information(hOut,snake,food);//打印菜单信息a[0]snake-x[0];//记住蛇尾的横坐标a[1]snake-y[0];//记住蛇尾的竖坐标j0;if(kbhit()){/* 判断是否按下键盘如果按下ch接收键盘输入 */chgetch(); //getch是一个计算机函数在windows平台下从控制台无回显地取一个字符if(kbhit()) //用于非阻塞地响应键盘输入事件。其中文可译为“键盘敲击”{/* 如果长按键盘则加速 */Sleep(20);j1;}}switch(ch){case 72:{/* 向上移动 */move_snake(hOut,snake);//移动蛇snake-y[snake-length-1]-1;//蛇头的竖坐标向上移即减1break;}case 80:{/* 向下移动 */move_snake(hOut,snake);//移动蛇snake-y[snake-length-1]1;//蛇头的竖坐标向下移即加1break;}case 75:{/* 向左移动 */move_snake(hOut,snake);//移动蛇snake-x[snake-length-1]-2;//蛇头的横坐标向左移即减2break;}case 77:{/* 向右移动 */move_snake(hOut,snake);//移动蛇snake-x[snake-length-1]2;//蛇头的横坐标向右移即加2break;}}if( ch72 snake-y[snake-length-1]FrameY){return 0; //如果蛇在上框且向上移动}if( ch80 snake-y[snake-length-1]FrameYFrame_height ){return 0; //如果蛇在下框且向下移动}if( ch75 snake-x[snake-length-1]FrameX ){return 0; //如果蛇在左框且向左移动}if( ch77 snake-x[snake-length-1]FrameX2*Frame_width-2 ){return 0; //如果蛇在右框且向右移动}eat_food(hOut,snake,food);//吃食物print_snake(hOut,snake);//打印蛇if( if_die(snake)0 || ch27 || snake-speed50 ){/* 游戏结束条件1.蛇碰到自身 2.按Esc键 3.速度为50ms */gotoxy(hOut,FrameXFrame_width-2,FrameYFrame_height/2-1);printf(Game Over);Sleep(2000);break;;}if(j0){Sleep(snake-speed);//延迟时间}else{Sleep(10);}}} //用户登录void dl(){//定义变量system(color 0D);//设置文本为粉红色int id;while(1){system(pause);system(cls);//输出界面printf( ********************************** \n);printf( ** ** \n);printf( ** 欢迎使用贪吃蛇 ** \n);printf( ** ** \n);printf( ********************************** \n);printf( -----------祝你使用愉快!---------- \n);//输入功能编号printf( ********************************** \n);printf( ** ** \n);printf( *****请选择功能编号************* \n);printf( ** *** ** \n);printf( ** 1.注册账号。 ***** ** \n);printf( ** *** ** \n);printf( ** 2.登录账号。 * ** \n);printf( ** * ** \n);printf( ** 0.退出系统。 * ** \n);printf( ** * ** \n);printf( ********************************** \n);printf(请输入您的选择); scanf(%d,id);//判断switch(id){case 1:regist();break;case 2:if(judge()1){return;}break;case 0:exit(1);break;default:printf(\n\t\t您输入的功能编号有误请重新输入\n);}}system(pause);system(cls);}int main() {int start_game();//开始游戏int over_game();//结束游戏dl();int d3;int i;system(pause);system(cls);printf( \n);printf( **************************************************************************\n);printf( \\ / \n);printf( \\ / 欢 \n);printf( \\ / 迎 \n);printf( * * * * * * * * * * * * * * * * 来 \n);printf( * * * * * * * * * * * * * * * * 到 \n);printf( * * / \\ * * 贪 \n);printf( * * / \\ * * 吃 \n);printf( * * * * 蛇 \n);printf( * * \\ /\\ / * * \n);printf( * * \\ \\/ * * \n);printf( * * * * * * * * * * * * * * * * \n);printf( * * * * * * * * * * * * * * * * \n);printf( * * \n);printf( \n);printf( **************************************************************************\n);printf( ******************************************************************************\n);printf(\n\n\t\t\t欢迎来到贪吃蛇登录哔哩哔哩-(゜-゜)つロ乾杯~\n\n);//三次登录验证for(i1; i3; i){printf(\t\t请输入用户名:);scanf(%s,on_name);printf(\n\t\t请输入密 码:);scanf(%s,on_pwd);if(strcmp(reg_name,on_name)0strcmp(reg_pwd,on_pwd)0){printf(\n\n\t\t登录成功欢迎使用贪吃蛇\n\n);start_game();//开始游戏over_game();//结束游戏return 0;}else{printf(\n\n\t\t登录失败请重新登录您还有%d次机会\n\n,3-i);dd--;if(d0){return 0;}}}}案例二 #includestdio.h #includeconio.h #includetime.h #includewindows.h #includestring.h #define up w #define down s #define left a #define right d #define stop p void welcome(); //55开始界面void Finish(); //291结束界面void creatgraph(); //69围墙打印void gotoxy(int x, int y); //111光标跳转横为X 0,1,2..void gotoprint(int x, int y); //121跳转打印void gotodelete(int x, int y);//127跳转删除void creatfood(); //133食物产生int ClickControl(); //157获取键盘信号int Judge(); //270游戏结束判断void MovingBody(); //172蛇的移动 void Eating(); //223蛇吃到东西后的操作伸长void ChangeBody(int a,int b); //245蛇的坐标变换,后一个复制前一个STRUCT,a,b为head之前坐标 typedef struct snakes{int x;int y;struct snakes *Next; }snake; snake *Head; snake *tail; struct Food{int x;int y; }food; char name[20]; int score0; int speed; char click1;void welcome(); //开始界面 void Finish() //结束界面 {system(cls);gotoxy(15, 10);printf(/**********************************************/);gotoxy(15, 20);printf(/**********************************************/);gotoxy(18, 14);printf(GAME OVER o(*▽*)o);gotoxy(20, 16);printf(Your Score is %d hiahiahia, score);gotoxy(18, 18);gotoxy(0, 27);system(pause); } void creatgraph() //围墙打印 {int i;for(i0;i58;i2){gotoprint(i, 0);gotoprint(i, 26);}for(i1;i26;i){gotoprint(0, i);gotoprint(56, i);}gotoxy(63, 10);printf(欢迎来到游戏%s,name); gotoxy(63,15);printf(您的得分是:%s,score);gotoxy(104,29);printf(游戏制作者李德旭);Head (snake*)malloc(sizeof(snake));Head-x 16;Head-y 15;tail(snake*)malloc(sizeof(snake));snake *p(snake*)malloc(sizeof(snake));snake *q(snake*)malloc(sizeof(snake));p-x 16;p-y 16;q-x 16;q-y 17;Head-Nextp;p-Nextq;q-Nexttail;tail-NextNULL;} void gotoxy(int x, int y) //光标跳转横为X 0,1,2.. {COORD pos;HANDLE hOutput;pos.Xx;pos.Yy; hOutput GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleCursorPosition(hOutput,pos);} void gotoprint(int x, int y) //跳转打印 {gotoxy(x,y);printf(■);} void gotodelete(int x, int y)//跳转删除{gotoxy(x, y);printf( );}void creatfood() //食物产生 {srand((int)time(NULL)); lable:food.y rand() % (25 - 1 1) 1;food.x rand() % (54 - 2 1) 2;if (food.x % 2 ! 0){food.x food.x1;}snake *judge Head;while (1) //遍历排除蛇身重复{if (judge-Next NULL) break;if (food.x judge-xfood.y judge-y){goto lable;}judge judge-Next;}gotoxy(food.x, food.y);printf(⊙);}int ClickControl() //获取键盘信号 {char c;while (1){if (Judge()0) return 0;if(_kbhit()){click_getch();}MovingBody();Eating();}return 1;}int Judge() //游戏结束判断 {if(Head-x0||Head-y0||Head-x56||Head-y26) {Finish();return 0;}snake *pHead-Next;while(p-Next!NULL){if(Head-xp-xHead-yp-y){Finish();return 0;} pp-Next;}return 1; } void MovingBody() //蛇的移动 {int count0;int aHead-x,bHead-y;snake *pHead;while(1){if(p-NextNULL)break;gotodelete(p-x,p-y);count;pp-Next;} switch(click){case up:Head-y-1; ChangeBody(a,b);break;case down:Head-y1;ChangeBody(a,b);break;case left:Head-x-2;ChangeBody(a,b);break; case right:Head-x2;ChangeBody(a,b);break; } pHead;while(p-Next!NULL){gotoprint(p-x,p-y);pp-Next;}pHead;gotoxy(0,28);if (count10)speed150;else if(count10 count20)speed100;else if(count20 count40)speed50;else speed10;Sleep(speed);} void Eating() //蛇吃到东西后的操作伸长 {if (Head-x food.xHead-y food.y){creatfood();snake *_new (snake*)malloc(sizeof(snake));snake *p;p Head;while (1){if (p-Next-Next NULL) break;p p-Next;}p-Next _new;_new-Next tail;score 10;gotoxy(77, 15);printf(%d, score);}} void ChangeBody(int a,int b) //蛇的坐标变换,后一个复制前一个STRUCT,a,b为head之前坐标 {snake *pHead-Next; int mid1,mid2,_mid1,_mid2;mid1p-x;mid2p-y; while(1){if(p-Next-NextNULL)break;_mid1p-Next-x;_mid2p-Next-y;p-Next-xmid1;p-Next-ymid2;mid1 _mid1;mid2 _mid2; p p-Next; }pHead-Next;p-x a;p-y b;} int main(){creatgraph();creatfood();if (ClickControl() 0) return 0;}案例三 #includestdio.h #includetime.h #includewindows.h #includestdlib.h #define U 1 #define D 2 #define L 3 #define R 4 //蛇的状态U上 D下L:左 R右typedef struct SNAKE //蛇的节点 {int x;int y;struct SNAKE *next;}snake;//全局变量//int score 0, add 10;//总得分与每次吃食物得分。int status, sleeptime 200;//每次运行的时间间隔snake *head, *food;//蛇头指针食物指针snake *q;//遍历蛇的时候用到的指针int endGamestatus 0; //游戏结束的情况1撞到墙2咬到自己3主动退出游戏。//声明全部函数//void Pos();//位置函数 void creatMap();//创造地图 void initSnake();//蛇的初始化 void snakeMove();//蛇的移动 int biteSelf();//咬自己 void createFood();//创造食物 void cantCrossWall();//不能穿墙 void pause();//暂停 void runGame();//控制游戏 void initGame();//游戏初始化 void endGame();//游戏结束 void gameStart();//游戏开始 void speeddown();//减速 void speedup();//加速 void Pos(int x, int y)//设置光标位置{COORD pos;//定义结构体变量pos HANDLE hOutput;//新建句柄 hOutput pos.X x;pos.Y y;SetConsoleTextAttribute(hOutput,10|1);hOutput GetStdHandle(STD_OUTPUT_HANDLE);//返回标准的输入、输出或错误的设备的句柄也就是获得输入、输出/错误的屏幕缓冲区的句柄SetConsoleCursorPosition(hOutput, pos);}void creatMap()//创建地图{int i;for (i 0; i58; ii2)//打印上下边框{Pos(i, 0);printf(■);//一个方块占两个位置Pos(i, 25);printf(■);}for (i 0; i26; i)//打印左右边框{Pos(0, i);printf(■);Pos(56, i);printf(■);}}void initSnake()//初始化蛇身{snake *tail;int i;tail (snake*)malloc(sizeof(snake));//从蛇尾开始头插法以x,y设定开始的位置tail-x 24;tail-y 5;tail-next NULL;for (i 1; i 3; i)//初始长度为4{head (snake*)malloc(sizeof(snake));head-next tail; head-x 24 2*i; head-y 5;tail head;}while (tail! NULL)//从头到尾输出蛇身 {Pos(tail-x, tail-y);printf(■);tail tail-next; } }//int biteSelf()//判断是否咬到了自己{snake *self;self head-next;while (self ! NULL){if (self-x head-x self-y head-y){return 1;} self self-next;}return 0;}void createFood()//随机出现食物{snake *food_1;srand((unsigned)time(NULL));//为了防止每次产生的随机数相同种子设置为timefood_1 (snake*)malloc(sizeof(snake));//初始化food_1 food_1-xrand()%532;while ((food_1-x % 2)! 0) //保证其为偶数使得食物能与蛇头对齐 { food_1-x food_1-x1 ;//活动范围 }food_1-y rand()%231; q head;while (q-next !NULL){if (q-x food_1-x q-y food_1-y) //判断蛇身是否与食物重合{free(food_1);createFood();}q q-next;}Pos(food_1-x, food_1-y);food food_1;printf($);}void cantCrossWall()//不能穿墙{if (head-x 0 || head-x 54 || head-y 0 || head-y 24){endGamestatus 1;endGame();}}void snakeMove()//蛇前进,上U,下D,左L,右R{snake * nexthead;cantCrossWall();nexthead (snake*)malloc(sizeof(snake));if (status U){nexthead-x head-x;nexthead-y head-y - 1;if (nexthead-x food-x nexthead-y food-y)//如果下一个有食物//{nexthead-next head;head nexthead;q head;while (q ! NULL){Pos(q-x, q-y);printf(■);q q-next;}score score add;createFood();}else //如果没有食物//{nexthead-next head;head nexthead;q head;while (q-next-next ! NULL){Pos(q-x, q-y);printf(■);q q-next;}Pos(q-next-x, q-next-y);printf( );free(q-next);q-next NULL;}}if (status D){nexthead-x head-x;nexthead-y head-y 1;if (nexthead-x food-x nexthead-y food-y) //有食物{nexthead-next head;head nexthead;q head;while (q ! NULL){Pos(q-x, q-y);printf(■);q q-next;}score score add;createFood();}else //没有食物{nexthead-next head;head nexthead;q head;while (q-next-next ! NULL){Pos(q-x, q-y);printf(■);q q-next;}Pos(q-next-x, q-next-y);printf( );free(q-next);q-next NULL;}}if (status L){nexthead-x head-x - 2;nexthead-y head-y;if (nexthead-x food-x nexthead-y food-y)//有食物{nexthead-next head;head nexthead;q head;while (q ! NULL){Pos(q-x, q-y);printf(■);q q-next;}score score add;createFood();}else //没有食物{nexthead-next head;head nexthead;q head;while (q-next-next ! NULL){Pos(q-x, q-y);printf(■);q q-next;}Pos(q-next-x, q-next-y);printf( );free(q-next);q-next NULL;}}if (status R){nexthead-x head-x 2;nexthead-y head-y;if (nexthead-x food-x nexthead-y food-y)//有食物{nexthead-next head;head nexthead;q head;while (q ! NULL){Pos(q-x, q-y);printf(■);q q-next;}score score add;createFood();}else //没有食物{nexthead-next head;head nexthead;q head;while (q-next-next ! NULL){Pos(q-x, q-y);printf(■);q q-next;}Pos(q-next-x, q-next-y);printf( );free(q-next);q-next NULL;}}if (biteSelf() 1) //判断是否会咬到自己{endGamestatus 2;endGame();}}void pause()//暂停{while (1){Sleep(300);if (GetAsyncKeyState(VK_SPACE)){break;}}}void runGame()//控制游戏 {Pos(64, 15);printf(不能穿墙不能咬到自己\n);Pos(64, 16);printf(用↑.↓.←.→分别控制蛇的移动.);Pos(64, 18);printf(ESC 退出游戏.space暂停游戏.);status R; while (1){Pos(64, 10);printf(得分%d , score);Pos(64, 11);printf(每个食物得分%d分, add);if (GetAsyncKeyState(VK_UP) status ! D)//GetAsyncKeyState函数用来判断函数调用时指定虚拟键的状态{status U;//如果蛇不是向下前进的时候按上键执行向上前进操作}else if (GetAsyncKeyState(VK_DOWN) status ! U)//如果蛇不是向上前进的时候按下键执行向下前进操作{status D;}else if (GetAsyncKeyState(VK_LEFT) status ! R)//如果蛇不是向右前进的时候按左键执行向左前进{status L;}else if (GetAsyncKeyState(VK_RIGHT) status ! L)//如果蛇不是向左前进的时候按右键执行向右前进{status R;}else if (GetAsyncKeyState(VK_SPACE)){pause();}else if (GetAsyncKeyState(VK_ESCAPE)){endGamestatus 3;break;}Sleep(300);snakeMove();}}void initGame()//开始界面 {Pos(40, 12); printf(欢迎来到贪食蛇游戏);system(pause);system(cls);Pos(25, 12);printf(用↑.↓.←.→分别控制蛇的移动\n);system(pause);system(cls);}void endGame()//结束游戏{system(cls);Pos(24, 12);if (endGamestatus 1){printf(对不起您撞到墙了。游戏结束.);}else if (endGamestatus 2){printf(对不起您咬到自己了。游戏结束.);}else if (endGamestatus 3){printf(您的已经结束了游戏。);}Pos(24, 13);printf(您的得分是%d\n, score);exit(0);}void gameStart()//游戏初始化{initGame();creatMap();initSnake();createFood();}int main(){ while(1){gameStart();runGame();}endGame();return 0; }案例四 #include stdio.h#include stdlib.h#include Windows.h//windows编程头文件#include time.h#include conio.h//控制台输入输出头文件#define SNAKESIZE 100//蛇的身体最大节数#define MAPWIDTH 118 //宽度#define MAPHEIGHT 29//高度//食物的坐标struct food {int x;int y;}food;//蛇的相关属性struct snake{int speed;//蛇移动的速度int len;//蛇的长度int x[SNAKESIZE];//组成蛇身的每一个小方块中x的坐标int y[SNAKESIZE];//组成蛇身的每一个小方块中y的坐标}snake;//绘制游戏边框void drawMap();//随机生成食物void createFood();//按键操作void keyDown();//蛇的状态bool snakeStatus();//从控制台移动光标void gotoxy(int x, int y);int key 72;//表示蛇移动的方向72为按下“↑”所代表的数字//用来判断蛇是否吃掉了食物这一步很重要涉及到是否会有蛇身移动的效果以及蛇身增长的效果int changeFlag 0;int sorce 0;//记录玩家的得分//将控制台光标移到x,y处void gotoxy(int x, int y){COORD coord;coord.X x;coord.Y y;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);}void drawMap(){//打印上下边框for (int i 0; i MAPWIDTH; i 2)//i2是因为横向占用的是两个位置{//将光标移动依次到(i,0)处打印上边框gotoxy(i, 0);printf(■);//将光标移动依次到(i,MAPHEIGHT)处打印下边框gotoxy(i, MAPHEIGHT);printf(■);}//打印左右边框for (int i 1; i MAPHEIGHT; i){//将光标移动依次到(0,i)处打印左边框gotoxy(0, i);printf(■);//将光标移动依次到(MAPWIDTH, i)处打印左边框gotoxy(MAPWIDTH, i);printf(■);}//随机生成初试食物while (1){srand((unsigned int)time(NULL));food.x rand() % (MAPWIDTH - 4) 2;food.y rand() % (MAPHEIGHT - 2) 1;//生成的食物横坐标的奇偶必须和初试时蛇头所在坐标的奇偶一致因为一个字符占两个字节位置若不一致//会导致吃食物的时候只吃到一半if (food.x % 2 0)break;}//将光标移到食物的坐标处打印食物gotoxy(food.x, food.y);printf(★);//初始化蛇的属性snake.len 3;snake.speed 200;//在屏幕中间生成蛇头snake.x[0] MAPWIDTH / 2 1;//x坐标为偶数snake.y[0] MAPHEIGHT / 2;//打印蛇头gotoxy(snake.x[0], snake.y[0]);printf(■);//生成初试的蛇身for (int i 1; i snake.len; i){//蛇身的打印纵坐标不变横坐标为上一节蛇身的坐标值2snake.x[i] snake.x[i - 1] 2;snake.y[i] snake.y[i - 1];gotoxy(snake.x[i], snake.y[i]);printf(■);}//打印完蛇身后将光标移到屏幕最上方避免光标在蛇身处一直闪烁gotoxy(MAPWIDTH - 2, 0);return;}void keyDown(){int pre_key key;//记录前一个按键的方向if (_kbhit())//如果用户按下了键盘中的某个键{fflush(stdin);//清空缓冲区的字符//getch()读取方向键的时候会返回两次第一次调用返回0或者224第二次调用返回的才是实际值key _getch();//第一次调用返回的不是实际值key _getch();//第二次调用返回实际值}if (changeFlag 0){gotoxy(snake.x[snake.len - 1], snake.y[snake.len - 1]);printf( );//在蛇尾处输出空格即擦去蛇尾}//将蛇的每一节依次向前移动一节蛇头除外for (int i snake.len - 1; i 0; i--){snake.x[i] snake.x[i - 1];snake.y[i] snake.y[i - 1];}//蛇当前移动的方向不能和前一次的方向相反比如蛇往左走的时候不能直接按右键往右走//如果当前移动方向和前一次方向相反的话把当前移动的方向改为前一次的方向if (pre_key 72 key 80)key 72;if (pre_key 80 key 72)key 80;if (pre_key 75 key 77)key 75;if (pre_key 77 key 75)key 77;/***控制台按键所代表的数字*“↑”72*“↓”80*“←”75*“→”77*///判断蛇头应该往哪个方向移动switch (key){case 75:snake.x[0] - 2;//往左break;case 77:snake.x[0] 2;//往右break;case 72:snake.y[0]--;//往上break;case 80:snake.y[0];//往下break;}//打印出蛇头gotoxy(snake.x[0], snake.y[0]);printf(■);gotoxy(MAPWIDTH - 2, 0);//由于目前没有吃到食物changFlag值为0changeFlag 0;return;}void createFood(){if (snake.x[0] food.x snake.y[0] food.y)//蛇头碰到食物{//蛇头碰到食物即为要吃掉这个食物了因此需要再次生成一个食物while (1){int flag 1;srand((unsigned int)time(NULL));food.x rand() % (MAPWIDTH - 4) 2;food.y rand() % (MAPHEIGHT - 2) 1;//随机生成的食物不能在蛇的身体上for (int i 0; i snake.len; i){if (snake.x[i] food.x snake.y[i] food.y){flag 0;break;}}//随机生成的食物不能横坐标为奇数也不能在蛇身否则重新生成if (flag food.x % 2 0)break;}//绘制食物gotoxy(food.x, food.y);printf(★);snake.len;//吃到食物蛇身长度加1sorce 10;//每个食物得10分snake.speed - 5;//随着吃的食物越来越多速度会越来越快changeFlag 1;//很重要因为吃到了食物就不用再擦除蛇尾的那一节以此来造成蛇身体增长的效果}return;}bool snakeStatus(){//蛇头碰到上下边界游戏结束if (snake.y[0] 0 || snake.y[0] MAPHEIGHT)return false;//蛇头碰到左右边界游戏结束if (snake.x[0] 0 || snake.x[0] MAPWIDTH)return false;//蛇头碰到蛇身游戏结束for (int i 1; i snake.len; i){if (snake.x[i] snake.x[0] snake.y[i] snake.y[0])return false;}return true;}int main(){drawMap();while (1){keyDown();if (!snakeStatus())break;createFood();Sleep(snake.speed);}gotoxy(MAPWIDTH / 2, MAPHEIGHT / 2);printf(Game Over!\n);gotoxy(MAPWIDTH / 2, MAPHEIGHT / 2 1);printf(本次游戏得分为%d\n, sorce);Sleep(5000);return 0;} 案例五 #include stdio.h #include stdlib.h #include Windows.h//windows编程头文件 #include time.h #include conio.h//控制台输入输出头文件//在一个大的软件工程里面可能会有多个文件同时包含一个头文件 //当这些文件编译链接成一个可执行文件时就会出现大量“重定义”的错误 //在头文件中使用#ifndef #define #endif能避免头文件的重定义#ifndef __cplusplus//用于将c的代码以标准c的形式输出 typedef char bool; #define false 0 #define true 1#endif//将光标移动到控制台的(x,y)坐标点处 void gotoxy(int x, int y) {COORD coord;coord.X x;coord.Y y;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);//设置控制台光标的位置 }#define SNAKESIZE 100//蛇的身体最大节数 #define MAPWIDTH 78//宽度 #define MAPHEIGHT 24//高度//食物的坐标 struct food{int x;int y; }food;//蛇的相关属性 struct snake{int speed;//蛇移动的速度int len;//蛇的长度int x[SNAKESIZE];//组成蛇身的每一个小方块中x的坐标int y[SNAKESIZE];//组成蛇身的每一个小方块中y的坐标}snake;//绘制游戏边框 void drawMap(); //随机生成食物 void createFood(); //按键操作 void keyDown(); //蛇的状态 bool snakeStatus(); //从控制台移动光标 void gotoxy(int x, int y);int key 72;//表示蛇移动的方向72为按下“↑”所代表的数字//用来判断蛇是否吃掉了食物这一步很重要涉及到是否会有蛇身移动的效果以及蛇身增长的效果 int changeFlag 0;int sorce 0;//记录玩家的得分int i; void drawMap() {//打印上下边框for (i 0; i MAPWIDTH; i 2)//i2是因为横向占用的是两个位置{//将光标移动依次到(i,0)处打印上边框gotoxy(i, 0);printf(■);//将光标移动依次到(i,MAPHEIGHT)处打印下边框gotoxy(i, MAPHEIGHT);printf(■);}//打印左右边框for (i 1; i MAPHEIGHT; i){//将光标移动依次到(0,i)处打印左边框gotoxy(0, i);printf(■);//将光标移动依次到(MAPWIDTH, i)处打印左边框gotoxy(MAPWIDTH, i);printf(■);}//随机生成初试食物while (1){srand((unsigned int)time(NULL));food.x rand() % (MAPWIDTH - 4) 2;food.y rand() % (MAPHEIGHT - 2) 1;//生成的食物横坐标的奇偶必须和初试时蛇头所在坐标的奇偶一致因为一个字符占两个字节位置若不一致//会导致吃食物的时候只吃到一半if (food.x % 2 0)break;}//将光标移到食物的坐标处打印食物gotoxy(food.x, food.y);printf(*);//初始化蛇的属性snake.len 3;snake.speed 400;//在屏幕中间生成蛇头snake.x[0] MAPWIDTH / 2 1;//x坐标为偶数snake.y[0] MAPHEIGHT / 2;//打印蛇头gotoxy(snake.x[0], snake.y[0]);printf(■);//生成初试的蛇身for (i 1; i snake.len; i){//蛇身的打印纵坐标不变横坐标为上一节蛇身的坐标值2snake.x[i] snake.x[i - 1] 2;snake.y[i] snake.y[i - 1];gotoxy(snake.x[i], snake.y[i]);printf(■);}//打印完蛇身后将光标移到屏幕最上方避免光标在蛇身处一直闪烁gotoxy(MAPWIDTH - 2, 0);return; }void keyDown() {int pre_key key;//记录前一个按键的方向if (_kbhit())//如果用户按下了键盘中的某个键{fflush(stdin);//清空缓冲区的字符//getch()读取方向键的时候会返回两次第一次调用返回0或者224第二次调用返回的才是实际值key _getch();//第一次调用返回的不是实际值key _getch();//第二次调用返回实际值}/**蛇移动时候先擦去蛇尾的一节*changeFlag为0表明此时没有吃到食物因此每走一步就要擦除掉蛇尾以此营造一个移动的效果*为1表明吃到了食物就不需要擦除蛇尾以此营造一个蛇身增长的效果*/if (changeFlag 0){gotoxy(snake.x[snake.len - 1], snake.y[snake.len - 1]);printf( );//在蛇尾处输出空格即擦去蛇尾}//将蛇的每一节依次向前移动一节蛇头除外for (i snake.len - 1; i 0; i--){snake.x[i] snake.x[i - 1];snake.y[i] snake.y[i - 1];}//蛇当前移动的方向不能和前一次的方向相反比如蛇往左走的时候不能直接按右键往右走//如果当前移动方向和前一次方向相反的话把当前移动的方向改为前一次的方向if (pre_key 72 key 80)key 72;if (pre_key 80 key 72)key 80;if (pre_key 75 key 77)key 75;if (pre_key 77 key 75)key 77;/***控制台按键所代表的数字*“↑”72*“↓”80*“←”75*“→”77*///判断蛇头应该往哪个方向移动switch (key){case 75:snake.x[0] - 2;//往左break;case 77:snake.x[0] 2;//往右break;case 72:snake.y[0]--;//往上break;case 80:snake.y[0];//往下break;}//打印出蛇头gotoxy(snake.x[0], snake.y[0]);printf(■);gotoxy(MAPWIDTH - 2, 0);//由于目前没有吃到食物changFlag值为0changeFlag 0;return; }void createFood() { if (snake.x[0] food.x snake.y[0] food.y)//蛇头碰到食物{//蛇头碰到食物即为要吃掉这个食物了因此需要再次生成一个食物while (1){int flag 1;srand((unsigned int)time(NULL));food.x rand() % (MAPWIDTH - 4) 2;food.y rand() % (MAPHEIGHT - 2) 1;//随机生成的食物不能在蛇的身体上for (i 0; i snake.len; i){if (snake.x[i] food.x snake.y[i] food.y){flag 0;break;}}//随机生成的食物不能横坐标为奇数也不能在蛇身否则重新生成if (flag food.x % 2 0)break;}//绘制食物gotoxy(food.x, food.y);printf(*);snake.len;//吃到食物蛇身长度加1sorce 10;//每个食物得10分snake.speed - 5;//随着吃的食物越来越多速度会越来越快changeFlag 1;//很重要因为吃到了食物就不用再擦除蛇尾的那一节以此来造成蛇身体增长的效果}return; }bool snakeStatus() {//蛇头碰到上下边界游戏结束if (snake.y[0] 0 || snake.y[0] MAPHEIGHT)return false;//蛇头碰到左右边界游戏结束if (snake.x[0] 0 || snake.x[0] MAPWIDTH)return false;//蛇头碰到蛇身游戏结束for (i 1; i snake.len; i){if (snake.x[i] snake.x[0] snake.y[i] snake.y[0])return false;}return true; }int main() {drawMap();while (1){keyDown();if (!snakeStatus())break;createFood();Sleep(snake.speed);}gotoxy(MAPWIDTH / 2, MAPHEIGHT / 2);printf(Game Over!\n);gotoxy(MAPWIDTH / 2, MAPHEIGHT / 2 1);printf(本次游戏得分为%d\n, sorce);Sleep(5000);return 0; }案例六 #includeiostream #includewindows.h #includeconio.h #includecstdlib #includectime #includefstream #includecstring #define High 20 #define Width 50 using namespace std; /* -2为食物 ; -1为边框 # ; 0为 空格 ; 1为蛇头 ; 1为蛇身 * ; */ /*全局声明变量*/ int Frames[High][Width]{0}; //界面大小 int MoveDirection;//移动方向 1,2,3,4 上下左右 int Food_x,Food_y;//食物位置 int MaxGrade;//最高分 int Grade;//当前分数 /*改善画面函数*/ void gotoxy(int x,int y);//光标移动到x,y位置 void HideCursor(); //隐藏光标 /*功能函数*/ void Are_you_ready();//准备界面 void Initialize();//数据初始化 void Show(); //显示画面 void Move();//移动方向 void KeyPlay();//键盘操作 void SaveMaxGrade();//保存最高分 /*******主函数*******/ int main() {HideCursor();//隐藏光标Initialize();//数据初始化 Are_you_ready();//准备界面 while(1){Show();KeyPlay();//键盘操作Move();//移动操作} SaveMaxGrade();//保存最高分return 0; } /*******************/ /*移动光标*///光标定位 void gotoxy(int x,int y)//光标移动到x,y位置 取代清屏 {HANDLE handleGetStdHandle(STD_OUTPUT_HANDLE);COORD pos;pos.Xx;pos.Yy;//该结构体用来记录光标 SetConsoleCursorPosition(handle,pos); } /*隐藏光标*/ void HideCursor() {CONSOLE_CURSOR_INFO cursor_info {1, 0}; SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), cursor_info); } /*准备界面*/ void Are_you_ready() {for(int i4;i1;i--){system(cls); cout\n\n\n\t\t请使用方向键玩蛇; if(i1){cout\n\n\n\t\t\tGo!;Sleep(200); return ;}cout\n\n\n\t\t\ti-1;Sleep(1000);} } /*数据初始化*/ void Initialize() { //分数初始化ifstream fin(MaxGrade.txt);if(!fin){coutMaxGrade.txt 文件打开失败\n;//exit(2);} finMaxGrade;fin.close();Grade0; //边框初始化 # int i,j;for(i0;iHigh;i){Frames[i][0]-1;Frames[i][Width-1]-1;}for(j0;jWidth;j){Frames[0][j]-1;Frames[High-1][j]-1;} //蛇初始化 for(i1;i5;i){Frames[High/2][Width/2-i]i; } //移动方向初始化向右 MoveDirection 4;//食物位置初始化 srand((int)time(NULL));do{Food_xrand()%(High-5)4;Food_yrand()%(Width-5)3;//判断食物与蛇是否重合 if(Frames[Food_x][Food_y]0){Frames[Food_x][Food_y]-2;break;}}while(1); } /*显示画面*/ void Show() { gotoxy(0,0);//移动光标至初始0,0位置 for(int i0;iHigh;i){for(int j0;jWidth;j){if(Frames[i][j]-1){cout#;//-1为边框 # //SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY);}else if(Frames[i][j]0){cout ;//0为 空格 }else if(Frames[i][j]1){cout;//1为蛇头 }else if(Frames[i][j]1){cout*;//大于1的正整数为蛇身 * // SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);//红色 }else if(Frames[i][j]-2){cout;//-2为食物 } }coutendl;}if(GradeMaxGrade){cout\n\n\n★当前得分: Grade\t★最高分Gradeendl;}else{cout\n\n\n★当前得分: Grade\t★最高分MaxGradeendl;}cout\n\n\n★按空格暂停\t★按Esc键退出游戏\n;if(Grade 100Grade 200){Sleep(90);} else if(Grade 200 Grade 300){Sleep(50);}else if(Grade 300){Sleep(10);}else{Sleep(200);//刷新速度 }} /*移动*/ void Move() {int i,j,max0;int OldTail_i,OldTail_j;//记录旧蛇尾 int OldHead_i,OldHead_j;//记录旧蛇头 for(i1;iHigh-1;i){for(j1;jWidth-1;j){if(Frames[i][j]0){//对所有大于0的元素1 Frames[i][j];//记录旧蛇尾位置 if(Frames[i][j]max){maxFrames[i][j];OldTail_ii;OldTail_jj;} //记录旧蛇头位置 if(Frames[i][j]2){OldHead_ii;OldHead_jj; } }}} int NewHead_i,NewHead_j; //新蛇头 if(MoveDirection1)//向上 {NewHead_iOldHead_i-1;NewHead_jOldHead_j; } if(MoveDirection2)//向下 {NewHead_iOldHead_i1;NewHead_jOldHead_j;} if(MoveDirection3)//向左 {NewHead_iOldHead_i;NewHead_jOldHead_j-1; } if(MoveDirection4)//向右 {NewHead_iOldHead_i;NewHead_jOldHead_j1;} //判断蛇头是否吃到食物if(Frames[NewHead_i][NewHead_j]-2){Frames[Food_x][Food_y]0;//食物变为空格 Grade10; //分数加10 do{Food_x rand()%(High-5)4;Food_y rand()%(Width-5)3;//判断食物与蛇是否重合 if(Frames[Food_x][Food_y]0){Frames[Food_x][Food_y] -2;//产生食物break;}}while(1); }else//未吃到长度不变 {Frames[OldTail_i][OldTail_j] 0;//最大元素变为0空格}//判断蛇头撞到自身或墙壁游戏失败if(Frames[NewHead_i][NewHead_j]0||Frames[NewHead_i][NewHead_j]-1){system(cls); cout\n\n\n\t\t\tGame Over!\n\n\n\n\n\n\n;Sleep(2000);system(cls);cout\n\n\n\t\t\t您的分数Gradeendl;if(GradeMaxGrade) {cout\t\t\t新纪录\n;SaveMaxGrade();//保存最高分}Sleep(500);system(pause);exit(0);} else//正常操作 {Frames[NewHead_i][NewHead_j]1;}} /*键盘操作*/ void KeyPlay() {if(kbhit())//判断是否有输入{switch(getch()){case 224:switch(getch()){case 72:if(MoveDirection1||MoveDirection2)//下同判断方向是否为正在行进方向 break;MoveDirection 1;break;//上 case 80:if(MoveDirection1||MoveDirection2)break;MoveDirection 2;break;//下 case 75:if(MoveDirection3||MoveDirection4)break;MoveDirection 3;break;//左 case 77:if(MoveDirection3||MoveDirection4)break;MoveDirection 4;break;//右 }break;case 27://退出Esc system(cls);//清屏cout\n\n\n\n\t\t\t☆★退出游戏★☆\n\n\n\n;exit(0);case 32://空格Spacesystem(cls);//清屏cout\n\n\n\n\t\t\t☆★暂停★☆\n\n\n\n;cout\n\n\t\t\t;system(pause); system(cls);break; } } } /*保存最高分*/ void SaveMaxGrade() {ofstream fout(MaxGrade.txt);if(!fout){coutMaxGrade.txt 文件打开失败\n;exit(2);}if(GradeMaxGrade){MaxGradeGrade;}foutMaxGrade;fout.close(); }案例七 #include stdio.h #include string.h #include windows.h #include time.h #include conio.h//预处理命令 #define up w #define down s #define left a #define right d #define stop ptypedef struct Snakes {int x;int y;struct Snakes *next; }snake; snake *head,*tail; struct Food {int x;int y; }food;void welcome();//主页面 void creatgraph();//创建图表 void gotoxy(int x,int y); void gotoprint(int x,int y); void creatfood(); int ClickControl(); void Finish(); int Judge(); void MovingBody(); void Eating(); void ChangeBody(int a,int b); char name[20]; int score0; char click1; int speed; int main() {system(color 0B);welcome();creatgraph();creatfood();if(ClickControl()0)return 0;return 0; } void welcome() {gotoxy(35,10);printf(/********************************************/);gotoxy(35,22);printf(/********************************************/);gotoxy(40,13);printf(\t欢迎来到贪吃蛇游戏);gotoxy(35,16);printf(\t请在英文输入法中操作w a s d控制,p暂停);gotoxy(40,19);printf(\t请输入你的姓名:);scanf(%s,name);system(cls); } void creatgraph()//创建图表 {int i;for(i0;i58;i2){gotoprint(i,0);gotoprint(i,26);}for(i1;i26;i){gotoprint(0,i);gotoprint(56,i);}gotoxy(75,10);printf(你好 %s,欢迎你来玩贪吃蛇!,name);gotoxy(75,15);printf(你的分数是:%d ω ,score);head (snake*)malloc(sizeof(snake));head-x16;head-y15;//蛇头坐标 tail(snake*)malloc(sizeof(snake));snake *p(snake*)malloc(sizeof(snake));snake *q(snake*)malloc(sizeof(snake));p-x16;p-y16;//第二个节点 q-x16;q-y17;//第三个节点 head-nextp;p-nextq;q-nexttail;tail-nextNULL;//将节点连接起来组成蛇 } void gotoprint(int x,int y)//打印 {gotoxy(x,y);printf(■); } void gotodelete(int x,int y)//删除食物并输入空格 {gotoxy(x,y);printf( ); } void gotoxy(int x,int y)//食物出现坐标函数X表示横坐标Y表示纵坐标。 {COORD pos;//表示一个字符在控制台屏幕上的坐标HANDLE hOutput;pos.Xx;pos.Yy;hOutput GetStdHandle(STD_OUTPUT_HANDLE);//获得标准输出句柄SetConsoleCursorPosition(hOutput, pos); } void creatfood() {srand((int)time(NULL));//表示设置一个随机种子每次运行都能保证随机种子不同 lable:food.yrand()%(25-11)1;food.xrand()%(54-21)2;if(food.x%2!0)//保证食物出现位置不出界 {food.xfood.x1;}snake *judgehead;while(1){if(judge-nextNULL)break;if(food.xjudge-xfood.yjudge-y){goto lable;//goto label的label(标签)既可以定义在for循环前面,//也可以定义在for循环后面当跳转到标签地方时继续执行标签下面的代码}judgejudge-next;}gotoxy(food.x,food.y);printf(⊙); } int ClickControl() {char c;while(1){if(Judge()0)return 0;if(_kbhit()){click_getch();}MovingBody();Eating();} return 1; } void MovingBody() {int count0;int ahead-x,bhead-y;snake *phead;while(1){if(p-nextNULL)break;gotodelete(p-x,p-y);count;pp-next;}switch(click){case up:head-y-1;ChangeBody(a,b);break;case down:head-y1;ChangeBody(a,b);break;case left:head-x-2;ChangeBody(a,b);break;case right:head-x2;ChangeBody(a,b);break;case stop:break;}phead;while(1){if(p-nextNULL)break;gotoprint(p-x,p-y);pp-next;}phead;gotoxy(0,28);if(count10)speed150;else if(count10count20)speed120;//速度调节 else if(count20count40)speed80;else speed 60;Sleep(speed); } void Eating() {if(head-xfood.xhead-yfood.y){creatfood();snake *_new(snake*)malloc(sizeof(snake));snake *p;phead;while(1){if(p-next-nextNULL)break;pp-next;}p-next_new;_new-nexttail;score10;gotoxy(77,15);printf(%d,score);} } void ChangeBody(int a,int b) {snake *phead-next;int mid1,mid2,_mid1,_mid2;mid1p-x;mid2p-y;while(1){if(p-next-nextNULL)break;_mid1p-next-x;_mid2p-next-y;p-next-xmid1;p-next-ymid2;mid1_mid1;mid2_mid2;pp-next;}phead-next;{p-xa;p-yb;} } void Finish() {system(cls);gotoxy(15,10);printf(/*******************************************/);gotoxy(15,20);printf(/*******************************************/);gotoxy(18,14);printf(\t\t游戏结束!);gotoxy(20,16);printf(\t你的分数是 %d 继续努力吧!,score);gotoxy(0,27);system(pause); } int Judge() {if(head-x0||head-x56||head-y0||head-y26){Finish();return 0;}snake *phead-next;while(1){if(p-nextNULL)break;if(head-xp-xhead-yp-y){Finish();return 0;}pp-next;}return 1; }案例八 #include stdio.h #include Windows.h//windows编程头文件 #include time.h #include conio.h#ifndef __cplusplus//一般用于将C代码以标准C形式输出即以C的形式被调用 typedef char bool; #define false 0 #define true 1#endif//将光标移动到控制台的(x,y)坐标点处 void gotoxy(int x, int y) {COORD coord;//结构体变量 coord.X x;coord.Y y;HANDLE hOut GetStdHandle(STD_OUTPUT_HANDLE); //获得输出设备的句柄SetConsoleCursorPosition(hOut, coord);//这是使光标 到xy这个位置的函数. }#define ss 100//蛇的身体最大节数 #define mw 78//宽度 #define mh 24//高度//食物的坐标 struct food{int x;int y; }food;//蛇的相关属性 struct snake{int speed;//蛇移动的速度int len;//蛇的长度int x[ss];//组成蛇身的每一个小方块中x的坐标int y[ss];//组成蛇身的每一个小方块中y的坐标}snake;//绘制游戏边框 void drawMap(); //随机生成食物 void createFood(); //按键操作 void keyDown(); //蛇的状态 bool snakeStatus(); //从控制台移动光标 int bestsorce(); void gotoxy(int x, int y);int key 72;//表示蛇移动的方向72为按下“↑”所代表的数字//用来判断蛇是否吃掉了食物这一步很重要涉及到是否会有蛇身移动的效果以及蛇身增长的效果 int changeFlag 0;int sorce 0;//记录玩家的得分int i;void zhushi()//打印游戏说明{ gotoxy(mw 8, mh / 2 - 4);printf(游戏说明\n);gotoxy(mw 8, mh / 2 -3);printf(1.吃东西蛇速度在加快\n); gotoxy(mw 8, mh / 2 - 2);printf(2.该游戏通过控制蛇头方向吃东西\n); gotoxy(mw 8, mh / 2 -1);printf(从而使得蛇变得越来越长。\n);gotoxy(mw 8, mh / 2);printf(历史最高分%lld,bestsorce());} void drawMap() {//打印上下边框for (i 0; i mw; i 2)//i2是因为横向占用的是两个位置{//将光标移动依次到(i,0)处打印上边框gotoxy(i, 0);printf(■);//将光标移动依次到(i,MAPHEIGHT)处打印下边框gotoxy(i, mh);printf(■);}//打印左右边框for (i 1; i mh; i){//将光标移动依次到(0,i)处打印左边框gotoxy(0, i);printf(■);//将光标移动依次到(MAPWIDTH, i)处打印左边框gotoxy(mw, i);printf(■);}//随机生成初试食物while (1){srand((unsigned int)time(NULL));//随机一个数 food.x rand() % (mw - 4) 2;food.y rand() % (mh - 2) 1;if (food.x % 2 0)break;}//将光标移到食物的坐标处打印食物gotoxy(food.x, food.y);printf(*);//初始化蛇的属性snake.len 3;snake.speed 300;//在屏幕中间生成蛇头snake.x[0] mw / 2 1;//x坐标为偶数snake.y[0] mh / 2;//打印蛇头gotoxy(snake.x[0], snake.y[0]);printf(■);//生成初试的蛇身for (i 1; i snake.len; i){//蛇身的打印纵坐标不变横坐标为上一节蛇身的坐标值2snake.x[i] snake.x[i - 1] 2;snake.y[i] snake.y[i - 1];gotoxy(snake.x[i], snake.y[i]);printf(■);}gotoxy(mw - 2, 0); //打印完蛇身后将光标移到屏幕最上方避免光标在蛇身处一直闪烁return; }void keyDown() {int w_key key;//记录前一个按键的方向if (kbhit())//如果用户按下了键盘中的某个键,kbhit()只是检测返回0或1也就是true或false。{fflush(stdin);//清空缓冲区的字符//getch()读取方向键的时候会返回两次第一次调用返回0或者224第二次调用返回的才是实际值key getch();//第一次调用返回的不是实际值key getch();//第二次调用返回实际值}/**蛇移动时候先擦去蛇尾的一节*changeFlag为0表明此时没有吃到食物因此每走一步就要擦除掉蛇尾以此营造一个移动的效果*为1表明吃到了食物就不需要擦除蛇尾以此营造一个蛇身增长的效果*/if (changeFlag 0){gotoxy(snake.x[snake.len - 1], snake.y[snake.len - 1]);printf( );//在蛇尾处输出空格即擦去蛇尾}//将蛇的每一节依次向前移动一节蛇头除外for (i snake.len - 1; i 0; i--){snake.x[i] snake.x[i - 1];snake.y[i] snake.y[i - 1];}//蛇当前移动的方向不能和前一次的方向相反比如蛇往左走的时候不能直接按右键往右走//如果当前移动方向和前一次方向相反的话把当前移动的方向改为前一次的方向if (w_key 72 key 80)key 72;if (w_key 80 key 72)key 80;if (w_key 75 key 77)key 75;if (w_key 77 key 75)key 77;/***控制台按键所代表的数字*“↑”72*“↓”80*“←”75*“→”77*///判断蛇头应该往哪个方向移动switch (key){case 75:snake.x[0] - 2;//往左break;case 77:snake.x[0] 2;//往右break;case 72:snake.y[0]--;//往上break;case 80:snake.y[0];//往下break;}//打印出蛇头gotoxy(snake.x[0], snake.y[0]);printf(■);gotoxy(mw - 2, 0);//由于目前没有吃到食物changFlag值为0changeFlag 0;return; }void createFood() { if (snake.x[0] food.x snake.y[0] food.y)//蛇头碰到食物{//蛇头碰到食物即为要吃掉这个食物了因此需要再次生成一个食物while (1){int flag 1;srand((unsigned int)time(NULL));food.x rand() % (mw - 4) 2;food.y rand() % (mh - 2) 1;//随机生成的食物不能在蛇的身体上for (i 0; i snake.len; i){if (snake.x[i] food.x snake.y[i] food.y){flag 0;break;}}//随机生成的食物不能横坐标为奇数否则重新生成if (flag food.x % 2 0)break;}//绘制食物gotoxy(food.x, food.y);printf(*);snake.len;//吃到食物蛇身长度加1sorce 10;//每个食物得10分snake.speed - 5;//随着吃的食物越来越多速度会越来越快changeFlag 1;//很重要因为吃到了食物就不用再擦除蛇尾的那一节以此来造成蛇身体增长的效果}return; } int bestsorce() {static long long int w0;long long int max 0;if(sorce w) max sorce;else(max w);w max;sorce 0;return max; }bool snakeStatus() {//蛇头碰到上下边界游戏结束if (snake.y[0] 0 || snake.y[0] mh)return false;//蛇头碰到左右边界游戏结束if (snake.x[0] 0 || snake.x[0] mw)return false;//蛇头碰到蛇身游戏结束for (i 1; i snake.len; i){if (snake.x[i] snake.x[0] snake.y[i] snake.y[0])return false;}return true; }void youxi() {system(cls);drawMap();zhushi();while (1){keyDown();if (!snakeStatus())break;createFood();Sleep(snake.speed);}gotoxy(mw / 2, mh / 2);printf(游戏结束\n);gotoxy(mw / 2, mh / 2 1);printf(本次游戏得分为%d\n, sorce);Sleep(3000);//Sleep()没有返回值作用是暂停程序单位是毫秒} int main() { youxi();do{char i;gotoxy(mw 8, mh / 2 1);printf(1.按 1 键继续 2.按 0 退出 );gotoxy(mw 8, mh / 2 2);printf(请输入); scanf(%d,i);if(i0)exit(0);else(youxi());}while(1); return 0; }案例九 #includestdio.h #includestring.h//√× #includestdlib.h #includestdlib.h #includetime.h #include windows.h #includeconio.h #define h 30 #define k 30 #includepthread.h int num10,num20; void gotoxy(int x,int y) {HANDLE handleGetStdHandle(STD_OUTPUT_HANDLE);COORD coord;coord.Xx;coord.Yy;SetConsoleCursorPosition(handle,coord); } void map()//圈上一片地 {for(int i1;ih;i){gotoxy(0,i);printf(■);gotoxy(60,i);printf(■);} for(int i0;ik1;i){gotoxy(i,0);puts(■);gotoxy(i,30);printf(■);} } struct snake{int sx[50];int sy[50];int speed;int length; }snake1,snake2; void firstonesnake() {snake1.speed1000;snake1.length3;snake1.sx[0]30;snake1.sy[0]15;gotoxy(snake1.sx[0],snake1.sy[0]);printf(◆);for(int i0;isnake1.length-1;i){snake1.sy[i1]snake1.sy[i]1;snake1.sx[i1]snake1.sx[i];gotoxy(snake1.sx[i1],snake1.sy[i1]);printf(■);} } void firsttwosnake() {snake1.speed1000;snake2.speed1000;snake1.length3;snake2.length3;snake1.sx[0]14;snake1.sy[0]15;snake2.sx[0]46;snake2.sy[0]15;gotoxy(snake1.sx[0],snake1.sy[0]);printf(◆);gotoxy(snake2.sx[0],snake2.sy[0]);printf(◆);for(int i0;isnake1.length-1;i){snake1.sy[i1]snake1.sy[i]1;snake1.sx[i1]snake1.sx[i];gotoxy(snake1.sx[i1],snake1.sy[i1]);printf(■);}for(int i0;isnake2.length-1;i){snake2.sy[i1]snake2.sy[i]1;snake2.sx[i1]snake2.sx[i];gotoxy(snake2.sx[i1],snake2.sy[i1]);printf(■);} } struct food{int x;int y; }food1,food2; void creat_foodup()//出食物.增加 {srand(time(NULL)); loop:{int s10,s20;food1.xrand()%(k-4)2;food1.yrand()%(h-2)1;for(int i0;isnake1.length;i){if(snake1.sx[i]food1.xsnake1.sy[i]food1.y){s11;}}for(int i0;isnake2.length;i){if(snake2.sx[i]food1.xsnake2.sy[i]food1.y){s21;}}if(food1.x%2!0){s11;}if(s11||s21)goto loop;gotoxy(food1.x,food1.y);printf(★);} } void creat_foodre()//出食物.减少 {srand(time(NULL)); toop:{int s10,s20;food2.xrand()%(k-4)2;food2.yrand()%(h-2)1;for(int i0;isnake1.length;i){if(snake1.sx[i]food2.xsnake1.sy[i]food2.y){s11;}}for(int i0;isnake2.length;i){if(snake2.sx[i]food2.xsnake2.sy[i]food2.y){s21;}}if(food1.xfood2.xfood1.yfood2.y)s11;if(food2.x%2!0){s11;}if(s11||s21)goto toop;gotoxy(food2.x,food2.y);printf(☆);} } void eat_foodone() {if(snake1.sx[0]food1.xsnake1.sy[0]food1.y){snake1.length;num1;creat_foodup();}if(snake1.sx[0]food2.xsnake1.sy[0]food2.y){gotoxy(snake1.sx[snake1.length-1],snake1.sy[snake1.length-1]);printf( );snake1.length--;num1--;creat_foodre();} } int onesnakedead()//蛇死的条件 {int jkl0;for(int i1;isnake1.length;i){if(snake1.sx[0]snake1.sx[i]snake1.sy[0]snake1.sy[i])jkl1;}if(snake1.sx[0]60||snake1.sx[0]0||snake1.sy[0]0||snake1.sy[0]30||snake1.length1||jkl1){gotoxy(29,14);printf(你没了);gotoxy(27,15);printf(再来一局);gotoxy(27,16);printf(回到菜单); char aa,bb;int dx36,dy15;while(1){gotoxy(dx,dy);printf(←);bbgetch();if(bb!\r){aagetch();gotoxy(dx,dy);printf( );if(aa72||aa80){switch(aa){case 72:dy--;break;case 80:dy;break;}if(dy16){dy--;}else if(dy15){dy;}}}elsereturn dy;}}elsereturn 1; } void eat_foodtwo() {if(snake1.sx[0]food1.xsnake1.sy[0]food1.y){snake1.length;num1;creat_foodup();}if(snake1.sx[0]food2.xsnake1.sy[0]food2.y){gotoxy(snake1.sx[snake1.length-1],snake1.sy[snake1.length-1]);printf( );snake1.length--;num1--;creat_foodre();}if(snake2.sx[0]food1.xsnake2.sy[0]food1.y){snake2.length;num2;creat_foodup();}if(snake2.sx[0]food2.xsnake2.sy[0]food2.y){gotoxy(snake2.sx[snake2.length-1],snake2.sy[snake2.length-1]);printf( );snake2.length--;num2--;creat_foodre();} }char key25; void keydown2()//处理按键问题 {int check2;int i5,j1,o2,l3;if (kbhit()){check2 getch();if(check2i||check2j||check2o||check2l){key2(char)check2;}}gotoxy(snake2.sx[snake2.length-1],snake2.sy[snake2.length-1]);printf( );for(int isnake2.length-1;i0;i--){snake2.sx[i]snake2.sx[i-1];snake2.sy[i]snake2.sy[i-1];}switch(key2){case 5:snake2.sy[0]--;break;case 1:snake2.sx[0]--;snake2.sx[0]--;break;case 2:snake2.sy[0];break;case 3:snake2.sx[0];snake2.sx[0];break;default:break;} } void gosnake2()//遍历蛇 {gotoxy(snake2.sx[0],snake2.sy[0]);printf(◆);for(int i1;isnake2.length;i){gotoxy(snake2.sx[i],snake2.sy[i]);printf(■);} } void *snake222(void *arg) {keydown2();gosnake2();}//蛇2 /// //蛇1 char key1{w}; void keydown1()//处理按键问题 {int check1;int zw,xW,ca,vA,bs,nS,md,uD;if (kbhit()){check1 getch();if(check1z||check1x||check1c||check1v||check1b||check1n||check1m||check1u) {key1(char)check1;}}gotoxy(snake1.sx[snake1.length-1],snake1.sy[snake1.length-1]);printf( );for(int isnake1.length-1;i0;i--){snake1.sx[i]snake1.sx[i-1];snake1.sy[i]snake1.sy[i-1];}switch(key1){case w:case W:snake1.sy[0]--;break;case a:case A:snake1.sx[0]--;snake1.sx[0]--;break;case s:case S:snake1.sy[0];break;case d:case D:snake1.sx[0];snake1.sx[0];break;default:break;} } void gosnake1()//遍历蛇 {gotoxy(snake1.sx[0],snake1.sy[0]);printf(◆);for(int i1;isnake1.length;i){gotoxy(snake1.sx[i],snake1.sy[i]);printf(■);} } void snake1_speed()//速度变换 {if(snake1.length4snake1.length8)snake1.speed750;if(snake1.length7snake1.length10)snake1.speed500; } void *snake111(void *arg) {keydown1();onesnakedead();gosnake1(); } int welcome() {gotoxy(50,10);printf(贪吃蛇小游戏);gotoxy(52,11);printf(单人模式);gotoxy(52,12);printf(双人模式);gotoxy(52,13);printf(退出游戏);int wx60,wy11;char aa,bb;while(1){gotoxy(wx,wy);printf(←);bbgetch();if(bb!\r){aagetch();gotoxy(wx,wy);printf( );if(aa72||aa80){switch(aa){case 72:wy--;break;case 80:wy;break;}if(wy13){wy--;}else if(wy11){wy;}}}elsereturn wy;} } int main() {system(color 0b);pthread_t th1,th2; qqq:{int choose;system(cls);choosewelcome();if(choose11){ttt:{num10;key1w;system(cls);int zzz;map();firstonesnake();creat_foodup();creat_foodre();while(1){gotoxy(0,0);printf(■);gotoxy(32,0);printf(■);snake1_speed();Sleep(snake1.speed);keydown1();zzzonesnakedead();gotoxy(70,14);printf(得分%d,num1);if(zzz15){goto ttt;}else if(zzz16){goto qqq;}gosnake1();eat_foodone();}}}if(choose12){www:{system(cls);map();firsttwosnake();creat_foodup();creat_foodre();while(1){Sleep(snake1.speed);pthread_create(th1,NULL,snake111,NULL);Sleep(100);Sleep(snake2.speed);pthread_create(th2,NULL,snake222,NULL);eat_foodtwo();}}}if(choose13){system(cls);gotoxy(52,12);printf(bye);gotoxy(0,28); } } }
http://wiki.neutronadmin.com/news/333898/

相关文章:

  • 做的网站电脑上跟手机上不一样好玩的游戏网页
  • 贵阳花果园r区网站建设网站开发如何处理兼容性问题
  • 怎样做网站域名断桥铝门窗制作需要哪些工具
  • 石家庄做标书的网站网站建设中期目标
  • 文化传播公司做网站宣传好吗那个网站做720度效果图
  • 建立网站站建设可以吗灌云住房和城乡建设网站
  • 模具厂咋做网站介绍一学一做视频网站吗
  • 网站建设项目需求书珠海制作网站
  • 免费网站建设工具做网站要用到哪些架包
  • 怎么做卖橘子的网站上海网站建设的企业
  • 北京建设网站兼职普工wordpress+广告联盟
  • 企业做网站的公司重庆网站建设仿站
  • 用dw设计网站模板下载地址七牛云wordpress加速
  • 西安网站设计费用成都网站建设费用
  • 爱奇艺影业公司网站开发意义临淄专业网站优化哪家好
  • 动易网站怎么进入后台静态网站怎么建设
  • 网站建设找朝云科技微信最火公众号排行
  • 制作网站的全过程wordpress 增加语言包
  • 做毕业设计网站教程缩短网址在线生成
  • 网站的维护和更新做网站的预算表
  • 有没有免费的微网站开鲁网站seo免费版
  • 烟台网站排名优化报价有什么软件可以做网站
  • 做网站点子h5
  • 东莞网站建设方案企业网站开发费用包括哪些
  • 凡科建站怎么保存网站直接下载app安装
  • 企业网站建设及前期准备wordpress 保留 index.php
  • 企业内部网站建设教程西安网站建设云速
  • 网站推广在哪好外贸wordpress 删除数据库
  • 公司的官方网站怎么做网站建设一年多少钱
  • 大连城市建设集团网站枫林seo