はじめに
docker上でncurses.hを使うための最低限の環境を構築します。
ローグライクゲームを作成したときにもこの環境で動作しました。
【C言語】ncursesでローグライクゲームづくりも併せてどうぞ
ncurses.hとは何なのか
ずばりC言語でより高度な画面制御ができるヘッダファイルです。
また、いちいち[Enter]Keyを押す必要をなくすことができたりと、C言語でCLIゲームを作るならば是非おすすめしたい。
なぜdockerを使うのか
結論を言うと環境差があるからです。
ncursesは別途インストールする必要があります。
macだと brew install ncurses
ですみますが、それ以外だと少し面倒です。
また、ゲーム等を制作し、他の人に遊んでもらう場合において
上記のような環境差によって予期せぬエラーやそもそもの心理的ハードルが高いことから、ゲームを遊んでもらうことはないでしょう。
そこでdockerによって環境を統一することによってユーザにはコンテナを作ってもらう。ただそれだけに注力させ、エラーなど考える必要をなくすことができます。
環境構成
OS : CentOS 7
installするもの
- vim
- make
- ncurses-devel
- Development Tools
今回使用するコンテナは一つですが、Docker composeで環境つくります。
1. vim
テキストエディタの一つです。
動作がはやいのでよく使ってます。
2. make
通常コンパイルするときは
cc hogehoge.c
としますが、
別途Makefileを記述すれば
make
でコンパイルできます。
3. ncurses-devel
今回の目玉です。これでncurses.hが使えます。
4. Development Tools
色々セットです。
gccやgitなどがインストールされます。
手順
1. 前準備
Dockerを使うためには「Docker for windows」や「Docker for mac」が必要になります。
ここでのインストールの説明は省略します。
2. ディレクトリ構成
C-gameというディレクトリを作成しそれを基準にして考えます。
C-game/
├ src/
│ ├ Makefile
│ └ main.c
├ Dockerfile
└ docker-compose.yml
3. 各ファイルに記述
Dockerfile
FROM centos:7
WORKDIR /root
RUN yum -y update && \
yum -y groupinstall "Development Tools" && \
yum install -y vim make ncurses-devel
COPY src /root/
COPY src /root/
でC-game/src/がコンテナのroot/にコピーされます
ここでいうと、Makefileとmain.cがコピーされます
docker-compose.yml
version: "3.8"
services:
cdev:
build:
context: .
dockerfile: Dockerfile
image: cdev
container_name: cdev
volumes:
- type: bind
source: .
target: /cdev
stdin_open: true
tty: true
working_dir: /cdev/src/
Makefile
hoge: main.c
gcc -std=c99 -o hoge main.c -lncurses
-std=c99を忘れずに記述しましょう
3. 実行
docker-compose.yml
がディレクトリに移動します。
ビルドします。(docker imageが作成されます)
docker-compose build
docker-compose
でエラーが発生する場合はdocker compose
と打ち込んでください。
docker-compose up -d
コンテナが起動します。
docker exec -it cdev bash
でコンテナにアクセスできます。
そのコンテナ内で
make
cd ./hoge
で無事実行することができます。