该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

需求定义:

编写程序实现两人互玩的五子棋游戏。游戏开始时要求在控制台输出以下棋盘,然后提示黑方和白方下子,玩家从命令行输入落子坐标,如:1-2,表示在第二行第三列落子,其中黑方的子用@表示,白方的子用O(大写字母O)表示,空白位置用*表示,每有一方落子,则要重新输出棋盘的状态,程序还要能判断某一方获胜,并终止游戏。

棋盘初始状态如下:

代码实现:

#include

#define N 14

#include

char state[N][N];

void init(void);

void printState(void);

bool isWin(bool isBlack,int x,int y);

bool isLevelWin(bool isBlack,int x,int y);

bool isVerticalWin(bool isBlack,int x,int y);

bool isLeftInclinedWin(bool isBlack,int x,int y);

bool isRightObliqueWin(bool isBlack,int x,int y);

bool isWin(bool isBlack,int x,int y)

{

return isLevelWin(isBlack,x,y)

||isVerticalWin(isBlack,x,y)

||isLeftInclinedWin(isBlack,x,y)

||isRightObliqueWin(isBlack,x,y);

}

bool isLevelWin(bool isBlack,int x,int y)

{

char c = isBlack ? '@':'O';

int count;

while(y>0 && state[x][y] == c)

{

y--;

}

count =0;

if(state[x][y] == c) count = 1;

y++;

while(y < N && state[x][y] == c)

{

count++;

if(count == 5)

{

return true;

}

y++;

}

return false;

}

bool isVerticalWin(bool isBlack,int x,int y)

{

char c = isBlack ? '@':'O';

int count;

while(x>0 && state[x][y] == c)

{

x--;

}

count =0;

if(state[x][y] == c) count = 1;

x++;

while(x < N && state[x][y] == c)

{

count++;

if(count == 5)

{

return true;

}

x++;

}

return false;

}

bool isLeftInclinedWin(bool isBlack,int x,int y)

{

char c = isBlack ? '@':'O';

int count;

while(x>0 && y>0 && state[x][y] == c)

{

y--;

x--;

}

count =0;

if(state[x][y] == c) count = 1;

x++;

y++;

while(x < N && y < N && state[x][y] == c)

{

count++;

if(count == 5)

{

return true;

}

x++;

y++;

}

return false;

}

bool isRightObliqueWin(bool isBlack,int x,int y)

{

char c = isBlack ? '@':'O';

int count;

while(x>0 && y

{

y++;

x--;

}

count =0;

if(state[x][y] == c) count = 1;

x++;

y--;

while(x < N && y >= 0 && state[x][y] == c)

{

count++;

if(count == 5)

{

return true;

}

x++;

y--;

}

return false;

}

void init(void)

{

int i,j;

for(i=0;i

{

for(j=0;j

{

state[i][j] = '*';

}

}

}

void printState(void)

{

int i,j;

printf("%3c",' ');

for(i=0;i

printf("%3d",i);

printf("\n");

printf("-----------------------------------------------------\n");

for(i=0;i

{

printf("%3d",i);

for(j=0;j

{

printf("%3c",state[i][j]);

}

printf("\n");

}

}

int main(void)

{

int x,y;

bool isBlack = true;

init();

printf("------------------\n");

printState();

while(1)

{

printf("please %s quick snip\n",(isBlack?"black":"white"));

printf("example:(1-2)\n");

scanf("%d-%d",&x,&y);

if(state[x][y]=='@' || state[x][y]=='O')

{

printf("this position to have pieces\n");

continue;

}

state[x][y] = (isBlack?'@':'O');

printState();

if(isWin(isBlack,x,y))

{

printf("%s win\n",(isBlack?"black":"white"));

break;

}

isBlack = !isBlack;

}

}

嵌入式、C语言基础知识专栏,欢迎交流!

五子棋c语言代码 贴吧,控制台版本的五子棋游戏相关推荐

  1. 五子棋c语言代码ppt答辩,C语言案例:控制台版本的五子棋游戏【代码】

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 return true; } x++; } return false; } bool isLeftInclinedWin(bool isBlack,int ...

  2. 五子棋开发案列c语言,C语言案例:控制台版本的五子棋游戏【代码】

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 return true; } x++; } return false; } bool isLeftInclinedWin(bool isBlack,int ...

  3. c语言五子棋排行榜代码,C语言案例:控制台版本的五子棋游戏【代码】

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 return true; } x++; } return false; } bool isLeftInclinedWin(bool isBlack,int ...

  4. c 语言五子棋游戏代码,C语言案例:控制台版本的五子棋游戏【代码】

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 return true; } x++; } return false; } bool isLeftInclinedWin(bool isBlack,int ...

  5. 指定开局五子棋c语言代码,C语言案例:控制台版本的五子棋游戏【代码】

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 return true; } x++; } return false; } bool isLeftInclinedWin(bool isBlack,int ...

  6. 用c 语言写出五子棋的代码,C语言案例:控制台版本的五子棋游戏【代码】

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 return true; } x++; } return false; } bool isLeftInclinedWin(bool isBlack,int ...

  7. 五指棋小游戏c语言代码,C语言案例:控制台版本的五子棋游戏【代码】

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 return true; } x++; } return false; } bool isLeftInclinedWin(bool isBlack,int ...

  8. c语言手机游戏五子棋代码,C语言案例:控制台版本的五子棋游戏【代码】

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 return true; } x++; } return false; } bool isLeftInclinedWin(bool isBlack,int ...

  9. 有悔棋功能的五子棋c语言代码,有保存读取悔棋功能的五子棋.doc

    有保存读取悔棋功能的五子棋 制作拖动鼠标产生水纹动画的制作 1.导入一张合适的图片到库中 2.在库中刚导入的图片上点击右键.点击"链接",再按下图设置链接属性. 3.新建一个空影片 ...

最新文章

  1. 如何使用Extentions创建菜单
  2. 云炬随笔20211021(2)
  3. java中File的使用
  4. mysql数据库入门教程(10):标识列和事务
  5. datagrid vue_类似 easyui 中 datagrid 使用习惯的 element-ui 数据表格组件(el-datagrid)...
  6. 最终计算供应链管理生产计划排程逻辑管理
  7. C和指针之字符串编程练习10(判断字符串是否是回文数)
  8. Django通过中间件实现登录验证demo
  9. linux将程序锁死,Linux死锁现象及分析方法(转)
  10. mysql复制学习二 安装及首次复制配置
  11. canvasnest 移动距离_GitHub - XiaoxinJiang/canvas-nest: 仿知乎登录页面canvas-nest
  12. socket:通常每个套接字地址(协议/网络地址/端口)只允许使用一次
  13. 西南科技大学OJ题 有序顺序表的合并操作的实现0941
  14. 多功能扩音器索爱S-318,教师、导游们的辅助神器
  15. Poj 1328 Radar Installation 贪心
  16. 区块链以及蚂蚁开放联盟链初探索
  17. 使用python绘制函数曲线
  18. 常见的DNS攻击与防御
  19. 在html中怎么格式化输出json字符串
  20. shell十三问--shell教程

热门文章

  1. 麦角硫因/超级抗氧化
  2. 感人的校园爱情故事 伤感日志分享
  3. 计算机专业进农商行还是电信,农商行好进嘛?为什么那么多人选择报考农商行?...
  4. ChinaUnicom 中国联通wifi连接上输入联通手机号和密码后提示ip非法的解决办法
  5. 「1114」Family Property
  6. iPhone必须掌握的几个日常使用技巧
  7. 青铜10:千锤百炼-如何解决生产者与消费者经典问题
  8. P2P应用(BT种子,Skype,洪泛式查询)
  9. emc存储设备型号_【EMC网络存储】EMC网络存储报价及图片大全-列表版-ZOL中关村在线...
  10. win7 php,Win7 搭建PHP环境