服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - 使用C++一步步实现俄罗斯方块

使用C++一步步实现俄罗斯方块

2021-06-11 14:14MCFON C/C++

本文给大家分享的是作者在使用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 库

?
1
2
sudo apt-get update
sudo apt-get install libncurses5-dev

2.2 编译程序

编译命令要加上 -l 选项引入 ncurses 库:

g++ main.c -l ncurses

三、实验原理

3.1 设计前的分析

在开始程序编写之前,我们要先分析程序设计需要实现哪些功能,划分为哪些模块,在俄罗斯方块中我们首先想到的应该是显示方块,其次是方块的下落,左右移动,旋转,最后的层满消行,另外一个基本的俄罗斯方块游戏还应该有下一个方块形状的提示功能。

所以我们编程中需要解决的问题有:

显示方块
实现方块的移动
方块旋转
对层满的方块消行
提示下一个方块形状

3.2 基本图形

每个方块由四个 box 组成,从游戏框的中心位置掉落,在框内不碰撞边界和其他方块的情况下可以进行旋转。

使用C++一步步实现俄罗斯方块

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 )

例:

?
1
2
3
4
5
6
7
8
9
10
11
#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 行(根据显示器或者显卡的不同,可能会出现不同的大小),除此之外,你还可以通过窗口系统的函数创建你自己的窗口。

举例说明,如果调用以下函数:

?
1
2
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() 函数在已经定义的窗口外围画上边框。

例:

?
1
2
3
4
5
6
7
8
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 库的基本使用方法就介绍到这里了,在具体使用中遇到问题仍需要查阅相关资料。

原文链接:https://www.hzl-fj.com/1241.html

延伸 · 阅读

精彩推荐
  • C/C++深入C++拷贝构造函数的总结详解

    深入C++拷贝构造函数的总结详解

    本篇文章是对C++中拷贝构造函数进行了总结与介绍。需要的朋友参考下...

    C++教程网5182020-11-30
  • C/C++使用C++制作简单的web服务器(续)

    使用C++制作简单的web服务器(续)

    本文承接上文《使用C++制作简单的web服务器》,把web服务器做的功能稍微强大些,主要增加的功能是从文件中读取网页并返回给客户端,而不是把网页代码...

    C++教程网5492021-02-22
  • C/C++C语言main函数的三种形式实例详解

    C语言main函数的三种形式实例详解

    这篇文章主要介绍了 C语言main函数的三种形式实例详解的相关资料,需要的朋友可以参考下...

    ieearth6912021-05-16
  • C/C++关于C语言中E-R图的详解

    关于C语言中E-R图的详解

    今天小编就为大家分享一篇关于关于C语言中E-R图的详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看...

    Struggler095962021-07-12
  • C/C++c/c++内存分配大小实例讲解

    c/c++内存分配大小实例讲解

    在本篇文章里小编给大家整理了一篇关于c/c++内存分配大小实例讲解内容,有需要的朋友们可以跟着学习参考下。...

    jihite5172022-02-22
  • C/C++c/c++实现获取域名的IP地址

    c/c++实现获取域名的IP地址

    本文给大家汇总介绍了使用c/c++实现获取域名的IP地址的几种方法以及这些方法的核心函数gethostbyname的详细用法,非常的实用,有需要的小伙伴可以参考下...

    C++教程网10262021-03-16
  • C/C++C语言实现双人五子棋游戏

    C语言实现双人五子棋游戏

    这篇文章主要为大家详细介绍了C语言实现双人五子棋游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    两片空白7312021-11-12
  • C/C++OpenCV实现拼接图像的简单方法

    OpenCV实现拼接图像的简单方法

    这篇文章主要为大家详细介绍了OpenCV实现拼接图像的简单方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    iteye_183805102021-07-29