Linux ncurses编写 FlapyBird 第一步

时间:2022-07-20 21:00:35
/*
* 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();
attrset(A_REVERSE);
#ifdef DEBUG
mvprintw(,COLS/ - ,"height:%d,width:%d",LINES,COLS);//lines y轴 cols x轴 左上为0点
mvaddch(,,' ');
refresh();
#endif init_virtual_screen();
refresh();
sleep();
} void init_virtual_screen(void)
{ screenArray = (int **)malloc(sizeof(int *)*COLS);
for(int i = ;i < COLS ;i++)
{
screenArray[i] = (int *)malloc(sizeof(int)*LINES);
}
#ifdef DEBUG
screenArray[COLS-][LINES-]=;
assert(screenArray[COLS-][LINES-]);
#endif
srand((unsigned)time(NULL));
int wall;
int miniWall;
int freeSpace;
miniWall = LINES / ; for(int i = ;i < COLS ;i+=){//隔开一行就绘制一堵墙
wall = rand()% + miniWall;//上半部分墙
freeSpace =rand()% + ;//绘制*可通过的空间 for(int j = ; j < wall;j++){
screenArray[i][j]=;//绘制墙的上半部分
} for (int j = freeSpace+wall; j < LINES; j++){////绘制墙的下半部分
screenArray[i][j]=;
} } //显示墙
for(int i = ;i < COLS ;i++)
for(int j = ; j < LINES;j++)
{
if (screenArray[i][j] == )
mvaddch(j,i,' ');
} }
int main(int agrc,char *agrv[])
{
init_tcs();
nocbreak();
return ; }

搞定第一步 根据窗口大小自动 生成静态的墙,下一步是让墙移动起来,游戏开发完成之后再调节自动生成的参数,预计还要重构

Linux ncurses编写 FlapyBird 第一步