简单的C语言五子棋(两种模式:移动光标输入坐标和移动光标按键)

五子棋:
需要的数据:
1、定义棋盘数组
2、定义变量用于记录棋子位置
3、定义角色变量
业务逻辑:
是否需要对数据进行初始化
for(;; )
{
1、清理屏幕,显示棋盘
2、落子
坐标要合法,原位置不能有棋子
3、检查是否形成五子
4、切换角色
}


直接上源码:

第一种(移动光标输入坐标):

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <getch.h>// 棋盘
char board[15][15];
// 棋子坐标
char kx = 7 , ky = 7;
// 角色
char role = '@';// 显示棋盘
void show_board(void)
{system("clear");for(int i=0; i<15; i++){for(int j=0; j<15; j++){if(board[i][j]){printf(" %c",board[i][j]);}else{printf(" *");}}printf("\n");}
}
// 落子
void get_key(void)
{for(;;){printf("请%c输入棋子位置(x y):",role);scanf("%hhd%hhd",&kx,&ky);if(kx >=0 && kx<15 && ky>=0 && ky<15 && !board[kx][ky]){board[kx][ky] = role;return;}}
}
// 检查五子
bool check_board(void)
{int cnt = 0;for(int y=ky-1; y>=0 && board[kx][y]==board[kx][ky]; y--) // 左{ cnt++;}for(int y=ky+1; y<15 && board[kx][y]==board[kx][ky]; y++) // 右{ cnt++;}if(cnt >= 4) return true;cnt = 0;for(int x=kx-1; x>=0 && board[x][ky]==board[kx][ky]; x--) // 上{ cnt++;}for(int x=kx+1; x<15 && board[x][ky]==board[kx][ky]; x++) // 下{ cnt++;}if(cnt >= 4) return true;cnt = 0;for(int x=kx-1,y=ky-1; x>=0 && y>=0 && board[x][y]==board[kx][ky]; x--,y--) // 左上{ cnt++;}for(int x=kx+1,y=ky+1; x<15 && y<15 && board[x][y]==board[kx][ky]; x++,y++) // 右下{ cnt++;}if(cnt >= 4) return true;cnt = 0;for(int x=kx-1,y=ky+1; x>=0 && y<15 && board[x][y]==board[kx][ky]; x--,y++) // 右上{ cnt++;}for(int x=kx+1,y=ky-1; x<15 && y>=0 && board[x][y]==board[kx][ky]; x++,y--) // 左下{ cnt++;}if(cnt >= 4) return true;return false;
}
int main()
{for(;;){show_board();get_key();if(check_board()){show_board();printf("恭喜%c胜利,游戏结束!\n",role);return 0;}role = '@'==role?'#':'@';}}

第二种(移动光标按键):

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <getch.h>// 棋盘
char board[15][15];
// 棋子坐标
char kx = 7 , ky = 7;
// 角色
char role = '@';// 显示棋盘
void show_board(void)
{system("clear");for(int i=0; i<15; i++){for(int j=0; j<15; j++){if(board[i][j]){printf(" %c",board[i][j]);}else{printf(" *");}}printf("\n");}
}
// 落子
void get_key(void)
{printf(" -----------请%c落子-----------\n",role);for(;;){printf("\33[%hhd;%hhdH",kx+1,(ky+1)*2);switch(getch()){case 183: kx>0 && kx--; break;case 184: kx<14 && kx++; break;case 185: ky<14 && ky++; break;case 186: ky>0 && ky--; break;case 10: if(!board[kx][ky]){board[kx][ky] = role;return;}}}}int count_eqkey(int ox,int oy)
{int count = 0;for(int x=kx+ox,y=ky+oy; x>=0 && x<15 && y>=0 && y<15 &&board[x][y]==board[kx][ky]; x+=ox,y+=oy){count++;}return count;
}// 检查五子
bool check_board(void)
{if(count_eqkey(0,-1)+count_eqkey(0,1) >= 4)return true;if(count_eqkey(-1,0)+count_eqkey(1,0) >= 4)return true;if(count_eqkey(-1,-1)+count_eqkey(1,1) >= 4)return true;if(count_eqkey(-1,1)+count_eqkey(1,-1) >= 4)return true;return false;
}
int main()
{for(;;){show_board();get_key();if(check_board()){show_board();printf("恭喜%c胜利,游戏结束!\n",role);return 0;}role = '@'==role?'#':'@';}}

欢迎小可爱评论区发布自己的简介~~
欢迎互关,关注~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/449175.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

nodejs-- vuex中mapActions

mapActions() 返回的是一个对象, 用了 ... 扩展符后&#xff0c;才可以放进一个对象里&#xff0c;和其他组件内定义的 method 在同一个 methods 对象。 { methods: mapActions() // 如果没有其它组件内的定义的方法,可以这样写}{ methods: { ...mapActions()&#xff0c;// 如…

怎样让手中的钱成为生财工具

大多数人之所以跟钱之间总有不可逾越的鸿沟&#xff0c;是因为他们不知道钱的活动能力。 钱&#xff0c;跟人一样是有生命的。每一块钱就是你的一个职员&#xff0c;你的目标是让你的职员勤奋工作&#xff0c;经过时间的沉淀&#xff0c;人员会日益壮大&#xff0c;工作效率会…

Android 开发知识集合目录

深入理解java的形参和实参&#xff1a; www.cnblogs.com/xuxinstyle/… sharepreference 与 数据库 区别&#xff1a; Android 各版特点&#xff1a; Android发展史&#xff08;Android各版本特性-知识篇&#xff09; blog.csdn.net/u012964796/…

mysql 查外键关联关系 (指定被引用表,查哪些表对其有外键引用)

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 在一个业务功能中要求先清空一张基础表&#xff08;user表&#xff09;再插入一批新数据。 在删除过程中报错为其它表有外键引用&#…

Shell脚本语言基础总结

*** 一&#xff0c;shell教程 Shell 是一个用 C 语言编写的程序&#xff0c;它是用户使用 Linux 的桥梁。Shell 既是一种命令语言&#xff0c;又是一种程序设计语言 二&#xff0c;shell环境 跟 JavaScript、php 编程一样&#xff0c;只要有一个能编写代码的文本编辑器和一…

Error: Can't resolve 'babel-loader'

在控制台中运行命令“webpack”&#xff0c;出现错误&#xff1a;“ERROR in Entry module not found: Error: Cant resolve babel-loader in.........” 解决方法是在控制台输入命令“npm install babel-loader --save"。转载于:https://www.cnblogs.com/Niuxingyu/p/107…

docker 4 section

镜像和容器的关系&#xff1a; 镜像是容器的基础&#xff0c;每次执行 docker run 的时候都会指定哪个镜像作为容器运行的基础。我们可以使用的都是来自于 Docker Hub 的镜像。直接使用这些镜像是可以满足一定的需求&#xff0c;而当这些镜像无法直接满足需求时&#xff0c;我们…

日本专家给出的存钱高招(图)

专家认为&#xff0c;对自己钱包里装了多少钱没有数的人&#xff0c;是个有浪费趋向的人&#xff0c;如果改变这一习惯&#xff0c;一定会让你的存款增多不少。 人们常说&#xff0c;犹太人善于赚钱&#xff0c;美国人善于花钱&#xff0c;中国人和日本人善于存钱。在日本现代…

精读《V8 引擎 Lazy Parsing》

1. 引言 本周精读的文章是 V8 引擎 Lazy Parsing&#xff0c;看看 V8 引擎为了优化性能&#xff0c;做了怎样的尝试吧&#xff01; 这篇文章介绍的优化技术叫 preparser&#xff0c;是通过跳过不必要函数编译的方式优化性能。 2. 概述 & 精读 解析 Js 发生在网页运行的关键…

Git和SVN的区别,Git的使用方法大全

什么是Git: Git 是一个开源的分布式版本控制系统&#xff0c;用于敏捷高效地处理任何或小或大的项目。 Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。 Git 与常用的版本控制工具 CVS, Subversion 等不同&#xff0c;它采用了分布…

详解 springboot - 查看、修改内置 tomcat 版本

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1、解析Spring Boot父级依赖 ?123456<parent> <groupId>org.springframework.boot</groupId> <artifactId>sp…

做生意的技巧 年入百万不是梦(图)

先介绍一下背景&#xff1a;这个表弟是土妖亲大姨家的&#xff0c;从小不爱学习&#xff0c;但是脑子活络。 现在在江苏省泰州市姜堰区的一个农贸市场&#xff0c;开一个小餐馆。餐馆面积50多平米&#xff0c;年收入120万左右。 少即是多——“我的小饭店只卖25种菜” 表弟…

reboot重启失败的解决方法

今天突然碰到用reboot命令不能重启&#xff0c;上网找原因&#xff1a; reboot不能重启可能是内核正在执行一些进程&#xff0c;reboot发送的信号被阻塞了&#xff0c;估计等一会内核从内核空间跳到用户空间的时候&#xff0c;发现有信号被阻塞了&#xff0c;再执行这个阻塞的信…

BUAA-OO 第二单元作业“电梯调度”总结与思考

一、需求分析 利用java线程的相关知识实现 1&#xff09;单部多线程傻瓜调度&#xff08;FAFS&#xff09;电梯 2&#xff09;单部多线程可捎带调度&#xff08;ALS&#xff09;电梯 3&#xff09;多部多线程智能&#xff08;SS&#xff09;调度电梯 二、思路分析 1、基于度量的…

解决报错 javax.persistence.TransactionRequiredException: Executing an update/delete query

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 报错如题。 场景是我想要执行一条很简单的删除语句。 JPA方式中使用本地sql , 写法如下&#xff1a; ModifyingQuery("delete fr…

linux基础知识点总结-最实用!(环境搭建,系统分区,常用命令,vim文本)

Linux系统介绍&#xff1a; Linux管理硬盘的能力非常强&#xff0c;所以我们看到的只有一个分区。 / 根目录&#xff0c;所有文件都存储在它下面 /bin 存储着系统命令 /dev 设备文件&#xff08;一切皆文件&#xff09; /home 用户主目录&#xff0c;会自动生成用户同名目录 /…

递归实现进制转换(C++版)

上次呢&#xff0c;我们留下了一道题&#xff0c;今天我们来一起看一看&#xff1a; 题目链接&#xff1a;https://www.cnblogs.com/gaozirong/p/10547434.html 这是我写的程序&#xff0c;大家可以对照参考一下&#xff08;C&#xff09;&#xff1a; #include<bits/stdc.h…

解决 mysql 插入数据报错: Cannot add or update a child row: a foreign key constraint fails

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 场景&#xff1a;我的情况是主表为用户 user 表&#xff0c;从表为职位 job 表&#xff0c;其中 job 表有一个外键为 user 表的主键。 …

犹太人从未透露的12个秘密(图)

中国人喜欢攒钱&#xff0c;西方人热衷花钱&#xff0c;只有犹太人精于赚钱。 他们认为&#xff1a;唯有运用智慧赚钱&#xff0c;才是真正的致富之道。他们的经商智慧风靡全球&#xff0c;造就了无数的商业巨子。本文通过解读犹太人精妙绝伦的经商之道&#xff0c;从人性、道…

vim文本编辑器的配置vimrc

在行底模式下对vim的设置只是临时有效&#xff0c;如果想长期有效需要把这些设置语句写入配置文件(~/.vimrc)中。 打开vim的配置&#xff1a;vim ~/.vimrc 进行编辑&#xff1a; " 显示行号 set number" tab键宽度 set tabstop4" 设置自动缩进 set autoindent…