Cで三目並べを実現する
本論文の例では、C言語で三子棋を実現する具体的なコードを共有しました。参考にしてください。具体的な内容は以下の通りです。
三目並べの意味:
三目並べは白黒の一種です。三子棋は九宮棋、圏点チャーチ、一条竜、井字棋などとも言います。正方形の対角線をつないで、双方に対して順次3つの双方の駒を並べて、自分の3つの駒を1本の線に歩くのでさえすれば、相手は負けます。しかし、多くの場合は引き分けとなることがあります。凡例は以下の通りです
基本的な考え方:
1.ユーザーインタラクティブメニュー画面の作成
2.ボードを初期化する
3.ボードパネルを表示します。(ボードを繰り返し表示しないように、スクリーンで操作します。)
4.ユーザー落下
5.勝負を判断する
6.コンピュータがランダムで正確に落ちる
7.勝負を判断する
(プログラムを書くたびに、下図のように考えや疑似コードを書くことができます。)
複数のファイル項目を作成:
コードを書く前に、まず三つのファイルを作成して、後のコードがより完全に明確に現れやすいようにします。
1.ユーザーインタラクティブメニュー画面の作成
マクロ定義を使用して、ボードの内容を空に初期化します。
ボードを繰り返し表示しないために、スクリーンを使って操作します。毎回現実的なボードは一枚だけです。
継続的な調整によって,最終インターフェースは期待される必要な界面と一致するようにした。
落子は空の位置にしか落ちられないので、落子の前に空を判定しなければなりません。空なら落子します。
乱数を使って、正しい位置に落下します。
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。
三目並べの意味:
三目並べは白黒の一種です。三子棋は九宮棋、圏点チャーチ、一条竜、井字棋などとも言います。正方形の対角線をつないで、双方に対して順次3つの双方の駒を並べて、自分の3つの駒を1本の線に歩くのでさえすれば、相手は負けます。しかし、多くの場合は引き分けとなることがあります。凡例は以下の通りです
基本的な考え方:
1.ユーザーインタラクティブメニュー画面の作成
2.ボードを初期化する
3.ボードパネルを表示します。(ボードを繰り返し表示しないように、スクリーンで操作します。)
4.ユーザー落下
5.勝負を判断する
6.コンピュータがランダムで正確に落ちる
7.勝負を判断する
(プログラムを書くたびに、下図のように考えや疑似コードを書くことができます。)
複数のファイル項目を作成:
コードを書く前に、まず三つのファイルを作成して、後のコードがより完全に明確に現れやすいようにします。
1.ユーザーインタラクティブメニュー画面の作成
void Meau(){
printf("+------ meau ----------+
");
printf("|---- 1.play --------|
");
printf("|---- 0.quit --------|
");
printf("+----------------------+
");
}
2.ボードを初期化するマクロ定義を使用して、ボードの内容を空に初期化します。
static void InitBoard(char board[][COL], int row, int col){
for (int i = 0; i < row; i++){
for (int j = 0; j < col; j++){
board[i][j] = INIT;
}
}
}
3.ボードパネルを表示するボードを繰り返し表示しないために、スクリーンを使って操作します。毎回現実的なボードは一枚だけです。
継続的な調整によって,最終インターフェースは期待される必要な界面と一致するようにした。
static void ShowBoard(char board[][COL],int row,int col){
system("cls");//
printf(" ");
for (int i = 0; i < col; i++){
printf(" %3d", i + 1);
}
printf("
----------------
");
for (int i = 0; i < row; i++){
printf("%-2d", i + 1);
for (int j = 0; j < col; j++){
printf("| %c ", board[i][j]);
}
printf("
----------------
");
}
}
4.ユーザー落下落子は空の位置にしか落ちられないので、落子の前に空を判定しなければなりません。空なら落子します。
static void PlayerMove(char board[][COL], int row, int col){
int x = 0;
int y = 0;
while (1){
printf("please enter your postion<x,y>: ");
scanf("%d %d", &x, &y);
if (x<1 || x>3 || y<1 || y>3){
printf("Postion Error!");
continue;
}
if (board[x - 1][y - 1] == INIT){
board[x - 1][y - 1] = WHITE;
break;
}
else{
printf("Postion Is Not Empty!
");
}
}
}
5.コンピュータがランダムで正確に落ちる乱数を使って、正しい位置に落下します。
static void ComputerMove(char board[][COL], int row, int col){
while (1){
int x = rand() % row;
int y = rand() % col;
if (board[x][y] == INIT){
board[x][y] = BLACK;
break;
}
}
}
6.勝負を判断する
static char IsEnd(char board[][COL], int row, int col){
for (int i = 0; i < row; i++){
if (board[i][0] == board[i][1] && \
board[i][1] == board[i][2] && \
board[i][0] != INIT){
return board[i][0];
}
}
for (int j = 0; j < col; j++){
if (board[0][j] == board[1][j] && \
board[1][j] == board[2][j] && \
board[0][j] != INIT){
return board[0][j];
}
}
if (board[0][0] == board[1][1] && \
board[1][1] == board[2][2] && \
board[0][0] != INIT){
return board[0][0];
}
if(board[0][2] == board[1][1] && \
board[1][1] == board[2][0] && \
board[1][1] != INIT){
return board[1][1];
}
for (int i = 0; i < row; i++){
for (int j = 0; j < col; j++){
if (board[i][j] == INIT);
return NEXT;
}
}
return DRAW;
}
7.Gameインターフェースを作成する
void Game()
{
char board[ROW][COL];
InitBoard(board, ROW, COL);
srand((unsigned long)time(NULL));
char result = 0;
while (1){
ShowBoard(board, ROW, COL);
PlayerMove(board, ROW, COL);
result = IsEnd(board, ROW, COL);
if (result != NEXT){
break;
}
ShowBoard(board, ROW, COL);
ComputerMove(board, ROW, COL);
result = IsEnd(board, ROW, COL);
if (result != NEXT){
break;
}
}
ShowBoard(board, ROW, COL);
switch (result){
case WHITE:
printf("You win!
");
break;
case BLACK:
printf("you lose!
");
break;
case DRAW:
printf("it ends in a draw
");
break;
defult:
printf("bug
");
break;
}
}
完全コード
//main.c
#include"game.h"
void Meau(){
printf("+------ meau ----------+
");
printf("|---- 1.play --------|
");
printf("|---- 0.quit --------|
");
printf("+----------------------+
");
}
int main(){
int select = 0;
int quit = 0;
while (!quit)
{
Meau();
printf("please enter your choose: ");
scanf("%d", &select);
switch (select)
{
case 1:
Game();
break;
case 0:
quit = 1;
break;
defult:
printf("Select error!Try again!
");
break;
}
}
printf("byebye!
");
system("pause");
return 0;
}
//game.c
#include"game.h"
static void InitBoard(char board[][COL], int row, int col){
for (int i = 0; i < row; i++){
for (int j = 0; j < col; j++){
board[i][j] = INIT;
}
}
}
static void ShowBoard(char board[][COL],int row,int col){
system("cls");
printf(" ");
for (int i = 0; i < col; i++){
printf(" %3d", i + 1);
}
printf("
----------------
");
for (int i = 0; i < row; i++){
printf("%-2d", i + 1);
for (int j = 0; j < col; j++){
printf("| %c ", board[i][j]);
}
printf("
----------------
");
}
}
static char IsEnd(char board[][COL], int row, int col){
for (int i = 0; i < row; i++){
if (board[i][0] == board[i][1] && \
board[i][1] == board[i][2] && \
board[i][0] != INIT){
return board[i][0];
}
}
for (int j = 0; j < col; j++){
if (board[0][j] == board[1][j] && \
board[1][j] == board[2][j] && \
board[0][j] != INIT){
return board[0][j];
}
}
if (board[0][0] == board[1][1] && \
board[1][1] == board[2][2] && \
board[0][0] != INIT){
return board[0][0];
}
if(board[0][2] == board[1][1] && \
board[1][1] == board[2][0] && \
board[1][1] != INIT){
return board[1][1];
}
for (int i = 0; i < row; i++){
for (int j = 0; j < col; j++){
if (board[i][j] == INIT);
return NEXT;
}
}
return DRAW;
}
static void PlayerMove(char board[][COL], int row, int col){
int x = 0;
int y = 0;
while (1){
printf("please enter your postion<x,y>: ");
scanf("%d %d", &x, &y);
if (x<1 || x>3 || y<1 || y>3){
printf("Postion Error!");
continue;
}
if (board[x - 1][y - 1] == INIT){
board[x - 1][y - 1] = WHITE;
break;
}
else{
printf("Postion Is Not Empty!
");
}
}
}
static void ComputerMove(char board[][COL], int row, int col){
while (1){
int x = rand() % row;
int y = rand() % col;
if (board[x][y] == INIT){
board[x][y] = BLACK;
break;
}
}
}
void Game()
{
char board[ROW][COL];
InitBoard(board, ROW, COL);
srand((unsigned long)time(NULL));
char result = 0;
while (1){
ShowBoard(board, ROW, COL);
PlayerMove(board, ROW, COL);
result = IsEnd(board, ROW, COL);
if (result != NEXT){
break;
}
ShowBoard(board, ROW, COL);
ComputerMove(board, ROW, COL);
result = IsEnd(board, ROW, COL);
if (result != NEXT){
break;
}
}
ShowBoard(board, ROW, COL);
switch (result){
case WHITE:
printf("You win!
");
break;
case BLACK:
printf("you lose!
");
break;
case DRAW:
printf("it ends in a draw
");
break;
defult:
printf("bug
");
break;
}
}
//game.h
#ifndef __GAME_H__
#define __GAME_H__
#include<stdio.h>
#include <time.h>
#include <stdlib.h>
#include<windows.h>
#pragma warning(disable:4996)
#define ROW 3
#define COL 3
#define INIT ' '
#define WHITE 'X'//player
#define BLACK 'O'//computer
#define DRAW 'D'
#define NEXT 'N'
extern void Game();
#endif
コード結果表示以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。