Linux下的curses屏幕游戏编程
来源:互联网 发布:创意营销网站知乎 编辑:程序博客网 时间:2024/05/01 19:30
学期末了,Unix/Linux课程也结了。老师让写个小游戏,用curses库控制屏幕。
经过各种途径找,也没有找到比较合适的。索性自己写一个,反倒省事。
下面是我写的简版大富翁游戏,第一次发,不知到要写什么,直接上代码啦~
/************************************ Name:Simen's lunch author:Yimeng Date:2013-5-13************************************/#include <stdio.h>#include <curses.h>#include <stdlib.h>#include <time.h>#include <sys/time.h>#include <signal.h>#define RIGHT COLS-1 //当前屏幕最大水平范围#define BOTTOM LINES-1 //当前屏幕最大垂直范围#define BOARD_LENGTH 5 //Simen长度 #define LEFT 0 //当前屏幕的最左边 #define TOP 0 //当前屏幕的最上边 char BLANK=' '; //覆盖食物走过的轨迹 int level=1;//等级int left_board=20;//挡板左侧坐标 int right_board=25; //挡板右侧坐标 int is_lose=0;int delay=100;int num=1;int row=0;int lastRow=0;struct Food{int y;char name;};struct Food food;int point=0; //绘制得分窗口void socrewin (void) { int i; move(7,RIGHT-13); addstr("Score :"); move(7,RIGHT-5); printw(" %d",point); move(11,RIGHT-13); addstr("Level :"); move(11,RIGHT-5); printw(" %d",level); for (i = 0; i <=BOTTOM; i += 1) { move(i,RIGHT-15); addstr("|"); } } //菜单选项int menu(void) { int ch; move(1,5); addstr("Author :"); move(1,15); attron(A_BOLD); addstr("Yimeng"); attroff(A_BOLD); move(2,5); addstr("Date :"); move(2,15); attron(A_BOLD); addstr("2013-5-13"); attroff(A_BOLD); move(6,24); attron(A_BOLD); addstr("Welcome to the Simen's lunch!"); attroff(A_BOLD); move(9,30); addstr("1. Start."); move(11,30); addstr("2. Quit."); ch=getch(); switch(ch) { case '1': return 1; case '2': return 2; } } //初始Simenvoid Simenwin(int left_board){int i;right_board=left_board+BOARD_LENGTH; for(i=left_board;i<=right_board;i++){ if(i==left_board){move(BOTTOM,i);addch('(');}else if(i==right_board){move(BOTTOM,i);addch(')');}else{move(BOTTOM,i);addch('_');} }}void Rand_char(void){srand((int)time(0)); food.name=rand()%25; food.name+=65; srand((int)time(0)); food.y=rand()%(RIGHT-16);}//吃到没有void get_it(){int j;if((food.y>=left_board)&&(food.y<=left_board+5)){point+=10;socrewin();}move(lastRow,food.y);addch(' '); Simenwin(left_board); move(BOTTOM,RIGHT);refresh();Rand_char();lastRow=0;row=0;} //食物初始化void food_init(int signum) { signal(SIGALRM,food_init);move(lastRow,food.y);addch(' '); move(row,food.y);printw("%c",food.name); move(BOTTOM,RIGHT);refresh(); lastRow=row;row++;if(row>BOTTOM){get_it();} } //游戏运行int gamerun(void) { int cmd,i=0; int num=0; clear(); Simenwin(20); socrewin(); Rand_char(); nodelay(stdscr,TRUE); refresh(); signal(SIGALRM,food_init); set_ticker(1000); while(1) { cmd=getch(); if(cmd=='q'||cmd=='Q'||cmd==27) break; //强制退出游戏 if(cmd==KEY_LEFT){if(left_board>0){move(BOTTOM,right_board);addch(' ');right_board--;left_board--; move(BOTTOM,left_board);Simenwin(left_board);move(BOTTOM,RIGHT);refresh();}} //挡板右移else if(cmd==KEY_RIGHT){if(right_board<RIGHT){move(BOTTOM,left_board);addch(' ');if(right_board<RIGHT-16){right_board++;left_board++;}move(BOTTOM,right_board);Simenwin(left_board);move(BOTTOM,RIGHT);refresh();}}//给球加速else if(cmd==KEY_UP){ if(level<6){level++; delay/=2;} set_ticker(delay);socrewin();}//给球减速else if(cmd==KEY_DOWN){ if(level>1){level--; delay*=2; }set_ticker(delay);socrewin();} }sleep(1);refresh();return 0;} int main () { initscr(); noecho(); crmode(); /*中断模式*/ keypad(stdscr,TRUE); refresh(); switch(menu()) { case 1:gamerun();clear();move(10,30); addstr("Game Over! ");move(12,30);addstr("Score : ");move(12,35);printw(" %d",point);refresh();sleep(3);endwin();break; case 2: clear();move(10,25);addstr("You quit the game successfully!");refresh();sleep(3);endwin(); break; } return 0; } //设置定时器int set_ticker(int n_msecs){ struct itimerval new_timeset; long n_sec,n_usecs; n_sec=n_msecs/1000; n_usecs=(n_msecs%1000)*1000L; new_timeset.it_interval.tv_sec=n_sec; new_timeset.it_interval.tv_usec=n_usecs; new_timeset.it_value.tv_sec=n_sec; new_timeset.it_value.tv_usec=n_usecs; return setitimer(ITIMER_REAL,&new_timeset,NULL); }
编译命令是 gcc -o XXX -l curses
我使用的是Ubuntu,没有curses库,安装命令是 sudo apt-get install libncurses5-dev
运行命令 ./XXX即可。
下面贴一张运行截图。
- Linux下的curses屏幕游戏编程
- linux下的c 编程------curses 库
- linux下的c 编程------curses :color
- linux下的c 编程------curses :Window
- linux下的c 编程------curses :color
- linux下的图形编程库curses
- linux下curses的安装
- Linux curses编程的一个问题
- Linux下curses函数库的学习
- Linux下curses库的基本操作
- Linux中的curses编程
- linux-curses界面编程
- Linux curses 总结二(对屏幕的操作)
- curses编程初步--汉诺塔游戏
- Linux下curses函数库
- Linux下c语言的图形编程(转) curses.h 函式库
- 以下是UNIX linux 下c语言的图形编程 curses库
- 使用linux curses开发控制台的打字游戏
- Android监听键盘的显示和隐藏
- malloc()和free()
- MVC3中的视图文件
- 虚函数与回调函数
- [图文]关于iOS如何制作Library
- Linux下的curses屏幕游戏编程
- How do I import routes from other XML files
- 十一、从头到尾彻底解析Hash表算法
- java实现RSA加密
- 最佳的实现toString()方法
- 一周开发新闻
- Android AppWidgetProvider应用
- How do I use Spring Property Placeholder with Camel XML
- 截取字符串防止中文乱码