c语言实现三子棋

目录

一、三子棋玩法

二、需要实现的游戏功能

三、拆分代码

3.1游戏菜单

3.2初始化棋盘

3.2.1函数调用

3.2.2函数体实现

3.3打印棋盘

3.3.1函数调用

3.3.2函数体实现

3.4玩家下棋

3.4.1函数调用

3.4.2函数体实现

3.4.3效果展示

3.5电脑下棋

3.5.1函数调用

3.5.2函数体实现

 3.5.3效果展示

3.6判断输赢

3.6.1函数调用

3.6.2函数体实现

3.6.3效果展示

3.7游戏逻辑(主函数)

 四、代码

4.1game.h(函数声明)

4.2game.c(函数体实现)

4.3main.c(函数逻辑)

END.


一、三子棋玩法

三子棋相信大家都不陌生,是一款非常好玩的益智游戏。

游戏规则是:谁先将三颗棋子连成一条线,谁就获胜

二、需要实现的游戏功能

1.需要有一个棋盘下棋

2.玩家能下棋,电脑能自动下棋

3.能判断输赢

三、拆分代码

这次的代码使用game.h(函数声明)game.c(函数体实现)main.c(游戏逻辑实现)

三子棋其实,用的是一个3*3的格子,我们可以用二维数组来实现 

其中的行(row)和列(col)使用宏定义,这样我们修改棋盘大小时会很方便,只需要改这两个值即可。

 

3.1游戏菜单

用printf实现

3.2初始化棋盘

3.2.1函数调用

将数组,行和列传过去

3.2.2函数体实现

 

3.3打印棋盘

3.3.1函数调用

3.3.2函数体实现

使用for循环实现

 

3.4玩家下棋

3.4.1函数调用

 

3.4.2函数体实现

3.4.3效果展示

3.5电脑下棋

3.5.1函数调用

3.5.2函数体实现

 猜数字游戏icon-default.png?t=M85Bhttp://t.csdn.cn/NtRT7

 3.5.3效果展示

3.6判断输赢

3.6.1函数调用

游戏无非就是这4种情况

3.6.2函数体实现

 

 

 判断是否为平局的函数

 

3.6.3效果展示

 

3.7游戏逻辑(主函数)

 主函数逻辑

游戏逻辑 

 

 四、代码

4.1game.h(函数声明)

#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#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);
//判断输赢
char is_win(char board[ROW][COL], int row, int col);

4.2game.c(函数体实现)

#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] == ' ')
			{
				board[x - 1][y - 1] = '*';
				break;
			}
			else
			{
				printf("已经输入,重新选位置\n");
			}
		}
		else
		{
			printf("输入非法,重新输入\n");
		}
	}
}


//电脑下棋
void Computer_move(char board[ROW][COL], int row, int col)
{
	printf("电脑下棋\n");
	while (1)
	{
		int x = rand() % row;
		int y = rand() % col;
		if (board[x][y] == ' ')
		{
			board[x][y] = '#';
			break;
		}
	}
}

//判断是否为平局
static int If_full(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;
}

//判断输赢,平局还是继续的状态
char is_win(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][1] != ' ')
		{
			return board[i][1];
		}

	}
	//判断列
	int j = 0;
	for (j = 0; j < col; j++)
	{
		if (board[0][j] == board[1][j] && board[1][j] == board[2][j] && board[1][i] != ' ')
		{
			return board[1][j];
		}
	}
	//对角线
	if (board[0][0] == board[1][1] && board[1][1] == board[2][2]  && board[1][1] != ' ')
	{
		return board[1][1];
	}
	if (board[0][2] == board[1][1] && board[1][1] == board[2][0]  && board[1][1] != ' ')
	{
		return board[1][1];
	}

	if (If_full(board, ROW, COL) == 1)
	{
		return 'Q';
	}
	return 'C';
}

4.3main.c(函数逻辑)

#include "game.h"

menu()
{
	printf("***************************\n");
	printf("***********1.play**********\n");
	printf("***********0.exit**********\n");
	printf("***************************\n");
}
void game()
{
	char ret = 0;
	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 = is_win(board,ROW,COL);
		if (ret != 'C')
		{
			break;
		}
		//电脑下棋
		Computer_move(board, ROW, COL);
		Display(board, ROW, COL);
		ret = is_win(board,ROW,COL);
		if (ret != 'C')
		{
			break;
		}
	}
	/*	
	ret返回
	'C'继续
	'*'玩家赢
	'#'电脑赢
	'Q'平局
	*/
	if (ret == '*')
	{
		printf("玩家赢\n");
	}
	else if ( ret=='#')
	{
		printf("电脑赢\n");
	}
	else
	{
		printf("平局\n");
	}

	
}

int main()
{
	srand((unsigned int)time(NULL));
	int input = 0;
	do
	{
		menu();
		printf("请输入模式\n");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			game();
			break;
		case 0:
			break;
		default:
			printf("输入错误,请重新输入\n");
		}
	} while (input);
	return 0;
}

 


END.

希望我的内容能给你带来帮助。

A huge tree that fills one’s arms grows from a tiny seedling; a nine-storied tower rises from a heap of earth; a thousand li journey starts with the first step.

合抱之木,生于毫末,九层之台,起于累土,千里之行,始于足下。——老子

  • 14
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
好的,我可以回答这个问题。以下是一个简单的C语言实现单人三子棋游戏的代码: ```c #include <stdio.h> #include <stdlib.h> #define BOARD_SIZE 3 void init_board(char board[][BOARD_SIZE]); void print_board(char board[][BOARD_SIZE]); int make_move(char board[][BOARD_SIZE], int row, int col, char player_char); int check_win(char board[][BOARD_SIZE], char player_char); int main() { char board[BOARD_SIZE][BOARD_SIZE]; int row, col, win; char player_char = 'X'; init_board(board); print_board(board); while (1) { printf("\nPlayer %c's turn.\n", player_char); printf("Enter row number: "); scanf("%d", &row); printf("Enter column number: "); scanf("%d", &col); if (make_move(board, row, col, player_char)) { print_board(board); win = check_win(board, player_char); if (win) { printf("\nPlayer %c wins!\n", player_char); break; } player_char = (player_char == 'X') ? 'O' : 'X'; } else { printf("Invalid move. Try again.\n"); } } return 0; } void init_board(char board[][BOARD_SIZE]) { int i, j; for (i = 0; i < BOARD_SIZE; i++) { for (j = 0; j < BOARD_SIZE; j++) { board[i][j] = '-'; } } } void print_board(char board[][BOARD_SIZE]) { int i, j; printf("\n"); for (i = 0; i < BOARD_SIZE; i++) { for (j = 0; j < BOARD_SIZE; j++) { printf("%c ", board[i][j]); } printf("\n"); } } int make_move(char board[][BOARD_SIZE], int row, int col, char player_char) { if (row < 0 || row >= BOARD_SIZE || col < 0 || col >= BOARD_SIZE || board[row][col] != '-') { return 0; } board[row][col] = player_char; return 1; } int check_win(char board[][BOARD_SIZE], char player_char) { int i, j; int row_win, col_win, diag_win1, diag_win2; for (i = 0; i < BOARD_SIZE; i++) { row_win = 1; col_win = 1; for (j = 0; j < BOARD_SIZE; j++) { if (board[i][j] != player_char) { row_win = 0; } if (board[j][i] != player_char) { col_win = 0; } } if (row_win || col_win) { return 1; } } diag_win1 = 1; diag_win2 = 1; for (i = 0; i < BOARD_SIZE; i++) { if (board[i][i] != player_char) { diag_win1 = 0; } if (board[i][BOARD_SIZE-1-i] != player_char) { diag_win2 = 0; } } if (diag_win1 || diag_win2) { return 1; } return 0; } ``` 这个程序实现了基本的单人三子棋游戏,并且包括了判断胜负的函数。您可以根据需要修改和扩展此代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值