c语言实现简单三子棋程序

简介: c语言实现简单三子棋程序

一. 分析问题


二. 思考所需步骤


(1),菜单选择界面(开始游戏和退出游戏)


(2),创建棋盘及其初始化


(3),打印棋盘(应提前规定棋盘规格)


(4),玩家下棋


(5),电脑下棋


(6),判断输赢( a.玩家赢 b.电脑赢   c.平局)


 三,代码实现


1,菜单选择界面打印

void menu()
{
  printf("*************************************\n");
  printf("**********1.play      0.exit*********\n");
  printf("*************************************\n");
printf("请选择:\n");
    scanf("%d", &input);
    switch(input)
    {
    case 1:
      printf("三子棋\n");
      game();
      break;
    case 0:
      printf("游戏结束!\n");
      break;
    default:
      printf("输入错误,请重新输入!\n");
      break;
    }
}

2,创建棋盘及其初始化

 //棋盘规格的规定(此处为3*3)
 #define ROW  3
 #define COL  3
  //用数组存放棋盘信息
  char board[ROW][COL] = { 0 };
  //初始化棋盘
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] = ' ';
    }
  }
}

3,棋盘打印

//打印棋盘
void DisplayBoard(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++)
    {
      printf(" %c ", board[i][j]);
      if (j < col-1)
        printf("|");
    }
    printf("\n");
    for (j = 0; j < col; j++)
    {
      printf("---");
      if(j<col-1)
      printf("|");
    }
    printf("\n");
  }
}

4,玩家下棋

//玩家下棋
void PlayerMove(char board[ROW][COL], int row, int col)
{
  int x = 0;
  int y = 0;
  printf("玩家走:\n");
  while (1)
  {
  printf("请输入要下的坐标:\n");
  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");
    }
  }
}

5,电脑下棋(使用随机函数随机生成)

#include<time.h>
#include<stdlib.h>
//随机数的生成
srand((unsigned int)time(NULL));
//电脑下棋
void ComputerMove(char board[ROW][COL], int row, int col)
{
  int x = 0;
  int y = 0;
  printf("电脑走\n");
  while (1)
  {
    x = rand() % row;
    y = rand() % col;
    if (board[x][y] == ' ')
    {
      board[x][y] = '#';
      break;
    }
  }

6,判断输赢

1,此处约定返回结果的含义:

(1)‘ * ’ 表示玩家获胜

(2)‘#’ 表示电脑获胜

(3)’C’ 表示胜负未分

(4) ‘Q’ 表示和棋(棋盘满了却还未分出胜负)


2.判定玩家胜利

(1)判定所有的行

(2)判定所有的列

(3)判定两条对角线

//判断输赢
char IsWin(char board[ROW][COL], int row, int col)
{
  int i = 0;
  int j = 0;
  //判断横三行
  for (i = 0; i < row; i++)
  {
    if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][2] != ' ')
    {
      return board[i][1];
    }
  }
  //判断竖三行
  for (j = 0; j < row; j++)
  {
    if (board[0][j] == board[1][j] && board[1][j] == board[2][j] && board[1][j] != ' ')
    {
      return board[1][j];
    }
  }
  //判断对角线
  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';
  }

6.显示输赢结果

if (IsWin(board, ROW, COL)== '*')
    {
      printf("玩家赢\n");
      break;
    }
    else if (IsWin(board, ROW, COL)== '#')
    {
      printf("电脑赢\n");
      break;
    }
    else if (IsWin(board, ROW, COL) == 'Q')
    {
      printf("平局\n");
      break;
    }
    else
      printf("继续\n");
  }
}

结果显示

image.png

image.png

image.png

相关文章
|
2月前
|
存储 自然语言处理 编译器
【C语言】编译与链接:深入理解程序构建过程
【C语言】编译与链接:深入理解程序构建过程
|
4月前
|
存储 算法 C语言
"揭秘C语言中的王者之树——红黑树:一场数据结构与算法的华丽舞蹈,让你的程序效率飙升,直击性能巅峰!"
【8月更文挑战第20天】红黑树是自平衡二叉查找树,通过旋转和重着色保持平衡,确保高效执行插入、删除和查找操作,时间复杂度为O(log n)。本文介绍红黑树的基本属性、存储结构及其C语言实现。红黑树遵循五项基本规则以保持平衡状态。在C语言中,节点包含数据、颜色、父节点和子节点指针。文章提供了一个示例代码框架,用于创建节点、插入节点并执行必要的修复操作以维护红黑树的特性。
110 1
|
4月前
|
NoSQL 编译器 程序员
【C语言】揭秘GCC:从平凡到卓越的编译艺术,一场代码与效率的激情碰撞,探索那些不为人知的秘密武器,让你的程序瞬间提速百倍!
【8月更文挑战第20天】GCC,GNU Compiler Collection,是GNU项目中的开源编译器集合,支持C、C++等多种语言。作为C语言程序员的重要工具,GCC具备跨平台性、高度可配置性及丰富的优化选项等特点。通过简单示例,如编译“Hello, GCC!”程序 (`gcc -o hello hello.c`),展示了GCC的基础用法及不同优化级别(`-O0`, `-O1`, `-O3`)对性能的影响。GCC还支持生成调试信息(`-g`),便于使用GDB等工具进行调试。尽管有如Microsoft Visual C++、Clang等竞品,GCC仍因其灵活性和强大的功能被广泛采用。
138 1
|
13天前
|
存储 缓存 算法
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式,强调了合理选择数据结构的重要性,并通过案例分析展示了其在实际项目中的应用,旨在帮助读者提升编程能力。
33 5
|
4月前
|
编译器 C语言 计算机视觉
C语言实现的图像处理程序
C语言实现的图像处理程序
175 0
|
13天前
|
C语言
C语言编程中,错误处理至关重要,能提升程序的健壮性和可靠性
C语言编程中,错误处理至关重要,能提升程序的健壮性和可靠性。本文探讨了C语言中的错误类型(如语法错误、运行时错误)、基本处理方法(如返回值、全局变量、自定义异常处理)、常见策略(如检查返回值、设置标志位、记录错误信息)及错误处理函数(如perror、strerror)。强调了不忽略错误、保持处理一致性及避免过度处理的重要性,并通过文件操作和网络编程实例展示了错误处理的应用。
45 4
|
12天前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
37 1
|
13天前
|
网络协议 物联网 数据处理
C语言在网络通信程序实现中的应用,介绍了网络通信的基本概念、C语言的特点及其在网络通信中的优势
本文探讨了C语言在网络通信程序实现中的应用,介绍了网络通信的基本概念、C语言的特点及其在网络通信中的优势。文章详细讲解了使用C语言实现网络通信程序的基本步骤,包括TCP和UDP通信程序的实现,并讨论了关键技术、优化方法及未来发展趋势,旨在帮助读者掌握C语言在网络通信中的应用技巧。
23 2
|
13天前
|
程序员 C语言
C语言中的指针既强大又具挑战性,它像一把钥匙,开启程序世界的隐秘之门
C语言中的指针既强大又具挑战性,它像一把钥匙,开启程序世界的隐秘之门。本文深入探讨了指针的基本概念、声明方式、动态内存分配、函数参数传递、指针运算及与数组和函数的关系,强调了正确使用指针的重要性,并鼓励读者通过实践掌握这一关键技能。
29 1
|
2月前
|
存储 文件存储 C语言
深入C语言:文件操作实现局外影响程序
深入C语言:文件操作实现局外影响程序