成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

三子棋的實現(xiàn)-創(chuàng)新互聯(lián)

小伙伴們,大家好啊,這次我們來實現(xiàn)一個小游戲——三子棋)(井字游戲)

成都創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供曹妃甸網(wǎng)站建設(shè)、曹妃甸做網(wǎng)站、曹妃甸網(wǎng)站設(shè)計、曹妃甸網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、曹妃甸企業(yè)網(wǎng)站模板建站服務(wù),10余年曹妃甸做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。

相信大家都玩過這個,玩法呢就是兩個人輪流下“井”中的棋,直到一方三字連成線,或者棋盤占滿

接下來,跟著我的思路一起實現(xiàn)它吧!

一、主體 1、框架

首先把基本框架寫出

2、主頁 ①選擇主體

然后我們思考,游戲首先要有主頁選項,并且每次結(jié)束游戲后會返回游戲主頁,這樣我們就可以先敲出這樣的代碼

#includeint main()
{
	int input = 0;
	do
	{
		printf("請選擇:>");
		scanf("%d", &input);
		switch (input)
		{
		case 1: 
			printf("三子棋\n");
			break;
		case 0:
			printf("退出游戲\n");
			break;
		default:
			printf("選擇錯誤\n");
			break;
		}
	} while (input);
	return 0;
}
②主頁主體

主頁我們簡單設(shè)計一下

void menu()
{
	printf("******************************\n");
	printf("*********  1 . play  *********\n");
	printf("*********  0 . quit  *********\n");
	printf("******************************\n");
}

設(shè)計好自定義函數(shù)后,直接主函數(shù)引用它

#includevoid menu()
{
	printf("******************************\n");
	printf("*********  1 . play  *********\n");
	printf("*********  0 . quit  *********\n");
	printf("******************************\n");
}
int main()
{
	int input = 0;
	do
	{
		menu();
		printf("請選擇:>");
		scanf("%d", &input);
		switch (input)
		{
		case 1: 
			printf("三子棋\n");
			break;
		case 0:
			printf("退出游戲\n");
			break;
		default:
			printf("選擇錯誤\n");
			break;
		}
	} while (input);
	return 0;
}

效果大概就是這樣

主體大致就設(shè)計好了,接下來,該設(shè)計大量自定義函數(shù)了

自定義函數(shù)我們可以用多個源文件和頭文件來時間連接

在主函數(shù)直接引用頭文件“game.h”

//test.c
#include"game.h"
void menu()
{
	printf("******************************\n");
	printf("*********  1 . play  *********\n");
	printf("*********  0 . quit  *********\n");
	printf("******************************\n");
}
int main()
{
	int input = 0;
	do
	{
		menu();
		printf("請選擇:>");
		scanf("%d", &input);
		switch (input)
		{
		case 1: 
			printf("三子棋\n");
			break;
		case 0:
			printf("退出游戲\n");
			break;
		default:
			printf("選擇錯誤\n");
			break;
		}
	} while (input);
	return 0;
}
二、客體 1、聲明數(shù)組

三子棋我們可以用數(shù)組的方式來實現(xiàn),“井”字,三橫三縱,可以用二維數(shù)組

//game.h
#include#define POW 3
#define COL 3
//test.c
void game()
{
	int board[POW][COL] = { 0 };
}
2、初始化數(shù)組

三子棋下棋前,都是空白,我們可以用空格代替

//test.c
void game()
{
	int board[POW][COL] = { 0 };
	arr_init(board, POW, COL);
}
//game.c
#include"game.h"
//數(shù)組初始化
void arr_init(int board[POW][COL], int pow, int col)
{
	int i = 0;
	int j = 0;
	for (i = 0; i< pow; i++)
	{
		for (j = 0; j< col; j++)
		{
			board[i][j] = ' ';
		}
	}
}
//game.h
#pragma once
#include#define POW 3
#define COL 3

//數(shù)組初始化
void arr_init(int board[POW][COL], int pow, int col);
3、打印棋盤

棋盤是“井”狀的,它可以才分為“ |”和“---”反復(fù)打印實現(xiàn)

為了美觀,我們把數(shù)組內(nèi)容的左右分別加一個空格

//test.c
void game()
{
	int board[POW][COL] = { 0 };
	arr_init(board, POW, COL);
	chess(board, POW, COL);
}
//game.c
void chess(int board[POW][COL], int pow, int col)
{
	int i = 0;
	int j = 0;
	for (i = 0; i< pow; i++)
	{
		for (j = 0; j< col; j++)
		{
			printf(" %c ", board[i][j]);
			if (j< pow - 1)
				printf("|");
		}
		printf("\n");
		if (i< col - 1)
		{
			for (j = 0; j< col; j++)
			{
				printf("---");
				if (j< pow - 1)
					printf("|");
			}
			printf("\n");
		}
	}
}
//game.h
#pragma once
#include#define POW 3
#define COL 3

//數(shù)組初始化
void arr_init(int board[POW][COL], int pow, int col);
//棋盤
void chess(int board[POW][COL], int pow, int col);

最后的效果大概是這樣

4、下棋

接下來就是下棋了,下棋的順序大概是:玩家下棋,判斷勝負(fù),電腦下棋,判斷勝負(fù)的循環(huán)

輸入坐標(biāo)后既要判斷坐標(biāo)是否超綱也要判斷坐標(biāo)位置是否被占用

①玩家下棋
//game.c
//玩家下棋
void playmove(int board[POW][COL], int pow, int col)
{
	int x = 0;
	int y = 0;
	while (1)
	{
		printf("請輸入棋子坐標(biāo):>");
		scanf("%d%d", &x, &y);
		if (x >= 1 && x<= pow && y >= 1 && y<= col)
		{
			if (board[x - 1][y - 1] == ' ')
			{
				board[x - 1][y - 1] = '*';
				break;
			}
			else printf("該位置已占用,請重新輸入\n");
		}
		else printf("請輸入正確坐標(biāo)\n");
	}
}
②電腦下棋

電腦下棋位置是隨機的,我們可以用隨機數(shù)來實現(xiàn),而隨機數(shù)需要rand,rand需要一個時刻變化的數(shù),所以使用時間戳是個不錯的選擇

rand需要引用頭文件stdlib.h

時間戳需要引用頭文件time.h

//game.c
//電腦下棋
void computermove(int board[POW][COL], int pow, int col)
{
	int x = 0;
	int y = 0;
	printf("電腦下棋\n");
	while (1)
	{
		x = rand() % pow;
		y = rand() % col;
		if (board[x][y] == ' ')
		{
			board[x][y] = '#';
			break;
		}
	}
}
//test.c
int main()
{
	srand((unsigned int)time(NULL));
	int input = 0;
	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);
	return 0;
}
//game.h
#pragma once
#include#include#include
③判斷輸贏

既要判斷輸贏又要判斷是否平局

//game.c
//判斷輸贏
char ful(int board[POW][COL], int pow, int col)
{
	int i = 0;
//判斷三橫
	for (i = 0; i< pow; 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[0][0];
	if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] != ' ')
		return board[1][1];
	int j = 0;
	for (i = 0; i< pow; i++)
	{
		for (j = 0; j< col; j++)
		{
			if (board[i][j] == ' ')
				return 'C';
		}
	}
	return 'Q';
}

如果返回值為? *玩家贏? ? ? ? 為#電腦贏? ? ? ? 為Q平局? ? ? ? 為C繼續(xù)

再按照玩家下棋,判斷勝負(fù),電腦下棋,判斷勝負(fù)的順序進行循環(huán)

//test.c
void game()
{
	int board[POW][COL] = { 0 };
	arr_init(board, POW, COL);
	char ret;
	while (1)
	{
		chess(board, POW, COL);
		playmove(board, POW, COL);
		ret = ful(board, POW, COL);
		if (ret != 'C')
			break;
		computermove(board, POW, COL);
		ret = ful(board, POW, COL);
		if (ret != 'C')
			break;
	}
	if (ret == '*') printf("玩家勝利\n");
	else if (ret == '#')
	{
		printf("電腦勝利\n");
		chess(board, POW, COL);
	}
	else if (ret == 'Q')
	{
		printf("平局\n");
		chess(board, POW, COL);
	}
}
三、主體和客體連接
//game.h
#pragma once
#include#include#include#define POW 3
#define COL 3

//數(shù)組初始化
void arr_init(int arr[POW][COL], int pow, int col);
//棋盤
void chess(int arr[POW][COL], int pow, int col);
//玩家下棋
void playmove(int arr[POW][COL], int pow, int col);
//電腦下棋
void computermove(int arr[POW][COL], int pow, int col);
//判斷輸贏
char ful(int arr[POW][COL], int pow, int col);

四、總代碼

最后所有代碼為下

?
//game.h
#pragma once
#include#include#include#define POW 3
#define COL 3

//數(shù)組初始化
void arr_init(int arr[POW][COL], int pow, int col);
//棋盤
void chess(int arr[POW][COL], int pow, int col);
//玩家下棋
void playmove(int arr[POW][COL], int pow, int col);
//電腦下棋
void computermove(int arr[POW][COL], int pow, int col);
//判斷輸贏
char ful(int arr[POW][COL], int pow, int col);

?
//game.c
#include"game.h"
//數(shù)組初始化
void arr_init(int board[POW][COL], int pow, int col)
{
	int i = 0;
	int j = 0;
	for (i = 0; i< pow; i++)
	{
		for (j = 0; j< col; j++)
		{
			board[i][j] = ' ';
		}
	}
}
//棋盤
void chess(int board[POW][COL], int pow, int col)
{
	int i = 0;
	int j = 0;
	for (i = 0; i< pow; i++)
	{
		for (j = 0; j< col; j++)
		{
			printf(" %c ", board[i][j]);
			if (j< pow - 1)
				printf("|");
		}
		printf("\n");
		if (i< col - 1)
		{
			for (j = 0; j< col; j++)
			{
				printf("---");
				if (j< pow - 1)
					printf("|");
			}
			printf("\n");
		}
	}
}
//玩家下棋
void playmove(int board[POW][COL], int pow, int col)
{
	int x = 0;
	int y = 0;
	while (1)
	{
		printf("請輸入棋子坐標(biāo):>");
		scanf("%d%d", &x, &y);
		if (x >= 1 && x<= pow && y >= 1 && y<= col)
		{
			if (board[x - 1][y - 1] == ' ')
			{
				board[x - 1][y - 1] = '*';
				break;
			}
			else printf("該位置已占用,請重新輸入\n");
		}
		else printf("請輸入正確坐標(biāo)\n");
	}
}
//電腦下棋
void computermove(int board[POW][COL], int pow, int col)
{
	int x = 0;
	int y = 0;
	printf("電腦下棋\n");
	while (1)
	{
		x = rand() % pow;
		y = rand() % col;
		if (board[x][y] == ' ')
		{
			board[x][y] = '#';
			break;
		}
	}
}
//判斷輸贏
char ful(int board[POW][COL], int pow, int col)
{
	int i = 0;
	for (i = 0; i< pow; 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[0][0];
	if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] != ' ')
		return board[1][1];
	int j = 0;
	for (i = 0; i< pow; i++)
	{
		for (j = 0; j< col; j++)
		{
			if (board[i][j] == ' ')
				return 'C';
		}
	}
	return 'Q';
}
//test.c
#include"game.h"
void menu()
{
	printf("******************************\n");
	printf("*********  1 . play  *********\n");
	printf("*********  0 . quit  *********\n");
	printf("******************************\n");
}
void game()
{
	int board[POW][COL] = { 0 };
	arr_init(board, POW, COL);
	char ret;
	while (1)
	{
		chess(board, POW, COL);
		playmove(board, POW, COL);
		ret = ful(board, POW, COL);
		if (ret != 'C')
			break;
		computermove(board, POW, COL);
		ret = ful(board, POW, COL);
		if (ret != 'C')
			break;
	}
	if (ret == '*') printf("玩家勝利\n");
	else if (ret == '#')
	{
		printf("電腦勝利\n");
		chess(board, POW, COL);
	}
	else if (ret == 'Q')
	{
		printf("平局\n");
		chess(board, POW, COL);
	}
}
int main()
{
	srand((unsigned int)time(NULL));
	int input = 0;
	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);
	return 0;
}

以上就是三子棋的全部內(nèi)容,主要運用的是對圖形的打印,數(shù)組的運用,函數(shù)的運用,條件語句和循環(huán),感謝觀看~

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

網(wǎng)站標(biāo)題:三子棋的實現(xiàn)-創(chuàng)新互聯(lián)
鏈接URL:http://jinyejixie.com/article2/dedsic.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開發(fā)企業(yè)網(wǎng)站制作、商城網(wǎng)站、網(wǎng)站制作、域名注冊建站公司

廣告

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

成都網(wǎng)站建設(shè)公司
兴化市| 绵竹市| 博罗县| 常宁市| 青海省| 吉水县| 石门县| 来安县| 连州市| 株洲县| 江达县| 崇信县| 镇江市| 南华县| 甘泉县| 曲靖市| 清原| 盐山县| 桦甸市| 新蔡县| 兴义市| 眉山市| 宜黄县| 兰溪市| 格尔木市| 淳化县| 宜昌市| 延吉市| 龙游县| 临颍县| 卓资县| 泗水县| 剑川县| 阜城县| 平舆县| 蒙自县| 南木林县| 临沧市| 定西市| 耿马| 利津县|