最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言工程文件該如何寫(以三子棋游戲為例)

 更新時間:2023年09月26日 10:46:23   作者:Chris·Bosh  
工程上寫代碼應分為多個文件,那么你知道C語言工程文件該如何寫嗎,本文就以以三子棋游戲為例,介紹一下,具有一定的參考價值,感興趣的可以了解一下

1.工程上(作為程序員應如何寫代碼)

1.1 新手如何寫代碼

我們知道在進行C語言文件的編寫時,我們通常只在一個文件中進行,從頭寫到尾

如下圖所示

這種方式寫代碼適用于初學者,實際上在程序員的工作中并不這樣寫代碼,這樣既不利于員工之間的合作,也不利于將代碼作為產品進行出售。

1.2 程序員如何寫代碼

工程上寫代碼應分為多個文件,如:

主文件.c           自定義函數(shù).c            頭文件.h        具體如下圖所示

此圖為三子棋游戲的代碼

我們可以看到圖中分為三部分,首先主函數(shù)部分game.c   其次是自定義函數(shù)部分 game_my_function.c 以及頭文件部分game.h

為什么要分開,而不像一開始學的那樣在一起寫呢?①多人協(xié)作,在工作中我們要面對的是一個龐大的工程,每個人要負責各自的模塊,如果放在一個.c文件中,那么只有等一個人寫完自己的部分,下一個人才能開始工作,這顯然不符合工作常理。分開寫能夠提高工作效率,在各個模塊完成之后組合起來即可。

②代碼保護,在程序員寫完自己的自定義函數(shù)而不想讓別人知道自己是如何寫的,便可以將自己寫的自定函數(shù)編譯成一個庫文件,這樣別人再打開庫文件時就是一堆亂碼。這是,只需要將頭文件提供給別人,別人依然可以使用此代碼。下圖所示為轉為庫文件的方法。可以看到庫文件為亂碼。

 2.三子棋游戲代碼示例

我們先列出一個思維導圖,分析這個程序需要什么,有哪些情況,這樣我們才會很好地完成這個程序哦

1.菜單界面選擇開始游戲或者退出游戲。
2.創(chuàng)建棋盤并初始化。
3.打印棋盤。
4.玩家落子(玩家輸入行列坐標的方式來落子),'*’表示玩家落子。
5.電腦落子(隨機位置落子) ,'#’表示電腦落子。
6.判定勝負關系(輸,贏,平局(棋盤滿了))。
7.判定勝負關系。
8.如未結束,回到 步驟2 繼續(xù)執(zhí)行。

2.1 打印菜單

void menu()
{
	printf("---------------------------------------------------\n");
	printf("---------------------------------------------------\n");
	printf("---------------    1.開始游戲    ------------------\n");
	printf("---------------    2.退出游戲    ------------------\n");
	printf("---------------------------------------------------\n");
	printf("---------------------------------------------------\n");
}

2.2 創(chuàng)建棋盤并初始化。+2.3打印棋盤

void star_arr(char arr[Line][Column], int line, int column)
{
	int i = 0;
	int j = 0;
	for (i = 0; i < line; i++)
	{
		for (j = 0; j < column; j++)
		{
			arr[i][j] = ' ';
		}
	}
}
void Display_arr(char arr[Line][Column], int line, int column)
{
	int i = 0;
	int j = 0;
	for (i = 0; i < line; i++)
	{
		int j = 0;
		for(j=0;j<column;j++)
		{ 
			printf(" %c ", arr[i][j]);
			if (j < column - 1)
				printf("|");
		} 
		printf("\n");//走三輪,占3行
		if (i < line - 1)
		{
			int j = 0;
			for (j = 0; j < column; j++)
			{
				printf("---");
				if (j < column - 1)
					printf("|");
			}
		}
		printf("\n");//走兩輪,最后i=2時,不進入,一共5行
	}
}

2.4玩家落子(玩家輸入行列坐標的方式來落子),'*’表示玩家落子。

void player(char arr[Line][Column], int line, int column)
{
	int x = 0;
	int y = 0;
	while (1)
	{
		printf("玩家請下棋\n");
		printf("請輸入下棋的坐標:");
		scanf("%d %d", &x, &y);
		if (x > 0 && x <= line && y>0 && y <= column)
		{
			if (arr[x - 1][y - 1] == ' ')
			{
				arr[x - 1][y - 1] = '*';
				break;
			}
			else
			{
				printf("該位置已有棋,請選擇其他位置\n");
			}
		}
		else
		{
			printf("輸入坐標不合理,請重新輸入\n");
		}
	}
}

2.5電腦落子(隨機位置落子) ,'$’表示電腦落子。

void computer(char arr[Line][Column], int line, int column)
{
	printf("電腦已下棋:\n");
	int x = 0;
	int y = 0;
	while (1)
	{
		x = rand() % line;
		y = rand() % column;
		if (arr[x][y] == ' ')
		{
			arr[x][y] = '$';
			break;
		}
	}
}

2.6判定勝負關系(輸,贏,平局(棋盤滿了))

//玩家贏  *
	//電腦贏  $
	//平局    O
	//繼續(xù)    C
	char why_win(char arr[Line][Column], int line, int column)
	{
		int i = 0;
		for (i = 0; i < line; i++)
		{
			if (arr[i][0] == arr[i][1] && arr[i][1] == arr[i][2] && arr[i][0] != ' ')
			{
				return arr[i][0];
			}
		}
		for (i = 0; i < column; i++)
		{
			if (arr[0][i] == arr[1][i] && arr[1][i] == arr[2][i] && arr[2][i] != ' ')
			{
				return arr[2][i];
			}
		}
		if (arr[0][0] == arr[1][1] && arr[1][1] == arr[2][2] && arr[0][0] != ' ')
		{
			return arr[0][0];
		}
		if (arr[0][2] == arr[1][1] && arr[1][1] == arr[2][0] && arr[1][1] != ' ')
		{
			return arr[1][1];
		}
		 if (chess_full(arr, line, column))
		{
			return 'O';
		}
		return 'C';
	}

以上為思路牽引,完整代碼如下,分為三個部分

1.頭文件

#pragma once
#include <stdio.h>
#define Line 3
#define Column 3
void star_arr(char arr[Line][Column],int line,int column);
void Display_arr(char arr[Line][Column], int line, int column);
void player(char arr[Line][Column], int line, int column);
void computer(char arr[Line][Column], int line, int column);
#include <time.h>
#include <stdlib.h>
char why_win(char arr[Line][Column], int line, int column);
int  chess_full(char arr[Line][Column], int line, int column);

2.自定義函數(shù)文件

#define _CRT_SECURE_NO_WARNINGS 1
#include "game.h"
void star_arr(char arr[Line][Column], int line, int column)
{
	int i = 0;
	int j = 0;
	for (i = 0; i < line; i++)
	{
		for (j = 0; j < column; j++)
		{
			arr[i][j] = ' ';
		}
	}
}
void Display_arr(char arr[Line][Column], int line, int column)
{
	int i = 0;
	int j = 0;
	for (i = 0; i < line; i++)
	{
		int j = 0;
		for(j=0;j<column;j++)
		{ 
			printf(" %c ", arr[i][j]);
			if (j < column - 1)
				printf("|");
		} 
		printf("\n");//走三輪,占3行
		if (i < line - 1)
		{
			int j = 0;
			for (j = 0; j < column; j++)
			{
				printf("---");
				if (j < column - 1)
					printf("|");
			}
		}
		printf("\n");//走兩輪,最后i=2時,不進入,一共5行
	}
}
void player(char arr[Line][Column], int line, int column)
{
	int x = 0;
	int y = 0;
	while (1)
	{
		printf("玩家請下棋\n");
		printf("請輸入下棋的坐標:");
		scanf("%d %d", &x, &y);
		if (x > 0 && x <= line && y>0 && y <= column)
		{
			if (arr[x - 1][y - 1] == ' ')
			{
				arr[x - 1][y - 1] = '*';
				break;
			}
			else
			{
				printf("該位置已有棋,請選擇其他位置\n");
			}
		}
		else
		{
			printf("輸入坐標不合理,請重新輸入\n");
		}
	}
}
void computer(char arr[Line][Column], int line, int column)
{
	printf("電腦已下棋:\n");
	int x = 0;
	int y = 0;
	while (1)
	{
		x = rand() % line;
		y = rand() % column;
		if (arr[x][y] == ' ')
		{
			arr[x][y] = '$';
			break;
		}
	}
}
int  chess_full(char arr[Line][Column], int line, int column)
{
	int i = 0;
	int j = 0;
	for (i = 0; i < line; i++)
	{
		for (j = 0; j < column; j++)
		{
			if (arr[i][j] == ' ')
				return 0;
		}
	}
	return 1;
}
	//玩家贏  *
	//電腦贏  $
	//平局    O
	//繼續(xù)    C
	char why_win(char arr[Line][Column], int line, int column)
	{
		int i = 0;
		for (i = 0; i < line; i++)
		{
			if (arr[i][0] == arr[i][1] && arr[i][1] == arr[i][2] && arr[i][0] != ' ')
			{
				return arr[i][0];
			}
		}
		for (i = 0; i < column; i++)
		{
			if (arr[0][i] == arr[1][i] && arr[1][i] == arr[2][i] && arr[2][i] != ' ')
			{
				return arr[2][i];
			}
		}
		if (arr[0][0] == arr[1][1] && arr[1][1] == arr[2][2] && arr[0][0] != ' ')
		{
			return arr[0][0];
		}
		if (arr[0][2] == arr[1][1] && arr[1][1] == arr[2][0] && arr[1][1] != ' ')
		{
			return arr[1][1];
		}
		 if (chess_full(arr, line, column))
		{
			return 'O';
		}
		return 'C';
	}

3.主函數(shù)文件

#define _CRT_SECURE_NO_WARNINGS 1
#include "game.h"
void menu()
{
	printf("---------------------------------------------------\n");
	printf("---------------------------------------------------\n");
	printf("---------------    1.開始游戲    ------------------\n");
	printf("---------------    2.退出游戲    ------------------\n");
	printf("---------------------------------------------------\n");
	printf("---------------------------------------------------\n");
}
void game()
{
	char ret = 0;
	char arr[Line][Column];
	star_arr(arr, Line, Column);
	Display_arr(arr, Line, Column);
	while ( 1 )
	{
		player(arr, Line, Column);
		Display_arr(arr, Line, Column);
		ret=why_win (arr, Line, Column);
		if (ret != 'C')
		{
			break;
		}
		computer(arr, Line, Column);
		Display_arr(arr, Line, Column);
		ret = why_win(arr, Line, Column);
		if (ret != 'C')
		{
			break;
		}
	}
	if (ret == '*')
	{
		printf("恭喜你戰(zhàn)勝了電腦\n");
	}
	else if (ret == '$')
	{
		printf("很遺憾你輸給了電腦\n");
	}
	else if (ret == 'O')
	{
		printf("游戲平局\n");
	}
}
int main()
{
	int input = 0;
	srand((unsigned int)time(NULL));
	do
	{
		menu();
		scanf("%d", &input);
		switch(input)
		{
		case 1:
			printf("請準備好,游戲即將開始\n");
			game();
			break;
		case 2:
			printf("已退出游戲\n");
			input = 0;
			break;
		default:
			printf("輸入錯誤,請重新輸入\n");
		}
	}	while (input);
	return 0;
}

只需將以上三個文件代碼組合在一個工程即可進行三子棋游戲,同時也希望學習者們這樣寫代碼,為以后成為打工人做鋪墊。

到此這篇關于C語言工程文件該如何寫(以三子棋游戲為例)的文章就介紹到這了,更多相關C語言工程文件內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • C++命名空間5種常見用法實例解析

    C++命名空間5種常見用法實例解析

    這篇文章主要介紹了C++命名空間5種常見用法實例解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-06-06
  • C++之初識多態(tài)(Visual Studio 2019)的使用

    C++之初識多態(tài)(Visual Studio 2019)的使用

    文章主要解釋了C++中的多態(tài)概念、實現(xiàn)細節(jié)及一些相關特性,如虛函數(shù)、override和final關鍵字、純虛函數(shù)和抽象類,通過代碼示例展示了多態(tài)原理,包括虛函數(shù)表和動態(tài)綁定的概念,并探討了多繼承下虛函數(shù)表的行為
    2026-04-04
  • C/C++并查集的查詢與合并實現(xiàn)原理

    C/C++并查集的查詢與合并實現(xiàn)原理

    這篇文章主要介紹了C/C++并查集的查詢與合并,并查集是一種用來管理元素分組情況的數(shù)據結構。并查集可以高效地進行如下操作
    2023-02-02
  • C語言之單向鏈表詳解及實例代碼

    C語言之單向鏈表詳解及實例代碼

    這篇文章主要介紹了C語言之單向鏈表的相關資料,及實例代碼,幫助大家學習參考,,需要的朋友可以參考下
    2016-09-09
  • c語言中abs()和fabs()的區(qū)別點整理

    c語言中abs()和fabs()的區(qū)別點整理

    在本篇文章里小編給大家分享的是關于c語言abs()和fabs()的區(qū)別,有需要的朋友們可以參考學習下。
    2020-02-02
  • 結構體類型數(shù)據作為函數(shù)參數(shù)(三種方法)

    結構體類型數(shù)據作為函數(shù)參數(shù)(三種方法)

    將一個結構體中變量中的數(shù)據傳遞給另一個函數(shù),有以下三種方法。需要的朋友可以過來參考下,希望對大家有所幫助
    2013-10-10
  • VSCODE+cmake配置C++開發(fā)環(huán)境的實現(xiàn)步驟

    VSCODE+cmake配置C++開發(fā)環(huán)境的實現(xiàn)步驟

    這篇文章主要介紹了VSCODE+cmake配置C++開發(fā)環(huán)境的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03
  • C++工廠方法之對象創(chuàng)建型模式詳解

    C++工廠方法之對象創(chuàng)建型模式詳解

    這篇文章主要為大家詳細介紹了C++對象創(chuàng)建型模式,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • C語言實現(xiàn)flappy bird游戲

    C語言實現(xiàn)flappy bird游戲

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)flappy bird小游戲,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • C語言?struct結構體超詳細講解

    C語言?struct結構體超詳細講解

    C語言中,結構體類型屬于一種構造類型(其他的構造類型還有:數(shù)組類型,聯(lián)合類型),下面這篇文章主要給大家介紹了關于C語言結構體(struct)的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-04-04

最新評論

嘉义市| 彩票| 安庆市| 伊川县| 鱼台县| 高平市| 宿州市| 甘谷县| 宣汉县| 福州市| 竹北市| 宿松县| 宁安市| 新昌县| 壤塘县| 涞源县| 宝坻区| 定远县| 桂平市| 张家川| 黎川县| 潮安县| 通海县| 锦州市| 大厂| 西丰县| 阜新市| 湾仔区| 八宿县| 略阳县| 镇雄县| 武川县| 梓潼县| 宜春市| 宁津县| 乾安县| 唐河县| 高淳县| 遵义市| 松滋市| 扎鲁特旗|