1. 程式人生 > >用C語言實現簡單 三子棋(井字棋)小遊戲

用C語言實現簡單 三子棋(井字棋)小遊戲

函式頭

放在標頭檔案裡

#ifndef __GAME_H__
#define __GAME_H__



#define _CRT_SECURE_NO_WARNINGS  1

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

#define ROW 3 //行為3
#define COL 3 //列為3


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 ComputerMove(char board[ROW][COL],int row,int col);//電腦出棋函式

int IsFull(char board[ROW][COL],int row,int col);//判斷棋盤是否滿棋
int IsWin(char board[ROW][COL],int row,int col);
void game();



#endif //__GAME_H__

主函式

選擇1進入遊戲函式 開始遊戲
選擇零 則退出遊戲

#define _CRT_SECURE_NO_WARNINGS  1



#include"game.h"



void mune()
{
	printf("\n\n\n█████████████████████\n");
	printf("█████     經典③子棋遊戲     ████\n");
	printf("█████████████████████\n");
	printf("███████   1.開始遊戲   ██████\n");
	printf("███████   0.退出遊戲   ██████\n");
	printf("█████████████████████\n");

}



int main()
{
	int input = 0;
	do
	{
		srand((unsigned int)time(NULL));//生成隨機數函式
		mune( );//遊戲選單函式
		printf("請輸入數字進行選擇:\n");
		scanf("%d",&input);
		switch(input)
		{
		case 1:
			game( );
			break;
		case 0:
			printf("退出遊戲!");
			break;
		default:
			printf("輸入錯誤,請重新輸入:\n");
		}
	}while(input);
	return 0;
}




遊戲函式
初始化棋盤函式————列印原始棋盤函式————電腦出棋函式—與—玩家出棋函式(迴圈呼叫每呼叫一次判斷一次輸贏)————判斷輸贏函式(中間巢狀判斷是否棋盤已滿的函式決定平局)

#define _CRT_SECURE_NO_WARNINGS  1

#include"game.h"




void game()
{
	char ret = '0';
	char board[ROW][COL] = {0};//建立二維陣列
	InitBoard(board,ROW,COL);//呼叫初始化棋盤的函式
	DisplayBoard(board,ROW,COL);//列印原始棋盤
	//下棋過程
	do
	{
		printf("▁▂▃電腦已出棋~該您出棋啦▃▂▁\n");
		ComputerMove(board,ROW,COL);//電腦出棋
		DisplayBoard(board,ROW,COL);//列印棋盤顯示電腦出的棋
		ret = IsWin(board,ROW,COL);//根據判斷輸贏函式的返回值來決定誰贏誰輸
		if(ret !=' ')               //返回空格繼續下棋返回0電腦贏,返回x玩家贏
		{                              //返回空格繼續下棋  返回p為平局
			break;
		}
		PlayerMove(board,ROW,COL);//到玩家出棋
		DisplayBoard(board,ROW,COL);//列印棋盤
		ret = IsWin(board,ROW,COL);
		if(ret !=' ')
		{
			break;
		}
	}while(ret = ' ');
//不等於空格跳出後判斷誰贏
    ret = IsWin(board,ROW,COL);
	if(ret == 'p')
	{
		printf("\n▁▂▃恭喜您和聰明的電腦打成平手啦▃▂▁\n");
	}
	else if(ret == '0')
	{
		printf("\n▁▂▃很遺憾~電腦取得了勝利▃▂▁\n");
	}
	else if(ret == 'X')
	{
		printf("\n▁▂▃恭喜您取得了勝利~再接再厲哦▃▂▁\n");
	}
    

}





void InitBoard(char board[ROW][COL],int row,int col)
{
	int i = 0;
	int j = 0;
	for(i = 0;i<row;i++)
	{
		for(j = 0;j<col;j++)
		{
			board[i][j] = ' ';
		}
	}
}



void DisplayBoard(char board[ROW][COL],int row,int col)
{
	int i = 0;
	for(i = 0;i<row;i++)
	{
		printf(" %c ┃ %c ┃ %c \n",board[i][0],board[i][1],board[i][2]);
		if(i != row-1)
		{
			printf("━━━┃━━━┃━━━\n");
		}
	}
}

void ComputerMove(char board[ROW][COL],int row,int col)
{
	while(1)
	{

	    int x = rand() % row;
	    int y = rand() % col;
	    if(board[x][y] == ' ')
	    {
		    board[x][y] = '0';
		    break;
	    }
	}
}

void PlayerMove(char board[ROW][COL],int row,int col)
{
	int x = 0;
	int y = 0;
	while(1)
	{
		printf("請輸入一個座標:");
		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] = 'X';
				break;
			}
			else
			{
				printf("抱歉~您輸入的座標已經被電腦搶先了一步,請重新輸入\n");
			}
        }
		else
		{
			printf("您輸入的座標已經超出棋盤的範圍啦~請重新輸入哦\n");
		}
		
	}
}


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][0] != ' ')
		{
			return board[i][0];
		}
	}
	for(j = 0;j<col;j++)
	{
		if(board[0][j] == board[1][j]&&board[1][j] == board[2][j]&&board[0][j] != ' ')
		{
			return board[0][j];
		}
	}
	if(board[0][0] == board[1][1]&&board[1][1] == board[2][2]&&board[0][0] != ' ')
	{
	 
		return board[0][0];
	}
	else if(board[2][0] == board[1][1]&&board[1][1] == board[0][2]&&board[2][0] != ' ')
		return board[2][0];
	else if(IsFull(board,row,col))
		return 'p';
	else 
		return ' ';
}

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