序言
许多学过C语言的小伙伴们都说早已学完后C语言新手入门,但实践工作能力还滞留在很低的水准。大部分,她们设定了好多个for循环来暴力行为处理排列与组合难题。很多人大部分没法单独撰写一个微信小程序。今日给各位讲一个我很早以前做的简易的吃蛇实例。
这一次,针对早已学好C语言都还没做一切工程的小伙伴们而言,可能是一个挺大的挑戰。
文中在Snake实例中采用的物品并不是很多。手机游戏的完成主要是依照一定的逻辑性对一个二维数组开展调整和转换(操作过程中,为了更好地降低闪动,我应用了字符串数组)。这儿我不反复写的全过程了,关键说一下最基本要素的逻辑性和一些之前非常少使用的作用。
一,基本要素逻辑性。
1.手机游戏的情况和包装印刷。
界定一个二维字符串数组,用" "和空表明界限,蛇身,空乳白色等。打印出便是用一个for循环解析xml全部字符串数组,并以一定的頻率更新,进而做到手机游戏实际效果。
2.建立蛇阵。
充分考虑我并没有应用单链表做一切事儿,也不是很娴熟,因此我就用二维数组干了一条蛇。二维数组关键有一些缺陷,例如容积比较有限,最多长短必须先界定(只需我设定hhhh充足长),许多位置必须取详细地址(“&”被敲n次)。该列阵储存蛇的主要参数,如长度,XY座标和挪动方位。必须特别注意的是“”占有2个字节数,许多地区写座标必须乘于2。
3.转化成蛇的任意座标。
最先,任意栽种,时间格式做为种籽。将x和y2个变量定义为平面坐标,运用rand()涵数取余数获得需要的平面坐标范畴。随后,您能够最开始转化成两到三个一部分。
4.在地图上画蛇。
创建一个for循环解析xml全部蛇,应用strncpy()涵数将空的乳白色一部分拷贝为" "。
5.蛇的健身运动。
我受困在这儿好久了,我去玩了蛇。我发现了蛇的健身运动并不是很繁杂。可以说,蛇尾归一,蛇头加一。我选用了全部蛇身移位,蛇头独立解决的方式,也便捷之后操纵方位。
6.抹去轨迹。
跑上一步会发觉蛇愈来愈长了。。。。如同奔溃后的鼠标光标。。。。由于尽管前一个连接点的特性被分派给了后一个连接点,可是这一连接点并沒有更改。因此每一次健身运动前,把蛇擦下去。方式与流程4同样,仅仅将" "更换为2个空格子。
7.蛇更改了方位。
由于蛇健身运动的独特性,只必须医治蛇头。应用GetAsyncKeyState()涵数载入数字键盘,留意附带条件避免蛇调头。
8.转化成食材。
任意座标,拷贝和打印出。
9.蛇吃长的食材。
蛇健身运动到食材的地区会把食材遮盖掉,因此吞掉食材的实际效果无需写。仅用分辨蛇头座标和食材座标重叠,随后分辨健身运动方位来明确在哪儿加一节就可以了。随后用一个布尔值分辨场中是不是和食材,来转化成新的食材。记分还可以在这里写。蛇会挪动到有食材遮盖的地区,因此吃食材的实际效果无需写。只需分辨鲫鱼和食材的座标重叠,再分辨健身运动方位就可以明确在哪儿加一段。随后用一个布尔值来分辨场中是不是有食材,进而转化成新的食材。成绩还可以写在这儿。
互联网3D渲染
编码如下所示:
# define _ CRT _ secure _ no _ warning S1 # include # include # include # include # include # include # include # define maxwidth 30 # define maxheight 30 # define init len 3//snake的原始长短构造{。
char * chint色调;标识符种类;
}
Charborder = { " ",4,1},//border charbg = { " ",2,2},//background charsnake = { " ",0xe,3},//Snake节点charFood = { " ",0xc,4 };//Food//用struct { array }储存地形图中的每一个点。
标识符种类;int数据库索引;
} global map[MAXWIDTH][MAXHEIGHT];构造{
int x;int y;
}蛇图[(较大总宽–2)*(较大相对高度–2)],得分难题;int成绩= 0;//score int snake maplen =(max width–2)*(max height–2);int headerIndex,tailIndex
HANDLE hStdin
//设定鼠标光标部位,在其中x为行,y为列void setPosition(int x,int y){。
座标座标;
座标。x = 2 * y;
座标。y = x;
setconsoleucorposition(HStdin,coord);
}//设定色调void setColor(int color){。
SetConsoleTextAttribute(hStdin,color);
}//create food void create food(){ int index,rang,x,y;
srand((无标记)時间(NULL));if(TailIndex = Headerindex){ 0
index =(tailIndex–headerIndex 1);
}
}
x =蛇图[数据库索引]。x;
y =蛇图[数据库索引]。y;
设置部位(x,y);
setColor(charfood . color);printf("%s ",charfood . ch);
globalMap[x][y]。type = charFood.type
}//dead void die(){ int xcenter = max height % 2 = = 0?MAXHEIGHT/2:MAXHEIGHT/2 1;int yCenter = MAXWIDTH % 2 == 0?MAXWIDTH/2:MAXWIDTH/2 1;
设置部位(xCenter,yCenter–5);
setColor(0xC);出入口(1);
_ getch();撤出(0);
}//snake move void move(char方向){int new header x,new header y;//新蛇头的座标。
int newHeaderPreIndex//以前新鲫鱼座标相匹配的数据库索引。
int newHeaderPreX,newHeaderPreY//新鲫鱼数据库索引的前一个座标。
int newHeaderPreType//以前的新鲫鱼种类。
int oldTailX,oldTailY//老蛇尾座标。
电源开关(方位){实例' w ':
newHeaderX =蛇图[headerIndex]。x–1;
newHeaderY =蛇图[headerIndex]。y;摆脱;实例:
newHeaderX =蛇图[headerIndex]。x 1;
newHeaderY =蛇图[headerIndex]。y;摆脱;实例“a”:
newHeaderX =蛇图[headerIndex]。x;
newHeaderY =蛇图[headerIndex]。y–1;摆脱;实例“d”:
newHeaderX =蛇图[headerIndex]。x;
newHeaderY =蛇图[headerIndex]。y 1;摆脱;
}
headerIndex = headerIndex == 0?蛇投射–1:headerIndex–1;
new header preindex = global map[new header rx][new header ry]。指数值;
newHeaderPreX =蛇图[headerIndex]。x;
newHeaderPreY =蛇图[headerIndex]。y;
蛇图[headerIndex]。x = newHeaderX
蛇图[headerIndex]。y = newHeaderY
全局性投射[新首端][新首端]。index = headerIndex
蛇图[newHeaderPreIndex]。x = newHeaderPreX
蛇图[newHeaderPreIndex]。y = newHeaderPreY
全局性投射[newHeaderPreX][newHeaderPreY]。index = newHeaderPreIndex//以前的新鲫鱼种类。
new header pretype = global map[new header rx][new header ry]。种类;//设定新的蛇头种类。
全局性投射[新首端][新首端]。type = charSnake.type//分辨自身是出界或是打自己。
if(new header pretype = = charborder . type | | new header pretype = = charsnake . type){ 0
die();
}//輸出新的鲫鱼。
设定部位(新首端,新首端);
setColor(charsnake . color);printf("%s ",charsnake . ch);//分辨是不是吃食材。
if(new header pretype = = charfood . type){//进食。
create food();//变更成绩。
设定部位(得分难题. x,得分难题. y);printf("%d ", 成绩);
} else{ //老蛇尾座标。
oldTailX =蛇图[tailIndex]。x;
oldTailY =环形图[tailIndex]。y;//删掉蛇尾。
设置部位(oldTailX,oldTailY);
setColor(charbg . color);printf("%s ",charbg . ch);
全局性投射[oldTailX][oldTailY]。type = charBg.type
tailIndex = (tailIndex == 0)?环形投射–1:tail index–1;
}
}//下一个挪动的方位char下一个方位(char ch,char方向old){ int sum = ch 方位old;
ch = to lower(ch);if((ch = = ' w ' | | ch = = ' a ' | | ch = = ' s ' | | ch = = ' d ')& & sum!= 197 && sum!= 234){回到ch;
} else { return directionOld
}
}//pause char pause(){ return _ getch();
}//复位void init(){ //设定有关自变量。
int x,y,indexint xCenter = MAXHEIGHT % 2 == 0?MAXHEIGHT/2:MAXHEIGHT/2 1;int yCenter = MAXWIDTH % 2 == 0?MAXWIDTH/2:MAXWIDTH/2 1;
CCI;//控制面板鼠标光标信息内容。
//分辨有关设定是不是有效。
if(MAXWITTER _ getch();撤出(0);
}//设定对话框尺寸。
系统软件(“方式con: cols=96行= 32”);//掩藏鼠标光标。
hStdin = GetStdHandle(STD _ OUTPUT _ HANDLE);
getconsolecurosrinfo(hStdin & CCI);
CCI . Bvisible = 0;
setconsolecurosrinfo(hStdin & CCI);//打印出环境。
for(x = 0;xglobalMap[x][y]。type = charBorder.type
setColor(charborder . color);printf("%s ",CharBorder . ch);
} else{
index =(x–1)*(MAXWIDTH–2) (y–1);
环形地形图[数据库索引]。x = x
环形地形图[数据库索引]。y = y
globalMap[x][y]。type = charBg.type
globalMap[x][y]。index = index
setColor(charbg . color);printf("%s ",charbg . ch);
}
} printf(" n ");
}//复位Snake。
全局性投射[xCenter][Ycenter–1]。type = global map[xCenter][y center]。type = global map[xCenter][yCenter 1]。type = charSnake.type
headerIndex =(xCenter–1)*(MAXWIDTH–2) (yCenter–1)–1;
tail index = headerIndex 2;
设置部位(xCenter,yCenter–1);
setColor(charsnake . color);for(y = Ycenter–1;Y} //转化成食材。
create food();//设定程序流程信息内容。
设置部位(xCenter–1,MAXWIDTH 2);Printf("评分:0 ");
setPosition(xCenter,MAXWIDTH 2);Printf("名字班:杨超33班");
scorposition . x = xCenter–1;
scorposition . y = MAXWIDTH 8;
}int main(){ char charInput,方位= ' a
init();
charInput = to lower(_ getch());
方位=下一个方位(charInput,direction);while(1){ if(_ kbhit()){ 0
charInput = to lower(_ getch());if(charInput = = ' '){ 0
charInput = pause();
}
方位=下一个方位(charInput,direction);
}
挪动(方位);
睡眠质量(500);
}
_ getch();回到0;
}
期待对大伙有协助~
学习培训C/C 程序编写专业知识,假如想变成更强的程序猿,或是学习培训C/C 有艰难,能够关心 私聊和编写【程序编写沟通交流】一起学习。不但有自学视频教程和文本文档,也有大量志趣相投的好朋友。与你座谈会比自身发展的迅速!
1.本站大部分内容均收集于网络!若内容若侵犯到您的权益,请发送邮件至:duhaomu@163.com,我们将第一时间处理!
2.资源所需价格并非资源售卖价格,是收集、整理、编辑详情以及本站运营的适当补贴,并且本站不提供任何免费技术支持。
3.所有资源仅限于参考和学习,版权归原作者所有,更多请阅读网站声明。