走迷宫:
数据分析:
1.定义二维字符数组作为迷宫地图
2.定义变量记录角色的位置 x y
3.时间:time(NULL) 获取1970-1-1到运行时过了总秒数
逻辑分析:
进入死循环:
1.显示地图
2.获取方向键并处理
判断前方是不是路' '
如果是:
1.把旧位置变成' '
2.把新位置变成'@'
3.更新角色位置坐标x y
3.判断是否到达出口
如果是:程序结束
推箱子:数据分析:
1.确定数值与字符的对应关系
0 ' '
1 '@'
2 '$'
3 '#'
4 'o'
5 '@'
7 '$'
2.定义8*8整数地图并初始化
3.定义记录角色位置的变量x y
4.定义记录步数的变量
逻辑分析:进入死循环
1.清理屏幕,显示地图
if(0 == map[i][j]) printf(" ");
2.获取方向键并处理
3.判断是否游戏胜利
前方是路,参考走迷宫
前方+1
原位置-1
更新坐标
2.前方是箱子
箱子的前方是路\目标点
人前方的前方 +3
人前方 -3+1
人原位置 -1
'更新左边
十进制转二进制:(转其他进制)
求余法:用2对数据求余,然后继续对商求余,直到商为0结束,该过程中产生的余数就是该数据的二进制(逆序)
求权法:
从高位到地位,数据 2^(n-1) 如果够减,那么第n位就是1,否则就是0,直到把数据减为0
二进制转十进制: (其他进制转十进制m^(n-1))
每位的2^(n-1) 求和
C语言中,以0开头的数是八进制数,以0x开头的数是十六进制
原码:数据的二进制
反码:
正数的反码就是他的原码
负数的反码就是它原码的除符号位外,其它位按位求反
补码:
正数的补码就是它的原码
负数的补码是它的反码+1
补码转数据:
无符号的补码直接转换成十进制
有符号最高位是0,说明是正数,也直接转换成十进制
有符号且最高位是1;
位运算符 & | ~ ^ << >>
A & B 按位相与 不同为0
A | B 按位或 不同为1
~A 按位求反
A ^ B 按位异或 相同为0,相异为1
A << n 把A的补码向左移n位,左边丢弃,右边补0
A >> n 把A的补码向右移n位,右边丢弃,左边补符号位,最高位为1时补1,为0补0
自定义函数
为了更好地管理自己的代码,减少代码的冗余把代码封装成函数形式
函数声明:
隐式声明:在调用函数时,前面没有出现过该函数的声明或者定义
就会产生隐式声明的警告,参数会根据实参来猜测,
返回值会猜测为int类型反正不要产生隐式声明
只要在调用前有声明或定义即可
函数声明的目的是为了告诉其他代码该函数的调用格式
返回值类型 函数名(类型1 形参名1,类型2 形参名2,...);
注意:
1,在函数调用之前有函数定义,则函数声明可以省略
2,函数的返回值会返回在调用位置,可以立即显示,
也可以用变量记录下来
3,一个函数建议不要超过50行代码