一.檔案組成:
在我們學習的過程中,我們要逐漸習慣多檔案的書寫方式,也就是模組化書寫。
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語言中二維陣列和函式的基本知識簡單實現乙個三子棋遊戲,這個遊戲要實現的基本功能主要有初始化棋盤 棋盤的列印 玩家下棋 電腦下棋 ...