久久久精品一区ed2k-女人被男人叉到高潮的视频-中文字幕乱码一区久久麻豆樱花-俄罗斯熟妇真实视频

【C語(yǔ)言】實(shí)現(xiàn)三字棋-創(chuàng)新互聯(lián)

大家好,最近一直在學(xué)習(xí)C語(yǔ)言的相關(guān)知識(shí),今天分享的是C語(yǔ)言中的三子棋代碼與思路

成都創(chuàng)新互聯(lián)是一家專注于成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站、成都外貿(mào)網(wǎng)站建設(shè)公司與策劃設(shè)計(jì),延平網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)10年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:延平等地區(qū)。延平做網(wǎng)站價(jià)格咨詢:13518219792

首先分為頭文件game.h 和game.c與test.c三個(gè)文件??

目錄

1、菜單界面

2、玩家選擇游戲界面

3、初始化三子棋棋盤

4、打印棋盤

5、玩家下棋

6、電腦下棋

7、判斷輸贏 已經(jīng)平局的函數(shù)

判斷棋盤是否滿的函數(shù)

在test.c中的game函數(shù)中調(diào)用

整體程序?qū)崿F(xiàn)

test.c??

game.c

game.h


1、菜單界面

void menu()
{


	printf("*****************************\n");
	printf("*****************************\n");
	printf("*******1、play    ***********\n");
	printf("*******0、exit    ***********\n");
	printf("*****************************\n");
	printf("*****************************\n");
	printf("*****************************\n");


}
2、玩家選擇游戲界面

玩家輸入0/1進(jìn)入游戲? 調(diào)用菜單界面? 選擇1調(diào)用game函數(shù)開始游戲? ?選擇0退出游戲

int main()
{

	int input = 0;
	srand((unsigned int)time(NULL));  //記得包含兩個(gè)頭文件
	do
	{
		menu();  //先是打印菜單
		printf("請(qǐng)選擇:");
		scanf("%d", &input);
		switch (input)
		{
			case 1:
				game();
				break;
			case 0:
				printf("退出游戲\n");
				break;
			default:
				printf("輸入錯(cuò)誤,請(qǐng)重新輸入!\n");
				break;
		}

	} while (input);

	return 0;
}
3、初始化三子棋棋盤
void initboard(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] = ' ';  //這是字符  不是字符串?。。?!
		}
	}
}

初始化二維數(shù)組? ?這里將遍歷的行、列數(shù)組全部用字符‘ ’(字符空格)初始化

4、打印棋盤
void display(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");

		}

	}

}

這里將三子棋“井”字框架搭建起來

5、玩家下棋
void player_move(char board[ROW][COL], int row, int col)  //玩家下棋
{
	
	int x = 0;
	int y = 0;
	while (1)
	{
		printf("玩家下棋:\n");
		scanf("%d %d", &x, &y);
		if (x >= 1 && x<= row && y >= 1 && y<= col)
		{
			if (board[x - 1][y - 1] == ' ')    //因?yàn)橥婕沂撬?開始的  數(shù)組的坐標(biāo)是從0開始的 所以必須減1
			{
				board[x - 1][y - 1] = '*';
				break;
			}
			else
			{
				printf("坐標(biāo)已滿,請(qǐng)重新輸入!");
			}
		}
		else
		{
			printf("輸入的坐標(biāo)非法,請(qǐng)重新輸入");
		}
	}
	

}

這里輸入坐標(biāo),將‘? ’位置換成‘*’ 并加入判斷語(yǔ)句 ,如果輸入的坐標(biāo)不符合條件范圍則坐標(biāo)非法,如果輸入的坐標(biāo)沒有‘ ’,則說明此坐標(biāo)已經(jīng)被占用。

6、電腦下棋
#include#includevoid computer_move(char board[ROW][COL], int row, int col)  //電腦下棋
{
	int x = 0;
	int y = 0;
	printf("電腦下棋:\n");
	while (1)
	{
		x = rand() % row; //  0~2 隨機(jī)數(shù)
		y = rand() % col; //  0~2 隨機(jī)數(shù)
		if (board[x ][y ] == ' ')   //0~2的隨機(jī)數(shù) 這時(shí)坐標(biāo)就不能在減1
		{
			board[x][y] = '#';
			break;
		}
	}


}

電腦下棋需要生成隨機(jī)的坐標(biāo)? 這里用到隨機(jī)函數(shù),這樣對(duì)行、列取模? 得到的是0~2的隨機(jī)數(shù),在坐標(biāo)中while循環(huán)填入? ,填入后退出循環(huán)。

7、判斷輸贏 已經(jīng)平局的函數(shù)
int iswin(char board[ROW][COL], int row, int col)   //判斷輸贏
{
	int i = 0;
	int j = 0;
	for (i = 0; i< row; i++)  
	{
		if (board[i][0] == board[i][1]&& board[i][1] == board[i][2] && board[i][2 ]!= ' ')//判斷行
		{
			return board[i][0];    //這里返回i行的幾列都行 結(jié)果都是相同的
		}
	}

	for (j = 0; j< col; j++)  
	{
		if (board[0][j] == board[1][j] && board[1][j] == board[2][j] && board[2][j] != ' ')//判斷列
		{
			return board[0][j];    //這里返回j列的幾行都行 結(jié)果都是相同的
		}
	}

	if (board[0][0] == board[1][1]&& board[1][1 ]== board[2][2] && board[2][2] != ' ')    //判斷對(duì)角線
	{
		return board[0][0];
	}
	if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[2][0] != ' ')
	{
		return board[2][0];
	}

	if (isfull(board, ROW, COL) == 1)   //如果滿了 用Q表示
	{
		return 'Q';
	}
	
	return 'C';       //沒滿 繼續(xù) 用C表示
	
}

此函數(shù)通過判斷行、判斷列、判斷對(duì)角線是否相等且不等于‘ ’,來判斷是否滿足獲勝條件 如果滿足則返回結(jié)果? ‘*’說明玩家贏? ‘#’說明電腦贏? 返回‘Q’說明棋盤已滿 說明是平局? 如果以上條件都沒滿足則返回‘C’,游戲繼續(xù) 玩家與電腦繼續(xù)輸入

判斷棋盤是否滿的函數(shù)
static int isfull(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;   //返回0說明沒滿  返回1說明滿了
			}
		}
	}
	return 1;
}

此函數(shù)用來判斷棋盤是否滿? 如果有‘ ’說明沒滿返回0? ?不滿足說明滿了 返回1? ?同時(shí)此函數(shù)加入static說明在頭文件和test.c中都可以不出現(xiàn) 只用在iswin函數(shù)內(nèi)部就行

以上就是游戲的基本邏輯了

在test.c中的game函數(shù)中調(diào)用
void game()
{
	char ret = '0';//初始化字符ret
	char board[ROW][COL] = { 0 };
	initboard(board, ROW, COL);   //初始化棋盤
	display(board, ROW, COL);     //打印棋盤 
	while (1)
	{
		player_move(board, ROW, COL);//玩家下棋
		display(board, ROW, COL);     //打印棋盤 
	    ret = iswin(board, ROW, COL); //輸贏結(jié)果判斷
		if (ret != 'C')   //如果不繼續(xù) 要不棋盤滿了 要不電腦或者玩家贏了 退出循環(huán)
		{
			break;
		}
		computer_move(board, ROW, COL);//電腦下棋
		display(board, ROW, COL);     //打印棋盤 
		ret = iswin(board, ROW, COL); //輸贏結(jié)果判斷
		if (ret != 'C')   //如果不繼續(xù) 要不棋盤滿了 要不電腦或者玩家贏了 退出循環(huán)
		{
			break;
		}

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


}
整體程序?qū)崿F(xiàn) test.c??
#define _CRT_SECURE_NO_WARNINGS 1

#include"game.h"

void menu()
{


	printf("*****************************\n");
	printf("*****************************\n");
	printf("*******1、play    ***********\n");
	printf("*******0、exit    ***********\n");
	printf("*****************************\n");
	printf("*****************************\n");
	printf("*****************************\n");


}

void game()
{
	char ret = '0';//初始化字符ret
	char board[ROW][COL] = { 0 };
	initboard(board, ROW, COL);   //初始化棋盤
	display(board, ROW, COL);     //打印棋盤 
	while (1)
	{
		player_move(board, ROW, COL);//玩家下棋
		display(board, ROW, COL);     //打印棋盤 
	    ret = iswin(board, ROW, COL); //輸贏結(jié)果判斷
		if (ret != 'C')   //如果不繼續(xù) 要不棋盤滿了 要不電腦或者玩家贏了 退出循環(huán)
		{
			break;
		}
		computer_move(board, ROW, COL);//電腦下棋
		display(board, ROW, COL);     //打印棋盤 
		ret = iswin(board, ROW, COL); //輸贏結(jié)果判斷
		if (ret != 'C')   //如果不繼續(xù) 要不棋盤滿了 要不電腦或者玩家贏了 退出循環(huán)
		{
			break;
		}

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


}


int main()
{

	int input = 0;
	srand((unsigned int)time(NULL));  //記得包含兩個(gè)頭文件
	do
	{
		menu();  //先是打印菜單
		printf("請(qǐng)選擇:");
		scanf("%d", &input);
		switch (input)
		{
			case 1:
				game();
				break;
			case 0:
				printf("退出游戲\n");
				break;
			default:
				printf("輸入錯(cuò)誤,請(qǐng)重新輸入!\n");
				break;
		}

	} while (input);

	return 0;
}
game.c
#define _CRT_SECURE_NO_WARNINGS 1


#include"game.h"


void initboard(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 display(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)  //玩家下棋
{
	
	int x = 0;
	int y = 0;
	while (1)
	{
		printf("玩家下棋:\n");
		scanf("%d %d", &x, &y);
		if (x >= 1 && x<= row && y >= 1 && y<= col)
		{
			if (board[x - 1][y - 1] == ' ')    //因?yàn)橥婕沂撬?開始的  數(shù)組的坐標(biāo)是從0開始的 所以必須減1
			{
				board[x - 1][y - 1] = '*';
				break;
			}
			else
			{
				printf("坐標(biāo)已滿,請(qǐng)重新輸入!");
			}
		}
		else
		{
			printf("輸入的坐標(biāo)非法,請(qǐng)重新輸入");
		}
	}
	

}

void computer_move(char board[ROW][COL], int row, int col)  //電腦下棋
{
	int x = 0;
	int y = 0;
	printf("電腦下棋:\n");
	while (1)
	{
		x = rand() % row; //  0~2 隨機(jī)數(shù)
		y = rand() % col; //  0~2 隨機(jī)數(shù)
		if (board[x ][y ] == ' ')   //0~2的隨機(jī)數(shù) 這時(shí)坐標(biāo)就不能在減1
		{
			board[x][y] = '#';
			break;
		}
	}


}

//封裝一個(gè)棋盤滿的函數(shù)  并且不給頭文件用  前面加上static
static int isfull(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;   //返回0說明沒滿  返回1說明滿了
			}
		}
	}
	return 1;
}
int iswin(char board[ROW][COL], int row, int col)   //判斷輸贏
{
	int i = 0;
	int j = 0;
	for (i = 0; i< row; i++)  
	{
		if (board[i][0] == board[i][1]&& board[i][1] == board[i][2] && board[i][2 ]!= ' ')//判斷行
		{
			return board[i][0];    //這里返回i行的幾列都行 結(jié)果都是相同的
		}
	}

	for (j = 0; j< col; j++)  
	{
		if (board[0][j] == board[1][j] && board[1][j] == board[2][j] && board[2][j] != ' ')//判斷列
		{
			return board[0][j];    //這里返回j列的幾行都行 結(jié)果都是相同的
		}
	}

	if (board[0][0] == board[1][1]&& board[1][1 ]== board[2][2] && board[2][2] != ' ')    //判斷對(duì)角線
	{
		return board[0][0];
	}
	if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[2][0] != ' ')
	{
		return board[2][0];
	}

	if (isfull(board, ROW, COL) == 1)   //如果滿了 用Q表示
	{
		return 'Q';
	}
	
	return 'C';       //沒滿 繼續(xù) 用C表示
	
}
game.h
#pragma once


#include#include#include#define ROW 3
#define COL 3

void initboard(char board[ROW][COL], int row, int col);        //初始化棋盤

void display(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);//電腦下棋

int iswin(char board[ROW][COL], int row, int col);       //輸贏結(jié)果

頭文件主要包括函數(shù)的聲明和庫(kù)函數(shù)頭文件

以上就是實(shí)現(xiàn)三字棋的全部代碼

你是否還在尋找穩(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)查看詳情吧

分享題目:【C語(yǔ)言】實(shí)現(xiàn)三字棋-創(chuàng)新互聯(lián)
轉(zhuǎn)載來于:http://sd-ha.com/article40/jjeeo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作、網(wǎng)站制作企業(yè)建站、Google域名注冊(cè)、企業(yè)網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運(yùn)營(yíng)