Linux ncurses编写 FlapyBird 第一步
/* * flapybird.h * * Created on: 2016年9月15日 * Author: jon */ #include <curses.h> #include <unistd.h> #include <stdlib.h> #include <time.h> #include <malloc.h> #include <assert.h> #define LEFT_WALL 1 #define RIGHT_WALL (COLS-2) int ** screenArray;//虚拟屏幕 用数组渲染 1为墙 0为空
/* * flapybird.c * * Created on: 2016年9月15日 * Author: jon */ #include "flapybird.h" //#define DEBUG 1 void init_tcs(void) { initscr(); curs_set(0); attrset(A_REVERSE); #ifdef DEBUG mvprintw(0,COLS/2 - 25,"height:%d,width:%d",LINES,COLS);//lines y轴 cols x轴 左上为0点 mvaddch(0,0,' '); refresh(); #endif init_virtual_screen(); refresh(); sleep(10); } void init_virtual_screen(void) { screenArray = (int **)malloc(sizeof(int *)*COLS); for(int i = 0 ;i < COLS ;i++) { screenArray[i] = (int *)malloc(sizeof(int)*LINES); } #ifdef DEBUG screenArray[COLS-1][LINES-1]=1; assert(screenArray[COLS-1][LINES-1]); #endif srand((unsigned)time(NULL)); int wall; int miniWall; int freeSpace; miniWall = LINES / 3; for(int i = 0 ;i < COLS ;i+=5){//隔开一行就绘制一堵墙 wall = rand()%5 + miniWall;//上半部分墙 freeSpace =rand()%8 + 4 ;//绘制自由可通过的空间 for(int j = 0 ; j < wall;j++){ screenArray[i][j]=1;//绘制墙的上半部分 } for (int j = freeSpace+wall; j < LINES; j++){////绘制墙的下半部分 screenArray[i][j]=1; } } //显示墙 for(int i = 0 ;i < COLS ;i++) for(int j = 0 ; j < LINES;j++) { if (screenArray[i][j] == 1) mvaddch(j,i,' '); } } int main(int agrc,char *agrv[]) { init_tcs(); nocbreak(); return 0; }
搞定第一步 根据窗口大小自动 生成静态的墙,下一步是让墙移动起来,游戏开发完成之后再调节自动生成的参数,预计还要重构