当前位置: 首页 > news >正文

c语言 写一个五子棋

c语言

IsWin判赢

display 画 10 x 10 的棋盘

判断落子的坐标是否已有棋子

判断落子坐标范围是否超出范围

// 五子棋
#include <stdio.h>
#include <stdlib.h>// 画棋盘 10 x 10的棋盘,len为行数
void display(char map[][10], int len)
{system("clear");printf("   0 1 2 3 4 5 6 7 8 9\n");for (int i = 0; i < len; i++) {printf("%d ", i);for (int j = 0; j < 10; j++) {printf("|%c", map[i][j]);}printf("|\n");}
}// 判断是否赢棋
int IsWin(char map[][10], int len, int x, int y)
{int xx;int yy;int saves = 0;int count = 1;// 判断是否棋盘下满for (int i = 0; i < len; i++) {for (int j = 0; j < 10; j++) {if (map[i][j] == ' ') {saves += 1;}}}if (saves == 0) {printf("棋盘下满,平局!\n");return -1;}//判断赢棋,从横、纵、斜、反斜四个方向判断// 横向判断// count == 1 是因为下面 for循环判断是从坐标的横移左一个、横移右一个开始判断的for (yy = y-1; yy > -1; yy--) {if (map[x][yy] == map[x][y] && map[x][y] != ' ') {count += 1;}}for (yy = y+1; yy < 10; yy++) {if (map[x][yy] == map[x][y] && map[x][y] != ' ') {count += 1;}}if (count >= 5) {if (map[x][y] == 'O') {printf("白棋赢\n");return 1;} else {printf("黑棋赢\n");return 2;}}count = 1;// 纵向判断for (xx = x-1; xx > -1; xx--) {if (map[xx][y] == map[x][y] && map[x][y] != ' ') {count += 1;}}for (xx = x+1; xx < len; xx++) {if (map[xx][y] == map[x][y] && map[x][y] != ' ') {count += 1;}}if (count >= 5) {if (map[x][y] == 'O') {printf("白棋赢\n");return 1;} else {printf("黑棋赢\n");return 2;}}count = 1;// 反斜方向判断for (xx = x-1,yy = y + 1; xx > -1 && yy < 10; xx--,yy++) {if (map[xx][yy] == map[x][y] && map[x][y] != ' ') {count += 1;}}for (xx= x+1,yy = y-1; xx < len && yy > -1; yy--,xx++) {if (map[xx][yy] == map[x][y] && map[x][y] != ' ') {count += 1;}}if (count >= 5) {if (map[x][y] == 'O') {printf("白棋赢\n");return 1;} else {printf("黑棋赢\n");return 2;}}count = 1;// 斜线 方向判断for (xx = x-1,yy = y - 1; xx > -1 && yy > -1; xx--,yy--) {if (map[xx][yy] == map[x][y] && map[x][y] != ' ') {count += 1;}}for (xx= x+1,yy = y+1; xx < len && yy < 10; yy++,xx++) {if (map[xx][yy] == map[x][y] && map[x][y] != ' ') {count += 1;}}if (count >= 5) {if (map[x][y] == 'O') {printf("白棋赢\n");return 1;} else {printf("黑棋赢\n");return 2;}}return 0;
}int main(void)
{char map[10][10] = {};for (int i = 0; i < 10; i++) {for (int j = 0; j < 10; j++) {map[i][j] = ' ';}}display(map, 10);int x = 0, y = 0,ret = -1;while (1) {while (1) {printf("白旗落子\n"); // 'O'printf("请输入横坐标:");scanf("%d", &x);printf("请输入纵坐标:");scanf("%d", &y);if (x >= 0 && x <= 9 && y >=0 && y <= 9) {if (map[x][y] != ' ') {printf("该坐标已落子,请重新输入坐标\n");continue;} else {map[x][y] = 'O';display(map, 10);break;}}else {printf("输入坐标超出棋盘范围,请重新输入\n");continue;}}ret = IsWin(map, 10, x, y);if (ret != 0) {break;}while (1) {printf("黑旗落子\n"); // 'X'printf("请输入横坐标:");scanf("%d", &x);printf("请输入纵坐标:");scanf("%d", &y);if (x >= 0 && x <= 9 && y >=0 && y <= 9) {if (map[x][y] != ' ') {printf("该坐标已落子,请重新输入坐标!\n");continue;} else {map[x][y] = 'X';display(map, 10);break;}}else {printf("输入坐标超出棋盘范围,请重新输入!\n");continue;}}ret = IsWin(map, 10, x, y);if (ret != 0) {break;}}return 0;
}    

http://www.xdnf.cn/news/473599.html

相关文章:

  • 服务器选购指南:从零开始了解服务器
  • 【GitHub加速地址】
  • 比亚迪跨界降维打击!将正式宣布跨界,进入两三轮电动车电池市场
  • vue插槽的实例详解
  • 缺乏需求优先级划分时,如何合理分配资源?
  • python-修改图片背景色
  • java分布式服务的高可用处理
  • 优化算法加速深度学习模型训练
  • 《棒球百科》市运会是什么级别的比赛·棒球1号位
  • 一种改进DEIM(CVPR2025)的简单示例
  • 前端学习:align-items 和 justify-content 概念和区别
  • 图片通过滑块小图切换大图放大镜效果显示
  • SDC命令详解:使用get_pins命令进行查询
  • Vue.js---避免无限递归循环 调度执行
  • Weblogic SSRF漏洞复现(CVE-2014-4210)【vulhub靶场】
  • 黑马Java基础笔记-11
  • 深度学习之用CelebA_Spoof数据集搭建一个活体检测-训练好的模型用MNN来推理
  • Turbo C++
  • 数据驱动下的具身智能进化范式
  • 专项智能练习(定义判断)
  • 学习笔记:黑马程序员JavaWeb开发教程(2025.4.4)
  • threejs 大场景优化方案(代码层)
  • pycharm中qthread中的run函数debug不上的问题
  • 深度学习中的提示词优化:梯度下降全解析
  • 钉钉数据与金蝶云星空的无缝集成解决方案
  • mavgenerate 在 win11 下环境搭建注意问题
  • Kuberbetes-CA证书过期解决方案
  • linux系统中如何校准时间
  • windows、Ubuntu、Debian 添加静态路由
  • 从零开始学习PX4源码22(位置控制器---加速度部分理解)