国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

C語言三子棋小游戲

這篇具有很好參考價值的文章主要介紹了C語言三子棋小游戲。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

哈嘍,大家好,今天我們要利用之前所學(xué)習(xí)的C語言知識來寫一個三子棋小游戲。

目錄

1.游戲

2.函數(shù)部分

2.1.菜單

2.2.初始化棋盤

2.3.打印棋盤

2.4.玩家下棋

2.5.電腦下棋

2.6.判斷輸贏

2.7.判斷棋盤是否已滿

3.完整代碼展示


1.游戲

今天我們寫的代碼分為三個文件來寫,分別是:

game.h 用來放函數(shù)的聲明

game.c 用來放函數(shù)的定義

test.c 游戲的主體文件

大概介紹:

進(jìn)入游戲,首先定義棋盤,對棋盤進(jìn)行初始化。然后就是進(jìn)入下棋的過程了,玩家是先手,玩家和電腦要不斷重復(fù)地下棋,所以要在循環(huán)體內(nèi)進(jìn)行,玩家下棋,電腦下棋,判斷輸贏,和打印棋盤都是用函數(shù)來完成的

void game()
{
	char board[ROW][COL];
	InitBoard(board, ROW, COL);
	//打印棋盤
	DisPlayBoard(board, ROW, COL);
	//下棋
	
	char ret = 0;
	while(1)
	{
		//玩家下棋
		PlayerMove(board, ROW, COL);
		//打印棋盤
		DisPlayBoard(board, ROW, COL);
		//判斷輸贏
		ret=IsWin(board, ROW, COL);
		if (ret != 'C')
		{
			break;
		}

		//電腦下棋
		ComputeMove(board, ROW, COL);
		//打印棋盤
		DisPlayBoard(board, ROW, COL);
		//判斷輸贏
		ret=IsWin(board, ROW, COL);
		if (ret != 'C')
		{
			break;
		}

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

?下面開始我們的學(xué)習(xí)吧:

2.函數(shù)部分

下面要介紹的是函數(shù)部分,因為游戲的代碼比較長,將某些功能封裝成函數(shù),可以減少代碼的重復(fù)量。

//菜單
void menu();
//游戲
void game();
//初始化棋盤
void InitBoard(char board[ROW][COL], int row, int col);
//打印棋盤
void DisPlayBoard(char board[ROW][COL], int row, int col);
//玩家下棋
void PlayerMove(char board[ROW][COL], int row, int col);
//電腦下棋
void ComputeMove(char board[ROW][COL], int row, int col);
//判斷輸贏
char IsWin(char board[ROW][COL], int row, int col);
//判斷棋盤是否滿了
int IsFull(char board[ROW][COL], int row, int col);

2.1.菜單

菜單的實現(xiàn)很簡單,用戶輸入1開始游戲,輸入0退出游戲

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

2.2.初始化棋盤

初始化棋盤就是在游戲開始之前將棋盤數(shù)組初始化為空格

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] = ' ';
		}
	}
}

2.3.打印棋盤

打印棋盤的過程是比較麻煩的,下圖是棋盤的效果展示圖:

C語言三子棋小游戲

?在一個3*3的棋盤中,我們不僅要打印棋盤的數(shù)線,也要打印棋盤的橫線,還要考慮棋子位置等問題。

void DisPlayBoard(char board[ROW][COL], int row, int col)
{
	int i = 0, j = 0;
	for (i = 0; i < row; i++)
	{
		//打印數(shù)據(jù)
		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");
		}
	}
}

2.4.玩家下棋

玩家下棋的時候,需要判斷輸入的坐標(biāo)是否合法,如果不合法,就需要重復(fù)輸入。我們用‘*’來表示玩家下的棋子,用‘#’表示電腦下的棋子。

void PlayerMove(char board[ROW][COL], int row, int col)
{
	int x = 0, y = 0;
	printf("玩家下棋:->\n");
	
	while(1)
	{
		printf("請輸入下棋坐標(biāo),中間使用空格->");
		scanf("%d %d", &x, &y);
		if (x >= 1 && x <= row && y >= 1 && y <= col)
		{
			if (board[x - 1][y - 1] == ' ')//可以落子
			{
				board[x - 1][y - 1] = '*';
				break;
			}
			else//不能落子
			{
				printf("坐標(biāo)被占用,不能落子,重新輸入>\n");
			}
		}
		else
		{
			printf("坐標(biāo)非法,重新輸入\n");
		} 
	}
}

2.5.電腦下棋

電腦下棋,需要是電腦產(chǎn)生2個隨機(jī)數(shù),如何是電腦產(chǎn)生的隨機(jī)數(shù)在棋盤的大小之內(nèi)呢?

我們可以使電腦產(chǎn)生的隨機(jī)數(shù)對行和列相除取余,如果產(chǎn)生的隨機(jī)數(shù)不合法,就需要讓電腦重復(fù)產(chǎn)生新的隨機(jī)數(shù),直到坐標(biāo)合法

C語言三子棋小游戲

void ComputeMove(char board[ROW][COL], int row, int col)
{
	int x = 0, y = 0;
	printf("電腦下棋:>\n");

	while(1)
	{
		x = rand() % row;
		y = rand() % col;
		if (board[x][y] == ' ')
		{
			board[x][y] = '#';
			break;
		}
	}
}

2.6.判斷輸贏

判斷輸贏不僅要判斷每一行,每一列,還要判斷每一列

我們規(guī)定:

玩家贏 返回 '*'
電腦贏 返回 '#'
平局 返回 'Q'
繼續(xù) 返回 'C'

這樣當(dāng)一方贏了后我們直接返回贏的一方的某個棋子即可

char IsWin(char board[ROW][COL], int row, int col)
{
	//贏
	//行
	int i = 0;
	for (i = 0; i < row; i++)
	{
		if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][0] != ' ')
		{
			return board[i][1];
		}
	}
	//列
	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[0][0] != ' ')
	{
		return board[0][0];
	}
	if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[0][2] != ' ')
	{
		return board[0][2];
	}
	//平局
	if (IsFull(board, ROW, COL)==1)
	{
		return 'Q';
	}
	//繼續(xù)
	return 'C';
}

2.7.判斷棋盤是否已滿

在每下完一步棋子后,都需要判斷棋盤是否已滿,滿了的話游戲肯定是不能繼續(xù)下去的

int IsFull(char board[ROW][COL], int row, int col)
{
	int i = 0, j = 0;
	for (i = 0; i < row; i++)
	{
		for (j = 0; j < col; j++)
		{
			if (board[i][j] == ' ')
				return 0;
		}
	}
	return 1;
}

3.完整代碼展示

game.h文件

#pragma once

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

#define ROW 3
#define COL 3

//菜單
void menu();
//游戲
void game();
//初始化棋盤
void InitBoard(char board[ROW][COL], int row, int col);
//打印棋盤
void DisPlayBoard(char board[ROW][COL], int row, int col);
//玩家下棋
void PlayerMove(char board[ROW][COL], int row, int col);
//電腦下棋
void ComputeMove(char board[ROW][COL], int row, int col);
//判斷輸贏
char IsWin(char board[ROW][COL], int row, int col);
//判斷棋盤是否滿了
int IsFull(char board[ROW][COL], int row, int col);

game.c文件

#include"game.h"

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

//初始化棋盤為空格
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 DisPlayBoard(char board[ROW][COL], int row, int col)
{
	int i = 0, j = 0;
	for (i = 0; i < row; i++)
	{
		//打印數(shù)據(jù)
		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 PlayerMove(char board[ROW][COL], int row, int col)
{
	int x = 0, y = 0;
	printf("玩家下棋:->\n");
	
	while(1)
	{
		printf("請輸入下棋坐標(biāo),中間使用空格->");
		scanf("%d %d", &x, &y);
		if (x >= 1 && x <= row && y >= 1 && y <= col)
		{
			if (board[x - 1][y - 1] == ' ')//可以落子
			{
				board[x - 1][y - 1] = '*';
				break;
			}
			else//不能落子
			{
				printf("坐標(biāo)被占用,不能落子,重新輸入>\n");
			}
		}
		else
		{
			printf("坐標(biāo)非法,重新輸入\n");
		} 
	}
}


void ComputeMove(char board[ROW][COL], int row, int col)
{
	int x = 0, y = 0;
	printf("電腦下棋:>\n");

	while(1)
	{
		x = rand() % row;
		y = rand() % col;
		if (board[x][y] == ' ')
		{
			board[x][y] = '#';
			break;
		}
	}
}

int IsFull(char board[ROW][COL], int row, int col)
{
	int i = 0, j = 0;
	for (i = 0; i < row; i++)
	{
		for (j = 0; j < col; j++)
		{
			if (board[i][j] == ' ')
				return 0;
		}
	}
	return 1;
}

//玩家贏-'*'
//電腦贏-'#'
//平局-'Q'
//繼續(xù)-'C'
 
char IsWin(char board[ROW][COL], int row, int col)
{
	//贏
	//行
	int i = 0;
	for (i = 0; i < row; i++)
	{
		if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][0] != ' ')
		{
			return board[i][1];
		}
	}
	//列
	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[0][0] != ' ')
	{
		return board[0][0];
	}
	if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[0][2] != ' ')
	{
		return board[0][2];
	}
	//平局
	if (IsFull(board, ROW, COL)==1)
	{
		return 'Q';
	}
	//繼續(xù)
	return 'C';
}

test.c文件

#include"game.h"

void game()
{
	char board[ROW][COL];
	InitBoard(board, ROW, COL);
	//打印棋盤
	DisPlayBoard(board, ROW, COL);
	//下棋
	
	char ret = 0;
	while(1)
	{
		//玩家下棋
		PlayerMove(board, ROW, COL);
		//打印棋盤
		DisPlayBoard(board, ROW, COL);
		//判斷輸贏
		ret=IsWin(board, ROW, COL);
		if (ret != 'C')
		{
			break;
		}

		//電腦下棋
		ComputeMove(board, ROW, COL);
		//打印棋盤
		DisPlayBoard(board, ROW, COL);
		//判斷輸贏
		ret=IsWin(board, ROW, COL);
		if (ret != 'C')
		{
			break;
		}

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

int main()
{
	int input = 0;
	srand((unsigned int)time(NULL));
	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;
}

下面是玩游戲的過程:

C語言三子棋小游戲

?哈哈,是電腦贏得了本次游戲,如果感到不過癮的話可以再來一把,哈哈哈

總結(jié):今天我們學(xué)習(xí)了三子棋小游戲,使用了多文件編程的形式,別看一個簡簡單單的小游戲,代碼實現(xiàn)起來也沒有那么容易呢,如果我寫的有什么的不好之處,請在文章下方給出你寶貴的意見。如果覺得我寫的好的話請點個贊贊和關(guān)注哦~??文章來源地址http://www.zghlxwxcb.cn/news/detail-441912.html

到了這里,關(guān)于C語言三子棋小游戲的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 基于C語言 --- 自己寫一個三子棋小游戲

    基于C語言 --- 自己寫一個三子棋小游戲

    前言: 游戲規(guī)則: (1)、在打印的數(shù)組棋盤里,輸入坐標(biāo),下棋。 (2)、坐標(biāo)格式:x(空格) y (3)、x橫坐標(biāo),y豎坐標(biāo) (4)、連成三個棋子為一線則判定勝利 如圖所示 : 采用模塊化編寫 : arr_game1.c執(zhí)行主要邏輯程序 arr_game1.h存放頭文件或函數(shù)聲明等程序 arr_main.c放主函數(shù)邏輯程

    2024年02月14日
    瀏覽(19)
  • c語言項目——三子棋小游戲(帶詳細(xì)講解解析)

    c語言項目——三子棋小游戲(帶詳細(xì)講解解析)

    三子棋是一種民間傳統(tǒng)游戲,又叫九宮棋、圈圈叉叉棋、一條龍、井字棋等。游戲分為雙方對戰(zhàn),雙方依次在9宮格棋盤上擺放棋子,率先將自己的三個棋子走成一條線就視為勝利,而對方就算輸了,但是三子棋在很多時候會出現(xiàn)和棋的局面。 兩個玩家,一個打圈(?),一個打

    2024年02月09日
    瀏覽(20)
  • C語言經(jīng)典小游戲之三子棋(超詳解釋+源碼)

    C語言經(jīng)典小游戲之三子棋(超詳解釋+源碼)

    “縱有疾風(fēng)來,人生不言棄,風(fēng)乍起,合當(dāng)奮意向此生?!?今天我們一起來學(xué)習(xí)一下三子棋小游戲用C語言怎么寫出來? 《三子棋》是一款古老的民間傳統(tǒng)游戲,又被稱為黑白棋、圈圈叉叉棋、井字棋、一條龍、九宮棋等。游戲分為雙方對戰(zhàn),雙方依次在9宮格棋盤上擺放棋子

    2024年02月14日
    瀏覽(19)
  • 趣味益智小游戲 三子棋+五子棋 優(yōu)化版(可任意選擇棋盤大?。? decoding=

    趣味益智小游戲 三子棋+五子棋 優(yōu)化版(可任意選擇棋盤大小)

    今天牛牛給大家分享的是c語言實現(xiàn)三子棋和五子棋游戲,初學(xué)者可能有些不理解的地方,記得私信提問哦,牛牛會一 一回答的。 《三子棋》是一款益智小游戲,通常是在九宮格里面玩,所以也被稱為”九宮棋“或”井字棋“。 游戲規(guī)則也極其簡單,只要三子相連即可獲勝。

    2024年01月19日
    瀏覽(23)
  • [C語言][小游戲][猜拳游戲]

    [C語言][小游戲][猜拳游戲]

    前言: 給大家演示一個簡單小游戲,真的非常詳細(xì)。 模塊化編程:把各個模塊的代碼放在不同的.c文件里,在.h文件里提供外部可調(diào)用函數(shù)的聲明,其它.c文件想使用其中的代碼時,只需要#include \\\"XXX.h\\\"文件即可。使用模塊化編程可極大的提高代碼的可閱讀性、可維護(hù)性、可移

    2024年02月15日
    瀏覽(22)
  • [C語言][小游戲][猜數(shù)游戲]

    [C語言][小游戲][猜數(shù)游戲]

    帶著夢想,帶著好奇,帶著執(zhí)著,在C語言的世界里旅行。親愛的朋友們,一起加油。 顯示玩家從鍵盤輸入的值和計算機(jī)事先準(zhǔn)備的“目標(biāo)數(shù)字”進(jìn)行比較 1)本游戲的“目標(biāo)數(shù)字”是7,用變量ans表示,從鍵盤輸入的值則用變量no表示。 2)程序通過if來判斷no和ans兩個變量值的大

    2024年02月13日
    瀏覽(22)
  • 小游戲:人生中寫的第一個小游戲——貪吃蛇(C語言)

    小游戲:人生中寫的第一個小游戲——貪吃蛇(C語言)

    ????????小編開了一個關(guān)于游戲的專欄,主要是運用easyx圖形庫進(jìn)行的。 ? ? ? ?第一章:人生中寫的第一個小游戲——貪吃蛇(C語言) ????????這個游戲的代碼我在gitee上發(fā)布了,大家如果不嫌棄,可以進(jìn)入這個網(wǎng)址進(jìn)行查看和復(fù)制:https://gitee.com/rising-sun-1。 ? ? ?

    2024年02月09日
    瀏覽(32)
  • C語言:掃雷小游戲

    C語言:掃雷小游戲

    文接上一篇博文C語言:三子棋小游戲。本篇博文是使用C語言來實現(xiàn)掃雷小游戲的。這里不對掃雷的規(guī)則進(jìn)行贅述。玩家通過鍵盤輸入坐標(biāo)來探雷。博主在實現(xiàn)掃雷之前從未看過掃雷實現(xiàn)的相關(guān)視頻,所以這里實現(xiàn)的掃雷完全是博主的原生思路,具有邏輯性。下面詳細(xì)介紹一

    2024年02月09日
    瀏覽(90)
  • C語言簡易小游戲

    C語言簡易小游戲

    本篇博客將帶領(lǐng)大家自己動手寫一下一些C語言小游戲;以增加對于C語言的興趣?????????? 首先呢我們先來簡單介紹一下這個小游戲: 通常由兩個人玩,一方出數(shù)字,一方猜。出數(shù)字的人要想好一個沒有重復(fù)數(shù)字,不能讓猜的人知道。猜的人就可以開始猜。 如正確答案為

    2024年02月07日
    瀏覽(25)
  • C語言小游戲——掃雷

    C語言小游戲——掃雷

    ????????結(jié)合前邊我們所學(xué)的C語言知識,本期我們將使用C語言實現(xiàn)一個簡單的小游戲——掃雷 目錄 前言 總體框架設(shè)計 多文件分裝程序 各功能模塊化實現(xiàn) 初始化棋盤 ?棋盤打印 埋雷 ?判贏與排雷 游戲邏輯安排 總結(jié) ????????和三子棋相同,游戲開始時不需要任何判

    2024年02月06日
    瀏覽(91)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包