bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

【C語言】實現三字棋-創新互聯

大家好,最近一直在學習C語言的相關知識,今天分享的是C語言中的三子棋代碼與思路

成都創新互聯是一家專注于成都網站設計、做網站、成都外貿網站建設公司與策劃設計,延平網站建設哪家好?成都創新互聯做網站,專注于網站建設10年,網設計領域的專業建站公司;建站業務涵蓋:延平等地區。延平做網站價格咨詢:13518219792

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

目錄

1、菜單界面

2、玩家選擇游戲界面

3、初始化三子棋棋盤

4、打印棋盤

5、玩家下棋

6、電腦下棋

7、判斷輸贏 已經平局的函數

判斷棋盤是否滿的函數

在test.c中的game函數中調用

整體程序實現

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進入游戲? 調用菜單界面? 選擇1調用game函數開始游戲? ?選擇0退出游戲

int main()
{

	int input = 0;
	srand((unsigned int)time(NULL));  //記得包含兩個頭文件
	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] = ' ';  //這是字符  不是字符串!!!!
		}
	}
}

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

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] == ' ')    //因為玩家是送1開始的  數組的坐標是從0開始的 所以必須減1
			{
				board[x - 1][y - 1] = '*';
				break;
			}
			else
			{
				printf("坐標已滿,請重新輸入!");
			}
		}
		else
		{
			printf("輸入的坐標非法,請重新輸入");
		}
	}
	

}

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

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 隨機數
		y = rand() % col; //  0~2 隨機數
		if (board[x ][y ] == ' ')   //0~2的隨機數 這時坐標就不能在減1
		{
			board[x][y] = '#';
			break;
		}
	}


}

電腦下棋需要生成隨機的坐標? 這里用到隨機函數,這樣對行、列取模? 得到的是0~2的隨機數,在坐標中while循環填入? ,填入后退出循環。

7、判斷輸贏 已經平局的函數
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行的幾列都行 結果都是相同的
		}
	}

	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列的幾行都行 結果都是相同的
		}
	}

	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';       //沒滿 繼續 用C表示
	
}

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

判斷棋盤是否滿的函數
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;
}

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

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

在test.c中的game函數中調用
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); //輸贏結果判斷
		if (ret != 'C')   //如果不繼續 要不棋盤滿了 要不電腦或者玩家贏了 退出循環
		{
			break;
		}
		computer_move(board, ROW, COL);//電腦下棋
		display(board, ROW, COL);     //打印棋盤 
		ret = iswin(board, ROW, COL); //輸贏結果判斷
		if (ret != 'C')   //如果不繼續 要不棋盤滿了 要不電腦或者玩家贏了 退出循環
		{
			break;
		}

	}
	if (ret == '*')
	{
		printf("玩家獲勝!\n");
	}
	else if (ret == '#')
	{
		printf("電腦獲勝!\n");
	}
	else if (ret == 'Q')
	{
		printf("平局!\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); //輸贏結果判斷
		if (ret != 'C')   //如果不繼續 要不棋盤滿了 要不電腦或者玩家贏了 退出循環
		{
			break;
		}
		computer_move(board, ROW, COL);//電腦下棋
		display(board, ROW, COL);     //打印棋盤 
		ret = iswin(board, ROW, COL); //輸贏結果判斷
		if (ret != 'C')   //如果不繼續 要不棋盤滿了 要不電腦或者玩家贏了 退出循環
		{
			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));  //記得包含兩個頭文件
	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] == ' ')    //因為玩家是送1開始的  數組的坐標是從0開始的 所以必須減1
			{
				board[x - 1][y - 1] = '*';
				break;
			}
			else
			{
				printf("坐標已滿,請重新輸入!");
			}
		}
		else
		{
			printf("輸入的坐標非法,請重新輸入");
		}
	}
	

}

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 隨機數
		y = rand() % col; //  0~2 隨機數
		if (board[x ][y ] == ' ')   //0~2的隨機數 這時坐標就不能在減1
		{
			board[x][y] = '#';
			break;
		}
	}


}

//封裝一個棋盤滿的函數  并且不給頭文件用  前面加上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行的幾列都行 結果都是相同的
		}
	}

	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列的幾行都行 結果都是相同的
		}
	}

	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';       //沒滿 繼續 用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);       //輸贏結果

頭文件主要包括函數的聲明和庫函數頭文件

以上就是實現三字棋的全部代碼

你是否還在尋找穩定的海外服務器提供商?創新互聯www.cdcxhl.cn海外機房具備T級流量清洗系統配攻擊溯源,準確流量調度確保服務器高可用性,企業級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧

分享題目:【C語言】實現三字棋-創新互聯
轉載來于:http://vcdvsql.cn/article40/jjeeo.html

成都網站建設公司_創新互聯,為您提供品牌網站制作網站制作企業建站Google域名注冊企業網站制作

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

網站托管運營