双人五子棋

  • 前言
  • 一、五子棋的元素
  • 二、五子棋规则(简单)
  • 三、主要功能的设计
    • 1.头文件和宏定义
    • 2.初始化棋盘
    • 3.打印棋盘
    • 4.判断输赢
    • 5.辅助函数
    • 6.主函数
  • 四、程序结果展示

前言

五子棋相信大家都玩过,今天就来讲一下如何用C语言来实现一个简单版的双人五子棋

          

一、五子棋的元素

1.棋子
 棋子符号包括:“X”和“0”
2.棋盘
 棋盘符号包括:“+”
 棋盘行数为15,列数为15,使用宏定义:
 #define ROWS 15 //行 国际标准棋盘 15 * 15
 #define COLS 15 //列

二、五子棋规则(简单)

“X”和“0”双方同类型棋子先形成五子连珠就获胜(行方向、列方向、主对角线、副对角线)

三、主要功能的设计

1.头文件和宏定义

#include <stdio.h>
#include <stdlib.h>
#include <string.h>#define ROWS 15  //行 国际标准棋盘 15 * 15
#define COLS 15 //列char board[ROWS][COLS]; // 棋盘

2.初始化棋盘

void init_board() // 初始化棋盘
{int i, j;for (i = 0; i < ROWS; i++){for (j = 0; j < COLS; j++){board[i][j] = '+';}}
}

3.打印棋盘

void print_board() { // 打印棋盘int i, j;printf(" "); printf(" "); printf(" ");//空格调整for (i = 0; i <= 9; i++)//打印列标志{printf("%d ", i);}printf("A ");//A代替10,实现布局整齐printf("B ");//B代替11,实现布局整齐printf("C ");//C代替12,实现布局整齐printf("D ");//D代替13,实现布局整齐printf("E ");//E代替14,实现布局整齐printf("\n");for (i = 0; i < ROWS; i++)//一行一行地打印{if (i <= 9){printf("%d  ", i);//打印行标志0-9}else{printf("%d ", i);//打印行标志10-14}for (j = 0; j < COLS; j++)//打印棋盘{printf("%c ", board[i][j]);}printf("\n");}
}

4.判断输赢

以每个棋子为中心,判断行方向、列方向、主对角线、副对角线是否形成同类型的五子连珠

int is_win(char c) // 判断是否胜利
{int i, j, k;for (i = 0; i < ROWS; i++)//一颗一颗扫描判断{for (j = 0; j < COLS; j++){if (board[i][j] == c){for (k = 1; k <5; k++){if (i + k < ROWS && board[i + k][j] == c &&i + k - 1 >= 0 && board[i + k - 1][j] == c &&i + k - 2 >= 0 && board[i + k - 2][j] == c &&i + k - 3 >= 0 && board[i + k - 3][j] == c &&i + k - 4 >= 0 && board[i + k - 4][j] == c)//判断列五颗棋子是否相同{return 1;}if (j + k < COLS && board[i][j + k] == c &&j + k - 1 >= 0 && board[i][j + k - 1] == c &&j + k - 2 >= 0 && board[i][j + k - 2] == c &&j + k - 3 >= 0 && board[i][j + k - 3] == c &&j + k - 4 >= 0 && board[i][j + k - 4] == c)//判断行五颗棋子是否相同{return 1;}if (i + k < ROWS && j + k < COLS && board[i + k][j + k] == c &&i + k - 1 >= 0 && j + k - 1 >= 0 && board[i + k - 1][j + k - 1] == c &&i + k - 2 >= 0 && j + k - 2 >= 0 && board[i + k - 2][j + k - 2] == c &&i + k - 3 >= 0 && j + k - 3 >= 0 && board[i + k - 3][j + k - 3] == c &&i + k - 4 >= 0 && j + k - 4 >= 0 && board[i + k - 4][j + k - 4] == c)//判断主对角线五颗棋子是否相同{return 1;}if (i + k < ROWS && j - k >= 0 && board[i + k][j - k] == c &&i + k - 1 >= 0 && j - k + 1 < COLS && board[i + k - 1][j - k + 1] == c &&i + k - 2 >= 0 && j - k + 2 < COLS && board[i + k - 2][j - k + 2] == c &&i + k - 3 >= 0 && j - k + 3 < COLS && board[i + k - 3][j - k + 3] == c &&i + k - 4 >= 0 && j - k + 4 < COLS && board[i + k - 4][j - k + 4] == c)//判断副对角线五颗棋子是否相同{return 1;//有一方胜利}}}}}return 0;
}

5.辅助函数

void safe_flush(FILE* fp)//清除scanf缓存区
{int ch;while ((ch = fgetc(fp)) != EOF && ch != '\n');
}

6.主函数

int main()
{int x, y, i = 0;char c = 'X';//  X方  0方char k;//再战选择start:   //goto标志system("cls");//清屏init_board();  //初始化棋盘print_board(); //打印棋盘while (1){printf("请%c方输入坐标(x,y): ", c);scanf("%d,%d", &x, &y);safe_flush(stdin);//清除scanf缓存区if (x < 0 || x >= ROWS || y < 0 || y >= COLS){printf("坐标不合法,请重新输入!\n");continue;}if (board[x][y] != '+'){printf("该位置已经有棋子,请重新输入!\n");continue;}system("cls");//清屏board[x][y] = c;print_board();if (is_win(c)){printf("%c方胜利!\n", c);break;}i++;if (i == ROWS * COLS)//棋盘已下满{printf("平局!\n");break;}c = (c == 'X' ? 'O' : 'X');//交换双方下子}printf("还要再来一把吗?输入y或n:>");//从开选择scanf("%c", &k);safe_flush(stdin);while (k != 'y' && k != 'n') {printf("输入错误,请重新输入\n"); scanf("%c", &k);safe_flush(stdin);}while (k == 'y'){goto start;}printf("谢谢使用!\n");return 0;
}

四、程序结果展示

1.程序开始

2.“X”输入坐标5,5

3.“0”输入坐标6,7

4.输入错误坐标

5.形成五子连珠(行)

6.形成五子连珠(列)

7.形成五子连珠(主对角线)

8.形成五子连珠(副对角线)

9.输入y再来一把

C语言实践——双人五子棋(简易版)相关推荐

  1. C语言实践——双人五子棋(进阶版)

    双人五子棋 前言 一.棋盘的美化 二.棋子的美化 三.棋盘的打印 四.控制台修改颜色 五.五子棋源代码 前言  上一篇文章讲了如何用C语言写一个简易的双人五子棋小游戏,但是存在一些缺陷,比如棋盘太&q ...

  2. ❤️C语言通讯录管理系统(简易版)❤️

    ❤️C语言通讯录管理系统(简易版)❤️

  3. C语言扫雷游戏(简易版)

    前言 经过学习数组.函数.循环语句.选择语句等C语言的一些基础知识后,我想借助编写扫雷小游戏来对所学知识进行一个巩固.游戏只会实现一些基本的功能,展开.标记雷.取消雷等不实现(还不会). 1.游戏编写 ...

  4. 【C语言初阶】——简易版·扫雷(9*9)【运行逻辑思维导图+细节讲解+源码】【初级】

    目录 一.扫雷游戏的运行逻辑 二.代码逻辑讲解+源码 1.打印一个简易的游戏开始菜单 2.创建数组储存数据并初始化数组 代码逻辑讲解 源码 3.布置雷 代码逻辑讲解 源码 4.排雷 代码逻辑 源码 三 ...

  5. c语言HTTP服务器,超级简易版。

    算是对linux多线程的复习把,尝试这用socket写了一个简单的HTTP服务器,当访问它的时候它会给你发送一个HTML文件,这个HTML文件需要自己写. 代码: #include <stdio ...

  6. 类 Pascal语言词法分析实验(简易版)

    一. 实验目的 设计.编制并调试一个词法分析程序,加深对词法分析原理的理解. 二. 实验要求 2.1 待分析的简单的词法 (1)关键字: begin if then while do end 所有的关 ...

  7. c语言小游戏 精简_C语言开发简易版扫雷小游戏

    C 语言开发简易版扫雷小游戏 本文给大家分享的是一个使用 C 语言开发的命令行下的简易版扫雷小游戏, 本身没有什么太 多的技术含量, 只不过是笔者的处女作, 所以还是推荐给大家, 希望对大家学习 C ...

  8. c语言实现学生二科成绩的单链表,c++链表实现学生成绩管理系统(简易版)

    #include using namespace std; typedef struct student{ int id;//学号 string sex; string name; int cpp;/ ...

  9. C语言编程练手必备,C 语言快速实现五子棋!

    五子棋大家一定都玩过,想不想试着用 C 语言来实现一个简易版的五子棋呢?下面就让我们现在开始,用最简单易懂的代码来编写一个控制台下的五子棋,并逐步完善它,每个人都能轻松学会哦! 下面是小编整理好的一套 ...

最新文章

  1. Github标星57k+,热榜第一,用Python实现所有算法
  2. 动手打造自己强大的右键菜单
  3. Java ArrayList的实现原理详解
  4. Delphi7函数大全
  5. 【4K HDR】2020年东京圣诞灯会/
  6. catch 语句的参数
  7. linux 套接口文件_继上一篇,继续介绍linux 套接口
  8. OpenCV之滑动条的创建和使用
  9. Linux_free(buffer与cache区别)
  10. markDown零碎整理
  11. hibernate5.0映射配置文件核心配置文件数据更新丢失
  12. 最新多种方式, 判断客户端IP是国内还是国外?
  13. PHP程序员简历模板
  14. 微信小程序富文本编辑器
  15. postgresql 查找慢sql之二: pg_stat_statements
  16. 2022年卫浴行业报告:套系化+智能化拓宽边际,箭牌家居内资领航
  17. vue的生命周期(详细)
  18. 什么是短视频电商,短视频电商的商业模式标题】
  19. linux里面sftp命令,Linux中sftp命令起什么作用呢?
  20. flask+gunicorn部署

热门文章

  1. 如何实现windows命令提示符的tab补全
  2. 虚拟机装域服务器的实训小结,虚拟机实训报告.doc
  3. intent跳转和转场动画
  4. vivado时序分析 实例
  5. 内存测试内存检测工具
  6. 两款苹果cms仿电影先生的
  7. 0x00000001java_「十六进制表示」0x00000001是个啥?32位表示、十六进制表示 - seo实验室...
  8. excel--转化IP地址为十进制
  9. numpy的数字统计函数
  10. Jacobi迭代法分量形式matlab,实验4 Jacobi迭代法和GS迭代