C LANGUAGE TECHNOLOGY

【C言語】ncursesの使い方【ゲーム,テトリス,ブロック崩し】

悩んでいる人

C言語でncursesの使い方を教えて!

こういった悩みにお答えします.

本記事の信頼性

  • リアルタイムシステムの研究歴12年.
  • 東大教員の時に,英語でOSの授業.
  • 2012年9月~2013年8月にアメリカのノースカロライナ大学チャペルヒル校コンピュータサイエンス学部2021年の世界大学学術ランキングで20位)で客員研究員として勤務.C言語でリアルタイムLinuxの研究開発
  • プログラミング歴15年以上,習得している言語: C/C++Solidity/Vyper,Java,Python,Ruby,HTML/CSS/JS/PHP,MATLAB,Assembler (x64,ARM).
  • 東大教員の時に,C++言語で開発した「LLVMコンパイラの拡張」,C言語で開発した独自のリアルタイムOS「Mcube Kernel」GitHubにオープンソースとして公開

こういった私から学べます.

【C言語】ncurses

ncursesは,C言語のテキストユーザインタフェース (TUI) ライブラリです.

ncursesを利用するとTUIで柔軟な操作が可能になり,コンソールアプリケーションが開発できるようになります.

Ubuntuでncursesをインストールするためには,以下のコマンドを実行して下さい.

ncursesでよく利用する関数

ncursesでよく利用する関数を紹介します.

initscr/endwin関数

initscr/endwin関数を紹介します.

initscr関数は通常,プログラムを初期化する際に最初に呼び出されるncursesルーチンです.

endwin関数はncursesモードを一時的に終了またはエスケープする前に呼び出されます.

endwin関数は,ncursesモードを復元し,カーソルを画面の左下隅に移動させ,端末を適切な非ビジュアルモードにリセットします.

printw関数

printw関数はprintf関数と似ている関数です.

ncursesモードでprintw関数を利用すると,printf関数で出力する文字列が代わりに出力されます.

refresh関数

refresh関数はprintw関数等での出力を実際にncursesモードで表示するために呼び出される関数です.

※環境によってはrefresh関数を呼び出さなくても表示される場合があります.

getch関数

getch関数は,ncursesモードの端末から文字を読み取ります.

また,getch関数の文字を読み取る性質を利用して,printw関数の出力結果をユーザが読むために利用します.

この理由は,プログラムが終了するとncursesモードも終了し,そこで出力した結果が見れなくなってしまうからです.

ncursesモードのprintw関数で「Hello World!」を表示

ncursesモードのprintw関数で「Hello World!」を表示するコードを紹介します.

このコードの特徴は以下になります.

  • printf関数のプロトタイプ宣言があるstdio.hをインクルードしないこと
  • initscr/printw/refresh/getch/endwin関数を呼び出すこと

コードは以下になります.

実行結果は以下になります.

ncursesを利用したコンソールアプリケーション(ゲーム)

ncursesを利用したコンソールアプリケーション(ゲーム)を紹介します.

アプリケーション内でncursesがどのように利用されているのかコードを解析しつつ遊びましょう!

テトリス

ncursesを利用したコンソールアプリケーションとしてテトリスがあります.

テトリスのコードはたくさんありますが,代表的なテトリスのコードはこちらになります.

Makefileの18行目のSDL=yesと設定されているため,SDLをインストールしていないと「unable to initialize SDL_mixer」という実行時エラーが発生します.

MakefileのSDL=yesをSDL=noにしましょう.

※Ubuntu 22.04 LTSでSDLをインストールする方法も試したのですが,うまくいきませんでした...

無事実行できたらテトリスで遊びましょう!

ブロック崩し

ncursesを利用したC言語のブロック崩しを紹介します.

ブロック崩しのコードはたくさんありますが,代表的なブロック崩しのコードはこちらになります.

無事実行できたらブロック崩しで遊びましょう!

まとめ

C言語でテキストユーザインタフェース (TUI) ライブラリncursesの使い方を紹介しました.

また,ncursesを利用したコンソールアプリケーション(ゲーム)としてテトリスとブロック崩しを解説しました.

ncursesを深く学びたいあなたは,以下の記事がおすすめです.

C言語でじゃんけんゲームを作成したいあなたはこちらからどうぞ.

C言語 じゃんけん
【C言語】じゃんけんゲーム【相手が1人と2人の場合のコードを解説】

こういった悩みにお答えします. こういった私から学べます. 本記事は,乱数を理解していることを前提とします. 目次1 【C言語】じゃんけんゲーム2 相手が1人の場合のじゃんけんゲーム3 相手が2人の場 ...

続きを見る

C言語を独学で習得することは難しいです.

私にC言語の無料相談をしたいあなたは,公式LINE「ChishiroのC言語」の友だち追加をお願い致します.

私のキャパシティもあり,一定数に達したら終了しますので,今すぐ追加しましょう!

友だち追加

独学が難しいあなたは,元東大教員がおすすめするC言語を学べるオンラインプログラミングスクール5社で自分に合うスクールを見つけましょう.後悔はさせません!

-C LANGUAGE, TECHNOLOGY
-, , , , , , , , , ,