五子棋(C语言)

五子棋游戏

五子棋是一种两人对弈的纯策略型棋类游戏,通常双方分别使用黑白两色的棋子,每次一子,轮流下在棋盘直线与横线的交叉点上,先形成 5子连线者 获胜。 棋具与围棋通用。

源程序:

//chess.h

#pragma once

#include<stdio.h>

#define ROW 5
#define COL 5

void Menu();
void Init(char arr[][COL]);

void Display(char arr[][COL]);
void Player_move(char arr[][COL]);

int Computer_move(char arr[][COL]);

char Check(char arr[][COL]);

//chess.c

#include "chess.h"

void Menu()
{
	printf("**************************************************\n");
	printf("*************      Game: 五子棋     **************\n");
	printf("**************************************************\n");
	printf("*************      1  开始游戏      **************\n");
	printf("*************      0  退出游戏      **************\n");
	printf("**************************************************\n");
}
void Init(char arr[][COL])
{
	int i = 0;
	int j = 0;
	for (i = 0; i < ROW; i++)
	{
		for (j = 0; j < COL; j++)
		{
			arr[i][j] = ‘ ‘;
		}
	}
}

void Display(char arr[][COL])
{
	int i = 0;
	for (i = 0; i < ROW; i++)
	{
		printf(" %c | %c | %c | %c | %c \n", arr[i][0], arr[i][1], arr[i][2],arr[i][3],arr[i][4]);
		if (i != 4)
			printf("---|---|---|---|--- \n");
	}
}
void Player_move(char arr[][COL])
{
	int x = 0, y = 0;
	printf("请输入坐标:(x y)>");
flag:
	scanf("%d%d", &x, &y);
	x -= 1;
	y -= 1;
	while (arr[x][y] != ‘ ‘ || x <0 || x>4 || y <0 || y >4)
	{
		printf("坐标选择错误,请重新输入 >  ");
		goto flag;
	}
	arr[x][y] = ‘X‘;
}

int Computer_move(char arr[][COL])
{
	int i = 0;
	int j = 0;
	for (i = 0; i < ROW; i++)
	{
		for (j = 0; j < COL; j++)
		{
			if (arr[i][j] == ‘ ‘)
			{
				break;
			}
		}
		if (arr[i][j] == ‘ ‘)
			break;
	}
	if (i*j <= 25)
	{
		arr[i][j] = ‘0‘;
		return 1;
	}
	else
	{
		printf("平局\n");
		return 0;
	}
	return 1;
}

char Check(char arr[][COL])
{
	int i = 0;
	for (i = 0; i < ROW; i++)
	{
		if (arr[i][0] == arr[i][1] && arr[i][1] == arr[i][2] && arr[i][2] == arr[i][3] && arr[i][3] == arr[i][4])
		{
			return arr[i][0];
		}
	}
	for (i = 0; i < COL; i++)
	{
		if (arr[0][i] == arr[1][i] && arr[1][i] == arr[2][i] && arr[2][i] == arr[3][i] && arr[3][i] == arr[4][i])
		{
			return arr[0][i];
		}
	}
	if (arr[0][0] == arr[1][1] && arr[1][1] == arr[2][2] && arr[2][2] == arr[3][3] && arr[3][3] == arr[4][4])
	{
		return arr[0][0];
	}
	if (arr[0][4] == arr[1][3] && arr[1][3] == arr[2][2] && arr[2][2] == arr[3][1] && arr[3][1] == arr[4][0])
	{
		return arr[0][4];
	}
	return ‘ ‘;
}

//test.c

#include "chess.h"

int main() // 五子棋
{
	char arr[ROW][COL];
	char done = ‘ ‘;
	int ret=0;
Flag:
	Menu();
	printf("请选择:");
	scanf("%d",&ret);
	switch(ret)
	{
	case 1:
		Init(arr);
		do
		{
			Display(arr);
			Player_move(arr);
			done = Check(arr);
			if (done != ‘ ‘)
				break;
			ret = Computer_move(arr);
			if (ret == 0)
			{
				break;
			}
			done = Check(arr);
		} while (done == ‘ ‘);

		Display(arr);
		if (done == ‘X‘)
		{
			printf("^-^ 玩家获胜!^-^\n");
		}
		else if (done == ‘0‘)
		{
			printf("^-^ 电脑获胜!^-^\n");
		}
		goto Flag;
		break;
	case 0:
		printf("退出游戏!\n");
		break;
	default:
		printf("Error!\n");
		break;
	};
	return 0;
}

运行结果:

1、开始游戏

2、退出游戏

时间: 2024-11-16 14:26:06

五子棋(C语言)的相关文章

详解 C 语言开发五子棋游戏以及游戏中的重要算法与思路

重拾 C 语言之后发现,原来 C 语言是那么的简洁,对于写小项目来讲,C 语言是那么的合适,然后,博主自己写了一个五子棋游戏,同样是基于博主自己封装的 nkCEngine 代码库编写,其实整个游戏里面大部分代码都用在逻辑处理上了,图形处理以及窗口创建的部分,因为有高度封装的 nkCEngine,基本上可以忽略不计,这篇博文来讲一讲 C 语言开发一个简单的五子棋游戏,这个游戏不包含人机对战的逻辑,所以唯一的难点估计就是在于如何判断下棋的一方在下棋时候是否获胜了,同时博主也会介绍一个游戏开发中最经常

C语言 AI智能,五子棋 人机对战,人人对战

C语言五子棋,人机对战,人人对战 [email protected]:~$ cat main.c  # include<stdio.h> # include<string.h> # include<stdlib.h> # define SPA 0 # define MAN 1 # define COM 2    /* 空位置设为0 ,玩家下的位置设为1 ,电脑下的位置设为2 */ int qipan[15][15];    /* 15*15的棋盘 */ int a,b,

C 语言控制台实现五子棋项目

花了一天时间实现了控制台五子棋项目,把项目贴上来.也算是告一段落了. 为了进一步了解C语言编程,熟悉优秀的编码风格,提升编码能力,丰富项目经验.所以在编程初期选择了控制台小游戏<单机五子棋>作为项目进行编码. 本项目定位: 控制台小程序,作为熟悉一个完整的项目流程存在. 项目周期: 一星期. 实际时间: 一天.(2016年4月5日) 游戏功能: 首先实现能够让双人进行对战,最后得出胜负(结果).然后加入人机对战元素,也就是传统意义上一个人玩的单机游戏. 编码风格: C语言面向过程编程,变量名与

C语言实现五子棋简单功能

/******************************************************************** C-4.29-1: 实现五子棋游戏 操作说明:用方向键或者"w","s","a","d"控制棋子放置位置, 使用空格键放置棋子,使用“ESC”键退出游戏 测试环境:Redhat5.5 *****************************************************

五子棋的c语言源码

这是实现五子棋落子和判断胜负的源代码,电脑落子涉及的人工智能算法(目前AI属于弱智的随机落子)暂时没有实现.本文重点讲一下胜负判断功能的实现,我们都知道五子棋中获胜的条件就是五联子,而五联子的方向有四种:水平.竖直和两个对角线方向.扫描的思想是在每个落子的位置判断各个方向能扫描的次数(最多为5).以水平方向为例,数组下标为[5][5]的从[5][0]开始判断连往右的五个坐标(即数组元素)的值是否相等,如果是则表明获胜. #include <stdio.h> #include <stdli

C语言实现五子棋

可以称得上史上最简单的五子棋版本了. 可以使用curses库来改进页面和下棋方式. 并且对于输入的坐标没有进行鉴别,如果输入的坐标超过棋盘大小,就会段错误退出. 我改进了一点,但是还是没有完全避免这个问题. /* *Gobang.c */ #include<stdio.h> #include<stdlib.h> #define N 15 int chessboard[N+1][N+1] = {0}; int whoseTurn = 0; void initGame(); void

C语言-五子棋

1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <windows.h> 4 5 #define N 19 6 int pieces[N][N]= {0}; //五子棋盘19*19 7 int flag=1; //状态,0-无子:1-A子:2-B子 8 9 void DrawPanel()//棋盘模块 10 { 11 int count=1; 12 int i,j; 13 system("CLS&quo

简单程序设计-五子棋

<程序设计-五子棋> 作者:蜡笔小黑(原创博文,转载请说明) 前言:很多刚刚接触编程的人都不知道怎么下手编写程序,特别是学习了新的知识点,不知道有什么用,那么本文将以简单的存储结构及简单的运算,条件语句,分支语句,循环语句结合,带来一个双人对战版五子棋,这是一个简单的模型,实现了五子棋最最基本的功能,还有好多地方需要补全,如边界问题,设计问题,游戏逻辑问题,希望读者阅读后能够注意,通过自己的努力来完善它,还能扩展各种功能,如悔棋,网络对战等,有时候写程序和小生命一样,慢慢会成长,而我们作为&q

结合自己的项目作业说说做软件工程项目应该如何选择程序设计语言

我们小组的软件工程项目是开发一个简单的即时通讯软件,我们最终选择用Java来开发这个软件.为什么要选择Java呢?首先,Java是一种采用面向对象方法编码的高级语言,相比我们学过的另一种语言——C语言,具有很大的优势.C语言是一种结构化的语言,是面向过程的.下面引用一段文字来说明面向对象相比面向过程的优点: 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了. 面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而