基于诅咒库实现弹球游戏

  

在网上找的到,某人在基于Linux终端,用诅咒库实现的弹球游戏。本人曾经也做过五子棋游戏,分在其它文章中分享。

     /*   *基于诅咒库弹球游戏,编译gcc xxx。c -lcurses   */# include & lt; curses.h>   # include & lt; sys/time.h>   # include & lt; signal.h>      #定义正确COLS-1/*球所能到达的当前屏幕最大水平范围*/#定义底第1行/*球所能到达的当前屏幕最大垂直范围*/#定义BOARD_LENGTH 10/*挡板长度*/#定义了0/*当前屏幕的最左边*/#定义前0/*当前屏幕的最上边*/char球=' O ';/*球的形状*/char空白=';/*覆盖球走过的轨迹*/int left_board;/*挡板左侧坐标*/int right_board;/*挡板右侧坐标*/int is_lose=0;         int hdir;/*控制球水平运动的变量*/int vdir;/*控制球垂直运动的变量*/int pos_X;/*球的横坐标*/int pos_Y;/*球的纵坐标*/int延迟=100;   空白moveBall ();   无效的init ();   无效的控制();      int main ()   {//初始化诅咒   initscr ();   crmode ();/*中断模式*/noecho ();/*关闭回显*/移动(28);   attron (A_BOLD);   addstr(“欢迎来到球赛!”);   移动(8、20);   attroff (A_BOLD);   addstr(“帮助:”);   (9日23);   addstr (““N”:开始一个新游戏。”);   移动(10、23);   addstr(”“问”:退出比赛。”);   (11日23);   addstr (“KEY_LEFT:控制挡板向左移。”);   移动(12、23);   addstr (“KEY_RIGHT:控制挡板对转变。”);   移动(13、23);   addstr (“KEY_UP此时:控制球的速度。”);   (14日23);   addstr (“KEY_DOWN:控制球的减速器。”);   int标志=1;   char选择;   移动(16、24);   addstr(“请选择你选择! (n/q):”);   refresh ();   选择=getch ();   而(国旗){   如果选择==皅”| |选择==皅”| |选择==' n ' | |选择==' n ')   国旗=0;   其他选择=getch ();   }   如果选择==' n ' | |选择==' n '){/*开始游戏*/明确的();   移动(10、25);   addstr(“球赛将开始!你读# 63;”);   refresh ();   睡眠(3);   控制();   }   else if(选择==皅”| |选择==省?{/*退出游戏*/明确的();   移动(10、25);   addstr(“你退出游戏成功!”);   refresh ();   睡眠(3);   endwin ();   }   endwin ();/*结束诅咒*/返回0;   }      无效的init () {   int i, j。   明确的();   如果(start_color()==好){/*改变球和挡板的颜色*/attron (A_BOLD);/*打开粗体*/init_pair (1 COLOR_YELLOW COLOR_BLACK);   attron (COLOR_PAIR (1));   }//初始球   pos_X=22;/*球初始的横坐标*/pos_Y=BOTTOM-1;/*球初始的纵坐标*///初始化球的运动方向,朝右上方运动   hdir=1;   vdir=1;//初始挡板   left_board=20;   right_board=left_board + BOARD_LENGTH;   (i=left_board; i<=right_board;我+ +){/*显示挡板*/移动(底部,我);   addch (“-”);   }//初始刷新时间   信号(SIGALRM moveBall);   set_ticker(延迟);      键盘(stdscr,真实);/*打开键盘键盘响应*/attroff (A_BLINK);/*关闭A_BLINK属性*/is_lose=0;   移动(pos_Y pos_X);   addch(球);   移动(第1行,COLS-1);   refresh ();   usleep (100000);/*睡眠*/移动(第1行,COLS-1);   refresh ();   }      空白moveBall () {   如果(is_lose)返回;   信号(SIGALRM moveBall);   移动(pos_Y pos_X);   addch(空白);   pos_X +=hdir;   pos_Y +=vdir;//改变球的方向时   如果(pos_X祝辞=右){/*当球横坐标大于右边边缘时,球反弹朝左运动*/hdir=1;   beep ();/*球撞墙时,发出声音*/}   如果(pos_X & lt;=左){/*当球横坐标大于左边边缘时,球反弹朝右运动*/hdir=1;   beep ();/*球撞墙时,发出声音*/}   如果(pos_Y & lt;=){/*当球纵坐标大于顶部边缘时,球反弹朝下运动*/vdir=1;   beep ();/*球撞墙时,发出声音*/}//当球在底部的时候进行额外的处理   如果(pos_Y祝辞=BOTTOM-1) {   如果(pos_X>=left_board&, pos_X<=right_board)/*球在挡板处*/vdir=1;   {/*其他球不在挡板处*/is_lose=1;   移动(pos_Y pos_X);   addch(球);   移动(第1行,COLS-1);   refresh ();   usleep(延迟* 1000);/*睡眠*/移动(pos_Y pos_X);   addch(空白);   pos_X +=hdir;   pos_Y +=vdir;   移动(pos_Y pos_X);   addch(球);   移动(第1行,COLS-1);   refresh ();   }   }//不改变球的方向时   移动(pos_Y pos_X);   addch(球);   移动(第1行,COLS-1);   refresh ();   }   无效的控制(){   init ();   int cmd;   而(1)   {   如果(! is_lose) {   cmd=getch ();   如果(cmd==皅”| | cmd==皅”| | cmd==27)休息;//强制退出游戏//挡板左移   如果(cmd==KEY_LEFT) {   如果(left_board> 0) {   移动(底部,right_board);   addch (' ');   right_board——;   left_board——;   移动(底部,left_board);   addch (“-”);   (底部,右)移动;   refresh ();   }   }//挡板右移   else if (cmd==KEY_RIGHT) {   如果(right_board

基于诅咒库实现弹球游戏