sho_blog

アフィリエイト、ブログ、株、など自分のリサーチなどをまとめて書いています。

C言語で制作したオセロゲーム【保存版】

f:id:red_blog:20210219212358j:plain

 

はじめに

 

このコードは私が大学にて学びながら制作したものになります。この記事ではソースコードの話ではなくではなく大まかな仕様について説明します。 

 

実行環境・動作環境の構築
使用しているパソコン

Apple 16インチMacBook Pro(オプションなしの初期スペックです。)

 
実行時のOS

macOS Big Sur バージョン11.1(無闇にアップデートしない方がいいです。最新のバージョンでは動作しなくなったりすることがたまにがあります。)

 

コンパイルまでに行ったこと(macの場合)

Xcodeのインストール(コンパイラー)
Virtual Studio Codeの(エディター)
 ・C言語拡張機能のインストール
 ・日本語パックのインストール


XQuartzのインストール(X Window Systemのインストール)
 ・macOS Big Surの初期の頃ににX Window Systemがはいっていなかったのでインストールする必要がありました。
 ・加えてMacLinuxでOSが異なるのでインストール方法も異なります。Linuxの方は下記のEGGXソースパッケージのインストール方法に記載されています。
 ・X Window Systemとは何ぞやと思われた方はこちらの方の記事を見ると理解しやすいと思います。


EGGXソースパッケージのインストール
 ・これはオセロの盤面の描写に必要ライブラリになります。
 ・インストールの方法は上記のリンクより確認ください。

 

結論としてはコンパイラーなどは他にも様々ありますので個々の環境構築を行ってください。C言語の動作環境とEGGXをコンパイルできるとこまでできれば私のオセロゲームは動作します。 

 

物理処理と論理処理

このオセロゲームのコードの内の関数は物理処理と論理処理を行う関数に分けられています。物理処理は盤面や石の描写などを行っています。

処理によって関数を分けているのはEGGXのライブラリ以外で描写を行ったときに書き換えを簡単に行えるようにするためです。

 

動作例

f:id:red_blog:20210219213206p:plain

左上部に白石と黒石の盤面上の数を表示しています。
 

f:id:red_blog:20210219213244p:plain

先攻は黒石から始まります。
 

f:id:red_blog:20210219213346p:plain

マスのひとつひとつに00から始まり77までの数が割り振られています。石を置く場合はそのマスごとの数字を入力することで石を置くことができます。また、石を置くことができるマスにのみ石を置くことができます。

最初の盤面ではこのような感じになります。

 

f:id:red_blog:20210219213313p:plain

バツのマスに石を置こうとすると上記のような表示が出ます。

 

f:id:red_blog:20210219213357p:plain

すでに置かれた石にも接していない離れた位置に石を置こうとすると上記のような表示が出ます。
 

f:id:red_blog:20210219214511p:plain

石を置けるマスがなくなったら上記のような表示が出ます。
ターンが交代します。

 

勝敗について

オセロでは盤面を埋めることで終了するのが普通ですが盤面を埋めずに終了するパターンがあります。どちらの色であっても片方の石の色を盤面上から消し去ることが可能です。(実際にゲームで起きることはないと思いますが一応専用の処理があります)
 【通常の終了処理】

f:id:red_blog:20210219214519p:plain

f:id:red_blog:20210219214526p:plain

通常の終了処理はこのような感じです。終了時点で各色の石の数を表示し、Enterでプログラムを終了します。
 
【盤面を埋めずに相手を詰ませる】

f:id:red_blog:20210219214921p:plain

f:id:red_blog:20210219214925p:plain

このような盤面で終了するパターンが存在します。その時の為の条件部を用意し終了するようにしています。
 

f:id:red_blog:20210219214931p:plain

f:id:red_blog:20210219214936p:plain

条件分岐で最終的には通常の終わり方と同じ処理を行うようにしています。
 
【引き分け】

f:id:red_blog:20210219215238p:plain

f:id:red_blog:20210219215241p:plain

引き分けも滅多にありませんが専用の条件分岐を作成しています。
 

具体的なソースコード

具体的なソースコードを知りたい方はこちらから

note.com

 

最後に

一応、バグなどはないと確認していますが、万が一でも見落としを発見された方はコメントお願いします。早急に修正を行います。
 
質問などはしていただければ、可能な範囲で答えます。