欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

利用C語言實現(xiàn)n字棋游戲

 更新時間:2022年05月14日 08:56:43   作者:愛彈吉他的小奔同學  
本文將利用C語言編寫一個n字棋游戲,和井字棋一樣,不過這個游戲你可以自定義棋盤的大小。文中的示例代碼講解詳細,感興趣的小伙伴可以嘗試一下

前言

這里就簡單發(fā)一個n字棋游戲,和井字棋一樣,不過這個游戲你可以自定義棋盤的大小。

井字棋是3×3大小,滿足三個平齊就獲得勝利。

小奔寫的這個游戲,你可以自定義為10×10大小,滿足6個平齊就獲得勝利,都是可以隨便定義的。

如果感興趣的話就可以來嘗試一下,或許你可以找到一些bug

(至于為什么說它是“人工智障”呢?因為它是隨機下的,并不會去針對你,它很有自己的想法,不過有一次小奔測試的時候,沒有注意到,就被它反殺了……)

思路

  • 用#define定義的標識符常量來確定n字棋的大小和n字棋獲勝的條件
  • 打印一個開始面板
  • 選擇是否開始游戲
  • 開始游戲
  • 根據(jù)#define定義的標識符常量來創(chuàng)建二維數(shù)組
  • 把二維數(shù)組初始化為空格
  • 打印一個n字棋的面板
  • 游戲者輸入坐標
  • 判斷游戲者輸入的坐標是否已輸入,已輸入就重新輸入
  • 未輸入的話,把O記錄到數(shù)組里選擇的坐標上
  • 判斷游戲者是否獲得勝利,勝利結束游戲
  • 判斷是否填滿了表格,填滿就平局
  • 電腦根據(jù)隨機值輸入坐標
  • 判斷電腦輸入的坐標是否已輸入,已輸入就重新輸入
  • 未輸入的話,把X記錄到數(shù)組里選擇的坐標上
  • 判斷電腦是否獲得勝利,勝利結束游戲
  • 判斷是否填滿了表格,填滿就平局
  • 回到步驟7,不斷循環(huán),直到某方獲勝或者平局
  • 結束后輸入1重新開始游戲,輸入0結束游戲

你看懂了嗎?

效果圖

這里的自定義的是10×10大小的,勝利條件是大于等于5,游戲方使用的是大寫O

開始的界面

棋盤的樣子

隨機打的坐標

獲得勝利

結束程序

怎么樣,感覺還不錯吧,還不快去支持一下小奔

代碼

創(chuàng)建了兩個.c文件test.c和game.c,一個頭文件game.h

test.c

#define _CRT_SECURE_NO_WARNINGS
#include"game.h"

int main()
{
	int num = 1;
	
	srand((unsigned int)time(NULL));
	
  do
  {
		if (num == 1)
		{
			//打印一個開始面板
			playboard();
		}

		printf("輸入1則進行游戲,輸入0則結束程序\n");

		//輸入選擇
		num = choose();

		//通過輸入的選擇來判斷是否進行游戲
	switch (num)
	{
		case 1://開始游戲
		{

			do
			{
				playgame();
				num = 0;

				printf("是否重新開始游戲,重新開始輸入1,結束游戲輸入0:>");
				scanf("%d", &num);
				if (num == 1)
					;
				else if (num == 0)
					break;
				else
					printf("輸入錯誤,");
			} while (1);
			break;
		}
		case 0:
		{
			printf("結束程序\n");
			break;
		}
		default:
		{
			printf("\n輸入錯誤,未能識別你的選擇,請重新輸入\n\n");
			break;
		}
	}
		//判斷是否跳出循環(huán)
		if (num == 0)
			break;

  } while (1);

	return 0;
}

game.c

#define _CRT_SECURE_NO_WARNINGS

#include<stdio.h>

#define WID 10
#define NID 10
#define SIC 5

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

}

int choose()
{
	int num = 0;

	printf("請輸入你的選擇:>");
	scanf("%d", &num);

	return num;

}

void space(char arr[WID][NID], int x, int y)
{
	int i = 0;
	for (i = 0; i < x; i++)
	{
		int j = 0;
		for (j = 0; j < y; j++)
		{
			arr[i][j] = ' ';

		}
	}
}

board(char arr[WID][NID],int x,int y)
{
	int i = 0;
	int j = 0;
	printf("\n-");

	for (i = 0; i < x; i++)
	{
		printf("----");
	}
	printf("-\n");

	printf("0");
	for (i = 1; i <= x; i++)
	{
		printf("  %d ", i);

	}
	printf("\n");

	printf("-");

	for (i = 0; i < x; i++)
	{
		printf("----");
	}
	printf("-\n");

	for (i = 0; i < x; i++)
	{
		int k = 0;
		printf("%d", i+1);
		for (j = 0; j < y; j++)
		{
			printf("|");
			printf(" %c ", arr[i][j]);
		}
		printf("|\n");

		printf("-");

		for (k = 0; k < x; k++)
		{
			printf("----");
		}
		printf("-\n");


	}

}

void axis(int* x,int* y)
{
	scanf("%d %d", &*x, &*y);
	*x=(*x) - 1;
	*y=(*y) - 1;
}

void sure(char arr[WID][NID],int x,int y,char c)
{
	arr[x][y] = c;

}

void human_machine(int* x, int* y)
{
	*x = rand() % WID;
	*y = rand() % NID;
}

int judge(char arr[WID][NID],int x,int y)
{
	if (arr[x][y] == ' ')
		return 0;
	else
		return 1;

}

int judgesure(char arr[WID][NID], int x, int y,char siz)
{
	int count = 0;
	
		int i = 0;
		for (i = 1; i <= y; i++)
		{
				if (arr[x][y - i] == siz)
					count++;
				else
					break;
		}
		for (i = 1; i <= NID-y-1; i++)
		{
			if (arr[x][y + i] == siz)
				count++;
			else
				break;
		}
		if (count >= SIC - 1)
			return 1;

		count = 0;

		for (i = 1; i <= x; i++)
		{
			if (arr[x-i][y] == siz)
				count++;
			else
				break;
		}
		for (i = 1; i <= NID - x-1; i++)
		{
			if (arr[x+i][y ] == siz)
				count++;
			else
				break;
		}

		if (count >= SIC - 1)
			return 1;

		count = 0;

		if (WID >= NID)
		{

		
			for (i = 1; i <= y; i++)
			{
				if (arr[x - i][y - i] == siz)
					count++;
				else
					break;
			}
		
			for (i = 1; i <= NID - y - 1; i++)
			{
				if (arr[x + i][y + i] == siz)
					count++;
				else
					break;
			}


			if (count >= SIC - 1)
				return 1;

			count = 0;

			for (i = 1; i <= y; i++)
			{
				if (arr[x + i][y - i] == siz)
					count++;
				else
					break;
			}

			for (i = 1; i <= NID - y - 1; i++)
			{
				if (arr[x - i][y + i] == siz)
					count++;
				else
					break;
			}

			if (count >= SIC - 1)
				return 1;

			count = 0;
		}

		if (WID <= NID)
		{
			for (i = 1; i <= x; i++)
			{
				if (arr[x - i][y - i] == siz)
					count++;
				else
					break;
			}
	
			for (i = 1; i <= NID - x; i++)
			{
				if (arr[x + i][y + i] == siz)
					count++;
				else
					break;
			}
			//}

			if (count >= SIC - 1)
				return 1;

			count = 0;

			for (i = 1; i <= x; i++)
			{
				if (arr[x + i][y - i] == siz)
					count++;
				else
					break;
			}

			for (i = 1; i <= NID - x; i++)
			{
				if (arr[x - i][y + i] == siz)
					count++;
				else
					break;
			}

			if (count >= SIC - 1)
				return 1;

		}
			return 0;
}

int judgefill(char arr[WID][NID])
{
	int count = 0;
	int i = 0;
	int j = 0;
	for (i = 0; i < WID; i++)
	{
		int j = 0;
		for (j = 0; j < NID; j++)
		{
			if (arr[i][j] != ' ')
				count++;
		}

	}
	return WID*NID-count;
}


void playgame()
{
	//建立一個二維數(shù)組
	char arr[WID][NID];

	//把數(shù)組初始化為空格 
	space(arr,WID,NID);

	int over = 0;
	int i = 0;
	int count = 0;

	int X = 0;
	int Y = 0;
	int* P1 = &X;
	int* P2 = &Y;

	do
	{
		//打印一個n字棋的面板
		board(arr, WID, NID);

		do
		{
			printf("輸入你選擇的坐標:>");

			//游戲者輸入坐標
			axis(P1, P2);

			//判斷游戲者輸入的坐標是否已輸入,已輸入返回1,未輸入返回0
			int z = judge(arr, X, Y);

			if (z == 1)
				printf("此位置已輸入,請重新");
			else
				break;
			//printf("%d %d", X, Y);
		} while (1);

		//把O記錄坐標到數(shù)組上
		sure(arr, X, Y, 'O');

		//判斷是否獲得勝利,勝利就返回1,沒有勝利就返回0
		over = judgesure(arr, X, Y, 'O');

		if (over == 1)
		{
			printf("你獲得勝利\n");
			board(arr, WID, NID);

			break;
		}

		//判斷是否填滿了表格
		if (judgefill(arr) == 0)
		{
			printf("平局");
			break;
		}
		
		do
		{
			//電腦輸入坐標
			human_machine(P1, P2);

			//判斷電腦輸入的坐標是否已輸入,已輸入返回1,未輸入返回0
			int z = judge(arr, X, Y);

			if (z == 0)
			{
				//把X記錄坐標到數(shù)組上
				sure(arr, X, Y, 'X');
				//結束循環(huán)
				break;
			}

		} while (1);

		//判斷電腦是否獲得勝利,勝利就返回1,沒有勝利就返回0
		over = judgesure(arr, X, Y, 'X');

		if (over == 1)
		{
			printf("電腦獲得勝利\n");
			board(arr, WID, NID);

			break;
		}

		//判斷是否填滿了表格
		if (judgefill(arr) == 0)
		{
			printf("平局\n");
			break;
		}

	} while (1);

}

game.h

#pragma once

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

//打印一個開始面板
playboard();

//輸入選擇
choose();

//游戲主體
playgame();

//把數(shù)組初始化為空格 
space(arr, WID, NID);

//打印一個三子棋的面板
board(arr, WID, NID);

//游戲者輸入坐標
axis(P1, P2);

//記錄坐標到數(shù)組上
sure(X, Y);

以上就是利用C語言實現(xiàn)n字棋游戲的詳細內容,更多關于C語言n字棋的資料請關注腳本之家其它相關文章!

相關文章

  • VC自定義消息響應函數(shù)postmessage用法示例

    VC自定義消息響應函數(shù)postmessage用法示例

    這篇文章主要介紹了VC自定義消息響應函數(shù)postmessage用法示例,并對比說明了postmessage與sendmessage的用法區(qū)別,需要的朋友可以參考下
    2014-10-10
  • c語言float類型小數(shù)點后位數(shù)

    c語言float類型小數(shù)點后位數(shù)

    在本篇文章里小編給大家整理了關于c語言float類型小數(shù)點后面有幾位的相關知識點,需要的朋友們可以學習下。
    2020-02-02
  • C++ list-map鏈表與映射表的簡單使用

    C++ list-map鏈表與映射表的簡單使用

    本文主要介紹了C++ list-map鏈表與映射表的簡單使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-05-05
  • C語言實現(xiàn)簡單學生成績管理系統(tǒng)項目

    C語言實現(xiàn)簡單學生成績管理系統(tǒng)項目

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)簡單學生成績管理系統(tǒng)項目,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • C語言 sizeof 函數(shù)詳情

    C語言 sizeof 函數(shù)詳情

    這篇文章主要介紹了C語言 sizeof 函數(shù),在 C 語言中,char 字符串也是一種非常重要的數(shù)據(jù)類型,我們除了使用 sizeof 函數(shù)獲取字符串長度之外,使用 sizeof 函數(shù)同樣也可以完成字符串長度的獲取,下面文章內容具體描述該內容,需要的朋友可以參考以下
    2021-10-10
  • C++實例講解四種類型轉換的使用

    C++實例講解四種類型轉換的使用

    在C++語言中新增了四個關鍵字static_cast、const_cast、reinterpret_cast和dynamic_cast。這四個關鍵字都是用于類型轉換的,類型轉換(type cast),是高級語言的一個基本語法。它被實現(xiàn)為一個特殊的運算符,以小括號內加上類型名來表示,接下來讓我們一起來詳細了解
    2022-06-06
  • C++基于EasyX框架實現(xiàn)飛機大戰(zhàn)小游戲

    C++基于EasyX框架實現(xiàn)飛機大戰(zhàn)小游戲

    EasyX是針對C/C++的圖形庫,可以幫助使用C/C++語言的程序員快速上手圖形和游戲編程。本文將利用EasyX框架實現(xiàn)飛機大戰(zhàn)小游戲,需要的可以參考一下
    2023-01-01
  • C語言常見的文件操作函數(shù)

    C語言常見的文件操作函數(shù)

    這篇文章主要為大家介紹了C語言文件操作函數(shù),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • 在Visual Studio中配置C++最新版netCDF庫的方法

    在Visual Studio中配置C++最新版netCDF庫的方法

    本文介紹在Windows電腦的Visual Studio軟件中,配置C++ 語言最新版netCDF庫的方法,文中通過圖文結合的形式介紹的非常詳細,具有一定的參考價值,需要的朋友可以參考下
    2024-03-03
  • C語言實現(xiàn)打印數(shù)組以及打印注意事項說明

    C語言實現(xiàn)打印數(shù)組以及打印注意事項說明

    這篇文章主要介紹了C語言實現(xiàn)打印數(shù)組以及打印注意事項說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01

最新評論