大家小时候都玩过三子棋,我们那边叫做一条龙,但是如何用C语言实现呢?
代码的思维逻辑如下:
1:打印个开始菜单供用户选择
2:如果选择玩,首先打印棋盘(用二维数组保存棋盘上的9个格子),
3:用户和电脑分别下棋,每下一次,判断一次是胜负还是平局
4:上一步结束之后,用户如果还想继续玩可以继续,否则可以退出游戏。
具体实现请看下面代码,欢迎交流学习!
game.h
#ifndef __GAME__H
#define __GAME__H
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define ROWS 3
#define COLS 3
void game();
void display(char a[ROWS][COLS],int ROW,int COL);
void player(char a[ROWS][COLS],int ROW,int COL);
void computer(char a[ROWS][COLS],int ROW,int COL);
char judge(char a[ROWS][COLS],int ROW,int COL);
int is_full(char a[ROWS][COLS],int ROW,int COL);
#endif
game.c
#include"game.h"
void display(char a[ROWS][COLS],int ROW,int COL)
{
int i,j;
for(i=0;i<ROWS;i++)
{
for(j=0;j<COLS;j++)
{
if(j==COLS-1)
printf(" %c ",a[i][j]);
else
printf(" %c |",a[i][j]);
}
printf("\n");
if(i==ROWS-1)
printf("\n");
else
printf("-----------\n");
}
}
//注意判断电脑和玩家下棋是此位置是否为空,为空可以下
void player(char a[ROWS][COLS],int ROW,int COL)
{
int x,y;
printf("请输入坐标>");
while(1)
{
scanf("%d %d",&x,&y);
if(a[x-1][y-1]==' ')
{
a[x-1][y-1] = 'X';
break;
}
else
{
printf("出错,请重新输入!\n");
}
}
}
//任何数字%3就是0~2
void computer(char a[ROWS][COLS],int ROW,int COL)
{
while(1)
{
int x = rand()%3;
int y = rand()%3;
if(a[x][y]==' ')
{
a[x][y] ='0';
break;
}
}
}
char judge(char a[ROWS][COLS],int ROW,int COL)
{
int i = 0;
for(i=0;i<ROW;i++)
{
if((a[i][0]==a[i][1])&&(a[i][1]==a[i][2])&&(a[i][0]!=' '))
return a[i][0];
}
for(i=0;i<COL;i++)
{
if((a[0][i]==a[1][i])&&(a[1][i]==a[2][i])&&(a[0][i]!=' '))
return a[0][i];
}
if((a[0][0]==a[1][1])&&(a[1][1]==a[2][2])&&(a[0][0]!=' '))
return a[0][0];
if((a[0][2]==a[1][1])&&(a[1][1]==a[2][0])&&(a[0][2]!=' '))
return a[0][2];
if(is_full(a,ROW,COL) == 1)
return 'q';
return ' ';
}
int is_full(char a[ROWS][COLS],int ROW,int COL)
{
int x = 0;
int y = 0;
for(x=0;x<ROW;x++)
{
for(y=0;y<COL;y++)
{
if(a[x][y]==' ')
return 0;
}
}
return 1;
}
void game()
{
char a[ROWS][COLS];
char ret = ' ';
srand((unsigned int) time(NULL));
memset(a ,' ',ROWS*COLS*sizeof(char));
display(a,ROWS,COLS);
do
{
player(a,ROWS,COLS);
display(a,ROWS,COLS);
ret = judge(a,ROWS,COLS);
if(ret!=' ')
{
break;
}
computer(a,ROWS,COLS);
display(a,ROWS,COLS);
ret = judge(a,ROWS,COLS);
}while(ret==' ');
if(ret=='X')
{
printf("玩家赢\n");
}
if(ret=='0')
{
printf("电脑赢\n");
}
if(ret=='q')
{
printf("平局!\n");
}
}
test.c
#include"game.h"
int main()
{
int input = 0;
do
{
printf("**************************\n");
printf("***** 1:Start 0:exit *****\n");
printf("**************************\n");
printf("请选择>");
scanf("%d",&input);
switch(input)
{
case 1:game();break;
case 0:printf("欢迎再来!\n")break;
default:printf("输入错误请重新输入\n");break;
}
}while(input);
return 0;
}
测试如下:
文件分类
开始画面
当玩家赢画面:
电脑赢:
平局: