首页 > 分享 > C语言贪吃蛇,流畅版,可继续升级改造

C语言贪吃蛇,流畅版,可继续升级改造

好久没发博文了,这段时间正在入门kali,不过今天我会给大家讲解一下有关c语言贪吃蛇的小代码, 废话不多说,直接上代码

等等,不急,小编还有一个收藏了半年的文件给大家分享一下:
适合刚入门同学学习的编程小游戏(附源码)
https://download.csdn.net/download/qq_42662283/11965028

首先,咱不先急着做核心代码,先把可能会用到的画图函数写一写,方便日后使用

void drawRow(int y, int x1, int x2, char ch) { setxy(hOut,x1,y); for(int i = 0; i <= (x2-x1); i++) printf("%c",ch); } void drawCol(int x, int y1, int y2, char ch) { int y=y1; while(y!=y2+1) { setxy(hOut,x, y); printf("%c",ch); y++; } }

12345678910111213141516171819

setxy 这个函数之后会讲,用来定位光标输出位置

void drawFrame(COORD a, COORD b, char row, char col) { drawRow(a.Y, a.X+1, b.X-1, row); drawRow(b.Y, a.X+1, b.X-1, row); drawCol(a.X, a.Y+1, b.Y-1, col); drawCol(b.X, a.Y+1, b.Y-1, col); } void drawFrame(int x1, int y1, int x2, int y2, char row, char col) { COORD a={ x1, y1}; COORD b={ x2, y2}; drawFrame(a, b, row, col); }

1234567891011121314151617

画个框框多好看,主界面都会用到画框

接下来是一些基础可能会用到的常用代码函数,非常实用,在其他dos窗口的c语言程序中经常会用

void HideCursor() { CONSOLE_CURSOR_INFO cursor_info = { 1, 0}; SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info); } 12345678

隐藏光标,绝对实用

void setxy(HANDLE hOut, int x, int y) { COORD pos; pos.X = x; //横坐标 pos.Y = y; //纵坐标 SetConsoleCursorPosition(hOut, pos); } 12345678

这个setxy是之前讲的定位光标函数,这个HANDLE hOut 只是作为一个参数,在之前需要定义一下,

HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);//定义显示器句柄变量 1

或者哪位可以直接把定义显示器句柄变量写在函数里面,这样就不需要每次把hOut传给它了

下面正式进入贪吃蛇代码阶段

我们主要把程序分为home(),initial(),show()三个阶段,分别用来显示主界面,贪吃蛇初始化界面,和贪吃蛇函数

const int H =25; //地图的高 const int L = 80; //地图的长 int ifinitial = 1; char GameMap[H+2][L+2]; //游戏地图 int time0;//初始时间 int timefinal;//结束时间 int key; //按键保存 int sum = 1, over = 0, speed=0, stoppingtime=0, speedlevel=0; //蛇的长度, 游戏结束(自吃或碰墙) int extrascore = 0; int dx[4] = { 0, 0, -1, 1}; //左、右、上、下的方向 int dy[4] = { -1, 1, 0, 0}; int flagOfyn=0; struct Snake //蛇的每个节点的数据类型 { int x, y; //左边位置 int now; //保存当前节点的方向, 0,1,2,3分别为左右上下 }Snake[H*L]; const int ix=2,iy=2; const char Shead = '@'; //蛇头 const char Sbody = '#'; //蛇身 const char Sfood = '*'; //食物 const char Snode = ' '; //' '在地图上标示为空 const char Sfood2 = '!'; //2分食物 int Home(); void Initial(); //地图的初始化 void Create_Food(); //在地图上随机产生食物 void Show(); //刷新显示地图 void Button(); //取出按键,并判断方向 void Move(); //蛇的移动 void Check_Border(); //检查蛇头是否越界 void Check_Head(int x, int y); //检查蛇头移动后的位置情况 void drawFrame(COORD a, COORD b, char row, char col);//画框 void drawFrame(int x1, int y1, int x2, int y2, char row, char col); void HideCursor();//隐藏光标 void drawRow(int y, int x1, int x2, char ch); void drawCol(int y, int x1, int x2, char ch); void setxy(HANDLE hOut,int x,int y); //设置光标位置 HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);//定义显示器句柄变量

1234567891011121314151617181920212223242526272829303132333435363738394041

这里小编为了之后解释方便就把所有变量就在这里列出来了, 各位看一下,真正Snake结构体不需要多么复杂,坐标和方向就足够了

好现在开始:

int Home(){ system("cls"); system("color 2E"); HideCursor(); /* drawFrame(0, 0, 48, 24, '=', '|');// draw map frame; drawFrame(49, 0, 79, 4, '-', '|');// draw output frame drawFrame(49, 4, 79, 9, '-', '|');// draw score frame drawFrame(49, 9, 79, 20, '-', '|');// draw operate frame drawFrame(49, 20, 79, 24, '-', '|');// draw other message frame*/ setxy(hOut,50, 1); printf("Snakes eating game"); drawRow(3, 0, 119, '-'); drawRow(5, 0, 119, '-'); setxy(hOut,48, 4); printf("up and down and enter"); setxy(hOut,35, 10); printf("1. level:low"); setxy(hOut,35, 12); printf("2. level:middle"); setxy(hOut,35, 14); printf("3. level:high"); drawRow(20, 0, 119, '-'); drawRow(22, 0, 119, '-'); setxy(hOut,67, 11); printf("low level:"); setxy(hOut,71, 13); printf("low speed"); setxy(hOut,44, 21); printf("制作人:Platonic hacker"); int j=10; setxy(hOut,32, j); printf(">>"); //drawFrame(45, 9, 79, 17, '=', '|'); while(1) { if( _kbhit() ) { char x=_getch(); switch (x) { case 72 : { if( j == 14) { setxy(hOut,32, j); printf(" "); j = 12; setxy(hOut,32, j); printf(">>"); setxy(hOut,71, 13); printf("            "); setxy(hOut,67, 11); printf("              "); setxy(hOut,67, 11); printf("middle level:"); setxy(hOut,71, 13); printf("middle speed"); break; } else if( j == 12) { setxy(hOut,32, j); printf(" "); j = 10; setxy(hOut,32, j); printf(">>"); setxy(hOut,71, 13); printf("            "); setxy(hOut,67, 11); printf("              "); setxy(hOut,67, 11); printf("low level:"); setxy(hOut,71, 13); printf("low speed"); break; } else break; } case 80 : { if( j == 10 ) { setxy(hOut,32, j); printf(" "); j = 12; setxy(hOut,32, j); printf(">>"); setxy(hOut,71, 13); printf("              "); setxy(hOut,67, 11); printf("              "); setxy(hOut,67, 11); printf("middle level:"); setxy(hOut,71, 13); printf("middle speed"); break; } else if( j == 12 ) { setxy(hOut,32, j); printf(" "); j = 14; setxy(hOut,32, j); printf(">>"); setxy(hOut,71, 13); printf("              "); setxy(hOut,67, 11); printf("              "); setxy(hOut,67, 11); printf("high level:"); setxy(hOut,71, 13); printf("high speed"); break; } else break; } case 13 : { if (j == 10) return 1; else if(j==12) return 2; else return 3; } } } } }

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140

这是主界面代码,可以选择难度,并会将难度结果返回,由于博主尽可能将程序架构写的清晰,所以主界面比较繁琐,大佬请略过

void Initial() //地图的初始化 {stoppingtime=0;ifinitial=1;//时间每次初始system("cls");sum = 1, over = 0, extrascore = 0;int i, j;int hx, hy;system("title Gluttonous Snake"); //控制台的标题memset(GameMap, ' ', sizeof(GameMap)); //初始化地图全部为空' 'for (i=0;i<H+2;i++){GameMap[i][1234567891011121314

相关知识

单片机贪吃蛇 毕业设计.pdf
贪吃蛇大作战®的宠物技能升级建议!
贪吃蛇无尽大作战宠物培养攻略
可爱宠物竞技网游 贪吃蛇
用c语言写一个桌面宠物
如何在贪吃蛇大作战®中获得更多的背景宠物?
老铁山猛禽救助中心 鸟类救助医疗楼升级改造
如何在贪吃蛇大作战®中获得更多的比赛宠物外观卡牌?
C语言实现单身狗问题(找出单身狗详解版)
魔力宝贝手机版改造牛鬼击杀技巧 牛鬼打法攻略

网址: C语言贪吃蛇,流畅版,可继续升级改造 https://m.mcbbbk.com/newsview657220.html

所属分类:萌宠日常
上一篇: 宠物舍设计方法课件.ppt
下一篇: 断舍离:丢掉这160样东西,让家