3DプリンタとITとプリキュアのブログ

大学でプログラミングに出会って、ズブズブにハマってしまった情報系学生の書くブログです。

C言語で2048を作る

エスケープシーケンスを使って、ターミナルでも色変えたり太字にしたり、なんやらかんやらができることを知ったので、2048を作ってみました。

エスケープシーケンス

このサイトにエスケープシーケンスが一通りまとめられていたので、備忘録。

bash:tip_colors_and_formatting - FLOZz' MISC

このサイトに載っているものだと、bashで表示するならCだろうがシェルスクリプトだろうがJavaだろうがなんでも使えます。 環境次第では使えないエスケープシーケンスもあるけど、基本的にVT100互換なら全部使えるらしい。

いや、めんどくさくね?

C言語でいちいちprintfにあんなこと書くのはしんどいし、タイポでバグ埋め込みそうなので、cursesという便利なライブラリがあります。

当たり前だけどC標準じゃなくてUNIX系でしか使えません。

Windowsは知らん。 Windows APIGUI作ってどうぞ。

名前の由来はエスケープシーケンスを使うと呪文(curse)みたいになるかららしい。

想像以上に色々できるのですごいですよ。

現在はncursesという新しいのがあるので、そっちを使いましょう。

ncurses.hを使おう

ncurses.hに含まれる関数とかマクロの説明はめんどくさいので、自分が勉強に使ったサイトを貼っておきます。

curses

ncurses

マウス

この辺を一通り読んだ後は、ncurses.h自体を読むと良いかも。マクロの細かい動きが読めますよ。

2048の概要

ようやく本題に入ります。

2048なので、少なくとも

  1. タイルの移動

  2. タイルの重ね合わせ

  3. タイルの生成

  4. ゲームオーバーの検知

の4つの要素が必要です。

加えて今回は、

  • スコア計算機能

  • セーブ&ロード機能

  • リトライ機能

  • 中断機能

  • ランキング機能

も実装しました。

GitHub - shumon84/2048: 2048 for C/C++

とりあえずcloneしてmakeすれば"2048"という名前の実行ファイルが出来上がるはずです。

遊び方

READMEを読んでね。 矢印キーかwasdで移動できるので、それさえ覚えていればひとまずプレイできると思います。

doubleとfloatの計算速度の話

C言語ではdouble型とfloat型の計算速度に違いがあることを知ったので、その話です。

 

float型の方が速い?

double型は64bitでfloat型は32bitなのだから、普通は精度の低いfloat型の計算の方が速そうな気がしますが、実はdouble型の方が少し速いみたいです。

ならintとlongならlongの方が速いかと言うと、そういうわけではなく普通にintの方が高速です。

 

なぜdoubleの方が速いのか

理由はCPUの構造にあるみたいです。

どうもCPUに乗っている浮動小数点演算ユニットは

double用に作られているので、floatで計算したい場合は1度doubleにキャストして計算した後に再度floatにキャストする必要があるらしく、結果としてdoubleで計算した方が速くなります。

 

 

まあ競プロでは問題になるような差ではないですし、そもそも基本的にdoubleしか使わないので競プロには関係ないですね。

ポートフォリオサイトを作ったよ!

某サークルOBの3DCGやってる方が、ポートフォリオサイトを作っていて良さげだったので、僕も作ってみました。

 http://shumon84.sakura.ne.jp/ShumonArtWorks/

 

今までに作っ3Dモデルの中で、個人的に気に入ってるモデルと、趣味で作ってる痛グラスを載せています。

そのうち、Sketchfabとか埋め込んだりダウンロードページ作ったり拡張していくかもしれません。

 

さくらレンタルサーバを初めて使いました。

というかwebサーバ構築したのも初。

 

サイト自体はSparkleというソフトで作成しました。

OS X用のホームページ作成ソフトです。

Sparkle, Visual web design

 

無料版では、インストールされているMacにhtmlやcssを保存できず、FTP経由でwebサーバ上にアップロードすることしかできません。

また、作ったホームページの最上部にもSparkleの広告が入ってしまいます。

他の機能は無料版と有料版で大きな違いはなさそうです。

 

これ要するにwebサーバ上でならhtml編集できるんじゃね?って思ったらできました。

普通に広告も消せたんですけど、こんなにガバガバでも儲かってるんだろうか......

色んなアルゴリズムでビット数をカウントしてみる

ビット数をカウントするアルゴリズムには色んな種類があるそうで、そのうち4つのアルゴリズムC言語による実装とベンチマークです。

続きを読む

RUPC2017 参加記

RUPC2017に参加したので、その参加記です。

続きを読む

【3Dワンドロ】ラジエーター

#深夜のモデリング60分一本勝負 で、ラジエーターがお題だったので作ってみました。

f:id:cameremon84:20170324001513p:plain

 

ラジエーターって聞いたら水冷CPUクーラーしか思い浮かばなかったので、ラジエーター部分のファンレスCPUクーラーです。

続きを読む

実引数の評価順序の話

JavaC言語では、実引数の評価順序に違いがある話。

続きを読む