一个简单的三子棋游戏

game.h

#pragma once


#define  ROW  3
#define  COL  3


void menu();
void  game();
void printboard(char board[ROW][COL], int row, int col);
void  boardinit(char board[ROW][COL], int row, int col);//棋盘初始化
int judge_winner(char board[ROW][COL]);
void computermove(char board[ROW][COL]);//电脑落子
void playermove(char board[ROW][COL]);//玩家落子
int blance_judge(char board[ROW][COL]);//平局判定

game.c

#define  _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include"game.h"
#include<stdlib.h>


void menu()
{
	printf("**********  1.play   0.exit *********\n");
}
void printboard(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++)
		{
			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  boardinit(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] = ' ';
		}
	}
}
int judge_winner(char board[ROW][COL])
{
	int i = 0;
	for (i = 0;i < ROW; i++)
	{
		if (board[i][0] == '*' && board[i][1] == '*' && board[i][2] == '*')
			return 0;
		else if (board[0][i] == '*' && board[1][i] == '*' && board[2][i] == '*')
			return 0;
	}
	if(board[0][0] == '*' && board[1][1] == '*' && board[2][2] == '*')
		return 0;
	else if (board[2][0] == '*' && board[1][1] == '*' && board[0][2] == '*')
		return 0;
	for (i = 0;i < ROW; i++)
	{
		if (board[i][0] == '#' && board[i][1] == '#' && board[i][2] == '#')
			return 1;
		else if (board[0][i] == '#' && board[1][i] == '#' && board[2][i] == '#')
			return 1;
	}
	if (board[0][0] == '#' && board[1][1] == '#' && board[2][2] == '#')
		return 1;
	else if (board[2][0] == '#' && board[1][1] == '#' && board[0][2] == '#')
		return 1;
	return -1;
}

void computermove(char board[ROW][COL])//电脑落子
{
	int x = 0;
	int y = 0;
	do
	{
		x = rand() % ROW;
		y = rand() % COL;
		if (board[x][y] == ' ')
		{
			board[x][y] = '*';
			break;
		}
	} while (1);
}
void playermove(char board[ROW][COL])//玩家落子
{
	int x = 0;
	int y = 0;
	do
	{
		printf("请输入落子位置->");
		scanf("%d %d",&x,&y);
		if (board[(x-1)][(y-1)] == ' ')
		{
			board[(x-1)][(y-1)] = '#';
			break;
		}
		printf("位置错误,重新输入\n");
	} while (1);
}

int blance_judge(char board[ROW][COL])//平局判定
{
	int count = 0;
	int i = 0;
	int j = 0;
	for (i = 0;i < ROW;i++)
	{
		for (j = 0;j < COL;j++)
		{
			if (board[i][j] == ' ')
				count++;
		}
	}
	return count;
}
void game()
{
	int winner = 0;
	char chessboard[ROW][COL] = { ' ' };
	boardinit(chessboard, ROW, COL);
	printboard(chessboard, ROW, COL);
	do
	{
		computermove(chessboard);
		printboard(chessboard, ROW, COL);
		winner = judge_winner(chessboard);
		if (winner == 0)
		{
			printf("电脑胜利\n");
			break;
		}
		if (blance_judge(chessboard) == 0)
		{
			printf("平局\n");
			break;
		}
		playermove(chessboard);
		winner = judge_winner(chessboard);
		if (winner == 1)
		{
			printboard(chessboard, ROW, COL);
			printf("玩家胜利\n");
			break;
		}
		if (blance_judge(chessboard) == 0)
		{
			printf("平局\n");
			break;
		}
	} while (1);
}

main.c

#define  _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include"game.h"
#include<stdlib.h>
#include<time.h>

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

	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,以下是一个简单三子棋游戏C语言代码: ```c #include <stdio.h> char board[3][3]; // 棋盘 void init_board() { int i, j; for(i = 0; i < 3; i++) { for(j = 0; j < 3; j++) { board[i][j] = ' '; // 初始化棋盘为空格 } } } void print_board() { int i, j; printf(" 0 1 2\n"); for(i = 0; i < 3; i++) { printf("%d ", i); for(j = 0; j < 3; j++) { printf("| %c ", board[i][j]); } printf("|\n"); } } int check_win(char c) { int i, j; // 检查行 for(i = 0; i < 3; i++) { if(board[i][0] == c && board[i][1] == c && board[i][2] == c) { return 1; } } // 检查列 for(j = 0; j < 3; j++) { if(board[0][j] == c && board[1][j] == c && board[2][j] == c) { return 1; } } // 检查对角线 if(board[0][0] == c && board[1][1] == c && board[2][2] == c) { return 1; } if(board[0][2] == c && board[1][1] == c && board[2][0] == c) { return 1; } return 0; } int play(char c, int row, int col) { if(row < 0 || row > 2 || col < 0 || col > 2) { printf("输入错误!请输入行和列的范围在0到2之间的整数。\n"); return 0; } if(board[row][col] != ' ') { printf("(%d, %d)已经有棋子了,请重新输入。\n", row, col); return 0; } board[row][col] = c; return 1; } int main() { int row, col, i; char player; init_board(); // 初始化棋盘 print_board(); // 打印初始棋盘 for(i = 0; i < 9; i++) { player = (i % 2 == 0) ? 'X' : 'O'; // 判断当前玩家 printf("请%c玩家输入下棋的位置(行 列):", player); scanf("%d %d", &row, &col); if(play(player, row, col)) { // 如果下棋成功 print_board(); // 打印当前棋盘 if(check_win(player)) { // 如果当前玩家胜利 printf("%c玩家获胜!\n", player); return 0; } } else { // 如果下棋失败 i--; // 回到上一步 } } printf("平局!\n"); // 没有获胜者,平局 return 0; } ``` 该代码使用了一个二维字符数组 `board` 来表示棋盘,其中空格表示该位置没有棋子,'X'表示玩家1的棋子,'O'表示玩家2的棋子。`init_board()` 函数用于初始化棋盘,`print_board()` 函数用于打印当前棋盘。`check_win()` 函数用于检查某个玩家是否胜利,如果是则返回1,否则返回0。`play()` 函数用于玩家下棋,如果下棋成功则返回1,否则返回0。在 `main()` 函数中,使用一个循环来交替让两个玩家下棋,直到有一个玩家获胜或者棋盘下满。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JDSZGLLL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值