C++ で基本的なテキストベースのゲームを作成する方法

C De Ji Ben Denatekisutobesunogemuwo Zuo Chengsuru Fang Fa



テキストベースのゲームは、プレイヤーとの対話のためにテキスト文字とコマンド ライン インターフェイスに依存します。グラフィック画像、サウンド、アニメーションはありません。ユーザーはコンソール ウィンドウからコマンドを入力します。

C++ で基本的なテキストベースのゲームを作成する方法

C++ のテキストベースのゲームでは、プレーヤーはコンソール ウィンドウからコマンドを入力でき、プログラムはプレーヤーの動きを処理します。ここでは、ユーザーが 2 つのオプションでプレイできるテキストベースの三目並べゲームを作成しました。ユーザーは C++ コンパイラを使って遊ぶことも、他の人間と一緒に遊ぶこともできます。このゲームには、勝ったプレイヤーのスコアが加算され続ける機能があります。最初のゲームの結果が発表された後、再戦のオプションが利用可能になります。

ゲームに勝つためのルール

2 人のプレーヤーが三目並べゲームをプレイし、3 行 3 列のグリッド上の 9 つの利用可能なスペースの 1 つに X と 0 を交互に配置します。ゲームは、垂直、水平、または斜めの方向に連続したマークを 3 つ取得した最初のプレーヤーが勝ちます。各プレイヤーは賢く考えて、他のプレイヤーの次の動きを先読みする必要があります。







テキストベースの三目並べゲームを設計するためのコードには、機能に基づいて分割されたさまざまなセクションがあります。最初のセクションでは、ユーザーはコンピューターとプレイするか、他の人間とプレイするかを決定します。ゲインのモードを決定した後、プログラムはユーザーに入力を求めます。両プレイヤーは次々に入力を行っていきます。



// プレイヤーからの意見を受け取ります
空所 プレイヤー入力 ( プレーヤー & プレーヤー ) {
整数 位置 ;
コート << 終わり ;
コート << \t << プレーヤー。 getName ( ) << ' 振り向く: ' ;
コート << \t 位置を入力してください」 <> 位置 ;
位置 - = 1 ;
もし ( 空のインデックス [ 位置 == 1 ) {
コート << 「-----位置が空ではありません------」 << 終わり ;
プレイヤー入力 ( プレーヤー ) ;
} それ以外 {
空のインデックス [ 位置 = 1 ;
空の数 - = 1 ;
プレーヤー。 getName ( ) 比較する ( 「プレイヤーI」 ) == 0 ? ボード [ 位置 = 'バツ' : ボード [ 位置 = 「お」 ;
}

}

ユーザーから入力を受け取った後、勝利ルールをチェックします。 checkWin() 関数には、プレーヤーが勝ったかどうかを確認するための 2 つのパラメーター p1 と p2 があります。関数内でさまざまな変数が宣言されます。i、j、k はループ用に宣言された整数変数であり、フラグは勝利条件をチェックするためのブール関数です。ループは最初の位置から開始され、9 つの位置すべてについて反復を続けます。 first_symbol は 0 または X の文字です。これが true の場合、可能なすべての組み合わせが勝利ルールとしてチェックされます。それ以外の場合、反復子は次の位置に移動し、すべての可能な位置がチェックされるまで同じ処理が続きます。フラグが true に設定されている場合、勝者が宣言され、プログラムは再度選択するよう求めます。



空所 チェックウィン ( プレーヤー & p1、プレーヤー & p2 ) {
整数 私、j、k ;
ブール フラグ = 間違い ;
チャー 最初のシンボル ;
のために ( = 0 ; < 8 ; ++ ) {
最初のシンボル = ボード [ 勝ちリスト [ [ 0 ;

もし ( ( 最初のシンボル = 'バツ' ) && ( 最初のシンボル = 「お」 ) ) {
フラグ = 間違い ;
続く ;
}
フラグ = 真実 ;
のために ( j = 0 ; j < 3 ; j ++ ) {
もし ( 最初のシンボル = ボード [ 勝ちリスト [ [ j ) {
フラグ = 間違い ;
壊す ;
}
}
もし ( フラグ ) {
ゲームスタート = 0 ;
もし ( 最初のシンボル == 'バツ' ) {
コート << 「-------------------------------------」 << 終わり ;
コート << \t 私が勝った選手」 << 終わり ;
コート << 「-------------------------------------」 << 終わり ;
p1. 勝利した ( ) ;
} それ以外 {
p2. 勝利した ( ) ;
もし ( コンピュータに対して ) {
コート << 「-------------------------------------」 << 終わり ;
コート << \t コンピューターが勝った」 << 終わり ;
コート << 「-------------------------------------」 << 終わり ;
} それ以外 {
コート << 「-------------------------------------」 << 終わり ;
コート << \t プレイヤーⅡが勝ちました」 << 終わり ;
コート << 「-------------------------------------」 << 終わり ;

}
}
ディスプレイスコア ( p1、p2 ) ;
壊す ;
}

コードのこの部分はゲームのスコアを示します。ゲームがコンピューターと対戦する場合は、プレーヤー 1 とコンピューターのスコアが表示され、そうでない場合は、プレーヤー 1 とプレーヤー 2 のスコアが表示されます。





空所 ディスプレイスコア ( プレーヤー & p1、プレーヤー & p2 ) {
コート << 終わり ;
コート << \t スコア: \t ;
もし ( コンピュータに対して )
コート << 「プレイヤーI:」 << p1. スコアを取得する ( ) << \t コンピューター: ' << p2. スコアを取得する ( ) << 終わり ;
それ以外
コート << 「プレイヤーI:」 << p1. スコアを取得する ( ) << \t プレイヤーⅡ: ' << p2. スコアを取得する ( ) << 終わり ;
}

これは、2 人のプレイヤー向けの三目並べゲームを実行するためのメイン コードです。ユーザーは、switch case ステートメントを使用して実行するさまざまなプロシージャを選択できます。このコードは、C++ コンパイラでゲームをプレイするためのユーザーフレンドリーなインターフェイスを提供し、ユーザーが終了オプションを選択するまでコードは実行を続けます。

整数 主要 ( )
{
整数 チャンネル ;

その間 ( 1 ) {
コート << 「 ----------メニュー----------」 << 終わり ;
コート << \t 1.1人プレイゲーム」 << 終わり ;
コート << \t 2.2人プレイゲーム」 << 終わり ;
コート << \t 3.「」を終了するには << 終わり ;
コート << 「 ----------」 << 終わり ;
コート << 終わり ;
コート << \t 選択肢一つを選択してください' <> チャンネル ;
スイッチ ( チャンネル ) {
場合 1 : {
ゲーム * ゲーム = 新しい ゲーム ;
ゲーム - > ( ) ;
ゲーム - > ワンプレイヤーゲーム ( ) ;
}
壊す ;
場合 2 : {
ゲーム * ゲーム = 新しい ゲーム ;
ゲーム - > ( ) ;
ゲーム - > ツープレイヤーゲーム ( ) ;
}
壊す ;
場合 3 :
戻る 0 ;
デフォルト :
コート << 「無効なオプションです。もう一度お試しください」 ;
}

}
戻る 0 ;
}

テキストベースの三目並べゲームの完全なコード

これは、テキストベースの三目並べゲームを設計および実行するための完全なコードです。



#include
#include<リスト>
#include
#include<文字列>
#include
を使用して 名前空間 標準 ;

typedef 構造体 {
整数 * ;
} WinList ;


クラス プレーヤー {
プライベート :
文字列名 ;
整数 スコア ;
公共 :
プレーヤー ( ) : プレーヤー { 「」 } { }
プレーヤー ( 文字列n ) : スコア { 0 } 、 名前 { n } { }

空所 勝利した ( ) {
// スコアをインクリメントします
スコア ++ ;
}
整数 スコアを取得する ( ) { 戻る これ - > スコア ; }

文字列getName ( ) { 戻る これ - > 名前 ; }
} ;

クラス ゲーム {
プライベート :
チャー ボード [ 9 ;
整数 空のインデックス [ 9 ;
整数 ゲームオン、コンピュータとの対戦 ;
整数 空の数 ;
WinList 勝ちリスト [ 8 ;

空所 ディスプレイボード ( ) {
コート << 終わり ;
コート << ' | | ' << 終わり ;
コート << 「」 << ボード [ 0 << ' | ' << ボード [ 1 << ' | ' << ボード [ 2 << 終わり ;
コート << ' | | ' << 終わり ;
コート << 「-----------」 << 終わり ;
コート << ' | | ' << 終わり ;
コート << 「」 << ボード [ 3 << ' | ' << ボード [ 4 << ' | ' << ボード [ 5 << 終わり ;
コート << ' | | ' << 終わり ;
コート << 「-----------」 << 終わり ;
コート << ' | | ' << 終わり ;
コート << 「」 << ボード [ 6 << ' | ' << ボード [ 7 << ' | ' << ボード [ 8 << 終わり ;
コート << ' | | ' << 終わり ;
コート << 終わり ;
}

空所 コンピュータ入力 ( ) {
整数 位置 ;
位置 = ランド ( ) % 10 ;
もし ( 空のインデックス [ 位置 == 1 ) {
もし ( 空の数 < 0 )
戻る ;
コンピュータ入力 ( ) ;
} それ以外 {
コート << 「コンピューターは次を選択します:」 << 位置 + 1 << 終わり ;
空のインデックス [ 位置 = 1 ;
空の数 - = 1 ;
ボード [ 位置 = 「お」 ;
}

}

空所 プレイヤー入力 ( プレーヤー & プレーヤー ) {
整数 位置 ;
コート << 終わり ;
コート << \t << プレーヤー。 getName ( ) << ' 振り向く: ' ;
コート << \t 位置を入力してください」 <> 位置 ;
位置 - = 1 ;
もし ( 空のインデックス [ 位置 == 1 ) {
コート << 「-----位置が空ではありません------」 << 終わり ;
プレイヤー入力 ( プレーヤー ) ;
} それ以外 {
空のインデックス [ 位置 = 1 ;
空の数 - = 1 ;
プレーヤー。 getName ( ) 比較する ( 「プレイヤーI」 ) == 0 ? ボード [ 位置 = 'バツ' : ボード [ 位置 = 「お」 ;
}

}

空所 チェックウィン ( プレーヤー & p1、プレーヤー & p2 ) {
整数 私、j、k ;
ブール フラグ = 間違い ;
チャー 最初のシンボル ;
のために ( = 0 ; < 8 ; ++ ) {
最初のシンボル = ボード [ 勝ちリスト [ [ 0 ;

もし ( ( 最初のシンボル = 'バツ' ) && ( 最初のシンボル = 「お」 ) ) {
フラグ = 間違い ;
続く ;
}
フラグ = 真実 ;
のために ( j = 0 ; j < 3 ; j ++ ) {
もし ( 最初のシンボル = ボード [ 勝ちリスト [ [ j ) {
フラグ = 間違い ;
壊す ;
}
}
もし ( フラグ ) {
ゲームスタート = 0 ;
もし ( 最初のシンボル == 'バツ' ) {
コート << 「-------------------------------------」 << 終わり ;
コート << \t 私が勝った選手」 << 終わり ;
コート << 「-------------------------------------」 << 終わり ;
p1. 勝利した ( ) ;
} それ以外 {
p2. 勝利した ( ) ;
もし ( コンピュータに対して ) {
コート << 「-------------------------------------」 << 終わり ;
コート << \t コンピューターが勝った」 << 終わり ;
コート << 「-------------------------------------」 << 終わり ;
} それ以外 {
コート << 「-------------------------------------」 << 終わり ;
コート << \t プレイヤーⅡが勝ちました」 << 終わり ;
コート << 「-------------------------------------」 < 0 ) && ( ゲームスタート = 0 ) ) {

もし ( コンピュータに対して )
== 1 ? コンピュータ入力 ( ) : プレイヤー入力 ( p2 ) ;
それ以外
== 1 ? プレイヤー入力 ( p1 ) : プレイヤー入力 ( p2 ) ;
= ;
ディスプレイボード ( ) ;
チェックウィン ( p1、p2 ) ;
}
もし ( 空の数 <= 0 ) {
コート << 「 ----------------------」 << 終わり ;
コート << \t 勝者はいない」 << 終わり ;
コート << 「 ----------------------」 << 終わり ;
}
コート << 終わり ;
コート <> 再戦 ;
もし ( ( 再戦 == 'そして' ) || ( 再戦 == 'そして' ) ) {
( ) ;
遊ぶ ( p1、p2 ) ;
}

}
空所 ディスプレイスコア ( プレーヤー & p1、プレーヤー & p2 ) {
コート << 終わり ;
コート << \t スコア: \t ;
もし ( コンピュータに対して )
コート << 「プレイヤーI:」 << p1. スコアを取得する ( ) << \t コンピューター: ' << p2. スコアを取得する ( ) << 終わり ;
それ以外
コート << 「プレイヤーI:」 << p1. スコアを取得する ( ) << \t プレイヤーⅡ: ' << p2. スコアを取得する ( ) << 終わり ;
}

公共 :
ゲーム ( ) : 空の数 { 0 } 、 ゲームスタート { 1 } 、コンピュータに対して { 0 } {
( ) ;
勝ちリスト [ 0 = 新しい 整数 [ 3 { 0 1 2 } ;
勝ちリスト [ 1 = 新しい 整数 [ 3 { 3 4 5 } ;
勝ちリスト [ 2 = 新しい 整数 [ 3 { 6 7 8 } ;
勝ちリスト [ 3 = 新しい 整数 [ 3 { 0 3 6 } ;
勝ちリスト [ 4 = 新しい 整数 [ 3 { 1 4 7 } ;
勝ちリスト [ 5 = 新しい 整数 [ 3 { 2 5 8 } ;
勝ちリスト [ 6 = 新しい 整数 [ 3 { 0 4 8 } ;
勝ちリスト [ 7 = 新しい 整数 [ 3 { 2 4 6 } ;
}

空所 ( ) {
ゲームスタート = 1 ;

空の数 = 0 ;
スランド ( 時間 ( 0 ) ) ;
のために ( サイズ_t = 0 ; < 10 ; ++ ) {
空のインデックス [ = 0 ;
ボード [ = ( + 1 ) + 「0」 ;
空の数 ++ ;
}
空の数 -- ;
}

空所 ワンプレイヤーゲーム ( ) {
//プレーヤーの作成
プレイヤーp ( 「プレイヤーI」 ) ;
プレイヤーc ( 'コンピューター' ) ;
コート << 「 -----------------------」 << 終わり ;
コート << \t プレイヤーI:X \t コンピューター「お」 << 終わり ;
コート << 「 -----------------------」 << 終わり ;
コート << 終わり ;
コンピュータに対して = 1 ;
遊ぶ ( c、p ) ;

}

空所 ツープレイヤーゲーム ( ) {
//プレーヤーの作成
プレイヤーp ( 「プレイヤーI」 ) ;
プレイヤーc ( 「プレイヤーⅡ」 ) ;
コート << 「 -----------------------」 << 終わり ;
コート << \t プレイヤーI:X \t プレイヤー II: ああ」 << 終わり ;
コート << 「 -----------------------」 << 終わり ;
コート << 終わり ;
コンピュータに対して = 0 ;
遊ぶ ( c、p ) ;
}
} ;

整数 主要 ( )
{
整数 チャンネル ;

その間 ( 1 ) {
コート << 「 ----------メニュー----------」 << 終わり ;
コート << \t 1.1人プレイゲーム」 << 終わり ;
コート << \t 2.2人プレイゲーム」 << 終わり ;
コート << \t 3.「」を終了するには << 終わり ;
コート << 「 ----------」 << 終わり ;
コート << 終わり ;
コート << \t 選択肢一つを選択してください' <> チャンネル ;
スイッチ ( チャンネル {
場合 1 : {
ゲーム * ゲーム = 新しい ゲーム ;
ゲーム - > ( ;
ゲーム - > ワンプレイヤーゲーム ( ;
}
壊す ;
場合 2 : {
ゲーム * ゲーム = 新しい ゲーム ;
ゲーム - > ( ;
ゲーム - > ツープレイヤーゲーム ( ;
}
壊す ;
場合 3 :
戻る 0 ;
デフォルト :
コート << 「無効なオプションです。もう一度お試しください」 ;
}

}
戻る 0 ;
}

これは三目並べゲームを実行するための完全なコードであり、コンピューターまたは他の人間と 2 つのモードでプレイできます。これは、可能なすべてのコマンドを含む多用途のコードです。ユーザーがすでに埋まっている位置を入力した場合、この位置は上書きされず、この移動は無効であると見なされます。

これまで、プレイヤー 1 は最初のボックスを選択していましたが、次のターンでコンピューターは 6 番目のボックスをマークしました。

これまで両方のプレイヤーが 2 つのボックスを選択していましたが、次のターンでプレイヤー I が 7 番目のボックスを選択すると、連続した垂直パターンが作成されます。

ユーザーはコンピューターを使用してゲームをプレイすることを選択したため、3 手を取った後、ユーザーはコンピューターに勝ち、プレーヤー 1 の記録に 1 つのスコアが追加されました。最初の試合が終了した後、コンパイラーは再試合を要求します。ユーザーがオプションから決定すると、プログラムはメインセクションに戻ります。オプション 3 を選択すると、コンパイラーはコードを実行します。

結論

テキストベースのゲームは、プレイヤーとの対話のためにテキスト文字とコマンド ライン インターフェイスに依存します。グラフィック画像、サウンド、アニメーションはありません。ユーザーはコンソール ウィンドウからコマンドを入力します。ユーザーフレンドリーなテキストベースの三目並べゲームは、C++ を使用して構築されています。さまざまなコマンドを使用して、コンピュータまたは他のプレイヤーとプレイできるゲームを作成します。