C语言实现五子棋
可以称得上史上最简单的五子棋版本了。
可以使用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语言实现五子棋的更多相关文章
- C语言实现五子棋简单功能
/******************************************************************** C-4.29-1: 实现五子棋游戏 操作说明:用方向键或者& ...
- C语言可以开发哪些项目?
C语言是我们大多数人的编程入门语言,对其也再熟悉不过了,不过很多初学者在学习的过程中难免会出现迷茫,比如:不知道C语言可以开发哪些项目,可以应用在哪些实际的开发中--,这些迷茫也导致了我们在学习的过程 ...
- C语言可以开发哪些项目?(转)
原文地址:https://www.cnblogs.com/shiyanlou/p/6098661.html 知乎:https://www.zhihu.com/question/20564904 C语言 ...
- 17个C语言可以做的小案例项目
C语言是我们大多数人的编程入门语言,对其也再熟悉不过了,不过很多初学者在学习的过程中难免会出现迷茫,比如:不知道C语言可以开发哪些项目,可以应用在哪些实际的开发中……,这些迷茫也导致了我们在学习的过程 ...
- 用C语言开发的19个经典项目,你会第几个?
前言本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:实验楼 C语言是我们大多数人的编程入门语言,对其也再熟悉不过了,不过很多 ...
- IOS新手教程(二)-控制流
int main(){ //2.控制流 //2.1 if语句 //1. if(expression){ } //2. if(expression){ }else{ } //3.能够有0个或是多个els ...
- C 语言控制台实现五子棋项目
花了一天时间实现了控制台五子棋项目,把项目贴上来.也算是告一段落了. 为了进一步了解C语言编程,熟悉优秀的编码风格,提升编码能力,丰富项目经验.所以在编程初期选择了控制台小游戏<单机五子棋> ...
- 用c语言实现简单的五子棋
用c语言实现简单的五子棋 这个小游戏是从零开始的实现的,框架灵感来自于小游戏<走迷宫>. 游戏代码配置: 二维数组+简单逻辑+getch读取键盘+windows函数(刷屏,改颜色,改窗口大 ...
- C/C++编程笔记:C语言开发经典游戏项目《五子棋》,内含源码
上一节给大家分享了扫雷游戏的源代码,本篇文章当然也不会让大家失望,专门针对C语言入门或者学习了部分知识之后的小伙伴来练手的游戏项目——<五子棋大战>,本期并不是使用的easyX,因为考虑到 ...
随机推荐
- Spring Security 实战干货:使用 JWT 认证访问接口
(转载)原文链接:https://my.oschina.net/10000000000/blog/3127268 1. 前言 欢迎阅读Spring Security 实战干货系列.之前我讲解了如何编写 ...
- snappy 安装
1 下载snappywget https://kojipkgs.fedoraproject.org//vol/fedora_koji_archive00/packages/snappy/1.1.0/1 ...
- NoSql之Redis系列(.Net Core)
一. 简介 1. 什么是Redis? 全称“Remote Dictionary Server”,基于内存管理数据,它有多种数据结构(常用的5种),分别应对不同场景:它是单线程模型的,所以不会存在并发问 ...
- Knative 实践:从源代码到服务的自动化部署
通过之前的文章,相信大家已经熟悉了 Serving.Eventing 以及 Tekton.那么在实际使用中,我们往往会遇到一些复杂的场景,这时候就需要各个组件之间进行协作处理.例如我们提交源代码之后是 ...
- Java8新特性——新一套时间API的使用
JDK 1.0中包含了一个java.util.Date类,但是它的大多数方法已经在JDK 1.1引入Calendar类之后被弃用了.而Calendar并不比Date好多少.它们面临的问题是: 可变性: ...
- 使用NumPy、Numba的简单使用(一)
Numpy是python的一个三方库,主要是用于计算的,数组的算数和逻辑运算.与线性代数有关的操作. 很多情况下,我们可以与SciPy和 Matplotlib(绘图库)一起使用.来替代MatLab,下 ...
- ElasticSearch简介(一)——基础
基本概念 1. Node 与 Cluster Elastic 本质上是一个分布式数据库,允许多台服务器协同工作,每台服务器可以运行多个 Elastic 实例. 单个 Elastic 实例称为一个节点 ...
- 禁止直接通过IP访问--->nginx
在nginx.conf 中添加 server{ listen 80 default_server; return 501; } 注: nginx加载include是按顺序,如果是文件夹,就是文件顺序, ...
- vue笔记(一)
Vue的开发 一丶下载 # 中文下载地址: https://cn.vuejs.org/ # 使用方式: # 1. 单独使用 vue.min.js.文件 # 2. 结合node.js使用集成工具 二丶v ...
- SQLi-LABS Page-2 (Adv Injections) Less23-Less26
Less-23 GET - Error based - strip comments http://10.10.202.112/sqli/Less-23?id=1' Warning: mysql_fe ...