【c语言五子棋】自定义类型五子棋/井字棋实现:概念及综述

problem&solve 3  |  article 3

声明:此五子棋偏新手向,不涉及复杂知识,仅供欣赏

系列目录:

(0)在控制台实现自己的小想法        [本文]

(1)利用easyx制作自己的gui界面        写文章-CSDN博客

(2)胜负判定        

(3)ai算法        

(4)其他及细节        


目前实现情况:

 (已做出界面,胜负判断,需要补充ai落子算法,和其他一些细节)

(额外做到了:自定义棋盘大小,自定义胜负规则,自定义提子规则(超过k个子时第一个子会被拿去,胜负窗口,高亮显示等))

 本节从最简单的-控制台运行说起


最初要求:

 显然要求②是典型的简单队列,暂时不做考虑

从最基础的做起,我们把五子棋分成:

(1)打印棋盘

(2)控制落子

(3)一些提示语和输入输出

(1)打印棋盘

首先我们写出想要棋盘的样子:
|---+---+---+---+---+---+---|
|   |   |   |   |   |   |   |
|---+---+---+---+---+---+---|
|   |   |   |   |   |   |   |
|---+---+---+---+---+---+---|
|   |   |   |   |   |   |   |
|---+---+---+---+---+---+---|
|   |   |   |   |   |   |   |
|---+---+---+---+---+---+---|
|   |   |   |   |   |   |   |
|---+---+---+---+---+---+---|

很简单,只需要全部打印出来即可。 

(2)控制落子

我们使用数组存储每个空的值(落的子),介于需要自定义,这里使用二维数组更为方便

(3)一些提示语和输入输出

完整代码如下(这里花里胡哨了一下,做了个大小屏的居中对齐(只是更好看一点))

//五子棋
#include<stdio.h>
#include<windows.h>
#include<math.h>
int printchess(int a,int b);
int printchessx1(int a);
int printchessx2(int a);
int printblank(int a,int screensizex);
int printenter(int a,int screensizey);

//全局变量的定义&测试和阅读代码须知 


int time=10;  		//把c作为打印棋盘的延时单位 
int waittime=200; 	//把waittime作为文字显示间隔 
char value[40][40];	//定义并初始化数组 

//大屏不要超过 40x24,小屏不超过25x12 

	

//居中打印格式 

int printenter(int a,int screensizey)	//小屏高30行,大屏50行 
{
	for(int i=0;i<screensizey-a-1;i++)
	{
		printf("\n");
	}
}


										//小屏长120字符,大屏199字符 
int printblank(int a,int screensizex)	//a为需要居中的字体个数,screensize为居中的屏幕尺寸 
{
	for(int i=1;i<=screensizex-2*a;i++)
	printf(" ");
	Sleep(time);
}


int printchessx2(int a,int x,int y)
{
	static int start1=a;
	
	if(a==start1)
	{
		printf("|");Sleep(time);
	}
	if(a==0)
	{
		printf("\n");Sleep(time);
		return 0;
	}
	
	printf(" %c |",value[x][y]);Sleep(time);
	return printchessx2(a-1,x,y+1);Sleep(time);
}




int printchessx1(int a)
{
	static int start2=a;
	if(a==start2)
	{
		printf("|---");Sleep(time);
	}
	if(a==1)
	{
		printf("|\n");Sleep(time);
		return 0;
	}
	printf("+---");
	Sleep(time);
	return printchessx1(a-1);
}


int main()
{
	again:
	
	
	
	int flag=1;					//用于判断下O还是X 
	int positionx,positiony;	//落子坐标 
	int winrule;				//胜利条件:几个子一起为赢 

	
	for(int i=0;i<40;i++)		//棋盘初始化 
	{
		for(int j=0;j<40;j++)
			value[i][j]=' ';
	}
	

	int length,width,screensize,screensizex,screensizey;
	
	printf("请输入棋盘大小(如7 7表示长x宽):");
	scanf("%d %d",&length,&width);
	
	printf("请输入胜利条件:__子棋(建议3或者5)");
	scanf("%d",&winrule); 
	
	printf("请选择大屏/小屏幕游戏(影响居中格式):大屏幕输入1,小屏幕输入0\n");Sleep(waittime);
	scanf("%d",&screensize);
	if(screensize==0)
	{
		screensizex=60;
		screensizey=15;
	}
	else if(screensize==1)
	{
		screensizex=95;
		screensizey=25;
	}
	else 
	{
		screensize=60;
		printf("输入错误,默认小屏幕\n");Sleep(waittime);
	}
	
	printblank(length,screensizex);printf("游戏正在初始化,请稍后......\n");Sleep(waittime);
	printblank(length,screensizex);printf("------~25%~----- \n");Sleep(waittime);
	printblank(length,screensizex);printf("------~50%~----- \n");Sleep(waittime);
	printblank(length,screensizex);printf("------~75%~----- \n");Sleep(waittime);
	printblank(length,screensizex);printf("------~99%~----- \n");Sleep(waittime);
	printblank(length,screensizex);printf("游戏加载完成,正在运行\n");Sleep(waittime);
	system("cls");
	
	flag2:
	system("cls");
	//竖直居中
	printenter(width,screensizey);
	for(int i=1;i<=2*width+1;i++)
	{
		printblank(length,screensizex);
		if(i%2==1)printchessx1(length);
		if(i%2==0)printchessx2(length,i/2-1,0);
	}
	printblank(length,screensizex);
	

	
	//printf(" 点击对应位置下棋子\n");
	printf("输入坐标下对应棋子:");
	scanf("%d %d",&positionx,&positiony);
	if(value[positionx][positiony]==' ');
	else{
		printblank(6,screensizex);
		printf("该位置已有格子,请重新输入.\n");
		system("pause");
		goto flag2;
	}
	if(flag==1)value[positionx][positiony]='X';
	if(flag==-1)value[positionx][positiony]='O';
	flag=-flag;
	
	time=0;
	goto flag2;
	

}

一个简单的五子棋就出来了!

 首次编辑12.11(完成文章)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值