curses 라 이브 러 리 기반 볼 게임 구현
/*
* curses , gcc xxx.c -lcurses
*/
#include <curses.h>
#include <sys/time.h>
#include <signal.h>
#define RIGHT COLS-1 /* */
#define BOTTOM LINES-1 /* */
#define BOARD_LENGTH 10 /* */
#define LEFT 0 /* */
#define TOP 0 /* */
char BALL= 'O'; /* */
char BLANK= ' '; /* */
int left_board; /* */
int right_board; /* */
int is_lose=0;
int hdir; /* */
int vdir; /* */
int pos_X; /* */
int pos_Y; /* */
int delay=100;
void moveBall();
void init();
void control();
int main()
{
// curses
initscr();
crmode(); /* */
noecho(); /* */
move(6,28);
attron(A_BOLD);
addstr("Welcome to the BallGame!");
move(8,20);
attroff(A_BOLD);
addstr("Help:");
move(9,23);
addstr("'N':Start a new game.");
move(10,23);
addstr("'Q':Quit game.");
move(11,23);
addstr("'KEY_LEFT' :Control baffle left shift.");
move(12,23);
addstr("'KEY_RIGHT':Control baffle right shift.");
move(13,23);
addstr("'KEY_UP' :Control of the ball speed.");
move(14,23);
addstr("'KEY_DOWN' :Control of the ball reducer.");
int flag=1;
char choice;
move(16,24);
addstr("Please choose your choice!(n/q):");
refresh();
choice=getch();
while(flag){
if(choice=='q'||choice=='Q'||choice=='n'||choice=='N')
flag=0;
else choice=getch();
}
if(choice=='n'||choice=='N'){ /* */
clear();
move(10,25);
addstr("BallGame will start! Are you read?");
refresh();
sleep(3);
control();
}
else if(choice=='q'||choice=='Q'){ /* */
clear();
move(10,25);
addstr("You quit the game successfully!");
refresh();
sleep(3);
endwin();
}
endwin(); /* curses*/
return 0;
}
void init(){
int i,j;
clear();
if(start_color()==OK){ /* */
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;
for(i=left_board;i<=right_board;i++){ /* */
move(BOTTOM,i);
addch('-');
}
//
signal(SIGALRM,moveBall);
set_ticker(delay);
keypad(stdscr,TRUE); /* keypad */
attroff(A_BLINK); /* A_BLINK */
is_lose=0;
move(pos_Y,pos_X);
addch(BALL);
move(LINES-1, COLS-1);
refresh();
usleep(100000); /* */
move(LINES-1,COLS-1);
refresh();
}
void moveBall(){
if(is_lose) return;
signal(SIGALRM,moveBall);
move(pos_Y,pos_X);
addch(BLANK);
pos_X += hdir;
pos_Y += vdir;
//
if(pos_X >= RIGHT) { /* , */
hdir = -1;
beep(); /* , */
}
if(pos_X <= LEFT) { /* , */
hdir = 1;
beep(); /* , */
}
if(pos_Y <= TOP) { /* , */
vdir = 1;
beep(); /* , */
}
//
if(pos_Y >= BOTTOM-1){
if(pos_X>=left_board&&pos_X<=right_board) /* */
vdir=-1;
else{ /* */
is_lose=1;
move(pos_Y,pos_X);
addch(BALL);
move(LINES-1, COLS-1);
refresh();
usleep(delay*1000); /* */
move(pos_Y,pos_X);
addch(BLANK);
pos_X += hdir;
pos_Y += vdir;
move(pos_Y,pos_X);
addch(BALL);
move(LINES-1, COLS-1);
refresh();
}
}
//
move(pos_Y,pos_X);
addch(BALL);
move(LINES-1, COLS-1);
refresh();
}
void control(){
init();
int cmd;
while (1)
{
if(!is_lose){
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);
addch('-');
move(BOTTOM,RIGHT);
refresh();
}
}
//
else if(cmd==KEY_RIGHT){
if(right_board<RIGHT){
move(BOTTOM,left_board);
addch(' ');
right_board++;
left_board++;
move(BOTTOM,right_board);
addch('-');
move(BOTTOM,RIGHT);
refresh();
}
}
//
else if(cmd==KEY_UP){
delay/=2;
set_ticker(delay);
}
//
else if(cmd==KEY_DOWN){
delay*=2;
set_ticker(delay);
}
}
else{
//
int flag=1;
char choice;
move(8,15);
addstr("Game Over!try again?(y/n):");
refresh();
choice=getch();
while(flag){
if(choice=='y'||choice=='Y'||choice=='n'||choice=='N')
flag=0;
else choice=getch();
}
if(choice=='y'||choice=='Y'){ /* */
delay=100; /* */
init();
continue;
}
else if(choice=='n'||choice=='N'){ /* */
break;
}
}
}
}
//
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 BounceBall.c-lcurses 로 컴 파일 한 후 BounceBall.out 을 생 성하 여 실행 합 니 다./BounceBall.out,게임 캡 처 는 다음 과 같 습 니 다.이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
curses 라 이브 러 리 기반 볼 게임 구현인터넷 에서 누군가가 리 눅 스 단말 기 를 기반 으로 curses 라 이브 러 리 로 이 루어 진 볼 게임 을 찾 았 다.본인 도 오목 게임 을 한 적 이 있 습 니 다.다른 글 에서 나 누 어 공유 한 적 이 있...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.