嵌入式WinCE课程设计报告-黑白棋

上传人:无*** 文档编号:200230714 上传时间:2023-04-14 格式:DOC 页数:25 大小:840.50KB
收藏 版权申诉 举报 下载
嵌入式WinCE课程设计报告-黑白棋_第1页
第1页 / 共25页
嵌入式WinCE课程设计报告-黑白棋_第2页
第2页 / 共25页
嵌入式WinCE课程设计报告-黑白棋_第3页
第3页 / 共25页
资源描述:

《嵌入式WinCE课程设计报告-黑白棋》由会员分享,可在线阅读,更多相关《嵌入式WinCE课程设计报告-黑白棋(25页珍藏版)》请在装配图网上搜索。

1、目录第一章:概述.31.1研究动机.31.2研究进度.31.3专题成果概述.3第二章:实验平台的构建.42.1Wince的烧写.42.2Microsoft ActiveSync的同步.11第三章:系统设计.143.1界面要求.143.2功能要求.14第四章:实作完成.144.1界面设计.144.2代码实现.154.3程序调试.23第五章:所遇问题与解决办法.24第六章:心得与未来展望.246.1心得.246.2未来展望.25第一章 :概述1.1研究动机随着网络技术的日新月异和计算机的普及,当今的计算机技术也走上了平民化和娱乐化的时代,计算机技术再也不是只能由少数人掌握的深不可测的学问;同时个人

2、计算机也由原来单纯的数值计算和工业应用逐渐转变成像电视机一样的家庭娱乐中心,伴随着这种巨大的转变计算机软件的发展也走向了娱乐化。 尤其是游戏产业的发展已经成为信息产业中发展势头最猛烈最具前景的一个分支,而游戏厅也渐渐被网吧挤出了正常的营业市场,游戏除了单纯的个人娱乐功能之外,也逐渐向互动的方向发展。游戏的功能不断按照玩家的需求和爱好扩展延伸进化,如今运行在各种平台上不同名称,不同内容,不同形式的游戏不仅仅为广大游戏爱好者提供了丰富的选择,而且为游戏开发商带来了丰厚的回报,游戏产业吸引着许多程序员去开发更多更新的游戏。基于游戏发展的历史和前景,我们决定用C#语言开发一款小游戏,游戏内容来自网络上

3、日渐流行的一种智力游戏黑白棋。 黑白棋作为一款经典的棋类博弈游戏,经久不衰,具有很强的趣味性,深受广大游戏爱好者的喜爱。那么开放一款基于WinCE的黑白棋游戏,具有很高的实用价值。1.2研究目的随着消费类电子产业的蓬勃发展,越来越多的嵌入式电子产品走进了千家万户。各式各样的嵌入式系统出现在了众多的行业和应用中,其中WinCE产品在市场上最受青睐。本课题的黑白棋游戏设计就是基于WinCE平台的。本程序使用面向对象的C#语言,开发于可以运行于WinCE环境下的游戏程序。人机对弈、双人游戏等功能,其中人机对弈包含难度选择和先后手选择。1.3专题成果概述黑白棋游戏设计所完成的就是一个游戏软件系统。其一

4、般的功能包括:开始新局,对弈方式选择,先手选择,棋力设置,限时设置,双方子数计数、帮助信息,关于黑白棋的介绍等,要求设计一个黑白棋游戏软件,通过计算机实现各个功能。其具体设计要求为:1、位图的导入和棋盘的生成。2、记录双方对弈时间的计时器与记录双方子数的计数器。3、选择人机对战与人人对战的函数及控制堆栈难度的主函数。第二章 :实验平台的构建2.1 Wince的烧写l 首先,将eboot烧进开发板l 创建超级终端配置好超级终端,重启开发板电源,在超级终端中得如下视图:l 定制开发板内核启动WinCE 5.0,新创建一个基于Windows CE的平台然后进行编译。l 生成项目打开VS2008,新建

5、项目点确定后,接着编写自己的应用程序,然后在模拟器上运行即可生成l 打包生成NK.bin将自己的程序reversi.exe和Framework2.0的安装程序FW.cab复制到生成WinCE内核的release目录下,然后在WinCE 5.0平台的project.bib添加如下文件:然后点击【Build OS】【Copy Files to Release Directory】;再次将自己的程序reversi.exe和Framework2.0的安装程序FW.cab复制到生成WinCE内核的release目录下,然后点击【Build OS】【Make Run-Time Image】,接着到rele

6、ase目录下找到NK.bin文件。l 生成WinCE系统在前面配置的超级终端中,选择D 启动eshell(C:emdoorTool)选择文件刚才生成的NK.bin在eshell中会提示发送文件成功超级终端会显示写入闪存的情况当写入成功后,开发板会自动重启,此时就装好了WinCE系统2.2 Microsoft ActiveSync的同步l 在WinCE中配置网络连接第三章:系统设计3.1 界面要求 菜单栏; 子数计数器; 棋盘设计。3.2 功能要求 选择人机对战; 选择双人对战; 选择初级、中级、高级难度; 认输功能; 黑白子数统计; 游戏帮助; 退出游戏。第四章 :实作完成4.1界面设计4.2

7、代码实现using System;namespace Reversipublic class Boardpublic static readonly int Black = -1;public static readonly int Empty = 0;public static readonly int White = 1;public int BlackCountget return this.blackCount; public int WhiteCountget return this.whiteCount; public int EmptyCountget return this.e

8、mptyCount; public int BlackFrontierCountget return this.blackFrontierCount; public int WhiteFrontierCountget return this.whiteFrontierCount; public int BlackSafeCountget return this.blackSafeCount; public int WhiteSafeCountget return this.whiteSafeCount; private int blackCount;private int whiteCount

9、;private int emptyCount;private int blackFrontierCount;private int whiteFrontierCount;private int blackSafeCount;private int whiteSafeCount;private int, squares;private bool, safeDiscs;public Board()this.squares = new int8, 8;this.safeDiscs = new bool8, 8;int i, j;for (i = 0; i 8; i+)for (j = 0; j 8

10、; j+)this.squaresi, j = Board.Empty;this.safeDiscsi, j = false;this.UpdateCounts();public Board(Board board)this.squares = new int8, 8;this.safeDiscs = new bool8, 8;int i, j;for (i = 0; i 8; i+)for (j = 0; j 8; j+)this.squaresi, j = board.squaresi, j;this.safeDiscsi, j = board.safeDiscsi, j;this.bla

11、ckCount = board.blackCount;this.whiteCount = board.whiteCount;this.emptyCount = board.emptyCount;this.blackSafeCount = board.blackSafeCount;this.whiteSafeCount = board.whiteSafeCount;public void SetForNewGame()int i, j;for (i = 0; i 8; i+)for (j = 0; j 8; j+)this.squaresi, j = Board.Empty;this.safeD

12、iscsi, j = false;this.squares3, 3 = White;this.squares3, 4 = Black;this.squares4, 3 = Black;this.squares4, 4 = White;this.UpdateCounts();public int GetSquareContents(int row, int col)return this.squaresrow, col;public void MakeMove(int color, int row, int col)this.squaresrow, col = color;int dr, dc;

13、int r, c;for (dr = -1; dr = 1; dr+)for (dc = -1; dc = 1; dc+)if (!(dr = 0 & dc = 0) & IsOutflanking(color, row, col, dr, dc)r = row + dr;c = col + dc;/ Flip em.while(this.squaresr, c = -color)this.squaresr, c = color;r += dr;c += dc;this.UpdateCounts();public bool HasAnyValidMove(int color)int r, c;

14、for (r = 0; r 8; r+)for (c = 0; c 8; c+)if (this.IsValidMove(color, r, c)return true;return false;public bool IsValidMove(int color, int row, int col)if (this.squaresrow, col != Board.Empty)return false;int dr, dc;for (dr = -1; dr = 1; dr+)for (dc = -1; dc = 1; dc+)if (!(dr = 0 & dc = 0) & this.IsOu

15、tflanking(color, row, col, dr, dc)return true;return false;public int GetValidMoveCount(int color)int n = 0;int i, j;for (i = 0; i 8; i+)for (j = 0; j = 0 & r = 0 & c 8 & this.squaresr, c = -color)r += dr;c += dc;if (r 7 | c 7 | (r - dr = row & c - dc = col) | this.squaresr, c != color)return false;

16、/ Otherwise, return true;return true;private void UpdateCounts()/ Reset all counts.this.blackCount = 0;this.whiteCount = 0;this.emptyCount = 0;this.blackFrontierCount = 0;this.whiteFrontierCount = 0;this.whiteSafeCount = 0;this.blackSafeCount = 0;int i, j;bool statusChanged = true;while (statusChang

17、ed)statusChanged = false;for (i = 0; i 8; i+)for (j = 0; j 8; j+)if (this.squaresi, j != Board.Empty & !this.safeDiscsi, j & !this.IsOutflankable(i, j)this.safeDiscsi, j = true;statusChanged = true;int dr, dc;for (i = 0; i 8; i+)for (j = 0; j 8; j+)bool isFrontier = false;if (this.squaresi, j != Boa

18、rd.Empty)for (dr = -1; dr = 1; dr+)for (dc = -1; dc = 0 & i + dr = 0 & j + dc 8 & this.squaresi + dr, j + dc = Board.Empty)isFrontier = true;if (this.squaresi, j = Board.Black)this.blackCount+;if (isFrontier)this.blackFrontierCount+;if (this.safeDiscsi, j)this.blackSafeCount+;else if (this.squaresi,

19、 j = Board.White)this.whiteCount+;if (isFrontier)this.whiteFrontierCount+;if (this.safeDiscsi, j)this.whiteSafeCount+;elsethis.emptyCount+;private bool IsOutflankable(int row, int col)int color = this.squaresrow, col;int i, j;bool hasSpaceSide1, hasSpaceSide2;bool hasUnsafeSide1, hasUnsafeSide2;hasS

20、paceSide1 = false;hasUnsafeSide1 = false;hasSpaceSide2 = false;hasUnsafeSide2 = false;for (j = 0; j col & !hasSpaceSide1; j+)if (this.squaresrow, j = Board.Empty)hasSpaceSide1 = true;else if (this.squaresrow, j != color | !this.safeDiscsrow, j)hasUnsafeSide1 = true;for (j = col + 1; j 8 & !hasSpaceS

21、ide2; j+)if (this.squaresrow, j = Board.Empty)hasSpaceSide2 = true;else if (this.squaresrow, j != color | !this.safeDiscsrow, j)hasUnsafeSide2 = true;if (hasSpaceSide1 & hasSpaceSide2 ) |(hasSpaceSide1 & hasUnsafeSide2) |(hasUnsafeSide1 & hasSpaceSide2 )return true;hasSpaceSide1 = false;hasSpaceSide

22、2 = false;hasUnsafeSide1 = false;hasUnsafeSide2 = false;for (i = 0; i row & !hasSpaceSide1; i+)if (this.squaresi, col = Board.Empty)hasSpaceSide1 = true;else if (this.squaresi, col != color | !this.safeDiscsi, col)hasUnsafeSide1 = true;for (i = row + 1; i = 0 & j = 0 & !hasSpaceSide1)if (this.square

23、si, j = Board.Empty)hasSpaceSide1 = true;else if (this.squaresi, j != color | !this.safeDiscsi, j)hasUnsafeSide1 = true;i-;j-;i = row + 1;j = col + 1;while (i 8 & j = 0 & j 8 & !hasSpaceSide1)if (this.squaresi, j = Board.Empty)hasSpaceSide1 = true;else if (this.squaresi, j != color | !this.safeDiscs

24、i, j)hasUnsafeSide1 = true;i-;j+;i = row + 1;j = col - 1;while (i = 0 & !hasSpaceSide2)if (this.squaresi, j = Board.Empty)hasSpaceSide2 = true;else if (this.squaresi, j != color | !this.safeDiscsi, j)hasUnsafeSide2 = true;i+;j-;if (hasSpaceSide1 & hasSpaceSide2 ) |(hasSpaceSide1 & hasUnsafeSide2) |(

25、hasUnsafeSide1 & hasSpaceSide2 )return true;return false;4.3程序调试与结果第五章 :所遇问题与解决办法l 碰到的问题:1. 生成NK.bin的过程中,在进行【Make Run-Time Image】的时候,会提示出现4个错误;2. 同步的时候没成功同步连接上;3. 烧写eboot.nb0时老是出错;4. 自己的程序没办法运行。l 对应的解决办法:1. 再次将自己的程序reversi.exe和Framework2.0的安装程序FW.cab复制到生成WinCE内核的release目录下,然后点击【Build OS】【Make Run-Ti

26、me Image】;2. 将开发板上的ip设置成与PC机同网段;3. 连接好网线并打开开发板电源;4. 在运行自己的程序时先安装FW.cab。第六章 :心得与未来展望6.1心得这次课程设计是我迄今为止接触嵌入式所做过的最大的一个项目,充分锻炼了各项能力。首先,它巩固了我们学过的C#语言知识,锻炼了我们解决实际问题的能力;其次,它提高了我们的团队合作精神,小组两个人都各司其职,分别完成项目的一部分,同时,在项目进程中,遇到了很多各种各样的问题,但是两人紧密合作,共同攻关,终于克服了一个又一个困难,在最紧张的时候,主动放弃休息时间,加班加点,使其能按期完成,这种团队合作精神对于我们以后的学习和工作

27、是大有裨益的;最后,它使我们体会到了学以致用的快感,提高了我们解决实际问题的信心和能力,并使我们对运用所学知识解决实际问题产生的浓厚的兴趣,并深刻认识到知识的重要性。诚然,由于我们自身的知识能力水平和项目时间有限,做出的项目有这样那样的缺点和不足,但对于我们来说,已经很满足了,因为这毕竟是我们的第一个合作劳动成果。我相信,随着我们自身知识能力水平提高,我们以后的项目会做的越来越好!我觉得这次课程设计很好地考察了每个学生的知识水平,每个人都发挥了个人最佳的状态。可以说是实践素质教育的一种代表,是现代教育最能启发学生创造性的一种模式。虽然这种形式比普通的卷面考试要难,但是却能够充分调动每个人的积极性去学习自己尚未接触的知识和运用自己已经学过的知识。 总的说来,我们这次做的大作业是比较成功的,值得我引以为豪!6.2未来展望 可以实现网络对弈; 可以悔棋; 提示音功能,下错、下对有不同的提示音; 玩家遇到疑问,需要帮助时,给予一定的帮助; 界面色彩友好,给人以良好的视觉冲击; 操作方便,容易上手。25

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!