在网上找的到,某人在基于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基于诅咒库实现弹球游戏