linux下C实现打转块小游戏(一)

打砖块游戏:

游戏有上下左右四个边界。上左右方为虚拟墙壁,弹球撞击在墙壁上呈几何规则反弹(如遇到遮挡,相应方向);下方为一块短板,用户可控制其在水平方向上移动,若弹球在撞击下边界时,恰巧撞击在短板上,也按规则反弹,否则游戏结束。用户打完所以砖块,则胜利,无时间限制。

操作规则:

左右方向键:控制短板水平左右移动。

a:增加弹球水平方向速度

d:减小****

w:增加弹球垂直方向速度

s:减少****

空格键:暂停弹球运动(此时有后门。。。)

c:继续游戏

q:退出游戏

积分规则:打到砖块是的(水平速度*垂直速度)/10,为一个砖块分数,最后计算总分数

linux下C实现打转块小游戏(一)_第1张图片

linux下C实现打转块小游戏(一)_第2张图片

源码:

/*
    fun.h 头文件
*/
#define TOP_LINE 5             //上边界行值
#define BOT_LINE 20           //下
#define LEFT_COL 5              //左边界列值
#define RIGHT_COL 85         //右
#define MINE_TOP 8             //砖块上边界
#define MINE_BOT 15           //下
#define MINE_LEFT 25          //左
#define MINE_RIGHT 65       //右
#define MINE_HIDE 0            //砖块还在
#define MINE_DIG 1              //已被打
#define LENGTH_BOAT 20    //短板长度
#define UP -1                          //分别指小球,向上下左右移动
#define DOWN 1
#define LEFT -1
#define RIGHT 1
#define SPEED_MIN 1            //速度最小值
#define SPEED_MAX 9            //最大值
#define CHAR_EDGE '#'          //分别边界,砖块,小球,短板,字符
#define CHAR_MINE '*'
#define CHAR_PERSON '@'
#define CHAR_BOAT '='
#define BLANK ' '                     //负责填充的空白字符
struct person {                          //结构体
        int    pos_x, pos_y,            //current posttion  
        dir_x, dir_y,                        //move direction 1 up/left -1 down/right
        x_ttm, y_ttm,                     //用于重置下一个间隔时间值
        x_ttg, y_ttg,                        //依次递减统计,计时器到时次数,当减到1,再用ttm重置
        score,                                  //分数
        remain;                               //还牲多少砖块
    char per;                                 //代表小球的字符
};

总结:

1、由于数组不自动进行越界检查,引用或修改时一定自行进行边界检查。

2、linux下方向键为,两个字节,getch获得时,需指定参数为long型,

3、curses库的使用,apt-cache search curses,添加头文件,编译时:gcc -lcurses

4、在主函数先屏蔽定时信号,再开启定时信号,为何不工作,需要重新设置,在触发函数里,则不用再设置信号即生效?

你可能感兴趣的:(linux下C实现打转块小游戏(一))