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;

    }

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

posted on 2016-09-16 10:29  winters86  阅读(369)  评论(0编辑  收藏  举报