- 1、本文档共6页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
中国象棋复盘-Read
河北工业大学计算机软件技术基础(VB)
课 程 设 计 任 务 书
本题难度级别:A 实现基本要求代码: 约230行 主要涉及: 基本控件、算法、文件操作
一、设计题目:中国象棋复盘(出题人:曹新国)
因题目中涉及象棋规则,不会下棋的不要选。
二、目的与要求1.目的培养学生综合利用语言进行程序设计的能力,主要是。基本要求。
。3.创新要求在基本要求达到后,进行创新设计,。、设计方法和基本原理问题描述2. 问题的解决方案Form_Load()
作一些初始化的工作。主要是加载用于显示棋子的控件数组。
Form_KeyDown(KeyCode As Integer, Shift As Integer)
处理快捷键,包括:ESC键,N键和P键,根据实现情况也可以包括其它键。
CommandXXX_Click()
处理各个命令。包括载入文件,开始,下一步,上一步和退出。
List1_DblClick()
双击列表框中的棋谱时产生的事件,棋局直接跳到该步前的状态。
Timer1_Timer()
定时器事件,显示计时和当前走棋方是黑还是红。
Sub ProcessStep(ByVal s As String)
最核心的子程序,处理每一步走子,例如“前炮进八,马3退2”之类。
Function LoadRecord(filename As String) As Boolean
关键函数,载入指定文件中的棋谱。
四、问题的描述中 国 象 棋 对 局 记 录
-------------------------------------------------
对局名称:战无不胜[zwbszwbs] - 2006xxxy
比赛日期:2006年6月8日1时 比赛地点:
红 方:战无不胜(zwbszwbs) 耗时: 11分 24秒
黑 方:2006xxxy 耗时: 13分 58秒
比赛结果:红胜 裁判员:
-------------------------------------------------
棋谱 红方 黑方
1. 炮二平五 炮2平5
2. 马二进三 马8进9
3. 车一平二 车9平8
4. 炮八平六 卒3进1
…
118. 炮七平六 将4进1
119. 帅五平六 将4退1
120. 炮六进三 将4退1
121. 炮六进一
1-0
1.文本棋谱文件的读入
此处给出将文本文件的内容读入内存中的字符串变量的示意代码(假设已经用通用对话框控件的ShowOpen方法取得文件名并放入infile字符串变量):
Dim oneLine As String
Open infile For Input As #10 ’打开文件。infile 变量中存放的是文件的名字
While Not EOF(10)
Line Input #10, oneLine ’读入一整行文本
’此时已经将文件中的一整行读入了变量oneLine,在下面加入分析代码
Wend
Close #10 ’关闭文件
2.分析棋谱并放入列表框中
按预备知识中的说明,我们知道应该从什么时候记录棋谱。读文件时一直读下去,直到碰到某行头两个字符是“棋谱”的时候为止,如果文件结束了还没碰到,则不是棋谱文件。
这一操作的关键代码如下所示:
Do
Line Input #10, oneLine
Loop Until Left(oneLine, 2) = 棋谱 Or EOF(10)
If EOF(10) Then MsgBox “不是棋谱文件!”
从下一行开始,我们就要将读入的内容中的红黑方着法提取出来并分别记入列表框中。
3.走子算法
这个问题比较复杂,需要先弄明白棋子的行棋规则(详见本题资料之“中国象棋竞赛规则.DOC”和“着法表示.DOC”),假设棋盘Board是一个10×9的数组,开局时每个子都有缺省位置,比如黑在上方则黑车分别放置在Board(1,1)和Board(1,9)中,而黑炮则放在Board(2,2)和Board(2,8)中,红的对应子则放在Board(10,1)和Board(10,9)及Board(8,2)和Board(8,8)中。
初始状态设置好后就可以开始走棋了,下面分析几个典型着法的处理过程:
①炮8平5
先找到8路上的炮在什么位置,用按列循环的方法,比如3代表炮的编码,则用如下片断可以找到8路上的炮在第几行:
For I = 1 To 10
If Board(I, 8) = 3 Then POS = I: Exit For
Next I
’此时 POS中
文档评论(0)