五子棋游戏(智能版)-c语言

本博客介绍了一个使用C语言编写的五子棋游戏,电脑AI采用智能策略,包括判断自身形成活四/冲四,阻止玩家形成活四/冲四,以及预防性布局。游戏代码分为test.c、game.h和game.c三个部分,欢迎大家优化和提供反馈。

前面用数组知识写过一个三子棋的游戏,由于电脑下是瞎逼下(随机值),玩家很轻松就赢了,现在将电脑下改得更智能一些,并将三子棋扩展成了五子棋(9*9棋盘),依然是利用数组知识。

电脑下的主要规则如下:

1.先判断电脑是否将要成5,已有活4/冲4;

2.再判断玩家是否将要成5,已有活4/冲4,堵住玩家赢的路;

3.然后判断电脑是否将要成4,已有活3;

4.最后判断玩家是否将要成4,已有活3,堵住玩家赢的路;

此游戏中暂时先实现了这几个智能落子的功能

游戏效果如下:

 

​详细代码如下:

1.test.c

/*
date:2018/12/24
author:Better Me1
program:The Five Son Of Chess Games
compiler:Visual Studio 2013
*/

/*测试部分*/
#include "game.h"

void menu(){
	printf("************ 五子棋小游戏  ************\n");
	printf("******  1.进入游戏  2.退出游戏  ******\n");
	printf("**************************************\n");
}
void game(){
	char chess[ROW][COL] = { ' ' };
	InitBoard(chess, ROW, COL, ' ');//初始化
	DisplayBoard(chess, ROW, COL);//打印棋盘
	PlayGame(chess, ROW, COL);//玩游戏
}
void test(){
	int input = 0;
	while (input!=2){
		menu();
		printf("请选择:>");
		scanf("%d", &input);
		system("cls");
		switch (input){
		case 1:
			game();
			break;
		case 2:
			printf("退出游戏!\n");
			break;
		default:
			printf("输入有误,请重新选择!\n");
			break;
		}
	}
}
void main(){
	test();
	system("pause");
}

2.game.h

#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
#define ROW 9
#define COL 9

void InitBoard(char board[ROW][COL], int row, int col, char set);
void DisplayBoard(char board[ROW][COL], int row,int col);
void PlayerMove(char board[ROW][COL], int row, int col);
int FiveSon(char board[ROW][COL], int row, int col, int k,char a,char b,char c);//用于检测成5,活4/冲4
int ThreeSon(char board[ROW][COL], int row, int col, int k, char a, char b, char c);//用于检测活3,成4
void ComputerMove(char board[ROW][COL], int row, int col);
int CheckWiner(char board[ROW][COL], int row, int col);
void PlayGame(char board[ROW][COL], int row, int col);

3.game.c

#define _CRT_SECURE_NO_WARNINGS 1

#include "game.h"
void InitBoard(char board[ROW][COL], int row, int col, char set){//初始化棋盘
	memset(board, set, row*col*sizeof(board[0][0]));
}
void DisplayBoard(char board[ROW][COL], int row, int col){    //打印棋盘
	int i = 0;
	int j = 0;
	for (i = -1; i < row; i++){
		for (j = -1; j < col; j++){
			if (i == -1){
				printf(" %d ",j+1);
			}
			else if (j == -1){
				printf(" %d ", i+1);
			}
			else{
				printf(" %c ", board[i][j]);
			} 
			if (j != col - 1){
				printf("|");
			}
		}
		printf("\n");
		if (i != row - 1){
			printf("---+---+---+---+---+---+---+---+---+---");
			printf("\n");
		}
	}
}
void PlayerMove(char board[ROW][COL], int row, int col){
	int i = 0;//横坐标
	int j = 0;//纵坐标
	while (1){
		printf("请输入放置棋子的坐标(如:a b):>");
		scanf("%d %d", &i, &j);
		if (i<1 || i>row || j<1 || j>col){
			printf("坐标输入错误,请重新输入!\n");
		}
		else if (board[i - 1][j - 1] != ' '){
			printf("此坐标已被棋子占用!请重新输入!\n");
		}
		else{
			break;
		}
	}
	system("cls");
	printf("玩家走:\n");
	printf("\n");
	board[i - 1][j - 1] = 'X';
}
int FiveSon(char board[ROW][COL], int row, int col, int k, char a, char b, char c){
	int i = 0;//横坐标
	int j = 0;//纵坐标
	//检测行中的成5,活4/冲4
	if (k == 1){
		for (i = 0; i < row; i++){
			for (j = 0; j < col - 4; j++){
				if (board[i][j] == board[i][j + 1] && board[i][j] == board[i][j + 2] &&
					board[i][j] == board[i][j + 3] && board[i][j] == a && board[i][j + 4] == b){
					board[i][j + 4] = c;
					k = 0;
					break;
				}
				if (board[i][j] == board[i][j + 1] && board[i][j] == board[i][j + 2] &&
					board[i][j] == board[i][j + 4] && board[i][j] == a && board[i][j + 3] == b){
					board[i][j + 3] = c;
					k = 0;
					break;
				}
				if (board[i][j] == board[i]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值