欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

c語言實現(xiàn)一個三子棋小游戲-創(chuàng)新互聯(lián)

在學(xué)習(xí)了數(shù)組之后,我們采用C語言來去實現(xiàn)一個三子棋小游戲,在開始游戲之前要先有一個游戲的菜單來選擇是否進入游戲,按 1?進入游戲,按 0?退出程序,按其他數(shù)字則重新進行輸入。這時我們應(yīng)該需要一個循環(huán)來進行這段邏輯操作,想到了do....while循環(huán),能夠打印菜單,并且不進入循環(huán),我們開始實現(xiàn)基本的邏輯,代碼如下

成都創(chuàng)新互聯(lián)專注于泉州企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站開發(fā),商城開發(fā)。泉州網(wǎng)站建設(shè)公司,為泉州等地區(qū)提供建站服務(wù)。全流程按需求定制設(shè)計,專業(yè)設(shè)計,全程項目跟蹤,成都創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)
#includevoid menu()
{
	printf("******************\n");
	printf("***** 1.play *****\n");
	printf("***** 0.exit *****\n");
	printf("******************\n");

}

void game()
{
	printf("開始游戲\n");
}
int main()
{
	int input = 0;
	do 
	{
		menu();
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			game();
			break;
		case 0:
			printf("退出游戲\n");
			break;
		default:
			printf("請重新輸入\n");
			break;
		}
	} while (input);
	
	return 0;
}

這時,基本的邏輯已經(jīng)實現(xiàn),當(dāng)輸入1時進入游戲,我們此時需要設(shè)計游戲的實現(xiàn)邏輯。三子棋需要3*3的方陣來進行實現(xiàn),我們可以采用二維數(shù)組來初始化方陣,最開始初始化為空格,當(dāng)玩家下棋時,輸入要下棋的坐標(biāo)來進行,隨后到電腦來下棋,電腦下棋就又遇到了我們的隨機數(shù)朋友,srang()函數(shù)和rand()函數(shù),具體用法見下方代碼

我們首先要先創(chuàng)建一個3*3的數(shù)組當(dāng)做棋盤,為了達到空白棋盤的效果,先寫一個初始化棋盤函數(shù)init_board();使用for循環(huán)來初始化棋盤中的元素為空格,代碼如下:

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] = ' ';
		}
	}
}

初始化之后我們需要看看棋盤是什么樣,打印出來看一下,再寫一個打印棋盤的print_board()函數(shù)代碼如下

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< col - 1)
				printf("|");
		}
		printf("\n");
		if (i< row - 1)
		{
			for (j = 0; j< col; j++)
			{
				printf("---");
				if (j< col - 1)
					printf("|");
			}
			printf("\n");
		}
	}

}

棋盤顯示如圖所示,為了能夠方便觀察,我們加入了一些橫線,此時棋盤就能夠正常去顯示了。這個時候就到了下棋的環(huán)節(jié)了,玩家下棋然后電腦下棋,首先玩家下棋,在玩家下棋的時候,玩家又不一定全部都了解數(shù)組下標(biāo)從0開始的規(guī)則,所以在寫程序時要考慮這個問題,首先進行行數(shù)和列數(shù)的輸入,在第一次輸入時時空白棋盤,哪都能下,如果后邊再下,是否需要判斷哪些位置已經(jīng)被占,哪些位置空白呢?代碼如下

void player_move(char board[ROW][COL], int row, int col)
{
	printf("玩家下棋\n");
	while (1)
	{
		printf("請輸入坐標(biāo)\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;
			}
			else
				printf("坐標(biāo)已經(jīng)被占用\n");
		}
		else
			printf("坐標(biāo)非法\n");
		

	}
}

采用一個while循環(huán),只有輸入正確才會停止,否則會顯示錯誤信息,讓玩家重新輸入。下面就到了電腦下棋的環(huán)節(jié),電腦下棋時要生成兩個隨機數(shù),我們需要使用srand()函數(shù)和rand()函數(shù),但產(chǎn)生的隨即數(shù)字較大,我們需要去%上行數(shù)和列數(shù),保證坐標(biāo)的合法性,這個產(chǎn)生的數(shù)字也要進行判斷,判斷位置是否允許下棋,代碼如下

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

	}
}

邏輯依舊比較簡單,但是在每一次下棋結(jié)束時,我們應(yīng)該加入一個能夠用來判斷輸贏的函數(shù),取名is_win,當(dāng)玩家贏時,返回‘ * ’,當(dāng)電腦贏時,返回‘ # ’,也存在平局的情況,我們讓程序返回? Q,如果不存在以上現(xiàn)象,讓程序返回 C ,代碼繼續(xù)往下進行。在判斷輸贏時,我們需要判斷3行,3列和兩個對角線元素是否相同,如果相同,則會返回,代碼實現(xiàn)如下

char is_win(char board[ROW][COL], int row, int col) 
{
	int i = 0;
	for (i = 0; i< row; ++i)//判斷3行
	{
		if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][0] != ' ')
		{
			return board[i][0];
		}
	}
	int j = 0;
	for (j = 0; j< col; ++j)//判斷3列
	{
		if (board[0][j] == board[1][j] && board[1][j] == board[2][j] && board[0][j] != ' ')
		{
			return board[0][j];
		}
	}
	//判斷對角線
	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';		
	}
	return 'C';
}

其中的is_full()函數(shù)用來判斷棋盤是否下滿,如果棋盤下滿并且沒有人贏則為平局,is_full()函數(shù)實現(xiàn)如下

int is_full(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++)
		{
			if (board[i][j] == ' ')
				return 0;
		}

	}
	return 1;
}

當(dāng)有空位時,返回0,否則返回1,返回1時,判斷輸贏的函數(shù)將會返回Q,程序打印出平局。到這里,基本的幾個函數(shù)已經(jīng)寫完了我們再回頭把完整的代碼寫出供大家參考主函數(shù)如下

#define _CRT_SECURE_NO_WARNINGS 1

#include#include"game.h"
#include#includevoid menu()
{
	printf("******************\n");
	printf("***** 1.play *****\n");
	printf("***** 0.exit *****\n");
	printf("******************\n");

}

void game()
{
	char board[ROW][COL] = { 0 };
	char ret = 0;
	init_board(board,ROW,COL);//初始化棋盤,使棋盤最開始都為空格
	print_board(board, ROW, COL);//打印棋盤,顯示出棋盤內(nèi)容
	while (1)
	{
		player_move(board, ROW, COL);//玩家下棋
		print_board(board, ROW, COL);//打印棋盤,顯示出棋盤內(nèi)容
		//判斷輸贏
		ret=is_win(board, ROW, COL);
		if (ret != 'C') 
		{
			break;
		}
		computer_move(board, ROW, COL);//電腦下棋
		print_board(board, ROW, COL);//打印棋盤,顯示出棋盤內(nèi)容
		ret=is_win(board, ROW, COL);
		if (ret != 'C')
		{
			break;
		}

	}
	if (ret == '*')
	{
		printf("玩家贏\n");
	}
	if (ret == '#')
	{
		printf("電腦贏\n");
	}
	if (ret == 'Q')
		printf("平局\n");


}
int main()
{
	srand((unsigned int)time(NULL));
	int input = 0;
	do 
	{
		menu();//打印菜單
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			game();
			break;
		case 0:
			printf("退出游戲\n");
			break;
		default:
			printf("請重新輸入\n");
			break;
		}
	} while (input);
	


	return 0;
}

放幾個函數(shù)的game.c內(nèi)容如下

#define _CRT_SECURE_NO_WARNINGS 1
#include"game.h"
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] = ' ';
		}
	}
}

//打印棋盤
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< col - 1)
				printf("|");
		}
		printf("\n");
		if (i< row - 1)
		{
			for (j = 0; j< col; 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("請輸入坐標(biāo)\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;
			}
			else
				printf("坐標(biāo)已經(jī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;
	for (i = 0; i< row; ++i)
	{
		int j = 0;
		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)//判斷3行
	{
		if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][0] != ' ')
		{
			return board[i][0];
		}
	}
	int j = 0;
	for (j = 0; j< col; ++j)//判斷3列
	{
		if (board[0][j] == board[1][j] && board[1][j] == board[2][j] && board[0][j] != ' ')
		{
			return board[0][j];
		}
	}
	//判斷對角線
	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';		
	}
	return 'C';
}

頭文件game.h如下

#define _CRT_SECURE_NO_WARNINGS 1

#define ROW 3
#define COL 3

void init_board(char board[ROW][COL], int row, int col);
void print_board(char board[ROW][COL], int row, int col);

void player_move(char board[ROW][COL], int row, int col);


void computer_move(char board[ROW][COL], int row, int col);

char is_win(char board[ROW][COL], int row, int col)

有了這些,一個不太復(fù)雜又具有一定可玩性的三子棋小游戲就完成了。

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

分享名稱:c語言實現(xiàn)一個三子棋小游戲-創(chuàng)新互聯(lián)
當(dāng)前路徑:http://chinadenli.net/article2/dhipoc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供域名注冊網(wǎng)站排名小程序開發(fā)企業(yè)建站網(wǎng)站維護網(wǎng)站導(dǎo)航

廣告

聲明:本網(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)

外貿(mào)網(wǎng)站建設(shè)