科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件C# Builder创建井字游戏Web服务

C# Builder创建井字游戏Web服务

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本文介绍了如何使用C# Builder导入一个Web服务,并且将它变成一个井字游戏客户端

作者:wayne编译 来源:yesky 2007年11月13日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
编写 C#代码

  最后,我们到了我们决不能再拖延的地方:我们必须编写一些C#代码。在我们可以实现事件处理程序之前,我首先需要添加一些特殊变量(像指向一个井字游戏Web服务的一个实例的TTT变量,一个游戏句柄和一个标记,来了解是计算机还是人赢了这场游戏)。 添加这些变量最好的位置是在WinForm源文件的Main()方法的实现部分:

private ITicTacToeservice TTT = null;
private int Game = 0;
private int TTTIsWinnerGame = 0;

  这些声明需要跟随四个方法实现:Init_TTT和Clear_Board。前者用来延迟装载井字游戏Web服务实例- -我们应该在使用TTT变量之前调用Init_TTT,这将保证服务器实例只在我们实际需要它的时候创建(因此如果你开始执行游戏,但是又立即退出,你不必连接服务器,并且什么也不会生成)。Clear_Board方法用来再次清除九个按钮的标题,并且重置TTTIsWinnerGame变量。 在新的一局启动之前被调用。

private void Init_TTT()
{
if (TTT == null)
try
{
TTT = new ITicTacToeservice();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error");
}
}

private void Clear_Board()
{
btn1.Text = "";
btn2.Text = "";
btn3.Text = "";
btn4.Text = "";
btn5.Text = "";
btn6.Text = "";
btn7.Text = "";
btn8.Text = "";
btn9.Text = "";
TTTIsWinnerGame = 0;
}

  在我们可以编写事件处理程序之前,我们还需要再实现两个方法:ComputerMove和HumanMove。 显然,我们必须知道人(1)和计算机(2)之间的差异,并且我硬编码了计算机使用字符"42"而人使用十字叉作为棋子。 如果你感到愿意,你也可以放心地在这里添加你自己的表示棋子的方法,甚至是图像。

const int Human = 1;
const int Computer = 2;

private void ComputerMove()
{
int Move = TTT.NextMove(Game, Computer);
TTT.MakeMove(Game, Computer, Move);
switch (Move)
{
case 1: btn1.Text = "42"; break;
case 2: btn2.Text = "42"; break;
case 3: btn3.Text = "42"; break;
case 4: btn4.Text = "42"; break;
case 5: btn5.Text = "42"; break;
case 6: btn6.Text = "42"; break;
case 7: btn7.Text = "42"; break;
case 8: btn8.Text = "42"; break;
case 9: btn9.Text = "42"; break;
}
TTTIsWinnerGame = TTT.IsWinner(Game);
if (TTTIsWinnerGame == Computer)
MessageBox.Show("I have won this game!");
}

private void HumanMove(object NewMove)
{
int Move = Convert.ToInt32(NewMove);
TTT.MakeMove(Game, Human, Move);
TTTIsWinnerGame = TTT.IsWinner(Game);
if (TTTIsWinnerGame == Human)
MessageBox.Show("Congratulations: you have won!");
else
if (TTT.NextMove(Game, Computer) > 0)
ComputerMove();
}

  此时,我们可以实现两个菜单选择事件处理程序。 第一个菜单选择事件处理程序(menuItem3_Click)是当"Computer Starts"选项被选中的时候启动,第二个菜单选择事件处理程序(menuItem4_Click)是当" Human Starts"选项(实际用户)被选中的时候启动。 这两个都调用前面说到的Init_TTT和Clear_Board,并且调用NewGame来取得一个唯一的新游戏句柄。作为调试之用,应用程序把新游戏的Game句柄放在对话框的标题中。 井字游戏服务器可以同时运行许多游戏,并且不在内存保存这些游戏状态(但是对于每个游戏,在本地有一个.ini文件)。 相当于客户端在维护它自己在游戏板上的状态。

private void menuItem3_Click(object sender, System.EventArgs e)
{
// Computer Starts
Init_TTT();
Clear_Board();
Game = TTT.NewGame();
Text = "Game: " + Convert.ToString(Game);
ComputerMove();
}

private void menuItem4_Click(object sender, System.EventArgs e)
{
// Human Starts
Init_TTT();
Clear_Board();
Game = TTT.NewGame();
Text = "Game: " + Convert.ToString(Game);
}

  最后,我们可以实现九个按钮的单击事件处理程序。 它们应该都指向相同的事件处理程序(所以只要实现左上角的btn8按钮的事件处理程序一次,然后指出所有其他的为相同的btn8_Click事件处理程序即可)。 因为每个按钮都有它们不同的Tag属性值,所以很容易使用这个来识别游戏板上不同位置的值。

private void btn8_Click(object sender, System.EventArgs e)
{
if (Game == 0) menuItem4_Click(sender, e);
switch (TTTIsWinnerGame)
{
case Computer:
MessageBox.Show("Computer has already won!"); break;
case Human:
MessageBox.Show("You have already won!"); break;
default:
if ((sender as Button).Text == "")
{
(sender as Button).Text = "X";
Update();
HumanMove((sender as Button).Tag);
}; break;
}
}

  如果你需要,你可以添加更多装饰材料,例如一个窗体图标,你可以设置MaximizeBox为False,并且避免调整窗体大小,设置MaximumSize和MinimumSize为Size属性的值(当使用大字体的时候,可能导致应用程序看上去很难看,我在这里就不再试验了)。

  编译并运行

  现在,保存你的工作,第一次编译并运行它。注意为了到达井字游戏服务器,你需要一个Internet联接-否则这客户端将出现一个异常。



  为了部署这个应用程序,设置Project Options为Release,并且最后一次编译。注意 C# Builder创建的.NET可执行程序需要1.1版本的.NET框架,因此可执行程序不会在.NET1.0框架上运行。

  总结

  在本文中,我已经示范如何创建一个新的C# Builder应用程序,导入Web服务(通过添加一个Web引用)并且编译,运行和部署这个应用程序。

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章