C之五子棋
#include <stdio.h>
#include <stdlib.h> #define N 15 int chessboard[N + ][N + ] = { }; int whoseTurn = ; void initGame(void);
void printChessboard(void);
void playChess(void);
int judge(int, int); int main(void)
{
initGame(); while ()
{
whoseTurn++; playChess();
} return ;
} void initGame(void)
{
char c; printf("Please input \'y\' to enter the game:");
c = getchar();
if ('y' != c && 'Y' != c)
exit(); system("cls");
printChessboard();
} void printChessboard(void)
{
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(" O");
else if ( == chessboard[i][j])
printf(" X");
else
printf(" *");
}
printf("\n");
}
} void playChess(void)
{
int i, j, winner; if ( == whoseTurn % )
{
printf("Turn to player 1, please input the position:");
scanf("%d %d", &i, &j); while (chessboard[i][j] != )
{
printf("This position has been occupied, please input the position again:");
scanf("%d %d", &i, &j);
} chessboard[i][j] = ;
}
else
{
printf("Turn to player 1, please input the position:");
scanf("%d %d", &i, &j); while (chessboard[i][j] != )
{
printf("This position has been occupied, please input the position again:");
scanf("%d %d", &i, &j);
} chessboard[i][j] = ;
} system("cls");
printChessboard(); if (judge(i, j))
{
if ( == whoseTurn % )
{
printf("Winner is player 1!\n");
exit();
}
else
{
printf("Winner is player 2!\n");
exit();
}
}
} int judge(int x, int y)
{
int i, j;
int t = - whoseTurn % ; for (i = x - , j = y; i <= x; i++)
{
if (i >= && i <= N - && t == chessboard[i][j] && t == chessboard[i + ][j] && t == chessboard[i + ][j] && t == chessboard[i + ][j] && t == chessboard[i + ][j])
return ;
}
for (i = x, j = y - ; j <= y; j++)
{
if (j >= && j <= N - && t == chessboard[i][j] && t == chessboard[i][j + ] && t == chessboard[i][j + ] && t == chessboard[i][j + ] && t == chessboard[i][j + ])
return ;
}
for (i = x - , j = y - ; i <= x, j <= y; i++, j++)
{
if (i >= && i <= N - && j >= && j <= N - && t == chessboard[i][j] && t == chessboard[i + ][j + ] && t == chessboard[i + ][j + ] && t == chessboard[i + ][j + ] && t == chessboard[i + ][j + ])
return ;
}
for (i = x + , j = y - ; i >= , j <= y; i--, j++)
{
if (i >= && i <= N - && j >= && j <= N - && t == chessboard[i][j] && t == chessboard[i - ][j + ] && t == chessboard[i - ][j + ] && t == chessboard[i - ][j + ] && t == chessboard[i - ][j + ])
return ;
} return ;
}

C之五子棋的更多相关文章
- 自己写的HTML5 Canvas + Javascript五子棋
看到一些曾经只会灌水的网友,在学习了前端之后,已经能写出下载量几千几万的脚本.样式,帮助大众,成为受欢迎的人,感觉满羡慕的.我也想学会前端技术,变得受欢迎呀.于是心血来潮,开始学习前端知识,并写下了这 ...
- java swing 双人五子棋源代码
import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Toolkit; impo ...
- HTML5 五子棋 - JS/Canvas 游戏
背景介绍 因为之前用c#的winform中的gdi+,java图形包做过五子棋,所以做这个逻辑思路也就驾轻就熟,然而最近想温故html5的canvas绘图功能(公司一般不用这些),所以做了个五子棋,当 ...
- [收藏]C++简单五子棋
#include<iostream> #include<iomanip> using namespace std; ; //棋盘行数 ; //棋盘列数 char p[X][Y] ...
- jQuery网页版五子棋小游戏源码下载
体验效果:http://hovertree.com/texiao/game/4/ 网页五子棋源代码: <!DOCTYPE html> <html> <head> & ...
- js+html5双人五子棋(源码下载)
代码如下: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" c ...
- jquery在线五子棋
在线五子棋试玩地址:http://keleyi.com/game/12/ 以下是完整代码,保存到html文件打开也可以玩: <!DOCTYPE html> <html> < ...
- 五子棋AI清月连珠开源
经过差不多两年的业余时间学习和编写,最近把清月连珠的无禁手部分完善得差不多了.这中间进行了很多思考,也有很多错误认识,到现在有一些东西还没有全面掌握,所以想通过开源于大家共同交流. 最近一直发表一些五 ...
- PyQt写的五子棋
技术路线 GUI的实现 使用PyQt技术作为基础.PyQt是一个支持多平台的客户端开发SDK,使用它实现的客户端可以运行在目前几乎所有主流平台之上. 使用PyQt,Qt设计器实现UI,通过pyuic4 ...
- 浅析基本AI五子棋算法
五子棋是所有棋类博弈中比较简单的了,这里介绍的也只是一种非常基本的AI策略.其实,包括之前的AI贪吃蛇,感觉这两个AI其实体现的都是一种建模思想,把一个现实中的问题模型化,抽象化,得到其一般特征,再设 ...
随机推荐
- Ubuntu配置任意版本的apt-get镜像
我们知道,迄今为止,Ubuntu已有多个发行版,如11.04.11.10,以至于现在最新的16.*.而我们平常通过apt-get来安装软件,如果OS版本不同,那么镜像源的配置就不同,否则就会出现找不到 ...
- HDU 1028(母函数)
Online Judge Online Exercise Online Teaching Online Contests Exercise Author F.A.QHand In HandOnline ...
- spring事件通知机制详解
优势 解耦 对同一种事件有多种处理方式 不干扰主线(main line) 起源 要讲spring的事件通知机制,就要先了解一下spring中的这些接口和抽象类: ApplicationEventPub ...
- 优先队列(stl)
优先队列是堆排的一种优化,我学习的是使用stl库的堆排. 基本操作有: 1.push将一个元素入队. 2.pop将一个元素出队. 3.top返还值为队头元素. 4.empty判断队列是否为空,为空返回 ...
- [Visual Studio Online] 移除Work Item(Feature、Backlog item、Task)
[Visual Studio Online] 移除Work Item(Feature.Backlog item.Task) 移除 项目的开发过程中,使用Visual Studio Online来做Sc ...
- SQL Server Merge语句的使用
Merge关键字在SQL Server 2008被引入,它能将Insert,Update,Delete简单的并为一句.MSDN对于Merge的解释非常的短小精悍:”根据与源表联接的结果,对目标表执行插 ...
- Postman的使用
在我们平时开发中,特别是需要与接口打交道时,无论是写接口还是用接口,拿到接口后肯定都得提前测试一下,这样的话就非常需要有一个比较给力的Http请求模拟工具,现在流行的这种工具也挺多的,像火狐浏览器插件 ...
- Entity Framework 实体关系总结
刚开始使用 Entity Framework 的时候,由于没有静下心来认真理清关系,走了一些"痛不欲生"的弯路.而我们目前开发的项目都在使用 Entity Framework,为了 ...
- 为什么每个浏览器都有Mozilla字样?
你是否好奇标识浏览器身份的)”,于是IE可以收到含有框架的页面了,所有微软的人都嗨皮了,但是网站管理员开始晕了. 因为微软将IE和Windows捆绑销售,并且把IE做得比Netscape更好,于是第一 ...
- SharePoint 2013 排错之"Code blocks are not allowed in this file"
今天,设置页面布局的自定义母版页时,设置完了以后保存,然后预览报错,错误如下截图:删掉自定义母版页的MasterPageFile属性,页面依然报错:感觉甚是奇怪,因为有版本控制,还原为最初的版本,依然 ...