C# 控制台实现的五子棋游戏
2010-07-20 23:56
435 查看
今天用到数组在控制台做了一个五子棋游戏,实现如下:
static void Main(string[] args)
{
string[,] QP = new string[17, 17]; //定义二维数组QP同时设置棋盘大小
while (true)
{
Console.Clear();
int left = 16;
int top = 8;
for (int i = 0; i < QP.GetLength(0); i++)
{
for (int j = 0; j < QP.GetLength(1); j++) //为数组QP每个元素赋初值 用“□”代替棋盘网格
{
QP[i, j] = "□";
}
}
for (int i = 0; i < QP.GetLength(0); i++)
{
for (int j = 0; j < QP.GetLength(1); j++)
{
Console.Write(QP[i, j]); //遍历数组QP 并将其打印在窗体 使界面看起来像是网格状
}
Console.WriteLine();
}
bool mark = true;
bool Jmark = true;
while (Jmark)
{
Console.SetCursorPosition(left, top); //设置光标初始位置
ConsoleKey key = Console.ReadKey(true).Key; //读取输入值
switch (key) //switch语句控制光标的移动,上下左右共4个方向 可同时由方向键和“W”“S”“A”“D”2组组合键控制
{
case ConsoleKey.UpArrow:
case ConsoleKey.W:
if (top > 0)
{
top--;
}
break;
case ConsoleKey.DownArrow:
case ConsoleKey.S:
if (top < 16)
{
top++;
}
break;
case ConsoleKey.LeftArrow:
case ConsoleKey.A:
if (left > 0)
{
left = left - 2;
}
break;
case ConsoleKey.RightArrow:
case ConsoleKey.D:
if (left < 32)
{
left = left + 2;
}
break;
default: //默认值设置 当按件不为定义的2组组合键时,若当前光标位置不是“□”,则不能操作,
if (QP[top, left / 2] != "□") //若是“□”,则判断mark值,为ture则打印"●",否则打印"○",同时数组相应位置的值发声替换
{
continue; //以实现两种棋子交替出现
}
if (mark)
{
Console.ForegroundColor = ConsoleColor.Blue;
Console.Write("●");
QP[top, left / 2] = "●";
}
else
{
Console.Write("○");
QP[top, left / 2] = "○";
}
if (SF(QP, top, left / 2)) //调用SF方法 判断输赢
{
Jmark = false;
Console.Beep();
System.Threading.Thread.Sleep(2000);
}
mark = !mark;
break;
}
}
}
}
static bool SF(string[,] strarr, int x, int y) //自定义SF方法 判断获胜玩家
{
int xx = x;
int yy = y;
string ActChe = strarr[x, y];
int i = 1; //i表示目前相连的同色棋子数 默认为1
//第一种情况,x不动,y在变化 即判断y方向上是否获胜
while (true)
{
if (--yy >= 0)
{
if (ActChe == strarr[xx, yy])
{
i++;
if (i == 5)
{
return true;
}
}
else
{
break;
}
}
else
{
break;
}
}
xx = x;
yy = y;
while (true)
{
if (++yy < 17)
{
if (ActChe == strarr[xx, yy])
{
i++;
if (i == 5)
{
return true;
}
}
else
{
break;
}
}
else
{
break;
}
}
//第二种情况,y不动,x在变化
i = 1;
xx = x;
yy = y;
while (true)
{
if (--xx >= 0)
{
if (ActChe == strarr[xx, yy])
{
i++;
if (i == 5)
{
return true;
}
}
else
{
break;
}
}
else
{
break;
}
}
xx = x;
yy = y;
while (true)
{
if (++xx < 17)
{
if (ActChe == strarr[xx, yy])
{
i++;
if (i == 5)
{
return true;
}
}
else
{
break;
}
}
else
{
break;
}
}
//第三种情况,x,y同增同减
i = 1;
xx = x;
yy = y;
while (true)
{
if (--xx >= 0 && --yy >= 0)
{
if (ActChe == strarr[xx, yy])
{
i++;
if (i == 5)
{
return true;
}
}
else
{
break;
}
}
else
{
break;
}
}
xx = x;
yy = y;
while (true)
{
if (++xx < 17 && ++yy < 17)
{
if (ActChe == strarr[xx, yy])
{
i++;
if (i == 5)
{
return true;
}
}
else
{
break;
}
}
else
{
break;
}
}
//第四种情况 x加,y减,或y加,x减
i = 1;
xx = x;
yy = y;
while (true)
{
if (--xx >= 0 && ++yy < 17)
{
if (ActChe == strarr[xx, yy])
{
i++;
if (i == 5)
{
return true;
}
}
else
{
break;
}
}
else
{
break;
}
}
xx = x;
yy = y;
while (true)
{
if (++xx < 17 && --yy > 0)
{
if (ActChe == strarr[xx, yy])
{
i++;
if (i == 5)
{
return true;
}
}
else
{
break;
}
}
else
{
break;
}
}
return false;
}
static void Main(string[] args)
{
string[,] QP = new string[17, 17]; //定义二维数组QP同时设置棋盘大小
while (true)
{
Console.Clear();
int left = 16;
int top = 8;
for (int i = 0; i < QP.GetLength(0); i++)
{
for (int j = 0; j < QP.GetLength(1); j++) //为数组QP每个元素赋初值 用“□”代替棋盘网格
{
QP[i, j] = "□";
}
}
for (int i = 0; i < QP.GetLength(0); i++)
{
for (int j = 0; j < QP.GetLength(1); j++)
{
Console.Write(QP[i, j]); //遍历数组QP 并将其打印在窗体 使界面看起来像是网格状
}
Console.WriteLine();
}
bool mark = true;
bool Jmark = true;
while (Jmark)
{
Console.SetCursorPosition(left, top); //设置光标初始位置
ConsoleKey key = Console.ReadKey(true).Key; //读取输入值
switch (key) //switch语句控制光标的移动,上下左右共4个方向 可同时由方向键和“W”“S”“A”“D”2组组合键控制
{
case ConsoleKey.UpArrow:
case ConsoleKey.W:
if (top > 0)
{
top--;
}
break;
case ConsoleKey.DownArrow:
case ConsoleKey.S:
if (top < 16)
{
top++;
}
break;
case ConsoleKey.LeftArrow:
case ConsoleKey.A:
if (left > 0)
{
left = left - 2;
}
break;
case ConsoleKey.RightArrow:
case ConsoleKey.D:
if (left < 32)
{
left = left + 2;
}
break;
default: //默认值设置 当按件不为定义的2组组合键时,若当前光标位置不是“□”,则不能操作,
if (QP[top, left / 2] != "□") //若是“□”,则判断mark值,为ture则打印"●",否则打印"○",同时数组相应位置的值发声替换
{
continue; //以实现两种棋子交替出现
}
if (mark)
{
Console.ForegroundColor = ConsoleColor.Blue;
Console.Write("●");
QP[top, left / 2] = "●";
}
else
{
Console.Write("○");
QP[top, left / 2] = "○";
}
if (SF(QP, top, left / 2)) //调用SF方法 判断输赢
{
Jmark = false;
Console.Beep();
System.Threading.Thread.Sleep(2000);
}
mark = !mark;
break;
}
}
}
}
static bool SF(string[,] strarr, int x, int y) //自定义SF方法 判断获胜玩家
{
int xx = x;
int yy = y;
string ActChe = strarr[x, y];
int i = 1; //i表示目前相连的同色棋子数 默认为1
//第一种情况,x不动,y在变化 即判断y方向上是否获胜
while (true)
{
if (--yy >= 0)
{
if (ActChe == strarr[xx, yy])
{
i++;
if (i == 5)
{
return true;
}
}
else
{
break;
}
}
else
{
break;
}
}
xx = x;
yy = y;
while (true)
{
if (++yy < 17)
{
if (ActChe == strarr[xx, yy])
{
i++;
if (i == 5)
{
return true;
}
}
else
{
break;
}
}
else
{
break;
}
}
//第二种情况,y不动,x在变化
i = 1;
xx = x;
yy = y;
while (true)
{
if (--xx >= 0)
{
if (ActChe == strarr[xx, yy])
{
i++;
if (i == 5)
{
return true;
}
}
else
{
break;
}
}
else
{
break;
}
}
xx = x;
yy = y;
while (true)
{
if (++xx < 17)
{
if (ActChe == strarr[xx, yy])
{
i++;
if (i == 5)
{
return true;
}
}
else
{
break;
}
}
else
{
break;
}
}
//第三种情况,x,y同增同减
i = 1;
xx = x;
yy = y;
while (true)
{
if (--xx >= 0 && --yy >= 0)
{
if (ActChe == strarr[xx, yy])
{
i++;
if (i == 5)
{
return true;
}
}
else
{
break;
}
}
else
{
break;
}
}
xx = x;
yy = y;
while (true)
{
if (++xx < 17 && ++yy < 17)
{
if (ActChe == strarr[xx, yy])
{
i++;
if (i == 5)
{
return true;
}
}
else
{
break;
}
}
else
{
break;
}
}
//第四种情况 x加,y减,或y加,x减
i = 1;
xx = x;
yy = y;
while (true)
{
if (--xx >= 0 && ++yy < 17)
{
if (ActChe == strarr[xx, yy])
{
i++;
if (i == 5)
{
return true;
}
}
else
{
break;
}
}
else
{
break;
}
}
xx = x;
yy = y;
while (true)
{
if (++xx < 17 && --yy > 0)
{
if (ActChe == strarr[xx, yy])
{
i++;
if (i == 5)
{
return true;
}
}
else
{
break;
}
}
else
{
break;
}
}
return false;
}
相关文章推荐
- c#如何编写实现用户注册的控制台应用程序
- C#实现控制台退出控制
- 基于C#的控制台的进度提示实现
- C# 实现控制台应用程序按任意键退出
- C# 实现控制台应用程序按任意键退出
- C# 控制台实现关闭前的操作,并使关闭按钮无法使用
- c#实现简单控制台udp异步通信程序示例
- C# 实现变了声明、赋值及使用(控制台程序)
- 用java实现一个在控制台下的五子棋游戏
- C# 控制台实现关闭前的操作,并使关闭按钮无法使用
- .Net/C#控制台应用程序实现磁盘目录文件搜索的工具类 【本示例简体转繁体】
- 理解面向对象编程---C#控制台实现52张扑克牌的分法
- C#控制台程序实现开启、关闭SQLServer服务的代码分享
- C# 调用控制台cmd 实现WIFI 共享
- C#控制台基础 快速实现接口的中的所有成员,使用快捷键
- C#控制台基础 filestream实现文件的复制粘贴
- .Net Remoting 事件回调 Client 函数方法完整实例: C# 实现控制台网络聊天室 (Console Remoting ChatRoom)
- C#实现的Win32控制台线程计时器功能示例
- 1. 请用C#的面向对象语言 实现 一个计算器控制台程序,要求输入两个数和运算符号,得到结果
- JAVA实现简单控制台五子棋游戏