1.游戏开始界面

void menu()
{printf("**********************\n");printf("** 1.play    0.exit **\n");printf("**********************\n");}

}

2.游戏具体逻辑

void game()
{//存储数据 - 二维数组char board[ROW][COL];//初始化棋盘 - 初始化空格inboard(board, ROW, COL);//ROW COL 为棋盘的长和宽,在这里不直接使用3和3是因为便于修改棋盘//打印一下棋盘 - 本质是打印数组的内容displayboard(board, ROW, COL);char ret = 0;//接受游戏状态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");}}

3.打印开始界面,并选择是否进入游戏

void test()
{int input;//使用srand生成随机数srand((unsigned int)time(NULL));do{menu();printf("请选择>");scanf("%d", &input);switch (input){//选择1进入游戏。case 1:game();break;case 0:printf("退出游戏\n");break;default:printf("输入有误,请重新输入\n");break;}} while (input);}

4.棋盘的初始化

void inboard(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] = ' ';}}
}

5.打印棋盘的分隔符

void displayboard(char board[ROW][COL], int row, int  col)
{int i = 0;for (i = 0; i < row; i++){int j = 0;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");}}
}

6.打印出的棋盘

7. 玩家与电脑相互的落子

void playermove(char board[ROW][COL],int  row,int  col)
{int x = 0;int y = 0;while (1){printf("玩家走>\n");printf("请输入要下的坐标:>");scanf("%d %d", &x, &y);//判断输入坐标的合法性//x和y减一的意思是,数组为0 0的位置,玩家实际看到的坐标为1 1if (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;int y = 0;printf("电脑走>\n");//循环的意义为,如果电脑随机数的坐标被占用,则重新生成一个随机数,while (1){//将生成的随机数和棋盘的长和宽求余,获得坐标x = rand() % row;y = rand() % col;if (board[x][y] == ' '){//与玩家落子逻辑相同board[x][y] = '#';break;}}
}

8.判断游戏是否获胜

//这里仅列举3*3棋盘的获胜判断(其余情况我不会)
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][0] != ' '){return board[i][1];}}//竖三列for (i = 0; i < col; i++){if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[1][i] != ' '){return board[1][i];}}//斜三判断if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[1][1] != ' '){return board[1][1];}if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] != ' '){return board[1][1];}//判断是否平局int ret = IsFull(board, ROW, COL);if (ret == 1)return 'Q';return 'C';}

9.判断棋盘是否下满

//返回0代表棋盘未满,返回1代表棋盘已满
int  IsFull(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++){if (board[i][j] == ' ')return 0;}}return 1;
}

10.函数头文件

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define ROW 3
#define COL 3
void inboard(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);
int  IsFull(char board[ROW][COL], int row, int col);
//判断四种状态:
//1.玩家胜利----'*'
//2.电脑获胜----'#'
//3.平局    ----'Q'
//4.继续    ----'C'

11.函数具体运行

//test函数在上方
int main()
{test();return 0;
}

使用C语言写一个三子棋相关推荐

  1. 【牛客刷题】上手用C语言写一个三子棋小游戏超详解哦(电脑优化)

    作者:[南航科院小张 南航科院小张的博客 专栏:从c语言的入门到进阶 学习知识不只是要懂,还要会用:想要找到好的工作,这里给大家介绍一件可以斩获诸多大厂offer的利器–牛客网 点击免费注册和我一起开 ...

  2. vs2010c语言小游戏,用C语言写一个三子棋小游戏(用VS2010实现,加强版)

    前几天写了一个三子棋小游戏,但是比较简单,因为以前写的游戏棋盘只能是3x3那么大.今天对那个程序做了两点改进: 1.现在可以实现在任意大小的棋盘上下棋了. 2.因为棋盘可能变大,为了玩家方便确定坐标, ...

  3. 手把手教你如何写一个三子棋/N子棋的小游戏

    这里写目录标题 第一步 游戏进入界面 第二步,初始化棋盘 第三步,打印棋盘 第四步,玩家和电脑下棋 第五步,判断输赢 三子棋或者N子棋怎么写? 让我们先来玩一把.再来看看怎么写. 程序运行界面 1为玩 ...

  4. 【C语言/C++】三子棋游戏(数组知识扩充)

    文章目录 1.引言 2.代码规划 3.构思代码 4.代码模块实现 1.游戏界面功能 2.初始化棋盘 3.打印棋盘 4.玩家下棋逻辑 5.简易电脑下棋逻辑 6.判断胜负 7.判断游戏是否平局 1.引言 ...

  5. C语言,制作三子棋游戏

    三子棋游戏是一个很好地数组应用实例,在这篇博客中我将分享我在初学C语言时编写三子棋游戏的思路和过程. 1.模块设置 设置一个测试模块test.c和一个函数模块game.c,测试模块放置主函数,函数模块 ...

  6. 【C语言五子棋、三子棋人机对战篇的详细介绍】

    C语言--五子棋.井字棋人机对"战" 针对 "[C语言实现五子棋.三子棋人机对战,包含电脑人工智能对战(可攻可守)](非标题党)" 的详细介绍 五子棋.三子棋人 ...

  7. C语言实现简易三子棋,支持双人对战,电脑可拦截

    在学习二维数组后我们加以应用能写出三子棋这样一个小游戏.具体实现并不复杂. 基本思路: 游戏首先打印菜单,由我们选择单人游戏,双人游戏或退出游戏. 三子棋需要一个棋盘,我们可以通过循环打印来构造一个简 ...

  8. c语言的十进制转十六进制字符串,用c语言写一个函数把十进制转换成十六进制,该如何处理...

    用c语言写一个函数把十进制转换成十六进制 用c语言写一个函数把十进制转换成十六进制 网上找到一些,感觉有占乱 分享到: ------解决方案-------------------- #include ...

  9. python restful api_用Python语言写一个restful API

    本文主要向大家介绍了用Python语言写一个restful API,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助. """ package.modul ...

最新文章

  1. 取消chrome下input和textarea的聚焦边框
  2. 环形缓冲区实现类(Delphi)
  3. 堆栈溢出从入门到提高
  4. mysql generaton_Mysql 集成随机唯一id mysql unique number generation
  5. JAVAWEB入门之Sevlet的执行原理
  6. 真!长!啊!中国校名最长的学校竟然有55个字!
  7. JAVA面试题:你怎么设计一个消息队列?
  8. pass样本量_基于PASS两样本均数比较的样本量计算
  9. linux操作系统实用教程课后答案,Linux操作系统案例教程课后习题答案
  10. stm32f103rc片内Flash使用FAL库配置说明
  11. Python量化分析,计算KDJ
  12. css中相对长度单位_看看CSS中的长度单位
  13. HTML5 ——学习笔记整理
  14. Nexus私服 (一)
  15. Guides-旅游类App原型分享
  16. STM32单片机TTS温度播报系统 DS18B20 LCD1602
  17. ubuntu14.04更换国内软件源的方法
  18. 开放平台API接口加密,签名策略
  19. 3转自 饮水思源 bbs.sjtu.edu.cn·[FROM: 202.120.25.97]
  20. 庄小焱——个人基本介绍

热门文章

  1. uniapp开发微信公众号授权
  2. ubuntu18.04LTS安装盘制作教程(搬运)
  3. reaper:初入界面
  4. windows启动NTP服务器详细步骤
  5. sql建表+主键+外键
  6. xftp无法连接到虚拟机CentOS7
  7. cad lisp 微盘 程序_CAD LISP 程序(精校版本)
  8. 关于Win7 x64 Shadow SSDT 的探索和 Inline HOOK
  9. Problem - 1042D - D. Petya and Array(树状数组)
  10. 不满足现在,渴望突破自我,增加知识体系,改变观念,破茧重生!