闲来无事写了个五子棋, 简单的算法部分已经完成。明天有空再做做界面
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
namespace Chess5
{
class Step
{
public Step(int x, int y, Color color)
{
this.x = x;
this.y = y;
this.color = color;
}
private int x, y;
private Color color;
public Color Color
{
get { return this.color; }
}
public int X
{
get { return this.x; }
}
public int Y
{
get { return this.y; }
}
public bool isWin(List<Step> steps, out List<Step> winningSteps)
{
winningSteps = new List<Step>();
int xCount = 1;
int yCount = 1;
int sCount = 1;
int bCount = 1;
//x axis
if (x > 0 && getStep(steps, x - 1, y) != null)
{
int xCountTemp = 1;//起始step
getCountInDirection(steps, ref xCountTemp, -1, 0, ref winningSteps);
xCount += xCountTemp - 1;//起始step算了1,需要减掉
}
if (getStep(steps, x + 1, y) != null)
{
int xCountTemp = 1;//起始step
getCountInDirection(steps, ref xCountTemp, 1, 0, ref winningSteps);
xCount += xCountTemp-1;
}
if (xCount < 5)
{
winningSteps.Clear();
//y axis
if (y > 0 && getStep(steps, x, y - 1) != null)
{
int yCountTemp = 1;
getCountInDirection(steps, ref yCountTemp, 0, -1, ref winningSteps);
yCount += yCountTemp-1;
}
if (getStep(steps, x, y + 1) != null)
{
int yCountTemp = 1;
getCountInDirection(steps, ref yCountTemp, 0, 1, ref winningSteps);
yCount += yCountTemp-1;
}
if (yCount < 5)
{
winningSteps.Clear();
//slash direction
if (x > 0 && y > 0 && getStep(steps, x - 1, y - 1) != null)
{
int sCountTemp = 1;
getCountInDirection(steps, ref sCountTemp, -1, -1, ref winningSteps);
sCount += sCountTemp-1;
}
if (getStep(steps, x + 1, y + 1) != null)
{
int sCountTemp = 1;
getCountInDirection(steps, ref sCountTemp, 1, 1, ref winningSteps);
sCount += sCountTemp-1;
}
if (sCount < 5)
{
winningSteps.Clear();
//backwardslash direction
if (y > 0 && getStep(steps, x + 1, y - 1) != null)
{
int bCountTemp = 1;
getCountInDirection(steps, ref bCountTemp, 1, -1, ref winningSteps);
bCount += bCountTemp-1;
}
if (getStep(steps, x - 1, y + 1) != null)
{
int bCountTemp = 1;
getCountInDirection(steps, ref bCountTemp, -1, 1, ref winningSteps);
bCount += bCountTemp-1;
}
if (bCount < 5)
winningSteps.Clear();
}
}
}
if (xCount >= 5 || yCount >= 5 || sCount >= 5 || bCount >= 5)
{
winningSteps.Add(this);
return true;
}
else
{
winningSteps.Clear();
return false;
}
}
public void getCountInDirection(List<Step> steps, ref int count, int xIndex, int yIndex, ref List<Step> winningSteps)
{
if (this.x + xIndex * count >= 0 && this.y + yIndex * count >= 0)
{
Step s = getStep(steps, x + xIndex * count, y + yIndex * count);
if (s != null)
{
count++;
winningSteps.Add(s);
getCountInDirection(steps, ref count, xIndex, yIndex, ref winningSteps);
}
}
}
public Step getStep(List<Step> steps, int x, int y)
{
foreach (Step step in steps)
{
if (step.x == x && step.y == y && step.Color == this.color)
return step;
}
return null;
}
}
}
分享到:
相关推荐
五子棋小游戏的课程设计,有流程图,功能描述,源代码等内容,感觉挺好的。
### C语言实现的五子棋小游戏 #### 项目概述 本项目是一款基于C语言开发的五子棋小游戏,能够满足课程设计的要求。该程序具备基本的五子棋功能,支持两个用户之间的对战。游戏界面简洁明了,通过命令行进行操作与...
java小游戏 (源码)swing五子棋源代码java小游戏 (源码)swing五子棋源代码java小游戏 (源码)swing五子棋源代码java小游戏 (源码)swing五子棋源代码java小游戏 (源码)swing五子棋源代码java小游戏 (源码)swing五子棋源...
【HTML五子棋小游戏】是一种基于纯Web技术开发的在线娱乐项目,主要利用HTML、JavaScript(简称JS)以及HTML5的一些特性实现。这个小游戏无需安装任何客户端,只需将压缩包解压后在浏览器中打开,就能立即体验到...
《C++实现五子棋小游戏详解》 在编程领域,用C++开发一款五子棋小游戏是一项常见的练习项目,它既能巩固基础知识,又能提升实际编程技能。本文将深入探讨如何利用C++语言来实现五子棋游戏的核心逻辑,主要包括棋盘...
Java五子棋小游戏.zipJava五子棋小游戏.zipJava五子棋小游戏.zip Java五子棋小游戏.zipJava五子棋小游戏.zipJava五子棋小游戏.zip Java五子棋小游戏.zipJava五子棋小游戏.zipJava五子棋小游戏.zip Java五子棋小游戏....
【五子棋小游戏】是一款基于C++编程语言开发的小型桌面游戏,它的核心功能是让玩家与电脑AI进行对弈,体验五子棋的乐趣。在这款游戏中,玩家可以选择单人模式,与内置的智能算法进行较量。源代码中包含丰富的注释,...
HTML5网页版五子棋小游戏源码下载是一个包含所有必要组件和资源的压缩包,用于构建一个纯HTML5实现的在线五子棋游戏。这款小游戏可以让用户在网页上与电脑或者其他玩家对战,体验五子棋的乐趣。源码通常包括HTML、...
五子棋小游戏五子棋小游戏
java课程设计小游戏网络版五子棋小游戏源码+java课程设计报告.zipjava课程设计小游戏网络版五子棋小游戏源码+课程设计报告.zipjava课程设计小游戏网络版五子棋小游戏源码+课程设计报告.zipjava课程设计小游戏网络版...
五子棋小游戏是一种深受人们喜爱的传统智力游戏,它在计算机编程领域也有着广泛的应用,尤其在教学和游戏开发中。本项目提供了一个五子棋程序的实现,是学习现代软件基础,尤其是MFC(Microsoft Foundation Classes...
基于java的五子棋小游戏.zip基于java的五子棋小游戏.zip基于java的五子棋小游戏.zip 基于java的五子棋小游戏.zip基于java的五子棋小游戏.zip基于java的五子棋小游戏.zip 基于java的五子棋小游戏.zip基于java的五子棋...
【Java五子棋小游戏】是一款基于Java编程语言开发的简单娱乐项目,旨在提供一个100x100网格的棋盘,供玩家体验五子棋的乐趣。在这款游戏中,两个玩家轮流在棋盘上放置黑白棋子,目标是形成任意方向(横、竖、斜)上...
五子棋小游戏 java代码 其中包括数组的运用,循环,判断 方位等
在本文中,我们将深入探讨如何使用C#编程语言实现一个五子棋小游戏,以及涉及到的client端与server端通信机制。五子棋是一种简单而有趣的双人策略游戏,通过编程实现,可以为学习C#和网络编程提供一个很好的实践平台...
NodeJs+HTML5+Web Socket实现五子棋小游戏 1.npm install 2. nodemon/node index.js 问题解决方法:因为将node_modules一起上传了,大家如果不能启动可以删掉node_modules,然后在npm install就ok了。
《JAVA五子棋小游戏代码详解》 五子棋是一款经典的双人对弈游戏,通过JAVA编程语言实现五子棋小游戏,可以提供一个简单的娱乐平台,同时也展示了基础的GUI设计和事件处理技术。以下是对该代码的详细解析: 首先,...
java之好玩的五子棋小游戏,可单人对战,多人对战!java之好玩的五子棋小游戏,可单人对战,多人对战!java之好玩的五子棋小游戏,可单人对战,多人对战!java之好玩的五子棋小游戏,可单人对战,多人对战!java之...