使用C++一步步实现俄罗斯方块
一、实验介绍
1.1 实验内容
本节实验我们进行设计俄罗斯方块前的思路分析,以及介绍ncurses 库的使用方法。
1.2 实验知识点
C++ 编程基础
ncurses 库的使用
俄罗斯方块逻辑设计
1.3 实验环境
xface 终端
g++ 编译器
ncurses 库
1.4 适合人群
本课程难度一般,适合有 C++ 编程基础,对游戏设计、逻辑分析感兴趣的同学。
1.5 代码获取
git clone https://github.com/Gamerchen/game_zero.git
二、开发准备
2.1 安装 ncurses 库
sudo apt-get update sudo apt-get install libncurses5-dev
2.2 编译程序
编译命令要加上 -l 选项引入 ncurses 库:
g++ main.c -l ncurses
三、实验原理
3.1 设计前的分析
在开始程序编写之前,我们要先分析程序设计需要实现哪些功能,划分为哪些模块,在俄罗斯方块中我们首先想到的应该是显示方块,其次是方块的下落,左右移动,旋转,最后的层满消行,另外一个基本的俄罗斯方块游戏还应该有下一个方块形状的提示功能。
所以我们编程中需要解决的问题有:
显示方块
实现方块的移动
方块旋转
对层满的方块消行
提示下一个方块形状
3.2 基本图形
每个方块由四个 box 组成,从游戏框的中心位置掉落,在框内不碰撞边界和其他方块的情况下可以进行旋转。
3.3 NCURSES库的使用
简单地说, NCURSES 是一个从 System V Release 4.0 (SVr4) 中 CURSES 的克隆,这是一个可自由配置的库,完全兼容旧版本的 CURSES,是一个可以使应用程序直接控制终端屏幕显示的库。NCURSES封装了底层的终端功能,包含了一些创建窗口的函数,并且有 Menu 、 Panel 和 Form 对CURSES基础库的扩展,我们可以建立一个同时包含多窗口(multiple windows)、菜单(menus)、面板(panels)和表单(forms)的应用程序。窗口可以被独立管理,例如让它卷动(scrollability)或者隐藏。 菜单(Menus)可以让用户建立命令选项,从而方便执行命令。而窗体(Forms)允许用户建立一些简单的数据输入和显示的窗口。面板(Panels)是 NCURSES 窗口管理功能的扩展,可以用它覆盖或堆积窗口。
3.3.1 NCURSES--从Hello World程序开始
如果调用 NCURSES 库中的函数,必须在代码中加载 ncurses.h 文件( ncurses.h中已经包含stdio.h )
例:
#include <ncurses.h> int main() { initscr(); //初始化,进入NCURSES模式 printw("Hello World!"); //在虚拟屏幕上打印 Hello Wowrld! refresh(); //将虚拟屏幕上的内容写到显示器上,并刷新 getch(); //等待用户输入 endwin(); //退出NCURSES模式 return 0; }
在以上实例中我们介绍了 NCURSES 库中最基本函数的使用方法,函数的功能已在注释中说明,这里不再赘述。
3.3.2 窗口机制
当 NCURSES 初始化的时候,它会默认创建一个叫做 stdscr 的窗口,大小一般是 80 列,25 行(根据显示器或者显卡的不同,可能会出现不同的大小),除此之外,你还可以通过窗口系统的函数创建你自己的窗口。
举例说明,如果调用以下函数:
printw("Hi!"); refresh();
它会在stdscr上当前光标位置输出 "Hi!",调用 refresh() 函数,只更新 stdscr 上的缓冲区。
如果你已经建立了一个叫做win的窗口,想要在win窗口上输出内容,可以再普通函数前添加w,同时参数也要发生变化。
printw(string) //在stdscr的当前光标位置打印字符串string
mvprintw(y,x,string) //将字符串string打印在坐标(y,x)处
wprintw(win,string) //在窗口win的当前光标位置打印字符串string
mvwprintw(win,y,x,string) //将光标移动到窗口win的(y,x)处然后打印字符串string
相信看完上面的例子,你已经能够通过函数的命名规则看出各个函数的功能区别
3.3.3 newwin和box函数
一个窗口的建立是通过 newwin() 函数开始的,函数返回一个指向窗口的结构指针,这个指针可以被传送至一些类似于 wprintw() 这样需要窗口参数的函数中。
然而,我们创建了一个窗口却无法看见它,需要用 box() 函数在已经定义的窗口外围画上边框。
例:
WINDOW *create_newin(int height, int width, int starty, int startx) { WINDOW *local_win; local_win = newin(height, width, starty, startx); box(local_win, 0, 0); wrefresh(local_win); return local_win; }
关于 NUCRSES 库的基本使用方法就介绍到这里了,在具体使用中遇到问题仍需要查阅相关资料。
上一篇:C 标准I/O库的粗略实现教程
栏 目:C语言
下一篇:C语言结构体定义的方法汇总
本文标题:使用C++一步步实现俄罗斯方块
本文地址:https://www.xiuzhanwang.com/a1/Cyuyan/1008.html
您可能感兴趣的文章
- 04-02func函数+在C语言 func函数在c语言中
- 04-02c语言没有round函数 round c语言
- 01-10c语言 跳台阶问题的解决方法
- 01-10如何判断一个数是否为2的幂次方?若是,并判断出来是多少次方
- 01-10使用OpenGL实现3D立体显示的程序代码
- 01-10深入理解C++中常见的关键字含义
- 01-10使用C++实现全排列算法的方法详解
- 01-10如何判断一个数是否为4的幂次方?若是,并判断出来是多少次方
- 01-10深入Main函数中的参数argc,argv的使用详解
- 01-10c++中inline的用法分析
阅读排行
本栏相关
- 04-02c语言函数调用后清空内存 c语言调用
- 04-02func函数+在C语言 func函数在c语言中
- 04-02c语言的正则匹配函数 c语言正则表达
- 04-02c语言用函数写分段 用c语言表示分段
- 04-02c语言中对数函数的表达式 c语言中对
- 04-02c语言编写函数冒泡排序 c语言冒泡排
- 04-02c语言没有round函数 round c语言
- 04-02c语言分段函数怎么求 用c语言求分段
- 04-02C语言中怎么打出三角函数 c语言中怎
- 04-02c语言调用函数求fibo C语言调用函数求
随机阅读
- 01-10delphi制作wav文件的方法
- 08-05dedecms(织梦)副栏目数量限制代码修改
- 08-05织梦dedecms什么时候用栏目交叉功能?
- 01-10SublimeText编译C开发环境设置
- 01-10使用C语言求解扑克牌的顺子及n个骰子
- 01-10C#中split用法实例总结
- 04-02jquery与jsp,用jquery
- 08-05DEDE织梦data目录下的sessions文件夹有什
- 01-11Mac OSX 打开原生自带读写NTFS功能(图文
- 01-11ajax实现页面的局部加载