• lv6 嵌入式开发-Flappy bird项目


    目录

    1 项目功能总结 

    2 知识储备:

    3 项目框图

    4 Ncurses库介绍


    做Flappy bird项目有什么用?

    1. 复习、巩固c语言知识

    2. 培养做项目的逻辑思维能力

    3. 具备开发简单小游戏的能力

    学会了Flappy bird项目,贪吃蛇和推房子两款小游戏也可以实现。

    1 项目功能总结 

    • 1.按下空格键小鸟上升,不按小鸟下落
    • 2.搭建小鸟需要穿过的管道
    • 3.管道自动左移和创建
    • 4.小鸟撞到管道游戏结束

    2 知识储备:

    • 1.C语言
    • 2.数据结构-链表
    • 3.Ncurses库
    • 4.信号机制 

    3 项目框图

    问题:

    1.如何显示游戏界面?    Ncurses库

    2.如何实现空格键控制小鸟上升? 

    4 Ncurses库介绍

    Ncurses是最早的System V Release 4.0 (SVr4)中 curses的一个克隆和升级。这是一个可自由配置的库,完全兼容旧版本curses。    

    Ncurses构成了一个工作在底层终端代码之上的封装,并向用户提供了一个灵活高效的API(Application Programming Interface 应用程序接口)。它提供了创建窗口界面,移动光标,产生颜色,处理键盘按键等功能。使程序员编写应用程序不需要关心那些底层的终端操作。    

    简而言之,它是一个管理应用程序在字符终端显示的函数库。  

    Ncurses库安装及函数介绍

    1. Ncurses库函数
    2. 注:
    3. 安装命令:sudo apt-get install libncurses5-dev
    4. 为了能够使用Ncurses库,必须在源程序中将#include包括进来,而且在编译的需要与它链接起来.
    5. 在gcc中可以使用参数-lncurses进行编译.
    6. 1. initscr(void);
    7. 是curses模式的入口。将终端屏幕初始化为curses模式,为当前屏幕和相关的数据结构分配内存。
    8. 2. int endwin(void);
    9. 是curses模式的出口,退出curses模式,释放curses子系统和相关数据结构占用的内存。
    10. 3. int curs_set(int visibility);
    11. 设置光标是否可见,visibility:0(不可见),1(可见)
    12. 4. int move(int  new_y, int  new_x);
    13. 将光标移动到new_y所指定的行和new_x所指定的列
    14. 5. int addch(const  chtype  char);
    15. 在当前光标位置添加字符
    16. 6. int refresh(void);
    17. 刷新物理屏幕。将获取的内容显示到显示器上。
    18. 7. int  keypad(WINDOW  *window_ptr,  bool  key_on);
    19. 允许使用功能键。exp:keypad(stdscr,1);//允许使用功能按键
    20. 8. int getch(void);
    21. 读取键盘输入的一个字符
    22. 补充:noecho();//禁止显示键盘输入的字符
    23. 9. chtype inch(void);
    24. 获取当前光标位置的字符。
    25. 注:curses有自己的字符类型chtype,使用时强制类型转换为char
    26. 10. int start_color(void);
    27. 启动color机制,初始化当前终端支持的所有颜色
    28. 11. int init_pair(short  pair_number,  short  foreground,  short  background);
    29. 配置颜色对
    30. COLOR_BLACK 黑色 COLOR_MAGENTA 品红色
    31. COLOR_RED 红色 COLOR_CYAN 青色
    32. COLOR_GREEN 绿色 COLOR_WHITE 白色
    33. COLOR_YELLOW 黄色 COLOR_BLUE 蓝色
    34. 12. int  COLOR_PAIR(int  pair_number);
    35. 设置颜色属性,设置完颜色对,可以通过COLOR_PAIR实现
    36. 13. int  attron(chtype  attribute);
    37. 启用属性设置
    38. 14. int  attroff(chtype  attribute);
    39. 关闭属性设置

    示例: 

    1. #include <stdio.h>
    2. #include <curses.h>
    3. int main(int argc, const char *argv[])
    4. {
    5. char ch;
    6. initscr();//进入curses模式
    7. curs_set(0);
    8. noecho();//禁止字符显示
    9. keypad(stdscr,1);//允许使用功能键
    10. start_color();//启动颜色机制
    11. init_pair(1,COLOR_WHITE, COLOR_RED);
    12. init_pair(2,COLOR_GREEN,COLOR_WHITE);
    13. ch = getch();
    14. if(ch == 'Q')
    15. {
    16. attron(COLOR_PAIR(1));
    17. move(10,10);
    18. addch('A');
    19. refresh();
    20. attroff(COLOR_PAIR(1));
    21. }
    22. move(10,10);
    23. ch = (char)inch();
    24. if(ch == 'A')
    25. {
    26. attron(COLOR_PAIR(2));
    27. move(10,11);
    28. addch('B');
    29. refresh();
    30. attroff(COLOR_PAIR(2));
    31. }
    32. while(1);
    33. endwin();//退出curses模式
    34. return 0;
    35. }

  • 相关阅读:
    LeetCode 每日一题 2021/6/27-2021/7/3
    JAVA注解_概述、内置注解、Retention、Target、Documented、Inherited
    关于2023届互联网秋招,我想简单说两句
    神经网络(三)分类器与线性模型
    如何在JavaScript中使用for循环
    审计日志功能实现优化及测试记录(参照若依系统,以dolphinscheduler 2.0.5 为例,实现相关功能)
    项目复现 | DETR:利用transformers端到端的目标检测
    Cookie和Session
    Linux:IP转INT详解
    pandas:如何保存数据比较好?
  • 原文地址:https://blog.csdn.net/m0_60718520/article/details/133471057