可以称得上史上最简单的五子棋版本了。

可以使用curses库来改进页面和下棋方式。

并且对于输入的坐标没有进行鉴别,如果输入的坐标超过棋盘大小,就会段错误退出。

我改进了一点,但是还是没有完全避免这个问题。

/*
*Gobang.c
*/
#include<stdio.h>
#include<stdlib.h> #define N 15
int chessboard[N+][N+] = {}; int whoseTurn = ; void initGame();
void printChessboard();
void playChess();
int judge(int x, int y); int main()
{
initGame();
while()
{
whoseTurn++;
playChess();
}
return ;
} void initGame()
{
char c;
printf("Input Y to enter the game: ");
c = getchar();
if (c != 'y' && c != 'Y')
{
exit();
}
system("clear");
printChessboard();
} void printChessboard()
{
int i,j;
for (i = ; i <= N; i++)
{
for (j = ; j <= N; j++)
{
if ( == i)
{
printf("%3d", j);
}
else if( == j)
{
printf("%3d", i);
}
else if ( == chessboard[i][j])
{
printf(" X");
}
else if ( == chessboard[i][j])
{
printf(" O");
}
else
{
printf(" *");
}
} printf("\n");
}
}
void playChess()
{
int i, j, winner;
if ( == whoseTurn % )
{
printf("Turn to player 1, please input the position: ");
scanf("%d %d", &i, &j);
while(chessboard[i][j] != || i > N || i < || j > N || j < )
{
printf("your position is taken, choose another: ");
scanf("%d %d", &i, &j);
} chessboard[i][j] = ;
}
else
{
printf("Turn to player 2, please input the position: ");
scanf("%d %d", &i, &j);
while(chessboard[i][j] != || i > N || i < || j > N || j < )
{
printf("your position is taken, choose another: ");
scanf("%d %d", &i, &j);
} chessboard[i][j] = ;
} system("clear"); printChessboard();
if (judge(i, j))
{
if ( == whoseTurn % )
{
printf("player1 win\n");
exit();
}
else
{
printf("player2 win\n");
exit();
}
}
} int judge(int x, int y)
{
int i, j, k;
int t = - whoseTurn % ;
const int step[][] = {{-, }, {, -}, {, }, {, }};
for (i = ; i < ; i++)
{
const int d[] = {-, };
int count = ;
for (j = ; j < ; ++j)
{
for (k = ; k <= ; k++)
{
int row = x + k*d[j]*step[i][];
int col = y + k*d[j]*step[i][];
if (row > && row <= N && col >= && col <= N &&
chessboard[x][y] == chessboard[row][col])
{
count++;
}
else
{
break;
}
}
}
if (count >= )
{
return ;
}
} return ;
}

C语言实现五子棋的更多相关文章

  1. C语言实现五子棋简单功能

    /******************************************************************** C-4.29-1: 实现五子棋游戏 操作说明:用方向键或者& ...

  2. C语言可以开发哪些项目?

    C语言是我们大多数人的编程入门语言,对其也再熟悉不过了,不过很多初学者在学习的过程中难免会出现迷茫,比如:不知道C语言可以开发哪些项目,可以应用在哪些实际的开发中--,这些迷茫也导致了我们在学习的过程 ...

  3. C语言可以开发哪些项目?(转)

    原文地址:https://www.cnblogs.com/shiyanlou/p/6098661.html 知乎:https://www.zhihu.com/question/20564904 C语言 ...

  4. 17个C语言可以做的小案例项目

    C语言是我们大多数人的编程入门语言,对其也再熟悉不过了,不过很多初学者在学习的过程中难免会出现迷茫,比如:不知道C语言可以开发哪些项目,可以应用在哪些实际的开发中……,这些迷茫也导致了我们在学习的过程 ...

  5. 用C语言开发的19个经典项目,你会第几个?

    前言本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:实验楼 C语言是我们大多数人的编程入门语言,对其也再熟悉不过了,不过很多 ...

  6. IOS新手教程(二)-控制流

    int main(){ //2.控制流 //2.1 if语句 //1. if(expression){ } //2. if(expression){ }else{ } //3.能够有0个或是多个els ...

  7. C 语言控制台实现五子棋项目

    花了一天时间实现了控制台五子棋项目,把项目贴上来.也算是告一段落了. 为了进一步了解C语言编程,熟悉优秀的编码风格,提升编码能力,丰富项目经验.所以在编程初期选择了控制台小游戏<单机五子棋> ...

  8. 用c语言实现简单的五子棋

    用c语言实现简单的五子棋 这个小游戏是从零开始的实现的,框架灵感来自于小游戏<走迷宫>. 游戏代码配置: 二维数组+简单逻辑+getch读取键盘+windows函数(刷屏,改颜色,改窗口大 ...

  9. C/C++编程笔记:C语言开发经典游戏项目《五子棋》,内含源码

    上一节给大家分享了扫雷游戏的源代码,本篇文章当然也不会让大家失望,专门针对C语言入门或者学习了部分知识之后的小伙伴来练手的游戏项目——<五子棋大战>,本期并不是使用的easyX,因为考虑到 ...

随机推荐

  1. oracle使用sequence批量写数据

    本博客是对之前写的博客Oracle批量新增更新数据的补充,oracle的知识真是多,其实要学精任何一门知识都是要花大量时间的,正所谓: 学如逆水行舟,不进则退 先介绍oracle sequence的一 ...

  2. 奥展项目笔记05--域名、端口、Nginx相关知识笔记

    1.我国的电信运营商是默认封闭80端口的. 中国电信屏蔽ADSL用户80端口 只是做应用服务器的话你可以使用别的端口. 80端口电脑上同时有各种各样的程序在运行,他们都需要借助网络来进行通信.例如,你 ...

  3. NaN不等于NaN

    目录 原因 表达式计算 类型转换 总结 不知道这个小知识点用得多不多,曾经在书上看到过,所以有一些印象,前段时间顺手写出类似如下的代码 var result; if (parseInt('abc')= ...

  4. spring boot入门,看这篇文章就够了

    一.SpringBoot入门 1.基本介绍 简化Spring应用开发的一个框架.整个Spring技术栈的一个大整合: J2EE开发的一站式解决方案: 优点: 快速创建独立运行的Spring项目以及与主 ...

  5. Tp5.1开发初入门

    今天需要给金融部门那边做一个信用卡的推广页面,他们系统是用PHP的tp框架做的.我记得最早做tp还是2的时候,和现在的5.1相差太大了,中间开发的时候,还是遇到了点问题.所以,把今天的问题记录下,作个 ...

  6. EntityUtils.toString(entity)处理字符集问题解决

    爬取51Job和猎聘网的信息,想处理字符集问题(51job为gbk,猎聘为utf-8), 找到两个网站字符集信息都在同一标签下 就想先把网页保存成String,解析一遍获取字符集,然后将网页转换成对应 ...

  7. .Net网站防盗链

    一.简单写法,在Global.asax下的这个方法中添加如下信息 /// <summary> /// 管道当中的第一个事件 /// </summary> /// <par ...

  8. Ansible varialbes

    1.什么是变量? ​ 以一个固定的字符串,表示一个不固定的值 version: 1.12 2.定义变量? 1.在playbook中定义变量? vars 关键字 [root@manager projec ...

  9. xshell 远程登陆CentOS7 免密登陆

    首先说一下大体的思路: 1. 以密码登陆CentOS系统 2. 配置ssh 3. xshell 生成秘钥 4. 进行免密登陆 软件.设备: xshell(下载地址(免费版),也可以自行百度下载) Ce ...

  10. docker学习12-docker快速搭建禅道环境

    前言 bug管理系统是每个公司测试团队必备的,当去一个新的公司组建一个测试团队的时候,需快读搭建一套bug管理系统,使用docker搭建禅道就非常方便. 拉取镜像 先拉取zentao镜像,镜像地址ht ...