本文实例为大家分享了C语言实现五子棋小游戏的具体代码,供大家参考,具体内容如下
#include<stdio.h>
#include<windows.h>
#define ROW 14
#define COL 14
void gotoxy(int x,int y)//形参
{
HANDLE hOut;
COORD pos= {x,y};
// 光标的起始位(第1列,第3行) 0是第1列 2是第3行
hOut = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hOut, pos);
//printf("定位光标位置搜索(%d,%d)\n",pos.X,pos.Y);
}
/*
函数名:paintGameUI()
函数功能:绘制棋盘
函数参数:无
函数返回值:无
*/
void paintGameUI() //打印游戏棋盘 使用ROW COL在上面宏定义可以改变//棋盘大小
{
int i=0;
int j=0;
printf("┌ "); //顶部
for(i=0;i<COL;i++)
{
printf("┬ ");
}
printf("┐\n");
//中间
for(j=0;j<ROW;j++)
{
printf("├ ");
for(i=0;i<COL;i++)
{
printf("┼ ");
}
printf("┤\n");
}
//底部
printf("└ ");
for(i=0;i<COL;i++)
{
printf("┴ ");
}
printf("┘\n");
}
void playgame()
{
int arr[ROW][COL]={0}; // 初始化 0-没有棋子 1用户下棋黑 2电脑下棋白
int x,y; //用户输入的行 列
int row,col; //落子的位置
int i,j; // 规则 判断输赢 遍历二维数组
paintGameUI(); // 绘制棋盘
while(1)//确保多次 确保用户电脑有效落子多次
{
while(1) // 保证用户能够有效落子一次 用户下棋
{
gotoxy(0,16);//打印文字 0距离左边 16距离顶部
printf(" "); //覆盖掉用户之前所输,//让用户可以再输
gotoxy(0,16); //打印文字 0距离左边 16距离顶部
printf("请输入下棋的位置,例如:(2 3):");
scanf("%d %d",&x,&y);
row = x-1; //行 距离顶部的长度 数组是0开始的
col =y-1; //列 距离左边的长度 下棋的位置
if(arr[row][col]==0) //下棋位置是否是棋子
{
gotoxy(col*2,row);
printf("●");//用户下棋
//修改二维数组的值
arr[row][col]=1; //用户下棋
for(i=0;i<ROW;i++)
{
for(j=0;j<COL;j++)
{
//横着五个都是1 列变
if( arr[i][j]==arr[i][j+1]&&arr[i][j]==arr[i][j+2]&&
arr[i][j]==arr[i][j+3]&&arr[i][j]==arr[i][j+4]&&j+4<=COL&&arr [i][j]==1)
{
gotoxy(0,18);
printf("用户赢了\n");
return ;
}//竖着五个都是1 行变
else if(arr[i][j]==arr[i+1][j]&&arr[i][j]==arr[i+2][j]&&
arr[i][j]==arr[i+3][j]&&arr[i][j]==arr[i+4][j]&&i+4<=ROW&&arr [i][j]==1)
{
gotoxy(0,18);
printf("用户赢了\n");
return ;
}
}
}
break; //轮到对方下棋
}
else if(arr[row][col]==1||arr[row][col]==2) //用户下棋1 电脑下棋2
{
gotoxy(0,17);
printf("请重新输入坐标");
}
}
while(1) // 确保电脑有效落子一次 电脑下棋
{
//电脑下棋 电脑随机落子
row= rand()%14+0; //二维数组索引0-13
col= rand()%14+0; //电脑随机落子
//行距离顶部row 列距离左边col
if(arr[row][col]==0) //下棋位置是否是棋子 空 电脑可以下棋
{
gotoxy(col*2,row);
printf("○");//下棋
//修改二维数组的值
arr[row][col]=2; //电脑下棋
for(i=0;i<ROW;i++) //电脑赢 最好用算法
{
for(j=0;j<COL;j++)
{
//横着五个都是1 列变
if( arr[i][j]==arr[i][j+1]&&arr[i][j]==arr[i][j+2]&&
arr[i][j]==arr[i][j+3]&&arr[i][j]==arr[i][j+4]&&j+4<=COL&&arr [i][j]==2)
{
gotoxy(0,18);
printf("电脑赢了\n");
return;
}//竖着五个都是1
else if(arr[i][j]==arr[i+1][j]&&arr[i][j]==arr[i+2][j]&&
arr[i][j]==arr[i+3][j]&&arr[i][j]==arr[i+4][j]&&i+4<=ROW&&arr [i][j]==2)
{
gotoxy(0,18);
printf("电脑赢了\n");
return;
}
}
}
break;
}
}
}
}
int main()
{
playgame();
return 0;
}