1.定义test函数,让用户选择输入开始或者退出
2.再定义菜单menu显示选择内容,1代表开始,当用户按下1时,则switch语句生效。在case 1里调用实现三子棋游戏函数games;所有的三子棋函数模块都在games函数里,test调用games函数,test从主函数结束
3:game函数:1.调用isborad函数,为了初始化棋盘
2.再调用tableborad函数,为了打印出棋盘的格子,使用for循环嵌套实现
3.调用people函数,表面用户移动
4.调用computer函数,代表人机移动,一下库函数主要是实现人机下棋所给的随机数(返回0~(至少是32767)),这里使用此库函数要引用头文件include<stdlib.h>
与 srand((unsigned int)time(0));库函数一起使用,引用此库函数也需要头文件include <time.h>;计算时间,为了让每一次的随机值都不重复
x=rand()%ROW代表控制随机数范围在row之间
y=rand()%COL; 同上
5. 再判断输赢;如果表格三子连一线,则二者一方赢;这里需要使用循环遍历行列和双斜边是否同为一样,分别返回相应的行列的符号
6.最后还有有种状态是当棋子都下满了,则为平局;平局中调用在iswin函数中调用isfull函数,如果返回1 则格子都占满了,若iswin函数中返回’Q‘代表打印:“平局”
7.最后一步可以加可以不加,就是登录的操作;此处要用到库函数strcmp比较字符函数,引用的头文件include<string.h>
代码块如下:
test函数
void test()
{
int a,b;
if(denglu()==1)
{
srand((unsigned int)time(0));
int input=0;
do
{
menu();
printf("请选择>\n");
scanf("%d",&input);
switch(input)
{
case 1:
games();
break;
case 0:
printf("退出\n");
break;
default:printf("请重新输入\n");
break;
}
if(input>5)
{
break;
}
} while(input);
}
else
{
printf("登录失败,请重试\n");
}
}
games函数
#include "youxi.h"
int denglu()
{
int i;
char a[20]="2283025597";
char b[20]="qumeng";
char x[20];
char y[20];
printf("请输入账号和密码\n");
for(i=0;i<3;i++)
{
scanf("%s%s",&x,&y);
if(strcmp(a,x)==0 && strcmp(b,y)==0)
{
return 1;
}
printf("账号密码有错,请重新输入\n");
}
}
void isborad(char borad[ROW][COL],int row,int col)
{
int i,j;
for(i=0;i<row;i++)
{
for(j=0;j<col;j++)
{
borad[i][j]=' ';
}
}
}
void tableborad(char borad[ROW][COL],int row,int col)
{
int i,j;
for(i=0;i<row;i++)
{
for(j=0;j<col;j++)
{
printf(" %c ",borad[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 people(char borad[ROW][COL],int row,int col) //定义用户走
{
int x=0,y=0;
while(1)
{
printf("用户请输入>\n");
scanf("%d%d",&x,&y);
if(x>=1&&x<=row && y>=1&&y<=col)
{
if(borad[x-1][y-1]==' ')
{
borad[x-1][y-1]='*';
break;
}
else
{
printf("此坐标已被占用\n");
}
}
else
{
printf("您输入的坐标非法\n");
}
}
}
void computer(char borad[ROW][COL],int row,int col)
{
int x=0;
int y=0;
printf("人机输入>\n");
while(1)
{
x=rand()%ROW;
y=rand()%COL;
if(borad[x][y]==' ')
{
borad[x][y]='#';
break;
}
}
}
int isfull(char borad[ROW][COL],int row,int col)
{
int i,j;
for(i=0;i<row;i++)
{
for(j=0;j<col;j++)
{
if(borad[i][j]==' ')
{
return 0; //没满
}
}
}
return 1; //满了
}
char iswin(char borad[ROW][COL],int row,int col)
{
int i;
for(i=0;i<row;i++)
{
if(borad[0][i]==borad[1][i]&&borad[1][i]==borad[2][i] && borad[1][i]!=' ') //横三行
{
return borad[0][i];
}
}
for(i=0;i<col;i++)
{
if(borad[i][0]==borad[i][1]&&borad[i][1]==borad[i][2] && borad[i][1]!=' ') //竖三行
{
return borad[i][0];
}
}
for(i=0;i<row;i++)
{ //双斜边
if(borad[0][0]==borad[1][1] && borad[1][1]==borad[2][2] &&borad[1][1]!=' ')
{
return borad[1][1];
}
if(borad[0][2]==borad[1][1] && borad[1][1]==borad[2][0] &&borad[1][1]!=' ')
{
return borad[1][1];
}
}
if(1==isfull(borad,row,col)) //判断是否平局
{
return 'Q'; //平局
}
else
{
return 'C'; //继续
}
}
需要引用的头文件
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#define ROW 3
#define COL 3
void isborad(char borad[ROW][COL],int row,int col); //初始化棋盘
void tableborad(char borad[ROW][COL],int row,int col); //棋盘表
void people(char borad[ROW][COL],int row,int col); //用户移动声明
void computer(char borad[ROW][COL],int row,int col); //电脑移动声明
char iswin(char borad[ROW][COL],int row,int col); //判断输赢
int denglu()