C语言实现呵呵三子棋

  • 问题描述
  • 流程
  • 详细步骤
  • 代码

  • 问题描述

C语言实现三子棋

  • 流程
  1. 创建游戏开始或退出界面
  2. 创建棋盘并初始化
  3. 打印棋盘
  4. 玩家落子,电脑落子
  5. 判断是否平局
  6. 判断输赢
  7. 返回步骤2或退出小游戏

  • 详细步骤

代码分为三部分,包括函数命名,自定义函数,测试

#define ROW 3

#define COL 3

#include<stdio.h>

#include<stdlib.h>

#include<time.h>

void InitBoard(char board[ROW][COL],int row,int col);

void DisplayBoard(char board[ROW][COL],int row,int col);

void Playermove(char board[ROW][COL],int row,int col);

void Computermove(char board[ROW][COL],int row,int col);

char Iswin(char board[ROW][COL],int row,int col);

以上为函数说明,下面介绍自定义 函数

1、界面设置

  1. void menu()
  2. {
  3. printf("***************************\n");
  4. printf("******1. 玩 0. 结束******\n");
  5. printf("***************************\n");
  6. }

  1. 创建并打印棋盘

void DisplayBoard(char board[ROW][COL],int row,int col)

{

int i=0;

for(i=0;i<row;i++)

{

int j=0;

//printf(" %c | %c | %c \n",board[i][0],board[i][1],board[i][2]);

for(j=0;j<col;j++)

{

printf(" %c ",board[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");

}    

}

}

  1. 玩家落子

void Playermove(char board[ROW][COL],int row,int col)

{

int x=0,y=0;

printf("玩家走\n");

while(1)

{

printf("请输入坐标");

scanf("%d %d",&x,&y);

if(x>=1&&x<=row&&y>=1&&y<=col)

{

if(board[x-1][y-1]==' ')

{

board[x-1][y-1]='*';

break;

}

else

{

printf("该坐标被占用\n");

}

}

else

{

printf("坐标非法,请重新输入!\n");//落子坐标超过ROW或COL

}

}

}

  1. 电脑落子

void Computermove(char board[ROW][COL],int row,int col)

{

int x=0,y=0;

printf("电脑走\n");

while(1)

{

x=rand()%row;

    y=rand()%col;

if(board[x][y]==' ')

{

board[x][y]='#';

break;

}

}

}

  1. 判断是否平局

int Isfull(char board[ROW][COL],int row,int col)

{

int i,j;

for(i=0;i<row;i++)

{

for(j=0;j<col;j++)

{

if(board[i][j]==' ')

{

return 0;

}

}

}

return 1;

}

  1. 判断输赢

char Iswin(char board[ROW][COL],int row,int col)

{

int i=0;

for(i=0;i<row;i++)

{

if(board[i][0]==board[i][1]&&board[i][1]==board[i][2]&&board[i][1]!=' ')

{

return board[i][1];

}

}

for(i=0;i<col;i++)

{

if(board[0][i]==board[1][i]&&board[2][i]==board[1][i]&&board[1][i]!=' ')

{

return board[0][i];

}

}

if(board[0][0]==board[1][1]&&board[1][1]==board[2][2]&&board[1][1]!=' ')

{

return board[1][1];

}

if(board[2][0]==board[1][1]&&board[1][1]==board[0][2]&&board[1][1]!=' ')

{

return board[1][1];

}

if(1==Isfull(board,ROW,COL))

{

return 'Q';

}

return 'C';

}

  • 代码实现

用编译器创建一个工程,然后创建三个源代码,分别命名game.h(函数声明),game.c(自定义函数),test.c(测试)

  1. game.h部分

#define ROW 3

#define COL 3//可以更改棋盘大小

#include<stdio.h>

#include<stdlib.h>

#include<time.h>

void InitBoard(char board[ROW][COL],int row,int col);

void DisplayBoard(char board[ROW][COL],int row,int col);

void Playermove(char board[ROW][COL],int row,int col);

void Computermove(char board[ROW][COL],int row,int col);

char Iswin(char board[ROW][COL],int row,int col);

  1. game.c部分

#include<stdio.h>

#include"game.h"

void InitBoard(char board[ROW][COL],int row,int col)

{

int i=0;

int j=0;

for(i=0;i<row;i++)

{

for(j=0;j<col;j++)

{

board[i][j]=' ';

}

}

}

void DisplayBoard(char board[ROW][COL],int row,int col)

{

int i=0;

for(i=0;i<row;i++)

{

int j=0;

//printf(" %c | %c | %c \n",board[i][0],board[i][1],board[i][2]);

for(j=0;j<col;j++)

{

printf(" %c ",board[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 Playermove(char board[ROW][COL],int row,int col)

{

int x=0,y=0;

printf("玩家走\n");

while(1)

{

printf("请输入坐标");

scanf("%d %d",&x,&y);

if(x>=1&&x<=row&&y>=1&&y<=col)

{

if(board[x-1][y-1]==' ')

{

board[x-1][y-1]='*';

break;

}

else

{

printf("该坐标被占用\n");

}

}

else

{

printf("坐标非法,请重新输入!\n");

}

}

}

void Computermove(char board[ROW][COL],int row,int col)

{

int x=0,y=0;

printf("电脑走\n");

while(1)

{

x=rand()%row;

    y=rand()%col;

if(board[x][y]==' ')

{

board[x][y]='#';

break;

}

}

}

int Isfull(char board[ROW][COL],int row,int col)

{

int i,j;

for(i=0;i<row;i++)

{

for(j=0;j<col;j++)

{

if(board[i][j]==' ')

{

return 0;

}

}

}

return 1;

}

char Iswin(char board[ROW][COL],int row,int col)

{

int i=0;

for(i=0;i<row;i++)

{

if(board[i][0]==board[i][1]&&board[i][1]==board[i][2]&&board[i][1]!=' ')

{

return board[i][1];

}

}

for(i=0;i<col;i++)

{

if(board[0][i]==board[1][i]&&board[2][i]==board[1][i]&&board[1][i]!=' ')

{

return board[0][i];

}

}

if(board[0][0]==board[1][1]&&board[1][1]==board[2][2]&&board[1][1]!=' ')

{

return board[1][1];

}

if(board[2][0]==board[1][1]&&board[1][1]==board[0][2]&&board[1][1]!=' ')

{

return board[1][1];

}

if(1==Isfull(board,ROW,COL))

{

return 'Q';

}

return 'C';

}

  1. test.c部分

#include<stdio.h>

#include"game.h"//引用自己的源文件用""

void menu()

{

printf("***************************\n");

printf("******1. 玩 0. 结束******\n");

printf("***************************\n");

}

void game()

{

char ret=0;

char board[ROW][COL]={0};

InitBoard(board,ROW,COL);

DisplayBoard(board,ROW,COL);

while(1)

{

Playermove(board,ROW,COL);

DisplayBoard(board,ROW,COL);

ret=Iswin(board,ROW,COL);

if(ret!='C')

{

break;

}

Computermove(board,ROW,COL);

DisplayBoard(board,ROW,COL);

ret=Iswin(board,ROW,COL);

if(ret!='C')

{

break;

}

}

if(ret=='*')

{

printf("玩家赢\n");

}

else if(ret=='#')

{

printf("电脑赢\n");

}

else printf("平局\n");

}

void test()

{

int input=0;

srand((unsigned int)time(NULL));

do

{

menu();

printf("请选择");

scanf("%d",&input);

switch(input)

{

case 1:

game();

break;

case 0:

printf("退出游戏\n");

break;

default:

printf("选择错误,请重新选择");

break;

}

}while(input);

}

int main()

{

test();

return 0;

}

代码有点长,如有问题,欢迎指正。

  • 问题描述
  • 流程
  • 详细步骤
  • 代码

  • 问题描述

C语言实现三子棋

  • 流程
  1. 创建游戏开始或退出界面
  2. 创建棋盘并初始化
  3. 打印棋盘
  4. 玩家落子,电脑落子
  5. 判断是否平局
  6. 判断输赢
  7. 返回步骤2

  • 详细步骤

代码分为三部分,包括函数命名,自定义函数,测试

#define ROW 3

#define COL 3

#include<stdio.h>

#include<stdlib.h>

#include<time.h>

void InitBoard(char board[ROW][COL],int row,int col);

void DisplayBoard(char board[ROW][COL],int row,int col);

void Playermove(char board[ROW][COL],int row,int col);

void Computermove(char board[ROW][COL],int row,int col);

char Iswin(char board[ROW][COL],int row,int col);

以上为函数说明,下面介绍自定义 函数

1、界面设置

  1. void menu()
  2. {
  3. printf("***************************\n");
  4. printf("******1. 玩 0. 结束******\n");
  5. printf("***************************\n");
  6. }

  1. 创建并打印棋盘

void DisplayBoard(char board[ROW][COL],int row,int col)

{

int i=0;

for(i=0;i<row;i++)

{

int j=0;

//printf(" %c | %c | %c \n",board[i][0],board[i][1],board[i][2]);

for(j=0;j<col;j++)

{

printf(" %c ",board[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");

}    

}

}

  1. 玩家落子

void Playermove(char board[ROW][COL],int row,int col)

{

int x=0,y=0;

printf("玩家走\n");

while(1)

{

printf("请输入坐标");

scanf("%d %d",&x,&y);

if(x>=1&&x<=row&&y>=1&&y<=col)

{

if(board[x-1][y-1]==' ')

{

board[x-1][y-1]='*';

break;

}

else

{

printf("该坐标被占用\n");

}

}

else

{

printf("坐标非法,请重新输入!\n");//落子坐标超过ROW或COL

}

}

}

  1. 电脑落子

void Computermove(char board[ROW][COL],int row,int col)

{

int x=0,y=0;

printf("电脑走\n");

while(1)

{

x=rand()%row;

    y=rand()%col;

if(board[x][y]==' ')

{

board[x][y]='#';

break;

}

}

}

  1. 判断是否平局

int Isfull(char board[ROW][COL],int row,int col)

{

int i,j;

for(i=0;i<row;i++)

{

for(j=0;j<col;j++)

{

if(board[i][j]==' ')

{

return 0;

}

}

}

return 1;

}

  1. 判断输赢

char Iswin(char board[ROW][COL],int row,int col)

{

int i=0;

for(i=0;i<row;i++)

{

if(board[i][0]==board[i][1]&&board[i][1]==board[i][2]&&board[i][1]!=' ')

{

return board[i][1];

}

}

for(i=0;i<col;i++)

{

if(board[0][i]==board[1][i]&&board[2][i]==board[1][i]&&board[1][i]!=' ')

{

return board[0][i];

}

}

if(board[0][0]==board[1][1]&&board[1][1]==board[2][2]&&board[1][1]!=' ')

{

return board[1][1];

}

if(board[2][0]==board[1][1]&&board[1][1]==board[0][2]&&board[1][1]!=' ')

{

return board[1][1];

}

if(1==Isfull(board,ROW,COL))

{

return 'Q';

}

return 'C';

}

  • 代码实现

用编译器创建一个工程,然后创建三个源代码,分别命名game.h(函数声明),game.c(自定义函数),test.c(测试)

  1. game.h部分

#define ROW 3

#define COL 3//可以更改棋盘大小

#include<stdio.h>

#include<stdlib.h>

#include<time.h>

void InitBoard(char board[ROW][COL],int row,int col);

void DisplayBoard(char board[ROW][COL],int row,int col);

void Playermove(char board[ROW][COL],int row,int col);

void Computermove(char board[ROW][COL],int row,int col);

char Iswin(char board[ROW][COL],int row,int col);

  1. game.c部分

#include<stdio.h>

#include"game.h"

void InitBoard(char board[ROW][COL],int row,int col)

{

int i=0;

int j=0;

for(i=0;i<row;i++)

{

for(j=0;j<col;j++)

{

board[i][j]=' ';

}

}

}

void DisplayBoard(char board[ROW][COL],int row,int col)

{

int i=0;

for(i=0;i<row;i++)

{

int j=0;

//printf(" %c | %c | %c \n",board[i][0],board[i][1],board[i][2]);

for(j=0;j<col;j++)

{

printf(" %c ",board[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 Playermove(char board[ROW][COL],int row,int col)

{

int x=0,y=0;

printf("玩家走\n");

while(1)

{

printf("请输入坐标");

scanf("%d %d",&x,&y);

if(x>=1&&x<=row&&y>=1&&y<=col)

{

if(board[x-1][y-1]==' ')

{

board[x-1][y-1]='*';

break;

}

else

{

printf("该坐标被占用\n");

}

}

else

{

printf("坐标非法,请重新输入!\n");

}

}

}

void Computermove(char board[ROW][COL],int row,int col)

{

int x=0,y=0;

printf("电脑走\n");

while(1)

{

x=rand()%row;

    y=rand()%col;

if(board[x][y]==' ')

{

board[x][y]='#';

break;

}

}

}

int Isfull(char board[ROW][COL],int row,int col)

{

int i,j;

for(i=0;i<row;i++)

{

for(j=0;j<col;j++)

{

if(board[i][j]==' ')

{

return 0;

}

}

}

return 1;

}

char Iswin(char board[ROW][COL],int row,int col)

{

int i=0;

for(i=0;i<row;i++)

{

if(board[i][0]==board[i][1]&&board[i][1]==board[i][2]&&board[i][1]!=' ')

{

return board[i][1];

}

}

for(i=0;i<col;i++)

{

if(board[0][i]==board[1][i]&&board[2][i]==board[1][i]&&board[1][i]!=' ')

{

return board[0][i];

}

}

if(board[0][0]==board[1][1]&&board[1][1]==board[2][2]&&board[1][1]!=' ')

{

return board[1][1];

}

if(board[2][0]==board[1][1]&&board[1][1]==board[0][2]&&board[1][1]!=' ')

{

return board[1][1];

}

if(1==Isfull(board,ROW,COL))

{

return 'Q';

}

return 'C';

}

  1. test.c部分

#include<stdio.h>

#include"game.h"//引用自己的源文件用""

void menu()

{

printf("***************************\n");

printf("******1. 玩 0. 结束******\n");

printf("***************************\n");

}

void game()

{

char ret=0;

char board[ROW][COL]={0};

InitBoard(board,ROW,COL);

DisplayBoard(board,ROW,COL);

while(1)

{

Playermove(board,ROW,COL);

DisplayBoard(board,ROW,COL);

ret=Iswin(board,ROW,COL);

if(ret!='C')

{

break;

}

Computermove(board,ROW,COL);

DisplayBoard(board,ROW,COL);

ret=Iswin(board,ROW,COL);

if(ret!='C')

{

break;

}

}

if(ret=='*')

{

printf("玩家赢\n");

}

else if(ret=='#')

{

printf("电脑赢\n");

}

else printf("平局\n");

}

void test()

{

int input=0;

srand((unsigned int)time(NULL));

do

{

menu();

printf("请选择");

scanf("%d",&input);

switch(input)

{

case 1:

game();

break;

case 0:

printf("退出游戏\n");

break;

default:

printf("选择错误,请重新选择");

break;

}

}while(input);

  • 问题描述
  • 流程
  • 详细步骤
  • 代码

  • 问题描述

C语言实现三子棋

  • 流程
  1. 创建游戏开始或退出界面
  2. 创建棋盘并初始化
  3. 打印棋盘
  4. 玩家落子,电脑落子
  5. 判断是否平局
  6. 判断输赢
  7. 返回步骤2

  • 详细步骤

代码分为三部分,包括函数命名,自定义函数,测试

#define ROW 3

#define COL 3

#include<stdio.h>

#include<stdlib.h>

#include<time.h>

void InitBoard(char board[ROW][COL],int row,int col);

void DisplayBoard(char board[ROW][COL],int row,int col);

void Playermove(char board[ROW][COL],int row,int col);

void Computermove(char board[ROW][COL],int row,int col);

char Iswin(char board[ROW][COL],int row,int col);

以上为函数说明,下面介绍自定义 函数

1、界面设置

  1. void menu()
  2. {
  3. printf("***************************\n");
  4. printf("******1. 玩 0. 结束******\n");
  5. printf("***************************\n");
  6. }

  1. 创建并打印棋盘

void DisplayBoard(char board[ROW][COL],int row,int col)

{

int i=0;

for(i=0;i<row;i++)

{

int j=0;

//printf(" %c | %c | %c \n",board[i][0],board[i][1],board[i][2]);

for(j=0;j<col;j++)

{

printf(" %c ",board[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");

}    

}

}

  1. 玩家落子

void Playermove(char board[ROW][COL],int row,int col)

{

int x=0,y=0;

printf("玩家走\n");

while(1)

{

printf("请输入坐标");

scanf("%d %d",&x,&y);

if(x>=1&&x<=row&&y>=1&&y<=col)

{

if(board[x-1][y-1]==' ')

{

board[x-1][y-1]='*';

break;

}

else

{

printf("该坐标被占用\n");

}

}

else

{

printf("坐标非法,请重新输入!\n");//落子坐标超过ROW或COL

}

}

}

  1. 电脑落子

void Computermove(char board[ROW][COL],int row,int col)

{

int x=0,y=0;

printf("电脑走\n");

while(1)

{

x=rand()%row;

    y=rand()%col;

if(board[x][y]==' ')

{

board[x][y]='#';

break;

}

}

}

  1. 判断是否平局

int Isfull(char board[ROW][COL],int row,int col)

{

int i,j;

for(i=0;i<row;i++)

{

for(j=0;j<col;j++)

{

if(board[i][j]==' ')

{

return 0;

}

}

}

return 1;

}

  1. 判断输赢

char Iswin(char board[ROW][COL],int row,int col)

{

int i=0;

for(i=0;i<row;i++)

{

if(board[i][0]==board[i][1]&&board[i][1]==board[i][2]&&board[i][1]!=' ')

{

return board[i][1];

}

}

for(i=0;i<col;i++)

{

if(board[0][i]==board[1][i]&&board[2][i]==board[1][i]&&board[1][i]!=' ')

{

return board[0][i];

}

}

if(board[0][0]==board[1][1]&&board[1][1]==board[2][2]&&board[1][1]!=' ')

{

return board[1][1];

}

if(board[2][0]==board[1][1]&&board[1][1]==board[0][2]&&board[1][1]!=' ')

{

return board[1][1];

}

if(1==Isfull(board,ROW,COL))

{

return 'Q';

}

return 'C';

}

  • 代码实现

用编译器创建一个工程,然后创建三个源代码,分别命名game.h(函数声明),game.c(自定义函数),test.c(测试)

  1. game.h部分

#define ROW 3

#define COL 3//可以更改棋盘大小

#include<stdio.h>

#include<stdlib.h>

#include<time.h>

void InitBoard(char board[ROW][COL],int row,int col);

void DisplayBoard(char board[ROW][COL],int row,int col);

void Playermove(char board[ROW][COL],int row,int col);

void Computermove(char board[ROW][COL],int row,int col);

char Iswin(char board[ROW][COL],int row,int col);

  1. game.c部分

#include<stdio.h>

#include"game.h"

void InitBoard(char board[ROW][COL],int row,int col)

{

int i=0;

int j=0;

for(i=0;i<row;i++)

{

for(j=0;j<col;j++)

{

board[i][j]=' ';

}

}

}

void DisplayBoard(char board[ROW][COL],int row,int col)

{

int i=0;

for(i=0;i<row;i++)

{

int j=0;

//printf(" %c | %c | %c \n",board[i][0],board[i][1],board[i][2]);

for(j=0;j<col;j++)

{

printf(" %c ",board[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 Playermove(char board[ROW][COL],int row,int col)

{

int x=0,y=0;

printf("玩家走\n");

while(1)

{

printf("请输入坐标");

scanf("%d %d",&x,&y);

if(x>=1&&x<=row&&y>=1&&y<=col)

{

if(board[x-1][y-1]==' ')

{

board[x-1][y-1]='*';

break;

}

else

{

printf("该坐标被占用\n");

}

}

else

{

printf("坐标非法,请重新输入!\n");

}

}

}

void Computermove(char board[ROW][COL],int row,int col)

{

int x=0,y=0;

printf("电脑走\n");

while(1)

{

x=rand()%row;

    y=rand()%col;

if(board[x][y]==' ')

{

board[x][y]='#';

break;

}

}

}

int Isfull(char board[ROW][COL],int row,int col)

{

int i,j;

for(i=0;i<row;i++)

{

for(j=0;j<col;j++)

{

if(board[i][j]==' ')

{

return 0;

}

}

}

return 1;

}

char Iswin(char board[ROW][COL],int row,int col)

{

int i=0;

for(i=0;i<row;i++)

{

if(board[i][0]==board[i][1]&&board[i][1]==board[i][2]&&board[i][1]!=' ')

{

return board[i][1];

}

}

for(i=0;i<col;i++)

{

if(board[0][i]==board[1][i]&&board[2][i]==board[1][i]&&board[1][i]!=' ')

{

return board[0][i];

}

}

if(board[0][0]==board[1][1]&&board[1][1]==board[2][2]&&board[1][1]!=' ')

{

return board[1][1];

}

if(board[2][0]==board[1][1]&&board[1][1]==board[0][2]&&board[1][1]!=' ')

{

return board[1][1];

}

if(1==Isfull(board,ROW,COL))

{

return 'Q';

}

return 'C';

}

  1. test.c部分

#include<stdio.h>

#include"game.h"//引用自己的源文件用""

void menu()

{

printf("***************************\n");

printf("******1. 玩 0. 结束******\n");

printf("***************************\n");

}

void game()

{

char ret=0;

char board[ROW][COL]={0};

InitBoard(board,ROW,COL);

DisplayBoard(board,ROW,COL);

while(1)

{

Playermove(board,ROW,COL);

DisplayBoard(board,ROW,COL);

ret=Iswin(board,ROW,COL);

if(ret!='C')

{

break;

}

Computermove(board,ROW,COL);

DisplayBoard(board,ROW,COL);

ret=Iswin(board,ROW,COL);

if(ret!='C')

{

break;

}

}

if(ret=='*')

{

printf("玩家赢\n");

}

else if(ret=='#')

{

printf("电脑赢\n");

}

else printf("平局\n");

}

void test()

{

int input=0;

srand((unsigned int)time(NULL));

do

{

menu();

printf("请选择");

scanf("%d",&input);

switch(input)

{

case 1:

game();

break;

case 0:

printf("退出游戏\n");

break;

default:

printf("选择错误,请重新选择");

break;

}

}while(input);

}

int main()

{

test();

return 0;

}

代码有点长,如有问题,欢迎指正。

}

int main()

{

test();

return 0;

}

代码有点长,如有问题,欢迎指正。

上一篇:无脑三子棋(小游戏可以这样简单)


下一篇:三子棋(附源码)