C語言之三字棋的實現及擴充套件

2021-10-21 17:07:31 字數 3034 閱讀 5813

一.檔案組成:

在我們學習的過程中,我們要逐漸習慣多檔案的書寫方式,也就是模組化書寫。

1.game.h——實現遊戲函式的宣告

2.game.c——遊戲函式的實現

3.test.c —— 測試及遊戲函式的呼叫

二.實現

0.檔案的初始化

在這裡我們分別在我們所建立的 test.c 和 game.c 包含我們的標頭檔案——game.h

1.選單的實現

在選單中,我們設定玩家可以選擇的模式,play and quit

以及,選單怎麼樣多次迴圈選擇,選單的容錯處理。這裡,我們利用 do-while 來實現。

複製**

#define _crt_secure_no_warnings 1//加這一句話是因為筆者採用的是 vs 編譯器,為了防止一些不必要的錯誤出現

#include 「game.h」

void menu()//列出可供玩家選擇的模式

void play()

} while (input);//當input為0時,停止迴圈

return 0;
}

複製**

執行效果:

現在,我們的選單已經做好了,接下來要做的就是來列印我們的棋盤。

2.棋盤的列印

這裡我們把列印函式的宣告放在 game.h 檔案裡,把實現放在game.c 檔案中。

在寫**之前,我們先來想一想在棋盤列印中,我們能不能直接列印空格——這肯定是不能的,因為這樣,我們在螢幕上什麼都看不見 (≧∇≦)ノ

game.c:

複製**

#define _crt_secure_no_warnings 1

#include"game.h"

void initboard(char board[3][3], int row, int col)//棋盤初始化}}

void displayboard(char board[3][3], int row, int col)//棋盤列印函式

}printf("\n");

if (i < row - 1)

}}

printf("\n");

}

}

複製**

注:為了避免文章贅餘,test.c 以及 game.h不再表示

執行結果:

但是,我們這麼寫,會不會有問題?

值得注意的是,在這有人會把棋盤列印寫成這個樣子

複製**

void displayboard(char board[3][3], int row, int col)//棋盤列印函式}}

複製**

這樣,無非還是上面那個問題,**寫死,無法擴充套件

所以,我們在這利用巨集來實現,棋盤的大小隨我們的巨集來改變

因此在這我們給出標頭檔案的部分

複製**

#pragma once

#include

#define row 3//利用巨集來實現棋盤的大小

#define col 3

void initboard(char board[row][col], int row, int col);//棋盤初始化

void displayboard(char board[row][col],int row, int col);//棋盤列印函式

複製**

3.棋盤下子

1.玩家下子

在這裡我們一共要注意幾點:

1.在下子之前,我們要判斷玩家所要下的位置是否在棋盤內

2.檢測玩家要下的位置是否已有了棋子

3.下子之後,檢查棋盤的輸贏狀況 (這個我們後面再說)

複製**

void playermove(char board[row][col], int row, int col)//玩家下棋

else if (!((x > 0 && x <= row) && (y > 0 && y <= col)))

else

}複製**

2.電腦下子

再這裡我們暫不深究,使用隨機函式來生成乙個座標來下子

複製**

void computermove(char board[row][col], int row, int col)//電腦下棋}}

複製**

4.勝負的判定

在這裡,我們用乙個函式的返回值來表示輸贏的各個情況。

#-----電腦贏

*-----玩家贏

c-----繼續下子

f-----和局

複製**

int isfull(char board[row][col], int row, int col)

}return 1;

}char iswin(char board[row][col], int row, int col)

}for (i = 0; i < row - 2; i++)

}//判斷是否滿盤—放在最後是因為最後一步的判斷

if (1 == isfull(board, row, col))

return 『c』;

}複製**

到這,我們的三子棋似乎已經編完了,先看一下執行結果:

在這個過程中,我們會發現電腦下的特別快(當然,這跟我們的懶惰有關……)所以我們在電腦下的步驟中加乙個sleep()函式來延長電腦所用時間

已即,我們可以下一次子就清一下屏,這樣看起來比較舒服

所以最後的**部分:

game.h

game.c

test.c

三.擴充套件

1.五子棋的實現

五子棋的實現僅僅只改變了判斷規則,其它方式都沒變。

判斷**:

複製**

char iswin(char board[row][col], int row, int col)

}for (i = 0; i < col - 4; i++)

}//判斷是否滿盤

if (1 == isfull(board, row, col))

return 'c';亞馬遜測評 www.yisuping.cn

c語言三字棋

1.三字棋存在只能演算法,雖然程式較笨,希望大佬指導。2.利用for迴圈巢狀if判斷,每一行有三種堵棋的情況。3.玩家或者電腦每下一步棋都要進行判斷輸贏和列印棋盤 game.h 標頭檔案 ifndef game h define game h include include include defi...

C語言 三字棋

目錄 三字棋小遊戲 第一部分 程式 第二部分.遇到問題及解決方案 重複包含標頭檔案。第三部分 知識擴充套件 三子棋,民間傳統遊戲,又叫九宮棋 圈圈叉叉 一條龍等。將正方形 對角線連起來,相對兩邊依次擺上三個雙方棋子,只要將自己的三個棋子走成 一條線,對方就算輸了。如果兩個人都掌握了技巧,那麼一般來說...

三字棋 C語言實現

三子棋是一種民間傳統遊戲,又叫九宮棋 圈圈叉叉 一條龍等。將正方形對角線連起來,相對兩邊依次擺上三個雙方棋子,只要將自己的三個棋子走成一條線,對方就算輸了。專案概要 使用c語言中二維陣列和函式的基本知識簡單實現乙個三子棋遊戲,這個遊戲要實現的基本功能主要有初始化棋盤 棋盤的列印 玩家下棋 電腦下棋 ...