Linux 游戏

来源:互联网 发布:乐视员工获刑4年 知乎 编辑:程序博客网 时间:2024/06/04 20:12
#include <signal.h>  #include <sys/time.h>  #include <stdio.h>  #include <sys/time.h>  void init();void wrap_up();void ball_move();struct Ball ball;// 小球struct Baffle baffle;   // 挡板int matrix[5][15];// 记录砖块区域信息的矩阵int is_lose = 0;int is_win = 0;int num_bricks = 0;int main(){int ch;init();while( (ch = getch()) != 'q' ){if(ch == 'j')  // 挡板左移{if(baffle.x_left >= LEFT){move(BOTTOM, baffle.x_right);addch(' ');baffle.x_left--;baffle.x_right--;move(BOTTOM, baffle.x_left);addch('=');move(BOTTOM, 0);refresh();}}else if(ch == 'k')// 挡板右移{if(baffle.x_right <= RIGHT){move(BOTTOM, baffle.x_left);addch(' ');baffle.x_left++;baffle.x_right++;move(BOTTOM, baffle.x_right);addch('=');move(BOTTOM, 0);refresh();}}}}void init(){/*该函数主要完成初始化的工作*/int i,j;initscr();crmode();noecho();// 初始矩阵for(i = 0; i < 5; i++){for(j = 0; j < 15; j++){matrix[i][j] = 0;}}initscr();box(stdscr, ACS_VLINE, ACS_HLINE);noecho();crmode();// 初始小球信息ball.x_poi = X_INIT_BALL;ball.y_poi = Y_INIT_BALL;ball.x_speed = X_SPEED_INIT; ball.y_speed = Y_SPEED_INIT;ball.symbol = 'O';// 初始挡板信息baffle.x_left = X_INIT_LEFT;baffle.y_right = Y_INIT_LEFT;baffle.speed = SPEED_INIT_BAFFLE;// 绘制砖块,并修改矩阵的值(左上到右下的部分)attron(A_REVERSE);for(i = BRICK_TOP, j = BRICK_LEFT; i <= BRICK_BOTTOM; i++, j += 3){move(i, j);addstr(BRICK_SYMBOL);matrix[i - BRICK_TOP][j - BRICK_LEFT] = matrix[i - BRICK_TOP][j - BRICK_LEFT + 1] = matrix[i - BRICK_TOP][j - BRICK_LEFT + 2] = 1;num_bricks++;}// 左下到右上的部分for(i = BRICK_BOTTOM, j = BRICK_LEFT; i >= BRICK_TOP; i--, j+= 3){move(i. j);addstr(BRICK_SYMBOL);matrix[i - BRICK_TOP][j - BRICK_LEFT] = matrix[i - BRICK_TOP][j - BRICK_LEFT + 1] = matrix[i - BRICK_TOP][j - BRICK_LEFT + 2] = 1;num_bricks++;}// 中间横向的部分for(i = (BRICK_TOP + BRICK_BOTTOM) / 2, j = BRICK_LEFT; j <= BRICK_RIGHT; j += 6){move(i, j);addstr(BRICK_SYMBOL);matrix[i - BRICK_TOP][j - BRICK_LEFT] = matrix[i - BRICK_TOP][j - BRICK_LEFT + 1] = matrix[i - BRICK_TOP][j - BRICK_LEFT + 2] = 1;num_bricks++;}attroff(A_REVERSE);refresh();// 绘制小球和挡板move(ball.y_poi, ball.x_poi);addch(SYMBOL_BALL);move(BOTTOM, baffle.x_left);addstr(SYMBOL_BAFFLE);move(BOTTOM, 0);refresh();signal(SIGALRM, ball_move);set_ticker(100);}void ball_move(){/*该函数用于实现小球移动的功能*/  int x_index, y_index;int differ;int i;signal(SIGALRM,moveBall);move(ball.x_poi, ball.y_poi);addch(BLANK_BALL);ball.x_poi += ball.x_speed;ball.y_poi += ball.y_speed;if(ball.x_poi >= RIGHT || ball.x_poi <= LEFT)ball.x_speed = -ball.x_speed;if(ball.y_poi <= TOP)ball.y_speed = -ball.y_speed;if(ball.y_poi >= BOTTOM - 1){if(ball.x_poi >= baffle.x_left && ball.x_poi <= baffle.x_right)ball.y_speed = -ball.y_speed;else{// 输掉游戏}}// 假如小球落入砖块区域内if(ball.x_poi >= BRICK_LEFT && ball.x_poi <= BRICK_RIGHT && ball.y_poi >= BRICK_TOP && ball.y_poi <= BRICK_BOTTOM){x_index = ball.x_poi - BRICK_LEFT;y_index = ball.y_poi - BRICK_TOP;if(matrix[y_index][x_index] == 1){differ = x_index % 3;for(i = 0; i < 3; i++)matrix[y_index][x_index - differ + i] = 0;move(ball.y_poi, ball.x_poi - differ);addch("   ");move(BOTTOM, 0);refresh();num_bricks--;}}move(ball.pos_y, ball.pos_x);addch(SYMBOL_BALL);move(BOTTOM, 0);refresh();}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);}




#include <signal.h>  #include <sys/time.h>  #include <stdio.h>  #include <sys/time.h>  #include "header.h"void init();void wrap_up();void ball_move();struct Ball ball;// 小球struct Baffle baffle;   // 挡板int matrix[5][15];// 记录砖块区域信息的矩阵int is_lose = 0;int is_win = 0;int num_bricks = 0;int main(){int ch;init();while( (ch = getch()) != 'q' ){if(ch == 'j')  // 挡板左移{if(baffle.x_left >= LEFT){move(BOTTOM, baffle.x_right);addch(' ');baffle.x_left--;baffle.x_right--;move(BOTTOM, baffle.x_left);addch('=');move(BOTTOM, 0);refresh();}}else if(ch == 'k')// 挡板右移{if(baffle.x_right <= RIGHT){move(BOTTOM, baffle.x_left);addch(' ');baffle.x_left++;baffle.x_right++;move(BOTTOM, baffle.x_right);addch('=');move(BOTTOM, 0);refresh();}}}}void init(){/*该函数主要完成初始化的工作*/int i,j;initscr();crmode();noecho();// 初始矩阵for(i = 0; i < 5; i++){for(j = 0; j < 15; j++){matrix[i][j] = 0;}}clear();// 初始小球信息ball.x_poi = X_INIT_BALL;ball.y_poi = Y_INIT_BALL;ball.x_speed = X_INIT_SPEED; ball.y_speed = Y_INIT_SPEED;ball.symbol = 'O';// 初始挡板信息baffle.x_left = X_INIT_LEFT;baffle.x_right = X_INIT_RIGHT;baffle.speed = SPEED_INIT_BAFFLE;// 绘制砖块,并修改矩阵的值(左上到右下的部分)attron(A_REVERSE);for(i = BRICK_TOP, j = BRICK_LEFT; i <= BRICK_BOTTOM; i++, j += 3){move(i, j);addstr(BRICK_SYMBOL);matrix[i - BRICK_TOP][j - BRICK_LEFT] = matrix[i - BRICK_TOP][j - BRICK_LEFT + 1] = matrix[i - BRICK_TOP][j - BRICK_LEFT + 2] = 1;num_bricks++;}// 左下到右上的部分for(i = BRICK_BOTTOM, j = BRICK_LEFT; i >= BRICK_TOP; i--, j+= 3){move(i, j);addstr(BRICK_SYMBOL);matrix[i - BRICK_TOP][j - BRICK_LEFT] = matrix[i - BRICK_TOP][j - BRICK_LEFT + 1] = matrix[i - BRICK_TOP][j - BRICK_LEFT + 2] = 1;num_bricks++;}// 中间横向的部分for(i = (BRICK_TOP + BRICK_BOTTOM) / 2, j = BRICK_LEFT; j <= BRICK_RIGHT; j += 6){move(i, j);addstr(BRICK_SYMBOL);matrix[i - BRICK_TOP][j - BRICK_LEFT] = matrix[i - BRICK_TOP][j - BRICK_LEFT + 1] = matrix[i - BRICK_TOP][j - BRICK_LEFT + 2] = 1;num_bricks++;}attroff(A_REVERSE);refresh();// 绘制小球和挡板move(ball.y_poi, ball.x_poi);addch(SYMBOL_BALL);move(BOTTOM, baffle.x_left);addstr(SYMBOL_BAFFLE);move(BOTTOM, 0);refresh();signal(SIGALRM, ball_move);set_ticker(100);}void ball_move(){/*该函数用于实现小球移动的功能*/  int x_index, y_index;int differ;int i;signal(SIGALRM,moveBall);move(ball.y_poi, ball.x_poi);addch(BLANK_BALL);ball.x_poi += ball.x_speed;ball.y_poi += ball.y_speed;if(ball.x_poi >= RIGHT || ball.x_poi <= LEFT)ball.x_speed = -ball.x_speed;if(ball.y_poi <= TOP)ball.y_speed = -ball.y_speed;if(ball.y_poi >= BOTTOM - 1){if(ball.x_poi >= baffle.x_left && ball.x_poi <= baffle.x_right)ball.y_speed = -ball.y_speed;else{// 输掉游戏}}// 假如小球落入砖块区域内if(ball.x_poi >= BRICK_LEFT && ball.x_poi <= BRICK_RIGHT && ball.y_poi >= BRICK_TOP && ball.y_poi <= BRICK_BOTTOM){x_index = ball.x_poi - BRICK_LEFT;y_index = ball.y_poi - BRICK_TOP;if(matrix[y_index][x_index] == 1){differ = x_index % 3;for(i = 0; i < 3; i++)matrix[y_index][x_index - differ + i] = 0;move(ball.y_poi, ball.x_poi - differ);addstr("   ");move(BOTTOM, 0);refresh();num_bricks--;}}move(ball.y_poi, ball.x_poi);addch(SYMBOL_BALL);move(BOTTOM, 0);refresh();}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);}


0 0
原创粉丝点击