English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

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 基本的なグラフィック

それぞれのブロックは4つのboxで構成され、ゲームフレームの中心位置から落ちて、フレーム内で境界や他のブロックにぶつからないように回転することができます。


3.3 NCURSESライブラリの使用

簡単に言えば、NCURSESはSystemVReleaseから 4.0 (SVr4中のCURSESのクローンです。これは自由にカスタマイズ可能なライブラリで、古いバージョンのCURSESと完全に互換性があります。アプリケーションが直接ターミナルスクリーンの表示を制御できるライブラリです。NCURSESは下層のターミナル機能をエンブレスし、ウィンドウを作成するための関数を含み、Menu、Panel、FormがCURSES基本ライブラリの拡張です。私たちは、複数のウィンドウ(multiple windows)、メニュー(menus)、パネル(panels)、フォーム(forms)を含むアプリケーションを構築できます。ウィンドウは独立して管理できます、例えば、スクロール(scrollability)や非表示(hiding)に設定できます。メニュー(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 ライブラリの基本的な使用方法についての紹介はここまでです。具体的な使用中に問題が発生した場合は、関連する資料を参照してください。

声明:この記事の内容はインターネットから取得しており、著作権者は所有者であり、インターネットユーザーが自発的に貢献し、自己でアップロードしたものであり、このサイトは所有権を持ちません。また、人工的な編集処理も行われておらず、関連する法的責任も負いません。著作権侵害を疑われる内容がある場合は、以下のメールアドレスまでご連絡ください:notice#oldtoolbag.com(メールを送信する際、#を@に変更してください)で通報し、関連する証拠を提供してください。一旦確認が取れましたら、このサイトは即座に侵害を疑われるコンテンツを削除します。

おすすめ