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

2016-02-19 16:54 10 1 收藏

下面是个超简单的C# Builder创建井字游戏Web服务教程,图老师小编精心挑选推荐,大家行行好,多给几个赞吧,小编吐血跪求~

【 tulaoshi.com - 编程语言 】

  在本文,我将介绍如何使用C# Builder导入一个Web服务,并且将它变成一个井字游戏客户端。源代码(也可以使用.NET SDK下的C#命令行编译程序编译)可在BDS1.0ExamplesC#Web ServicesTic Tac Toe目录下获得,也可以在CodeCentral下获得,但是放心启动C# Builder然后跟着我输入代码,看看我是如何创建并且构建这个工程的。

  C# Builder工程

  今天的工程由两部分组成:用户界面(一个WinForm)和引擎,基于一个导入的Web服务。 这个Web服务本身在多年以前就使用Delphi 6实现了,在网上可以在http://www.eBob42.com/cgi-bin/TicTacToe.exe/wsdl/ITicTacToe 处找到。

  启动C# Builder,并且点击File | New - C# Application来启动一个新建项目。 在对话框中,我们可以输入工程的名称(如TTT),这样就导致工程被创建在C:Documents and SettingsAdministratorMy DocumentsBorland Studio ProjectsTTT目录下了(在当前用户目录下,也就是说我现在正在管理员模式下操作)。

  在点击OK之后,一个带有空的WinForm的新建项目将创建。 作为第一件事,我想添加一个主菜单到这个WinForm中。 使用菜单设计器,我创建一个菜单结构Game|New Game,带有子菜单选项Computer Starts和Human Starts。后两个是唯一一个将取得事件处理程序的,其它只是摆设罢了(并且让它使开始一个新游戏稍微困难一些)。

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  接下来,放置九个按钮(从左上端到右下端),但是称它们为btn8、btn3、btn4、btn1、btn5、btn9、btn6、btn7、btn2,设置它们的Tag属性(是.NET中的一个Object,不是一个Integer)为按钮的号码(所以左上的为Tag 8,中上的为Tag 3等等)。 这将保证用户界面还使用井字游戏Web服务实现的魔方算法。

  选择所有的按钮,并且设置它们的字体为Comic Sans MS,Bold,24点,同时清除它们的Text属性。

  添加Web引用

  现在,在我们编写一些事件处理程序之前(用于两个菜单项和九个按钮),我们应该先导入Web服务来运行。 点击Project | Add Web Reference,在搜索框中输入TicTacToe Web服务的URL。URL是http://www.eBob42.com/cgi-bin/TicTacToe.exe/wsdl/ITicTacToe,你可以在下面的屏幕截图中看到。

  Add Reference按钮只有在UDDI Browser(Add Web Reference对话框)显示一个实际的WSDL定义的时候才可用。在所有其他的情况下,你可以使用这个对话框来作为简单的浏览器。

  随着按钮可用,点击能导入外部Web服务的Add Reference按钮,创建一个Web引用并且把它添加到我们的工程中。 Project Manager将说明Web引用以及Reference.cs文件是如何嵌入我们的工程中的:

  Reference.cs文件包含导入的Web服务。

  编写 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"而人使用十字叉作为棋子。 如果你感到愿意,你也可以放心地在这里添加你自己的表示棋子的方法,甚至是图像。

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  

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!");elseif (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 StartsInit_TTT();Clear_Board();Game = TTT.NewGame();Text = "Game: " + Convert.ToString(Game);ComputerMove();}private void menuItem4_Click(object sender, System.EventArgs e){// Human StartsInit_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引用)并且编译,运行和部署这个应用程序。

来源:http://www.tulaoshi.com/n/20160219/1613515.html

延伸阅读
private void Button1_Click(object sender, System.EventArgs e) { // Catalog Name string strCatalog = "TestCatalog"; string strQuery=""; strQuery = "Select DocTitle,Filename,Size,PATH,URL from Scope() where FREETEXT('" +TextBox1.Text+ "')"; // TextBox1.Text is the word that you type in the text box to query by using In...
在本篇文章中,我们将讨论下面的问题: 使用C#创建一个简单的COM对象(使用COM的Interop特性)。 从VC++客户端软件中访问COM。客户端软件使用了TypeLibrary(.TLB文件)。 为了简单和方便开发人员使用、测试起见,我们使用了SQLSERVER数据库软件的缺省安装中的Northwind数据库。 修改COM对象中SQLServer的名字,与SQLSe...
现在有很多网络管理软件都具备网络上信息实时传送的功能,虽然有些网络通讯软件功能比较强大,有的软件不仅可以传送文本信息,还可以传送二进制文件等。但它们都有一个无法克服的缺点,那就是分发比较困难,信息传送双方计算机都需要安装通讯软件的客户端和服务器端软件,并且只有但双方都打开相应软件时,才可能进行信息传送。而信使通讯...
前言: Borland的C# Builder是一个基于C#语言的编程工具,C# Builder允许开发者用Java或CORBA工具开发,C# Builder同时也具有从多种数据库中读取数据的能力,可以混合和适应不同开发标准的能力。本文向大家介绍怎样用Borland C# Builder编写一个信箱监视程序, 程序主要是通过WinSock来进行网络通信。要实现这个程序,应对POP3协议有...
我贴c#的代码: 代码如下: namespace IWebs.Webs{ using System; using System.Web.Services; using System.Web.Services.Protocols; using System.Xml; using System.Xml.XPath; using System.Web.Script.Services; using IWebs; [WebService (Name="cjjer",Description="一个返回用户资料,订单信息的WebService,请求的手机号码最...

经验教程

704

收藏

33
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部