水银中毒有什么症状-
学号
1608220203
2016-2017
学年
第一学期
《
Windows
程序设计》
课程设计报告
题
目
:
象棋游戏设计
专
业
:
班
级
:
姓
名
:
指导教师:
成
绩
:
学院
二
0
一六年十一月十五日
目
录
14
1.
设计目的
........................... .................................................. .................................................. ........
3
2.
游戏的设计内容
..... .................................................. .................................................. ..................
4
2.1
象棋特点及基本下法
.
................ .................................................. .....................................
4
2.2
象棋常用的取胜方法
.
................ .................................................. .....................................
5
3.
游戏设计步骤
......................... .................................................. .................................................. ..
6
3.1
制作棋盘界面
.
...... .................................................. .................................................. .........
6
3.2
编码实现
........... .................................................. .................................................. .............
7
3.2.1
判断马的走法是否合理
...................... .................................................. ................
8
3.2.2
断兵
/
卒的走法是否合理
............. .................................................. .......................
9
3.2.3
判断車的走法是否合理
...................... .................................................. ..............
1
0
3.2.4
判断炮的走法是否合理
...................... .................................................. ..............
1
0
3.2.5
判断象的走法是否合理
...................... .................................................. ..............
11
3.2.6
判断士的走法是否合理
.................................................. ....................................
11
3.2.7
判断将
/
帅的走法是否合理
............ .................................................. ..................
1
2
3.2.8
悔棋
.............................................. .................................................. ......................
1
3
3.2.9
胜负判断
........................ .................................................. ....................................
1
4
3.2.10
键盘鼠标操作支持
.
.............. .................................................. ...........................
1
5
4.
运行测试
........................... .................................................. .................................................. ......
1
6
5.
小结
.
...... .................................................. .................................................. ..................................
1
7
6.
参考文献
........................... .................................................. .................................................. ......
1
8
7.
附录
.
...... .................................................. .................................................. ..................................
1
9
14
1.
设计目的
象棋是人们喜欢的一种 棋类游戏,
近来,
随着计算机的快速发展,
以计算机
作为对战平台,
各种棋类游戏如雨后春笋般纷纷冒出,
使得那些喜爱下棋,
有常
常苦于没有对手的棋迷 们能随时过足棋瘾,
而且这类软件个个水平颇高,
大有与
人脑分庭抗礼之势。
当我们与电脑对战对时,
您知道这些软件是怎样像人脑一样进行思考的吗?
总的来说( 我们假定您熟悉象棋的基本规则),要让电脑知道该在哪一点下子,
就要根据盘面的形式,
为每 一可能落子点计算其重要程度,
也就是当这子落下后
会形成什么模型,
然后通览全盘选 出最重要的一点,
这便是最基本的算法。
当然,
仅靠当前盘面进行判断是远远不够的,
这样下棋很容易掉进玩家设下的陷阱,
因
为它没有考虑以后的变化。
所以在此 基础上我们需要使用好的算法是电脑能预测
出今后几步的各种走法,
以便做出最佳选择,
这也是我们下棋时常说的
“想了几
步”。怎样才能达到这个程度呢?这是本文所要讨论的主要 问题。本人使用
C#
语言作为开发工具,
编写了这个象棋游戏,
软件实现了人 机对弈和双人对弈的功
能,游戏软件界面美观,操作容易。
2.
游戏的设计内容
14
2.1
象棋特点及基本下法
象棋的娱乐性强、规则简单、易学、流行性广< br>,
普通人不需长时间专门训练
即可自如行棋
,
因此极受大众喜欢。
象棋基本下法为
:
帅(将):帅(将)是棋中的首脑,是双方竭力争夺的目标 。它只能在九宫
之内活动,可上可下,可左可右,每次走动只能按竖线或横线走动一格。帅与将
不能在同一直线上直接对面,否则走方判负。
仕(士):仕(士)是将(帅)的贴身保镖,它 也只能在九宫内走动。它的
行棋路径只有九宫内的四条斜线。
相(象):相(象)的 主要作用是防守,保护自己的帅(将)。它的走法是
每次循对角线走两格,俗称“象飞田”。相(象)的 活动范围限于河界以内的本
方阵地,不能过河,且如果它走的田字中央有一个棋子,就不能走,俗称“塞 象
眼”。
车:车在象棋中威力最大,无论横线、竖线均可行走,只要无子阻拦,步数
不受限制。因此,一车可以控制十七个点,故有“一车十子寒”之称。
炮:炮在不吃 子的时候,移动与车完全相同。当吃子时,己方和对方的棋子
中间必须间隔
1
个棋子< br>(无论对方或己方棋子)
,
炮是象棋中唯一可以越子的棋
种。
马:
马走动的方法是一直一斜,
即先横着或直着走一格,
然后再斜着走一个
对角线,
俗称
“马走日”
。
马一次可走的选择点可以达到四周的八个点,故有
“八
面威风”之说。如果在要去的方向有别的棋子挡住,马就无法走过去,俗称“蹩< br>马腿”。
14
兵(卒):兵(卒)在未过河前,只能 向前一步步走,过河以后,除不能后
退外,允许左右移动,但也只能一次一步,即使这样,兵(卒)的威 力也大大增
强,故有“过河的卒子顶半个车”之说。
2.2
象棋常用的取胜方法
双车错:双车交错将军取胜;
白脸将:
利用双方将帅不得直接对面的规则取胜
(右图以己方帅占中,
车照
将对方老将取胜);
马后炮:马定将,炮在后面将军;
肋马车:车在肋道,马协助杀将;
天地炮:中炮和底炮牵制对方中线和底线,利用其它棋子(多为车)将军取
胜;
铁门栓:中炮牵制对方中线子力,用己方车从底线将军取胜;
大刀剜心:
中 炮牵制对方中路子力,
弃车强砍对方中士构成铁门栓局势取胜。
同样局势下,用兵则为“小刀剜 心”;
重炮;双炮构成一线攻击对方老将取胜;
夹车炮:车和双炮攻击对方老将取胜,双炮的作用等同于一车;
三进兵:兵(在炮保护下)的步步推进将军取胜;
海底捞月:
车、
炮胜单车的实用残局,
要求车炮方夺取中路控制权才容易取
胜;
老兵搜林:
车、
底兵胜单车的实用残局,
要求车兵方夺取对中路控制权才容
易取胜;
14
卧槽马(马定将,其他子力将军);
钓鱼马(马定将,其他子力将军);
金钩马(马定将,其他子力将军);
八角马(马定将,其他子力将军);
高钓马(马定将,其他子力将军);
3.
游戏设计步骤
3.1
制作棋盘界面
新建一个
Windows
应用程序,项目命名为“控件版象棋” 如图所示设计
象棋界面。
在
Visual
集成开发环境项目中的
( 解决方案资源管理器)
窗口中,
双击
文件,
进入
文 件的编辑界面。
如图添加控件,
主要控件属性如下表所示。
图
1.
象棋界面
14
表
1.
各控件属性对象
3.2
编码实现
一、
Class1
是一个自定义类,记录了旗盘位置特点类,
以非常技巧的数据结
构
,
记录了每一时刻旗盘上 的旗子情况。
GetNearPoint
求两点间的距离公式
N (x2-x1)2-(y2-y2)2
Cou ntIndex
已知一个点
,
求出此点映射到一维数组对应的索引,
既是代表 在
棋盘上的位置。公式为:
(y2-y1)/*9+(x2-x1)/
由
index
决定是前进还是往后退:
int index=ndex(point);
if(index>=0&&index<45)
return
else
14
{
if(index>=45&&index<90)
return
class2
继承于
class1
,
也是一 个自定义类,
记录了旗盘位置特点类
,
规定了各
个旗子的走法。没有考虑所有 情况
,
而只考虑了真的情况
;
能够避免作蔽
,
程序规定必须按每个旗子的走法走旗。旗子判断步伐时,为了提高执行效率
,
只判断旗
子 可以走的情况。
自己周围的规则点是不是在旗盘上
;
如果周围的规则点在旗盘
上
,
则该点是否是自己的旗子
,
如果是
,
则不允许走。< br>
首先判断各个棋的走法是否合理之前,
都要先判断这个棋子能不能走。
既先< br>求标志起点信息的一维数组的索引,
再求标志终点信息的一维数组的索引,
如果
起点和终点是同一个点
,
则允许放回旗子
,
重新选其它路,如果起点和终点是 同一
边的旗子
,
则不能走
3.2.1
判断马的走法是否合理
除去以上几种情况
,
其余终点都不能落旗
当马向上跳时有两种跳法
(
左上日和右上日
)
,
起点上面 没有旗子
,
也就是不
挡马腿
时可以往上走旗:
if (tPoint(fromPoint,-2,1)==toPoint||tPoint(fromPo
int,-2,-1)==toPoint)
if([ndex(tPoint(fromPoint,-1,0))]==fal
se)
14
同上
,
只是变为向下跳马,不
挡马腿
时可以往下走:
tPoint(fromPoint,2,1)
tPoint(fromPoint,2,-1)
ndex(tPoint(fromPoint, 1,0))]==false)
同上
,
只是变为向右跳马,不
挡马腿
时可以往右走:tPoint(fromPoint,1,2)
tPoint(fromPoint,-1,2)
ndex(tPoint(fromPoint,0,1))]==false)
同上
,
只是变为向左跳马
tPoint(fromPoint,-1,-2)
tPoin
t(fromPoint,1,-
2)==toPoint)
3.2.2
断兵
/
卒的走法是否合理
要先判断起点是在旗 盘上方
,
还是下方,终点是在旗盘上方
,
还是下方。假如
起始点是蓝 兵,起点和终点都在下面或起点在下面终点在上面时
tPoint(fromPoint,-1,0)< br>,如果终点是起点的上面一个点
,
则返回真
如果起点和终点都在上面时有以下几种情况:
14
过河后可以往上走:
tPoint(fromPoint,-1,0)
过河后可以往右走:
(tPoint(fromPoint,0,1)
过河后可以往左走:
tPoint(fromPoint,0,-1)
假 如起始点是红兵,规则同上蓝兵,不过是过河后往下走时是
tPoint(fromPoint,1,0 )
3.2.3
判断車的走法是否合理
1
、起点和终点在同一条垂直直线上,
起点在终点下面,判断起点终点之间有无旗子:
for(int i=-1;tPoint(fromPoint,i,0)!=toPoint;i--)
起点在终点上面,判断起点终点之间有无旗子:
for(int i=1;tPoint(fromPoint,i,0)!=toPoint;i++)
2
、起点和终点在同一条水平直线上
起点在终点左边判断起点终点之间有无旗子:
for(int j=1;tPoint(fromPoint,0,j)!=toPoint;j++)
起点在终点右边
3.2.4
判断炮的走法是否合理
14
1
、
起点和终点在同一垂直线上
起点在终点 下面,
先判断起点终点之间旗子数量,
如果起点和终点之间的旗
子数大于
1,
则不能落旗;起点和终点之间无旗子
,
且终点也无旗子
,
则可以在终 点
落旗;
起点和终点之间仅有一个旗而且终点有旗子且是对方的旗子,
炮就可以吃掉对方的棋子。
for(int i=-1;tPoint(fromPoint,i,0)!=toPoint;i--)
if(number_QiZi>1)
还有起点在终点下面、
起点 在终点右边、
起点在终点左边这三种情况,
编程
方法同上。
3.2.5
判断象的走法是否合理
如果起点和终点所在边不相同
,
如一个在河上
,
一个在河下
,
则不能落旗
,
即各< br>边的象不能过河
.
象的四种走法
:
当象向右下方跳时右下田
,
起点右下一个点上没有旗子
,
也就是不挡象腿时可
以往上走旗
:
if(tPoint(fromPoint,2,2)==toPoint)
tPoint(fromPoint,1,1))]==false
左下田
:(fromPoint,2,-2)
fromPoint,1,-1))]==false
14
水银中毒有什么症状-
水银中毒有什么症状-
水银中毒有什么症状-
水银中毒有什么症状-
水银中毒有什么症状-
水银中毒有什么症状-
水银中毒有什么症状-
水银中毒有什么症状-
本文更新与2021-01-27 06:21,由作者提供,不代表本网站立场,转载请注明出处:http://www.xapfxb.com/yuer/429915.html
-
上一篇:小学生寒假计划书2020.doc
下一篇:孩子产生心理压力的9个原因