目錄
讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項目有:域名申請、虛擬主機、營銷軟件、網(wǎng)站建設(shè)、孝感網(wǎng)站維護、網(wǎng)站推廣。一:三子棋的基本流程
二:三子棋的具體步驟
1.創(chuàng)建文件
2.打印菜單
3.創(chuàng)建棋盤
4.初始化棋盤
5.打印棋盤
6.玩家下棋
7.電腦下棋
8.判斷輸贏
三:三子棋的演示
首先選擇菜單——>選擇開始游戲——>輸入你要下棋的坐標——>如果滿足每行或者每列或者對角線上的都是你的棋子,則游戲勝利。
二:三子棋的基本步驟:1.創(chuàng)建文件
首先我們創(chuàng)建三個文件,分別為test.c,game.c,game.h? 三個文件,test.c文件主要是測試邏輯,game.c game.h去實現(xiàn)這個三子棋,在game.h文件主要用來聲明函數(shù)和定義一些常量。
2.打印菜單
這個菜單就是我們進入游戲的界面,我們可以定義一個菜單函數(shù),在主函數(shù)里面定義一個test()函數(shù),將后面實現(xiàn)的代碼全部放在里面
int main() {
test();
return 0;
}
為了讓我們能一直玩,這里采用了do while循環(huán),將打印的菜單函數(shù)放在這個循環(huán),再用switch語句來選擇輸入選項,是進入游戲還是退出游戲,用1來表示進入游戲,0表示退出游戲,正好while循環(huán)的條件表達式就為輸入的數(shù),為0正好循環(huán)結(jié)束。
打印菜單:
void menu() {
printf("*****************************\n");
printf("******** 1. play ******\n");
printf("******** 0. eixt ******\n");
printf("*****************************\n");
}
void test() {
//rand函數(shù)(隨機數(shù)范圍0~32767)調(diào)用之前要使用srand函數(shù) 調(diào)用一次即可
srand((unsigned int)time(NULL));
int input=0;//要輸入的數(shù)
do {
//游戲進去前首先打印一個菜單
menu();
printf("請選擇->");
scanf("%d", &input);
switch (input)
{
case 1:
printf("游戲開始啦?。?!\n");
game();
break;
case 0:
printf("退出游戲\n");
break;
default:
printf("選擇錯誤\n");
break;
}
} while (input);//可以一直玩下去,一直到輸入0游戲結(jié)束
}
3.創(chuàng)建棋盤:
創(chuàng)建棋盤就用到二維數(shù)組,我們把棋子用字符表示,所以創(chuàng)建一個字符數(shù)組。
char board[ROW][COL];
在game.h文件中定義常量行和列?
//聲明行和列,便于以后修改,改該頭文件數(shù)據(jù)就可以了
#define ROW 3
#define COL 3
4.初始化棋盤:
創(chuàng)建完畢后要對棋盤清空,初始化棋盤都為空格,再創(chuàng)建一個初始化棋盤函數(shù)。
init_board(board,ROW,COL);
//此函數(shù)讓數(shù)組的每個元素都是空格
void init_board(char board[ROW][COL], int row, int col) {
int i = 0;
for (i = 0; i< row; i++) {
int j = 0;
for (j = 0; j< col; j++) {
board[i][j] = ' ';
}
}
}
5.打印棋盤
初始化完畢要將這個棋盤打印在屏幕上,再創(chuàng)建一個打印函數(shù)。
print_board(board, ROW, COL);
void print_board(char board[ROW][COL], int row, int col) {
int i = 0;
for (i = 0; i< row; i++)
{
int j = 0;
for (j = 0; j< col; j++) {
printf(" %c ",board[i][j]);
if(j
6.玩家下棋:
棋局已經(jīng)布置好了,開始讓電腦和玩家下棋。
player_move(board, ROW, COL);
//實現(xiàn)玩家下棋的函數(shù)
void player_move(char board[ROW][COL], int row, int col) {
printf("玩家下棋\n");
//因為要讓玩家一直下棋,可以想到用while循環(huán)來實現(xiàn)
while (1) {
printf("請輸入要下棋的坐標:\n");
int x = 0;
int y = 0;
scanf("%d %d", &x, &y);
if (x >= 1 && x<= row && y >= 1 && y<= col) {
if (board[x - 1][y - 1]==' ') { // 如果玩家輸入的坐標不為空,將在輸入的地方打印*
board[x - 1][y - 1] = '*';
break; //然后通過break跳出循環(huán)
}
else
{
printf("該坐標被占用,請重新輸入:\n");
}
}
else {
printf("輸入坐標非法\n");
}
}
}
7.電腦下棋:
computer_move(board, ROW, COL);
在這里電腦下棋是編譯器隨機下棋,如果追求難度的話,還可以寫算法來控制電腦下棋,哈哈,這應(yīng)該算智能三子棋,希望各位可以寫寫看。
在這里有一個點,C語言的rand()生成隨機數(shù),rand函數(shù)(隨機數(shù)范圍0~32767)調(diào)用之前要使用srand函數(shù) 調(diào)用一次即可。
//實現(xiàn)電腦下棋的函數(shù)
void computer_move(char board[ROW][COL], int row, int col) {
//讓電腦隨機下棋,自己隨機生成坐標
//用rand()函數(shù)生成隨機值,因為電腦行和列都要隨機生成0~2之間的數(shù)字,所以讓隨機數(shù)對行和列取余即可
printf("電腦下棋\n");
int x = rand() % row;
int y = rand() % col;
while (1) {
if (board[x][y] == ' ') {
board[x][y] = '#';
break;
}
}
}
8.判斷輸贏:
在走到這一步了,首先要分析判斷輸贏的條件:
這時候我們再定義一個判斷輸贏的函數(shù),返回值返回上圖:
//玩家下一次判斷輸贏
ret=is_win(board, ROW, COL);
//判斷棋盤是否滿了,滿了就是平局
int is_full(char board[ROW][COL], int row, int col) {
int i = 0;
int j = 0;
for (i = 0; i< row; i++) {
for (j = 0; j< col; j++) {
if (board[i][j] == ' ') {
return 0;
}
}
}
return 1;
}
//判斷輸贏的函數(shù)
char is_win(char board[ROW][COL], int row, int col) {
int i = 0;
//判斷行是否相等
for (i = 0; i< row; i++) {
if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][0] != ' ') {
//因為條件滿足三個都為同樣的字符,隨便返回哪一個
return board[i][0];
}
}
//判斷列是否相等
for (i = 0; i< col; i++) {
if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[0][i] != ' ') {
return board[0][i];
}
}
//判斷兩個對角線是否相等
if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[1][1] != ' ') {
return board[1][1];
}
if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] != ' ') {
return board[1][1];
}
//是否平局
int ret = 0;
if (ret = is_full(board,row,col) == 1) {
return 'Q';
}
//游戲繼續(xù)
return 'C';
}
最后我們將這些函數(shù)放在while循環(huán)中,讓玩家一直下棋,直到游戲勝利或者平局或者游戲失敗:
//while循環(huán)讓玩家一直下棋
while (1) {
player_move(board, ROW, COL);
print_board(board, ROW, COL);
//玩家下一次判斷輸贏
ret=is_win(board, ROW, COL);
if (ret != 'C') { //如果等于C,一直往下走,否則跳出循環(huán)判斷誰贏了
break;
}
//電腦下棋
computer_move(board, ROW, COL);
print_board(board, ROW, COL);
//電腦下一次判斷輸贏
if (ret != 'C') {
break;
}
}
if (ret == '#') {
printf("電腦贏了哇哈哈哈哈,玩家你真菜\n");
}
else if (ret == '*') {
printf("可以啊你贏了,靚仔\(zhòng)n");
}
else if (ret == 'Q') {
printf("平局了沒意思\n");
}
}
自此,整個三子棋的實現(xiàn)就完成了,另外重申的是,在game.h頭文件中,聲明了這些函數(shù),在其他文件直接包含頭文件即可/
#pragma once
#include#include#include//聲明行和列,便于以后修改,改該頭文件數(shù)據(jù)就可以了
#define ROW 3
#define COL 3
//頭文件聲明函數(shù)
//初始化棋盤
void init_board(char board[ROW][COL], int row, int col);
//打印棋盤
void print_board(char board[ROW][COL], int row, int col);
//玩家下棋的函數(shù)
void player_move(char board[ROW][COL], int row, int col);
//電腦下棋的函數(shù)
void computer_move(char board[ROW][COL], int row, int col);
//判斷輸贏的條件
char is_win(char board[ROW][COL], int row, int col);
最后來看看三子棋最終的實現(xiàn)效果:
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧
名稱欄目:三子棋的實現(xiàn)——C語言-創(chuàng)新互聯(lián)
網(wǎng)頁鏈接:http://muchs.cn/article12/csgidc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、網(wǎng)頁設(shè)計公司、建站公司、商城網(wǎng)站、服務(wù)器托管、網(wǎng)站設(shè)計公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容