最近2018中文字幕在日韩欧美国产成人片_国产日韩精品一区二区在线_在线观看成年美女黄网色视频_国产精品一区三区五区_国产精彩刺激乱对白_看黄色黄大色黄片免费_人人超碰自拍cao_国产高清av在线_亚洲精品电影av_日韩美女尤物视频网站

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
C語(yǔ)言實(shí)現(xiàn)三子棋(超詳解版本)-創(chuàng)新互聯(lián)

🚀write in front🚀
📝個(gè)人主頁(yè):認(rèn)真寫博客的夏目淺石.
🎁歡迎各位→點(diǎn)贊👍 + 收藏?? + 留言📝?
📣系列專欄:鵬哥帶我學(xué)c帶我飛
💬總結(jié):希望你看完之后,能對(duì)你有所幫助,不足請(qǐng)指正!共同學(xué)習(xí)交流 🖊
??不如沉默去做,看結(jié)局怎么去說(shuō) ?
在這里插入圖片描述

創(chuàng)新互聯(lián)公司是專業(yè)的濱海新區(qū)網(wǎng)站建設(shè)公司,濱海新區(qū)接單;提供成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作,網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行濱海新區(qū)網(wǎng)站開發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!

文章目錄
  • 一、🌸問題描述
  • 二、🌷基本流程
  • 三、🌺具體步驟
    • 1.🎐創(chuàng)建test.c, game.h 源文件和game.h頭文件
    • 2.🎐寫出主函數(shù)和創(chuàng)建菜單
    • 3.🎐搭建游戲邏輯
    • 4.🎐game函數(shù)的初步實(shí)現(xiàn)
    • 5.🎐game函數(shù)的進(jìn)一步實(shí)現(xiàn)玩家下棋
    • 6.🎐game函數(shù)的再進(jìn)一步實(shí)現(xiàn)電腦下棋
    • 7.🎐對(duì)于三子棋游戲規(guī)則的思考
    • 8.🎐對(duì)于三子棋游戲的最終實(shí)現(xiàn)
  • 四、🌻玩法演示
  • 五、🍀源代碼
  • 🦋總結(jié)

一、🌸問題描述

用c語(yǔ)言實(shí)現(xiàn)三子棋游戲
在這里插入圖片描述

二、🌷基本流程

1.菜單界面選擇開始或者退出游戲。
2.創(chuàng)建棋盤并初始化。
3.打印棋盤。
4.玩家落子(玩家輸入行列坐標(biāo)的方式來(lái)落子),'*’表示玩家落子。
5.判定勝負(fù)關(guān)系(輸,贏,和棋),‘Q’表示和棋。
6.電腦落子(隨機(jī)位置落子) ,’#’表示電腦落子。
7.判定勝負(fù)關(guān)系

三、🌺具體步驟 1.🎐創(chuàng)建test.c, game.h 源文件和game.h頭文件

這樣做的目的是為了讓我的實(shí)現(xiàn)更加簡(jiǎn)單和簡(jiǎn)介,思路更加清晰,方便初學(xué)者學(xué)習(xí)。

2.🎐寫出主函數(shù)和創(chuàng)建菜單
void menu()
{printf("***********************\n");
	printf("******* 1. play *******\n");
	printf("******* 0. eixt *******\n");
	printf("***********************\n");
}
void test()
{menu();
}
int main()
{test();
	return 0;
}
3.🎐搭建游戲邏輯

這里顯然就是打印完菜單要開始游戲,所以我應(yīng)該搭建出來(lái)我的游戲邏輯。

void test()
{int input;
	do
	{menu();
		printf("請(qǐng)選擇:>");
		scanf("%d",&input);
		switch(input)
		{	case 1: game();
				break;
			case 0: printf("退出游戲"); 
				break;
			default: printf("選擇錯(cuò)誤:>");
				break;
		}
	}while(input);
}

輸入1我要繼續(xù)游戲,輸入0我就退出我的游戲,其他的就是不符合所以從新輸入。
下一步那就是要實(shí)現(xiàn)game函數(shù)內(nèi)容來(lái)豐富我的游戲。

4.🎐game函數(shù)的初步實(shí)現(xiàn)

game函數(shù)需要先實(shí)現(xiàn)什么呢?
當(dāng)然是我們的棋盤需要被初始化啦,然后就是打印我的棋盤對(duì)吧?

void game()
{char board[ROW][COL];
	//初始化我的棋盤 
	init_board(board,ROW,COL);
	//打印我的棋盤
	print_board(board,ROW,COL);
}

1.初始化我的棋盤:

void init_board(char borad[ROW][COL],int row,int col)
{for(int i=0;iint j=0;
		for(j=0;j	borad[i][j] = ' ';
		}
	}
}

2.打印我的棋盤:

簡(jiǎn)陋版本:

void print_board(char board[ROW][COL], int row, int col)
{int i = 0;
	for (i = 0; i< row; i++)
	{printf(" %c | %c | %c \n", board[i][0], board[i][1], board[i][2]);
		if(i

美化版本:
美化版本好處就是更加便于我對(duì)于代碼的操作和改動(dòng)。

void print_board(char board[ROW][COL],int row,int col)
{int i=0;
	for(i=0;iint j=0;
		for(j=0;j	printf(" %c ",board[i][j]);
			if(j!=col-1)
				printf("|"); 
		}
		printf("\n");
		if(i	for(j=0;j		printf("---");
				if(j!=col-1)
					printf("|");
			}
			printf("\n");
		}
	}
}
5.🎐game函數(shù)的進(jìn)一步實(shí)現(xiàn)玩家下棋
void game()
{char board[ROW][COL];
	//初始化我的棋盤 
	init_board(board,ROW,COL);
	//打印我的棋盤
	print_board(board,ROW,COL);
	while(1)
	{player_move(board,ROW,COL);//我下完棋之后就要再次打印我的棋盤然后反復(fù)操作
		print_board(board,ROW,COL);
	}	
}

player_move的實(shí)現(xiàn):

void player_move(char board[ROW][COL],int row,int col)
{printf("玩家下棋\n");
	while(1)
	{printf("請(qǐng)輸入要下棋得坐標(biāo):>");
		int x,y;
		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;
			}
			else
			{		printf("該坐標(biāo)被占用,請(qǐng)重新輸入\n");
			}
		}
		else
		{	printf("坐標(biāo)非法\n");
		}
	}
}

在這里插入圖片描述
所以就是對(duì)于我的x,y,坐標(biāo),看輸入是否合法,不合法就需要我去重新輸入,然后還需要思考是否我選擇的坐標(biāo)被占用了,如果沒有就下去這個(gè)子然后跳出,否則繼續(xù)?。。?/p>6.🎐game函數(shù)的再進(jìn)一步實(shí)現(xiàn)電腦下棋

void game()
{//存放玩家或者電腦的落子情況
	char board[ROW][COL];
	char ret = 0;
	//初始化一下棋盤為全空格
	init_board(board, ROW, COL);
	print_board(board, ROW, COL);

	while (1)
	{player_move(board, ROW, COL);
		print_board(board, ROW, COL);
		
		computer_move(board, ROW, COL);
		print_board(board, ROW, COL);
	}
}

computer_move函數(shù)的實(shí)現(xiàn)代碼:
這里用到了一個(gè)rand函數(shù)是生成隨機(jī)數(shù)的一個(gè)函數(shù),大家可以去msdn查找學(xué)習(xí)。

void computer_move(char board[ROW][COL], int row, int col)
{printf("電腦下棋:\n");
	while (1)
	{int x = rand() % row;
		int y = rand() % col;

		if (board[x][y] == ' ')
		{	board[x][y] = '#';
			break;
		}
	}
}
7.🎐對(duì)于三子棋游戲規(guī)則的思考

其實(shí)思考內(nèi)容就是我出現(xiàn)結(jié)局的情況,這里有幾種方案:

判斷輸贏
判斷輸贏的代碼要告訴我:電腦贏了?玩家贏了?玩家贏?游戲繼續(xù)?
電腦贏:#
玩家贏:*
平局:Q
游戲繼續(xù):C

思考了這些其實(shí)就可以繼續(xù)去完善我們的代碼了。

8.🎐對(duì)于三子棋游戲的最終實(shí)現(xiàn)
void game()
{//存放玩家或者電腦的落子情況
	char board[ROW][COL];
	char ret = 0;
	//初始化一下棋盤為全空格
	init_board(board, ROW, COL);
	print_board(board, ROW, COL);

	while (1)
	{player_move(board, ROW, COL);
		print_board(board, ROW, COL);
		//判斷輸贏
		ret = is_win(board,ROW, COL);
		if (ret != 'C')
		{	break;
		}
		computer_move(board, ROW, COL);
		print_board(board, ROW, COL);
		//判斷輸贏
		ret = is_win(board, ROW, COL);
		if (ret != 'C')
		{	break;
		}
	}
	if (ret == '#')
		printf("電腦贏了\n");
	else if (ret == '*')
		printf("玩家贏了\n");
	else if (ret == 'Q')
		printf("平局\n");
}

is_full以及我的is_win函數(shù)的實(shí)現(xiàn)

//我希望is_full這個(gè)函數(shù)只是為了支持is_win函數(shù)的,只是在is_win函數(shù)內(nèi)部使用
//那我們就沒必要在頭文件中聲明
// 
//判斷棋盤是否滿了
static 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;
}

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];
		}
	}
	//對(duì)角線
	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];
	}

	//平局?
	if (is_full(board, row, col) == 1)
	{return 'Q';
	}

	//繼續(xù)
	//沒有玩家或者電腦贏,也沒有平局,游戲繼續(xù)
	return 'C';
}
四、🌻玩法演示

玩家贏:
在這里插入圖片描述
電腦贏:
在這里插入圖片描述

五、🍀源代碼
#include#include#include#define ROW 3
#define COL 3
void menu()
{printf("***********************\n");
	printf("******* 1. play *******\n");
	printf("******* 0. eixt *******\n");
	printf("***********************\n");
}

void init_board(char borad[ROW][COL],int row,int col)
{for(int i=0;iint j=0;
		for(j=0;j	borad[i][j] = ' ';
		}
	}
}


void print_board(char board[ROW][COL],int row,int col)
{int i=0;
	for(i=0;iint j=0;
		for(j=0;j	printf(" %c ",board[i][j]);
			if(j!=col-1)
				printf("|"); 
		}
		printf("\n");
		if(i	for(j=0;j		printf("---");
				if(j!=col-1)
					printf("|");
			}
			printf("\n");
		}
	}
}
void player_move(char board[ROW][COL],int row,int col)
{printf("玩家下棋\n");
	while(1)
	{printf("請(qǐng)輸入要下棋得坐標(biāo):>");
		int x,y;
		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;
			}
			else
			{		printf("該坐標(biāo)被占用,請(qǐng)重新輸入\n");
			}
		}
		else
		{	printf("坐標(biāo)非法\n");
		}
	}
}

void computer_move(char board[ROW][COL], int row, int col)
{printf("電腦下棋:\n");
	while (1)
	{int x = rand() % row;
		int y = rand() % col;

		if (board[x][y] == ' ')
		{	board[x][y] = '#';
			break;
		}
	}
}

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;
}

char is_win(char board[ROW][COL],int row,int col)
{int i=0;
	//判斷三行
	for(i=0;iif(board[i][0]==board[i][1]&&board[i][1]==board[i][2]&&board[i][0]!=' ')
			return board[i][0];
	}
	//判斷三列
	for(i=0;iif (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[0][i] != ' ')
			return board[0][i];
	}
	//對(duì)角線
	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];
	}
	//平局?
	if (is_full(board, row, col) == 1)
	{return 'Q';
	}
	
	//繼續(xù)
	//沒有玩家或者電腦贏,也沒有平局,游戲繼續(xù)
	return 'C';
}

void game()
{char board[ROW][COL];
	char ret=0;
	//初始化我的棋盤 
	init_board(board,ROW,COL);
	//打印我的棋盤
	print_board(board,ROW,COL);
	
	while(1)
	{player_move(board,ROW,COL);
		print_board(board,ROW,COL);
		ret=is_win(board,ROW,COL);
		if(ret!='C')
		{	break;
		}
		computer_move(board,ROW,COL);
		print_board(board,ROW,COL);
		ret=is_win(board,ROW,COL);
		if(ret!='C')
		{	break;
		}
	}
	if(ret=='#')
	 	printf("電腦贏了\n");
	else if(ret=='*')
		printf("玩家贏了\n");
	else if(ret=='Q')
		printf("平局\n");
}
//判斷輸贏
//判斷輸贏的代碼要告訴我:電腦贏了?玩家贏了?玩家贏?游戲繼續(xù)?
//電腦贏:#
//玩家贏:*
//平局:Q
//游戲繼續(xù):C
void test()
{int input;
	do
	{menu();
		printf("請(qǐng)選擇:>");
		scanf("%d",&input);
		switch(input)
		{	case 1: game();
				break;
			case 0: printf("退出游戲"); 
				break;
			default: printf("選擇錯(cuò)誤:>");
				break;
		}
	}while(input);
}
int main()
{test();
	return 0;
}
🦋總結(jié)

三子棋游戲:

1.三子棋實(shí)現(xiàn),先去想邏輯和游戲規(guī)則,然后搭建這些邏輯框架,最后寫出代碼去實(shí)現(xiàn)它,逐步思考和代碼推進(jìn)。
2.多去想怎么可以優(yōu)化我的代碼,這樣才會(huì)使得自己進(jìn)步。

個(gè)人對(duì)于近期學(xué)習(xí)感想:

1.學(xué)習(xí)一定要穩(wěn)重,不能圖快而使得自己學(xué)的不夠精,最后基礎(chǔ)不牢,又從頭開始學(xué)習(xí)。
2.認(rèn)準(zhǔn)一個(gè)老師,就踏踏實(shí)實(shí)跟著學(xué)就行,多去做老師反復(fù)強(qiáng)調(diào)你需要做的,少說(shuō)便會(huì)得到答案
3.堅(jiān)持不斷地學(xué)習(xí)和規(guī)律的作息其實(shí)這樣的學(xué)習(xí)效果真的非常好,希望你我都不是三分熱度,堅(jiān)持自己的學(xué)習(xí)計(jì)劃,慢慢去做吧,加油!

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧


網(wǎng)站名稱:C語(yǔ)言實(shí)現(xiàn)三子棋(超詳解版本)-創(chuàng)新互聯(lián)
文章位置:http://fisionsoft.com.cn/article/dodoie.html