象棋编程游戏——布局篇

这段时间,发现自己的象棋水平有点小进步,大师级别的现在还不敢想,高手级别的也肯定是比不上的了。在我两三个月象棋生涯中,先是屡战屡败,屡败屡战,而后还能侥幸胜几局,也感觉到了自己的进步。回想一下我的战绩:胜6局,平3局,输的不记得多少局了。

最近我完成了象棋里最基本的开盘布局,不知道别人是怎么做这个功能的。我是通过.ini文件读取象棋游戏布局的。

public const string FileName="..\\..\\象棋布局文件.ini";
public Hashtable chessHT=new Hashtable(); //建立初始表,用于存放对应的棋子字符串和棋子图象
public System.Windows.Forms.PictureBox[] pictureBoxs=new PictureBox[32]; //存放棋子的一组图片框

public Image[] imgs=new Image[14];

public string battle=null;

public string[] soldiers=new string[32];
public Point[] tempPoint=new Point[32]; //存放盛棋子的32个点

public bool whetherSelected=false; //保证只有一个图像移动,并且确保移动正确
public Point p=new Point(); //移动图象时,记录鼠标的旧坐标

public Point beforeMovePoint=new Point();
兵种: "黑卒","黑炮","黑車","黑马","黑象","黑士","黑将"
"红兵","红炮","红車","红马","红相","红士","红帅

象棋布局代码

1 //建立pictureBoxs的实例
2             for(int i=0;i<32;i++)
3                 this.pictureBoxs[i]=new PictureBox();
4
5             InitializeComponent();
6
7             //以下代码初始化chessHT对照表
8             string[] str={"黑卒","黑炮","黑車","黑马","黑象","黑士","黑将","红兵","红炮","红車","红马","红相","红士","红帅"};
9             //读取棋子文件所在位置
10             imgs[0]=Image.FromFile(@"..\..\img\black-bing.gif");
11             imgs[1]=Image.FromFile(@"..\..\img\black-pao.gif");
12             imgs[2]=Image.FromFile(@"..\..\img\black-ju.gif");
13             imgs[3]=Image.FromFile(@"..\..\img\black-ma.gif");
14             imgs[4]=Image.FromFile(@"..\..\img\black-xiang.gif");
15             imgs[5]=Image.FromFile(@"..\..\img\black-shi.gif");
16             imgs[6]=Image.FromFile(@"..\..\img\black-jiang.gif");
17             imgs[7]=Image.FromFile(@"..\..\img\red-zu.gif");
18             imgs[8]=Image.FromFile(@"..\..\img\red-pao.gif");
19             imgs[9]=Image.FromFile(@"..\..\img\red-ju.gif");
20             imgs[10]=Image.FromFile(@"..\..\img\red-ma.gif");
21             imgs[11]=Image.FromFile(@"..\..\img\red-xiang.gif");
22             imgs[12]=Image.FromFile(@"..\..\img\red-shi.gif");
23             imgs[13]=Image.FromFile(@"..\..\img\red-shuai.gif");
24             for(int i=0;i<=13;i++)
25             {
26                 chessHT.Add(str[i],imgs[i]);
27             }
28
29             //往panel1中添加pictureBoxs数组控件
30             this.panel1.Controls.AddRange(pictureBoxs);
31
32             //使所有PictureBoxs隐藏,不影响主界面的显示
33             for(int i=0;i<32;i++)
34                 this.pictureBoxs[i].Visible=false;
35
36             for(int i=0;i<32;i++)
37             {
38                 this.pictureBoxs[i].MouseUp += new System.Windows.Forms.MouseEventHandler(this.pictureBoxs_MouseUp);
39                 this.pictureBoxs[i].MouseMove += new System.Windows.Forms.MouseEventHandler(this.pictureBoxs_MouseMove);
40                 this.pictureBoxs[i].MouseDown += new System.Windows.Forms.MouseEventHandler(this.pictureBoxs_MouseDown);
41             }
42
43             signString[0]="black"; //初始化标志哪方走棋字符串
44             signString[1]="red";
45
46             this.pictureBox6.Width=this.width/2-5;
47             this.pictureBox6.Height=this.height/2+3;

运行效果:

时间: 2025-01-02 07:53:59

象棋编程游戏——布局篇的相关文章

C#对游戏手柄的编程开发-API篇(2)

回顾"被动方式"开发 在C#对游戏手柄的编程开发-API篇(1)这篇文章中我们介绍了"被动方式"的开发.在此方式下,我们 的程序只扮演一个消息接收者.系统会定时告诉我们某个游戏手柄当前的状态,我们的程序接收到后再按 实际需要进行处理即可.但如果你是一个细心的人,你会发现如果直接按消息事件处理的话会存在一个问 题,如我们按下某个键(比如向上的方向键)然后放开时,对于我们"人"来说,我们按下与弹起的这两 个动作应该只是说明我们只点击这个按钮一次.但对

CaseStudy(showcase)布局篇-列表的排放与遮罩

做silvelight也有一段时间了,相册.游戏,刚刚完成的showcase这个小程序算是一个阶段了.这里就以showcase这个项目来做一下CaseStudy. 布局篇-列表的排放与遮罩 有数据就肯定会有列表,这里就写一下我使用的心得. 做列表这里我选用的是StackPanel,它可以横向或纵向排列.同样若是纵向排列.可以设置宽度一定.高度Auto.如果需要设置间距,那就在它的子控件设置. 重点说一下对StackPanel的遮罩. 这个做遮罩首先先把StackPanel组合到一个Canvas中

CaseStudy(showcase)布局篇-如何做一个自适应窗口大小的布局

做silvelight也有一段时间了,相册.游戏,刚刚完成的showcase这个小程序算是一个阶段了.这里就以showcase这个项目来做一下CaseStudy. 布局篇-如何做一个自适应窗口大小的布局 Canvas是对其子控件绝对定位的子控件需要设置宽高.Grid而是对其子控件设置上下左右边距的子控件不一定需要设置宽高直接用Auto属性即可大小受父控件影响. 了解了特性及可以开始制作了.首先先从最外层的UserControl做起,在这里给他一个固定的宽高.这个宽高在发布的时候是可以改变的.主要

艾伟:C#对游戏手柄的编程开发-API篇(2)

回顾"被动方式"开发 在C#对游戏手柄的编程开发-API篇(1)这篇文章中我们介绍了"被动方式"的开发.在此方式下,我们的程序只扮演一个消息接收者.系统会定时告诉我们某个游戏手柄当前的状态,我们的程序接收到后再按实际需要进行处理即可.但如果你是一个细心的人,你会发现如果直接按消息事件处理的话会存在一个问题,如我们按下某个键(比如向上的方向键)然后放开时,对于我们"人"来说,我们按下与弹起的这两个动作应该只是说明我们只点击这个按钮一次.但对于系统来

行业网站建设之外链布局篇

前几天,我分别在A5发了<行业网站建设之关键词布局篇>和<行业网站建设之文件存放布局篇>.那两篇文章应该是从技术角度来分析了下行业网站的建设.而本文将是从seo的角度来分析下,行业网站外链要如何布局. 说外链布局其实很不妥,但往深层次一点想.做外链又何尝不是一种布局?因为我们需要时刻把握好什么时候该做什么外链,什么时候该做哪个词的外链等.由于本人是在一个泵阀行业类站点东瓯泵阀网工作,下面很多分析就以此站为例. 1.什么时候做什么外链 如果一个上线没多久的站点想去交换友情链接,那是非

Symbian编程总结-基础篇-集合与缓冲区(2)-验证RArray::Append

Symbian编程总结-基础篇-集合与缓冲区(2)-验证RArray::Append是否保存对象副本 一.验证栈对象会自动销毁 我们知道,在C++中,在函数中创建了栈对象,函数退出时,该栈对象会自动销毁(栈指针后移了,栈内存会被覆盖).如何验证这一点?我们需要在函数外定义一个整形变量,在函数内将该函数内获取了变量的地址,在函数调用完毕后,将地址还原成对象: TInt iAddr; /** * 将地址还原成描述符对象并显示出来 * @param aAddr 地址 */ LOCAL_C void P

Symbian编程总结-基础篇-活动对象正解(4)-异步函数的同步调用

在上一节里我们深入了解了活动对象.活动调度器及异步函数服务器的工作原理及运行机制,想必大家对活动对象的机制及体系结构的运用已经了如指掌.但是大家有没有觉得异步函数使用起来比较麻烦呢?难道非要使用活动对象,非得以"异步"的方式调用异步函数吗?这一节将为大家解决这个问题:异步函数的同步使用. 一.使用CActiveSchedulerWait类 在以前的文章"Symbian编程总结-界面篇-打开jpeg/gif/png图像"里我们已经看到了CActiveScheduler

Symbian编程总结-基础篇-动态缓冲区(1)-回顾HBufC

当数据尺寸在编译期不固定,而在运行期有可能要扩展到很大尺寸时,动态缓冲区在保存二进制数据方面显得非常有用.我们可以使用C++数组保存二进制数据,然后调用类似于memcpy的函数去动态的改变数组所占用空间的大小:我们还能够使用HBufC描述符,获取其可修改的描述符向其写入数据,然后调用ReAlloc方法扩展数组.以上两点方法可行,但是不好,因为我们得自己管理内存的分配.Symbian C++考虑到了这一点,于是引入了动态缓冲区的概念. 基于堆的缓冲描述符HBufC的前缀H显然不符合Symbian

Windows界面编程第七篇 文件拖拽(文件拖放)

本文配套程序下载地址为:http://download.csdn.net/detail/morewindows/5128654 转载请标明出处,原文地址:http://blog.csdn.net/morewindows/article/details/8634451 欢迎关注微博:http://weibo.com/MoreWindows   前面已经有六篇文章介绍了Windows界面编程,目录如下: 1. <Windows界面编程第一篇位图背景与位图画刷> 2. <Windows界面编程