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

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

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

成都創(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("請選擇:");
		scanf("%d", &input);
		switch (input)
		{
			case 1:
				game();
				break;
			case 0:
				printf("退出游戲\n");
				break;
			default:
				printf("輸入錯誤,請重新輸入!\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)已滿,請重新輸入!");
			}
		}
		else
		{
			printf("輸入的坐標(biāo)非法,請重新輸入");
		}
	}
	

}

這里輸入坐標(biāo),將‘? ’位置換成‘*’ 并加入判斷語句 ,如果輸入的坐標(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ù),這樣對行、列取模? 得到的是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] != ' ')    //判斷對角線
	{
		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ù)通過判斷行、判斷列、判斷對角線是否相等且不等于‘ ’,來判斷是否滿足獲勝條件 如果滿足則返回結(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("請選擇:");
		scanf("%d", &input);
		switch (input)
		{
			case 1:
				game();
				break;
			case 0:
				printf("退出游戲\n");
				break;
			default:
				printf("輸入錯誤,請重新輸入!\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)已滿,請重新輸入!");
			}
		}
		else
		{
			printf("輸入的坐標(biāo)非法,請重新輸入");
		}
	}
	

}

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] != ' ')    //判斷對角線
	{
		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ù)的聲明和庫函數(shù)頭文件

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

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

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

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

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎ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)營
国产精品白丝久久av| 人妻一区二区三区多毛女| 欧美精品日韩精品一区| 深夜少妇一区二区三区| 久久91精品国产亚洲| 国产原创中文av在线播放| 国产又粗又猛又爽又黄的文字| 日本人妻熟女一区二区三区| 国产精品一区欧美二区| 亚洲中文字幕人妻av| 中文字幕日韩欧美一区| 中国日韩一级黄色大片| 粉嫩内射av一区二区| 日本午夜精品视频在线观看| 一二区中文字幕在线观看| 激情爱爱一区二区三区| 日韩国产亚洲欧美激情| 日韩在线免费看中文字幕| 四季精品人妻av一区二区三区| 国产精品欧美在线观看| 欧美午夜不卡在线观看| 视频一区日韩经典中文字幕| 国产又粗又猛又大爽又黄| 国产在线一区二区三区不卡| 亚洲欧美日韩中文字幕二欧美| 欧美日韩视频中文字幕| 蜜桃传媒在线正在播放| 国产成人午夜福利片片| 亚洲天堂国产精品久久精品| 国产精品欧美激情在线| 日本高清不卡在线一区| 欧美精品一区久久精品| 日韩性生活片免费观看| 国产一区二区精品高清免费| 欧美人妻一区二区三区| 91麻豆精品欧美视频| 国产亚洲欧美另类久久久| 五月婷日韩中文字幕四虎| 久久热中文字幕在线视频| 日本和亚洲的香蕉视频| 人妻一区二区三区在线|