α-β剪枝实现的一字棋实验报告

α-β剪枝实现的一字棋实验报告
α-β剪枝实现的一字棋实验报告

人工智能大作业——极大极小算法和α -β剪枝实现一字棋

学院:

班级:

姓名:

学号:

辅导老师:

日期:

目录

一、实验目的 (3)

二、实验环境 (3)

三、实验原理 (3)

3.1 游戏规则 (3)

3.2 极小极大分析法 (3)

3.3 α -β剪枝算法 (4)

3.4 输赢判断算法设计 (5)

四、数据结构 (5)

4.1 程序流程 (5)

4.2 主要成员函数 (5)

4.2.1 估值函数 (5)

4.2.2 Alpha-Beta 剪枝算法 (6)

4.2.3 判断胜负 (6)

4.2.4 鼠标左键响应 (6)

4.2.5 Draw 系列函数 (6)

4.2.6 COMPUTER or PLAYER 先走 (7)

五、实验内容 (7)

5.1 基本功能简介 (7)

5.2 流程图 (8)

5.2.1 估价函数 (8)

5.2.2 Alpha-Beta 剪枝 (9)

六、实验小结 (10)

七、实验源代码 (10)

一、实验目的

(1) 学习极大极小搜索及α-β剪枝。

(2) 利用学到的算法实现一字棋。

二、实验环境

(1) 硬件环境:网络环境中的微型计算机。

(2) 软件环境:Windows 操作系统,Microsoft Visual C++语言。

三、实验原理

3.1 游戏规则

"一字棋"游戏(又叫"三子棋"或"井字棋"),是一款十分经典的益智小游戏。"井字棋" 的棋盘很简单,是一个3×3 的格子,很像中国文字中的"井"字,所以得名"井字棋"。"井字棋"游戏的规则与"五子棋"十分类似,"五子棋"的规则是一方首先五子连成一线就胜利;"井字棋"是一方首先三子连成一线就胜利。

井字棋(英文名Tic-Tac-Toe)

井字棋的出现年代估计已不可考,西方人认为这是由古罗马人发明的;但我们中国人认为,既然咱们都发明了围棋、五子棋,那发明个把井字棋自然是不在话下。这些纯粹是口舌之争了,暂且不提。

3.2 极小极大分析法

设有九个空格,由MAX,MIN 二人对弈,轮到谁走棋谁就往空格上放一只自己的棋子,谁先使自己的棋子构成"三子成一线"(同一行或列或对角线全是某人的棋子),谁就取得了胜利。

用圆圈表示MAX,用叉号代表MIN。

比如左图中就是MAX 取胜的棋局。

估价函数定义如下:

设棋局为P,估价函数为e(P)。

(1) 若P 对任何一方来说都不是获胜的位置,则e(P)=e(那些仍为MAX 空着的完全的行、列或对角线的总数)-e(那些仍为MIN 空着的完全的行、列或对角线的总数)

(2) 若P 是MAX 必胜的棋局,则e(P)=+∞(实际上赋了60)。

(3) 若P 是B 必胜的棋局,则e(P)=-∞(实际上赋了-20)。

比如P 如下图示,则e(P)=5-4=1

需要说明的是,+∞赋60,-∞赋-20的原因是机

器若赢了,则不论玩家下一步是否会赢,都会走这

步必赢棋。

3.3 α -β剪枝算法

上述的极小极大分析法,实际是先生成一棵博弈树,然后再计算其倒推值,至使极小极大分析法效率较低。于是在极小极大分析法的基础上提出了α-β剪枝技术。

α-β剪枝技术的基本思想或算法是,边生成博弈树边计算评估各节点的倒推值,并且根据评估出的倒推值范围,及时停止扩展那些已无必要再扩展的子节点,即相当于剪去了博弈树上的一些分枝,从而节约了机器开销,提高了搜索效率。

具体的剪枝方法如下:

(1) 对于一个与节点MIN,若能估计出其倒推值的上确界β,并且这个β值不大于MIN 的父节点(一定是或节点)的估计倒推值的下确界α,即α≥β,则就不必再扩展该MIN 节点的其余子节点了(因为这些节点的估值对MIN 父节点的倒推值已无任何影响了)。这一过程称为α剪枝。

(2) 对于一个或节点MAX,若能估计出其倒推值的下确界α,并且这个α值不小于MAX 的父节点(一定是与节点)的估计倒推值的上确界β,即α≥β,则就不必再扩展该MAX 节点的其余子节点了(因为这些节点的估值对MAX 父节点的倒推值已无任何影响了)。这一过程称为β剪枝。

从算法中看到:

(1) MAX 节点(包括起始节点)的α值永不减少;

(2) MIN 节点(包括起始节点)的β值永不增加。

在搜索期间,α和β值的计算如下:

(1) 一个MAX 节点的α值等于其后继节点当前最大的最终倒推值。

(2) 一个MIN 节点的β值等于其后继节点当前最小的最终倒推值。

3.4 输赢判断算法设计

因为每次导致输赢的只会是当前放置的棋子,输赢算法中只需从当前点开始扫描判断是否已经形成三子。对于这个子的八个方向判断是否已经形成三子。如果有,则说明有一方胜利,如果没有则继续搜索,直到有一方胜利或者搜索完整个棋盘。

四、数据结构

4.1 程序流程

4.2 主要成员函数

4.2.1 估值函数

估价函数:int CTic_MFCDlg::evaluate(int board[])

完成功能:根据输入棋盘,判断当前棋盘的估值,估价函数为前面所讲:

若是MAX 的必胜局,则e = +INFINITY,这里为+60

若是MIN 的必胜局,则e = -INFINITY,这里为-20,这样赋值的原因是机器若赢了,则不考虑其它因素。

其它情况,棋盘上能使CUMPUTER 成三子一线的数目为e1

棋盘上能使PLAYER成三子一线的数目为e2,

e1-e2 作为最终权值

参数:board:待评估棋盘

返回:评估结果

4.2.2 Alpha-Beta 剪枝算法

AlphaBeta 剪枝主函数:

int CTic_MFCDlg::AlphaBeta(int Board[], int Depth, int turn, int Alpha, int Beta, int *result) 完成功能:根据输入棋盘,搜索深度,及其他参数,给出一个相应的最优解,存入result 中。参数:board :待评估棋盘

Depth :搜索深度

turn :当前是机器走(MAX 结点)还是玩家走(MIN 结点)

Alpha :alpha 值,第一次调用默认-100

Beta :beta 值,第一次调用默认+100

result :输出结果

返回:若当前点为MAX 节点,则返回alpha 值;

若当前点为MIN 节点,则返回beta 值

4.2.3 判断胜负

int CTic_MFCDlg::isWin(int curPos)

完成功能:根据输入棋盘,判断当前棋盘的结果,COMPUTER 胜?PLAYER 胜?平局?参数:board:待评估棋盘

返回:-1 表示:尚未结束

0 表示:平局

1 表示:PLAYER 胜

2 表示:COMPUTER 胜

4.2.4 鼠标左键响应

void CTic_MFCDlg::OnLButtonDown(UINT nFlags, CPoint point)

完成功能:鼠标左键相应,在点击的那格放置玩家棋子,之后再相应计算机走下一步

4.2.5 Draw 系列函数

void CTic_MFCDlg::DrawBoard(CDC *pDC)

完成功能:根据Chess 棋盘数组画出棋盘

void CTic_MFCDlg::DrawO(CDC *pDC, int Pos)

完成功能:在棋盘上画一个O,电脑

void CTic_MFCDlg::DrawX(CDC *pDC, int Pos)

完成功能:在棋盘上画一个X,玩家

4.2.6 COMPUTER or PLAYER 先走

void CTic_MFCDlg::OnStartCom()

完成功能:计算机先走

void CTic_MFCDlg::OnStartPly()

完成功能:玩家先走

五、实验内容

5.1 基本功能简介

本实验的界面采用C++的MFC 完成,总的界面如下,有以下功能:

1. 搜索树深度的设置;

2. 机器先走或者玩家先走;

3. 游戏胜负或者平局判断。

4.鼠标在游戏开始之前或者结束之后点击棋盘不会有相应,并会提示用户先开始游戏;

5.鼠标点击棋盘区域之外,不会有相应

6.搜索深度已经设置区域

7.同一棋盘格子点击只响应一次

这里需要说明的是,搜索深度并

非越深越好,局限于估值函数是根据

能够成三子一线的数目决定的,所以

搜索到最后一层,如果有人胜,则出

现 ,如果没人胜,则三子一线

数目为0,所以毫无意义。如果搜索

深度取到 4 或者以上,会发现电脑

会走出一些很"笨" 的棋,就是这

个原因。经测试发现,搜索深度为2

时效果最好,这也是我为什么默认值

取 2 的原因。

5.2 流程图.

5.2.1 估价函数

5.2.2 Alpha-Beta 剪枝

六、实验小结

通过本次实验进一步对老师课堂上所讲的AlphaBeta 剪枝有了更加深刻的了解,对它的一般实现有了初步的认识。

复习了大二时所学习的C++语言,并且对MFC 程序设计有了更深的了解。

七、实验源代码

源代码见附件‘一字棋程序’。

防火墙实验报告

南京信息工程大学实验(实习)报告 实验(实习)名称防火墙实验(实习)日期2012.12.6指导教师朱节中 专业10软件工程年级大三班次2姓名蔡叶文学号 20102344042 得分 【实验名称】 防火墙实验 【实验目的】 掌握防火墙的基本配置;掌握防火墙安全策略的配置。 【背景描述】 1.用接入广域网技术(NA T),将私有地址转化为合法IP地址。解决IP地址不足的问题,有效避免来自外部网络的攻击,隐藏并保护内部网络的计算机。 2.网络地址端口转换NAPT(Network Address Port Translation)是人们比较常用的一种NA T方式。它可以将中小型的网络隐藏在一个合法的IP地址后面,将内部连接映射到外部网络中的一个单独的IP地址上,同时在该地址上加上一个由NA T设备选定的TCP端口号。 3.地址绑定:为了防止内部人员进行非法IP盗用(例如盗用权限更高人员的IP地址,以获得权限外的信息),可以将内部网络的IP地址与MAC地址绑定,盗用者即使修改了IP 地址,也因MAC地址不匹配而盗用失败,而且由于网卡MAC地址的唯一确定性,可以根据MAC地址查出使用该MAC地址的网卡,进而查出非法盗用者。报文中的源MAC地址与IP地址对如果无法与防火墙中设置的MAC地址与IP地址对匹配,将无法通过防火墙。 4.抗攻击:锐捷防火墙能抵抗以下的恶意攻击:SYN Flood攻击;ICMP Flood攻击;Ping of Death 攻击;UDP Flood 攻击;PING SWEEP攻击;TCP端口扫描;UDP端口扫描;松散源路由攻击;严格源路由攻击;WinNuke攻击;smuef攻击;无标记攻击;圣诞树攻击;TSYN&FIN攻击;无确认FIN攻击;IP安全选项攻击;IP记录路由攻击;IP流攻击;IP时间戳攻击;Land攻击;tear drop攻击。 【小组分工】 组长:IP:192.168.10.200 管理员 :IP:172.16.5.4 策略管理员+日志审计员 :IP:172.16.5.3 日志审计员 :IP:172.16.5.2 策略管理员 :IP:172.16.5.1 配置管理员 【实验设备】 PC 五台 防火墙1台(RG-Wall60 每实验台一组) 跳线一条 【实验拓扑】

五子棋Java实验报告

五子棋JAVA实验报告 目录 五子棋JA V A实验报告 (1) 一、实验目的和要求 (2) 二、五子棋的基本常识与原理 (2) 三、五子棋的系统设计 (3) 四、五子棋的实现与测试 (7) 五、分析与总结 (10) 六、附录 (12)

一、实验目的和要求 1、能够用编程语言实现一个简单的五子棋程序 2、在实际系统中使用、实现人工智能的相关算法 3、进一步加深对人工智能算法的理解 二、五子棋的基本常识与原理 1、五子棋的起源 五子棋,是一种两人对弈的纯策略型棋类游戏,亦称“串珠”、“连五子”;是中国民间非常熟知的一个古老棋种。相传,它起源于四千多年前的尧帝时期,比围棋的历史还要悠久。亦有传说,五子棋最初流行于少数民族地区,以后渐渐演变成围棋并在炎黄子孙后代中遍及开来。 五子棋发展于日本,流行于欧美。容易上手,老少皆宜,而且趣味横生,引人入胜;不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。 传统五子棋的棋具与围棋相同,棋子分为黑白两色,棋盘为19X19,棋子放置于棋盘线交叉点上。两人对局,各执一色,轮流下一子,先将横、竖或斜线的5个或5个以上同色棋子连成不间断的一排者为胜。因为传统五子棋在落子后不能移动或拿掉,所以也可以用纸和笔来进行游戏。 2、五子棋的基本常识 与任何一种竞技棋一样,五子棋的每一局棋也分为三个阶段:开局,中局和残局。 五子棋的开始阶段称为开局,或称布局。其开局阶段是十分短暂的,大约在七着与十几着之间。在这一阶段的争夺中,双方的布局,应对将对以后的胜负起着极为关键的作用。在开局阶段取得的形势好坏,主动与被动,先手与后手的优劣程度,往往直接影响中局的战斗。因此积极处理好开局和开局向中局的过渡十分重要。 五子棋是从一至五,逐渐布子,发展连系,同时运用限制和反限制的智慧,在连子的过程中为自己的棋子争得相对的主动权和优势,逐步扩展优势,或者从劣势转化为优势,击溃对方的防线,最后连五取胜或抓禁手取胜或迫使对方投子认负。 3、五子棋比赛的相关规定 (1) 职业连珠规则 a. 黑方先下子,白后下,从天元开始相互顺序落子。 b. 最先在棋盘横向、竖向、斜向形成连续的相同色五个棋子的一方为胜。 c. 黑棋禁手判负,白棋无禁手。黑棋禁手包括“三三”(包括“四三三”)、“四四”(包括“四四三”)、

人工智能实验报告大全

人工智能实验报告大 全

人工智能课内实验报告 (8次) 学院:自动化学院 班级:智能1501 姓名:刘少鹏(34) 学号: 06153034 目录 课内实验1:猴子摘香蕉问题的VC编程实现 (1) 课内实验2:编程实现简单动物识别系统的知识表示 (5)

课内实验3:盲目搜索求解8数码问题 (18) 课内实验4:回溯算法求解四皇后问题 (33) 课内实验5:编程实现一字棋游戏 (37) 课内实验6:字句集消解实验 (46) 课内实验7:简单动物识别系统的产生式推理 (66) 课内实验8:编程实现D-S证据推理算法 (78)

人工智能课内实验报告实验1:猴子摘香蕉问题的VC编程实现 学院:自动化学院 班级:智能1501 姓名:刘少鹏(33) 学号: 06153034 日期: 2017-3-8 10:15-12:00

实验1:猴子摘香蕉问题的VC编程实现 一、实验目的 (1)熟悉谓词逻辑表示法; (2)掌握人工智能谓词逻辑中的经典例子——猴子摘香蕉问题的编程实现。 二、编程环境 VC语言 三、问题描述 房子里有一只猴子(即机器人),位于a处。在c处上方的天花板上有一串香蕉,猴子想吃,但摘不到。房间的b处还有一个箱子,如果猴子站到箱子上,就可以摸着天花板。如图1所示,对于上述问题,可以通过谓词逻辑表示法来描述知识。要求通过VC语言编程实现猴子摘香蕉问题的求解过程。 图1 猴子摘香蕉问题

四、源代码 #include unsigned int i; void Monkey_Go_Box(unsigned char x, unsigned char y) { printf("Step %d:monkey从%c走到%c\n", ++i, x, y);//x表示猴子的位置,y为箱子的位置 } void Monkey_Move_Box(char x, char y) { printf("Step %d:monkey把箱子从%c运到%c\n", ++i, x, y);//x表示箱子的位置,y为香蕉的位置 } void Monkey_On_Box() { printf("Step %d:monkey爬上箱子\n", ++i); } void Monkey_Get_Banana() { printf("Step %d:monkey摘到香蕉\n", ++i); } void main() { unsigned char Monkey, Box, Banana; printf("********智能1501班**********\n"); printf("********06153034************\n"); printf("********刘少鹏**************\n"); printf("请用a b c来表示猴子箱子香蕉的位置\n"); printf("Monkey\tbox\tbanana\n"); scanf("%c", &Monkey); getchar(); printf("\t"); scanf("%c", &Box); getchar(); printf("\t\t"); scanf("%c", &Banana); getchar(); printf("\n操作步骤如下\n"); if (Monkey != Box) { Monkey_Go_Box(Monkey, Box); } if (Box != Banana)

数据结构-堆栈和队列实验报告

实验二堆栈和队列 实验目的: 1.熟悉栈这种特殊线性结构的特性; 2.熟练并掌握栈在顺序存储结构和链表存储结构下的基本运算; 3.熟悉队列这种特殊线性结构的特性; 3.熟练掌握队列在链表存储结构下的基本运算。 实验原理: 堆栈顺序存储结构下的基本算法; 堆栈链式存储结构下的基本算法; 队列顺序存储结构下的基本算法;队列链式存储结构下的基本算法;实验内容: 3-18链式堆栈设计。要求 (1)用链式堆栈设计实现堆栈,堆栈的操作集合要求包括:初始化Stacklnitiate (S), 非空否StackNotEmpty(S),入栈StackiPush(S,x), 出栈StackPop (S,d),取栈顶数据元素StackTop(S,d); (2)设计一个主函数对链式堆栈进行测试。测试方法为:依次把数据元素1,2,3, 4,5 入栈,然后出栈并在屏幕上显示出栈的数据元素; (3)定义数据元素的数据类型为如下形式的结构体, Typedef struct { char taskName[10]; int taskNo; }DataType; 首先设计一个包含5个数据元素的测试数据,然后设计一个主函数对链式堆栈进行测试,测试方法为:依次吧5个数据元素入栈,然后出栈并在屏幕上显示出栈的数据元素。 3-19对顺序循环队列,常规的设计方法是使用対尾指针和对头指针,对尾指针用于指示当 前的対尾位置下标,对头指针用于指示当前的対头位置下标。现要求: (1)设计一个使用对头指针和计数器的顺序循环队列抽象数据类型,其中操作包括:初始化,入队列,出队列,取对头元素和判断队列是否为空; (2)编写一个主函数进行测试。 实验结果: 3-18 typedef struct snode { DataType data; struct snode *n ext; } LSNode; /* 初始化操作:*/

实验7:防火墙配置与NAT配置最新完整版

大连理工大学本科实验报告 课程名称:网络综合实验 学院(系):软件学院 专业:软件工程2012年3月30日

大连理工大学实验报告 实验七:防火墙配置与NAT配置 一、实验目的 学习在路由器上配置包过滤防火墙和网络地址转换(NAT) 二、实验原理和内容 1、路由器的基本工作原理 2、配置路由器的方法和命令 3、防火墙的基本原理及配置 4、NAT的基本原理及配置 三、实验环境以及设备 2台路由器、1台交换机、4台Pc机、双绞线若干 四、实验步骤(操作方法及思考题) {警告:路由器高速同异步串口(即S口)连接电缆时,无论插拔操作,必须在路由器电源关闭情况下进行;严禁在路由器开机状态下插拔同/异步串口电缆,否则容易引起设备及端口的损坏。} 1、请在用户视图下使用“reset saved-configuration”命令和“reboot”命令分别 将两台路由器的配置清空,以免以前实验留下的配置对本实验产生影响。2、在确保路由器电源关闭情况下,按图1联线组建实验环境。配置IP地址,以 及配置PC A 和B的缺省网关为202.0.0.1,PC C 的缺省网关为202.0.1.1,PC D 的缺省网关为202.0.2.1。

202.0.0.2/24 202.0.1.2/24 192.0.0.1/24192.0.0.2/24 202.0.0.1/24 202.0.1.1/24S0 S0 E0E0 202.0.0.3/24 202.0.2.2/24 E1 202.0.2.1/24AR18-12 AR28-11 交叉线 交叉线 A B C D 图 1 3、在两台路由器上都启动RIP ,目标是使所有PC 机之间能够ping 通。请将为达到此目标而在两台路由器上执行的启动RIP 的命令写到实验报告中。(5分) AR18-12 [Router]interface ethernet0 [Router -Ethernet0]ip address 202.0.0.1 255.255.255.0 [Router -Ethernet0]interface serial0 [Router - Serial0]ip address 192.0.0.1 255.255.255.0 [Router - Serial0]quit [Router]rip [Router -rip ]network all AR28-11 [Quidway]interface e0/0 [Quidway-Ethernet0/0]ip address 202.0.1.1 255.255.255.0 [Quidway-Ethernet0/0]interface ethernet0/1 [Quidway-Ethernet0/1]ip address 202.0.2.1 255.255.255.0 [Quidway-Ethernet0/1]interface serial/0 [Quidway-Serial0/0]ip address 192.0.0.2 255.255.255.0 [Quidway-Serial0/0]quit [Quidway]rip [Quidway-rip]network 0.0.0.0 Ping 结果如下:全都ping 通

五子棋实训报告

五子棋实训报告 五子棋实训报告 篇一: (3)棋子的绘制与存储棋子的绘制用实心圆模式,颜色为黑色及 白色两种。 棋子在内存中的存储方式: 因为表示各个棋子的数据类型都相同,所以考虑用数组存储,因 为棋盘是二维的,因此棋子用二维数组a存储。 a{ setTitle{ Objet obj = e.getSoure } toolbar = ne JPanel{ } publi int getX{ } publi int getY{ } publi Color getColor{ } return olor; return ; return x; this.x = x; this. = ; this.olor = olor;篇 四: 实习报告-五子棋 信息工程学院 201X年毕业实习报告 班级: 计科XX 姓名: XXX 实习地点: XXXXXX 实习12周-19周

一、实习目的 1. 夯实专业基础,提高动手能力。 把专业知识应用于实践,找出专业薄弱环节加强巩固。 3. 了解就业单位的计算机技术的应用情况、需求情况和发展方向及前景,培养实践能力、分析问题和解决问题的能力以及综合运用所学基础知识和基本技能的能力,同时也增强了适应社会的能力和就业竞争力。 4. 挖掘自身潜力,寻找自身不足,通过实践对未来做出合理规划。 二、实习任务 在MElipse的平台上运用java语言,学习开发一个常用小游戏:五子棋。 三、实习计划 5. 基础夯实,联系实践。 在信息高速发展的今天,计算机科学技术的重要性也在人们的日常生活中日益突显。不管是从事理论教学还是从事软件的设计和开发,基础都是最有力的保障。思想决定行动,认识决定成败。没有正确的思想作为指导,行动就会陷入盲目和被动。缺乏正确的认识基础,前途就会迷茫,方向就会迷失,机会就会丧失。所以说,理论学习是我增强行动自觉的重要保证。人常说:“经济基础决定上层建筑”专业基础对我来说就是经济基础,而上层建筑就是我们所从事的相关工作。但是只拥有专业基础还是不行的,所以,我必须要把理论应用于实践。这也是此次实习课程的重要所在,以专业基础知识为重要依托,以专

人工智能αβ剪枝实现的一字棋实验报告

人工智能αβ剪枝实现的一字棋实验报告 The document was prepared on January 2, 2021

实验5: -剪枝实现一字棋 一、实验目的 学习极大极小搜索及 - 剪枝算法实现一字棋。 二、实验原理 1.游戏规则 "一字棋"游戏(又叫"三子棋"或"井字棋"),是一款十分经典的益智小游戏。"井字棋" 的棋盘很简单,是一个 3×3 的格子,很像中国文字中的"井"字,所以得名"井字棋"。"井字棋"游戏的规则与"五子棋"十分类似,"五子棋"的规则是一方首先五子连成一线就胜利;"井字棋"是一方首先三子连成一线就胜利。 2.极小极大分析法 设有九个空格,由 MAX,MIN 二人对弈,轮到谁走棋谁就往空格上放一只自己的棋子,谁先使自己的棋子构成"三子成一线"(同一行或列或对角线全是某人的棋子),谁就 用圆圈表示 MAX,用叉号代表 MIN 比如左图中就是 MAX 取胜的棋局。 估价函数定义如下设棋局为 P,估价函数为 e(P)。 (1) 若 P 对任何一方来说都不是获胜的位置,则 e(P)=e(那些仍为 MAX 空着的完全的行、列或对角线的总数)-e(那些仍为 MIN 空着的完全的行、列或对角线的总数) (2) 若 P 是 MAX 必胜的棋局,则 e(P)=+ (实际上赋了 60)。 (3) 若 P 是 B 必胜的棋局,则 e(P)=- (实际上赋了-20)。 e(P)=5-4=1 需要说明的是,+赋60,-赋-20的原因是机器若赢了, 则不论玩家下一步是否会赢,都会走这步必赢棋。 3. -剪枝算法 上述的极小极大分析法,实际是先生成一棵博弈树,然后 再计算其倒推值,至使极小极大分析法效率较低。于是在极 小极大分析法的基础上提出了- 剪枝技术。 - 剪枝技术的基本思想或算法是,边生成博弈树边计算评估各节点的倒推值,并且根据评估出的倒推值范围,及时停止扩展那些已无必要再扩展的子节点,即相当于剪去了博弈树上的一些分枝,从而节约了机器开销,提高了搜索效率。 具体的剪枝方法如下: (1) 对于一个与节点 MIN,若能估计出其倒推值的上确界,并且这个值不大于MIN 的父节点(一定是或节点)的估计倒推值的下确界,即,则就不必再扩展该MIN 节

队列实验报告

一.实验项目名称 循环队列和链式队列的创建 二、实验目的 1、掌握队列的特点 (先进先出 FIFO) 及基本操作 ,如入队、出队等, 2、队列顺序存储结构、链式存储结构和循环队列的实现,以便在 实际问题背景下灵活应用。 三、实验内容 1.链式队列的实现和运算 2.循环队列的实现和运算 四、主要仪器设备及耗材 VC++6.0 运行环境实现其操作 五.程序算法 (1)循环队列操作的算法 1>进队列 Void enqueue (seqqueue &q, elemtype x) { if ((q.rear+1)%maxsize = = q.front) cout<< ” overflow”; else { q.rear=(q.rear+1)%maxsize; // 编号加 1 或循环回第一个单元 q.queue[q.rear]=x; } } 2>出队列 Void dlqueue(seqqueue &q ) { if (q.rear= =q.front)cout<< ” underflow”; else q.front =(q.front+1)%maxsize; } 3>取对头元素

elemtype gethead(seqqueue q ) { if(q.rear= =q.front) { cout<<” underflow;” return NULL;} else return q.queue[(q.front+1)%maxsize]; //front 指向队头前一个位置 } 4>判队列空否 int empty(seqqueue q ) { if (q.rear= =q.front) else return 0; reurn 1; } (2).链队列操作的算法 1>.链队列上的初始化 void INIQUEUE( linkqueue&s) {link *p; p=new link; p->next=NULL;//p 是结构体指针类型,用 s.front=p;//s 是结构体变量,用. s.rear=p;//头尾指针都指向头结点 -> } 2>.入队列 void push(linkqueue &s, elemtype x) { link*p;//p 是结构体指针类型,用-> p=new link; p->data=x; p->next=s.rear->next;//s 是结构体变量,用s.rear->next=p; s.rear=p;//插入最后 . } 3>判队空 int empty( linkqueue s ) {if (s.front= =s.rear) return 1; else return 0; } 4>.取队头元素 elemtype gethead( linkqueue s ) { if (s.front= =s.rear) else retuen return NULL; s.front->next->data; }

防火墙-实验报告

一、实验目的 ●通过实验深入理解防火墙的功能和工作原理 ●熟悉天网防火墙个人版的配置和使用 二、实验原理 ●防火墙的工作原理 ●防火墙能增强机构内部网络的安全性。防火墙系统决定了 哪些内部服务可以被外界访问;外界的哪些人可以访问内 部的服务以及哪些外部服务可以被内部人员访问。防火墙 必须只允许授权的数据通过,而且防火墙本身也必须能够 免于渗透。 ●两种防火墙技术的对比 ●包过滤防火墙:将防火墙放置于内外网络的边界;价格较 低,性能开销小,处理速度较快;定义复杂,容易出现因 配置不当带来问题,允许数据包直接通过,容易造成数据 驱动式攻击的潜在危险。 ●应用级网关:内置了专门为了提高安全性而编制的Proxy 应用程序,能够透彻地理解相关服务的命令,对来往的数 据包进行安全化处理,速度较慢,不太适用于高速网 (ATM或千兆位以太网等)之间的应用。 ●防火墙体系结构 ●屏蔽主机防火墙体系结构:在该结构中,分组过滤路由器 或防火墙与Internet 相连,同时一个堡垒机安装在内部

网络,通过在分组过滤路由器或防火墙上过滤规则的设 置,使堡垒机成为Internet 上其它节点所能到达的唯一 节点,这确保了内部网络不受未授权外部用户的攻击。 ●双重宿主主机体系结构:围绕双重宿主主机构筑。双重宿 主主机至少有两个网络接口。这样的主机可以充当与这些 接口相连的网络之间的路由器;它能够从一个网络到另外 一个网络发送IP数据包。但是外部网络与内部网络不能 直接通信,它们之间的通信必须经过双重宿主主机的过滤 和控制。 ●被屏蔽子网体系结构:添加额外的安全层到被屏蔽主机体 系结构,即通过添加周边网络更进一步的把内部网络和外 部网络(通常是Internet)隔离开。被屏蔽子网体系结构 的最简单的形式为,两个屏蔽路由器,每一个都连接到周 边网。一个位于周边网与内部网络之间,另一个位于周边 网与外部网络(通常为Internet)之间。 四、实验内容和步骤 (1)简述天网防火墙的工作原理 天网防火墙的工作原理: 在于监视并过滤网络上流入流出的IP包,拒绝发送可疑的包。基于协议特定的标准,路由器在其端口能够区分包和限制包的能力叫包过滤。由于Internet 与Intranet 的连接多数都要使用路由器,所以Router成为内外通信的必经端口,Router的厂商在Router上加入IP 过

五子棋游戏实验报告

五子棋游戏实验报告 课程名称计算机程序设计(VB) 学号______________________ 姓名______________________ 班级______________________ 提交时间 五子棋软件设计 一、实验目的 1?通过五子棋软件设计或者自拟题目设计,巩固本课程所学的各个章节重点知识,自拟题目的同学需尽早向教师提岀自己的想法及设计方案。 2?通过开发一个较大的系统,增强软件开发能力。 3?通过调试系统,增强逻辑思维能力。 二、实验内容 1.基本要求: (1)输入两个对手名字,然后进入游戏界面。 (2)用鼠标点击的方式在棋盘上摆放棋子,黑白交替。(棋盘15*15 ) (3)可以悔棋。 (4)五子连在一起的时候能判断胜利,并且显示出胜利者的名字。 (5)能够将棋局的结果保存,保存该棋局

结束的状态、对手名字、棋局名字(棋局名字在保存时由用户在相应的界面下添入)(此功能要求用数据库和文件两种技术实现)。

因为棋盘上空点居多,大部分点的信息为0,因此只需保存有棋子的点的信息 用文件技术进行棋局保存,思路相同。 (7)五子棋恢复棋局 思路:首先从数据库文件中找到要恢复棋局的数据(即曾经保存的数据),然后把这些数据赋值给内存中相应的数组或者变量中,按照这些数据重新绘制棋盘和棋子,即完成了对棋局的恢复。 窗体启动事件应该完成的事情: 组合框中应该显示曾经保存的棋局名。因为每次保存棋局时,都是将棋局所有棋子的记录添加在表的最 后,因此表中关于棋局名的记录只能是类似于aaabbbbccccc的形式,而不可能是abbcacc的形式,根据 这个特点编程序取出表中不同的棋局名。 具体算法: 用一个字符串变量strfile初始值为空,从表的顶端向下依次移动记录指针,如果当前记录的棋局名字段和strfile不相等,说明进入另一个棋局的记录中,将该棋局记录的棋局名赋值给strfile,并加入到组合 框中,一直到表中最后一个记录 因为要从数据库中取岀相关数据到a数组中,因此要将a数组所有数据清零。 要建立一个data控件,与数据库连接起来,而后识别棋局(即表中的棋局名字段与在列表框中选择的棋 局名比较),将数据库该棋局中所有信息都赋值给a数组及相关变量。 刚才仅仅是数据的恢复,即将数据库中已经保存过的数据恢复到内存中,下一步应该根据内存中的数据重新绘制棋盘以及棋子。 重新绘制棋盘是独立的一块功能,因此考虑用全局子过程来实现,该子过程定义在模块中。思路如下: 清屏一绘制棋盘一根据a数组中的每一项的两个下标来决定绘制棋子的位置,根据每一项的值是1还是 2来决定在该位置绘制何颜色的棋子。 决定该黑白方走的blackwhite变量当时没有保存,可以采用在数据库中保存的方式来解决,本例中解决方法是通过数黑白棋子个数来决定恢复棋局后该谁走的。 因此设置了一个变量做计数器,每走一步棋计数器的值加一。 用文件技术实现棋局恢复,思路相同。 (8)悔棋 悔一步棋:用几个变量来表示关于一步棋的几个信息,每次下子都将该子的信息赋值给那几个变量,悔 一步棋即将那几个变量所表示的点的a数组信息清零。而后调用paint ()过程重画。 以上是教师带着学生完成的软件功能。 遗留问题:保存棋手姓名和棋局名并在恢复棋局的时候显示。(需要同学们自己完成)思路:在数据表中多建立两个字段,分别表示两个棋手姓名,同其它数据的保存类似。 三、设计日期 十二月 四、完成日期 十二月 五、实验体会 其实,一开始学习vb我就对它不抱有一定的热情,可能是因为要用到计算机以及编程问题,当时一想到有代码,就会无比的苦恼,但是为了让这门课顺利通过,我还是怀着一颗必须要学的心情。起初,我对待这门新课程和其他课

人工智能α β剪枝实现的一字棋实验报告

实验5:? -?剪枝实现一字棋 一、实验目的 学习极大极小搜索及?-?剪枝算法实现一字棋。 二、实验原理 1.游戏规则 "一字棋"游戏(又叫"三子棋"或"井字棋"),是一款十分经典的益智小游戏。"井字棋" 的棋盘很简单,是一个 3×3 的格子,很像中国文字中的"井"字,所以得名"井字棋"。"井字棋"游戏的规则与"五子棋"十分类似,"五子棋"的规则是一方首先五子连成一线就胜利;"井字棋"是一方首先三子连成一线就胜利。 2.极小极大分析法 设有九个空格,由 MAX,MIN 二人对弈,轮到谁走棋谁就往空格上放一只自己的棋子,谁先使自己的棋子构成"三子成一线"(同一行或列或对角线全是某人的棋子),谁就 用圆圈表示 MAX,用叉号代表 MIN 比如左图中就是 MAX 取胜的棋局。 估价函数定义如下设棋局为 P,估价函数为 e(P)。 (1) 若 P 对任何一方来说都不是获胜的位置,则 e(P)=e(那些仍为 MAX 空着的完全的行、列或对角线的总数)-e(那些仍为 MIN 空着的完全的行、列或对角线的总数) (2) 若 P 是 MAX 必胜的棋局,则 e(P)=+?(实际上赋了 60)。 (3) 若 P 是 B 必胜的棋局,则 e(P)=-?(实际上赋了-20)。 e(P)=5-4=1 需要说明的是,+?赋60,-?赋-20的原因是机器若赢了, 则不论玩家下一步是否会赢,都会走这步必赢棋。 3. ? -?剪枝算法 上述的极小极大分析法,实际是先生成一棵博弈树,然后 再计算其倒推值,至使极小极大分析法效率较低。于是在极小 极大分析法的基础上提出了?-?剪枝技术。 ? -?剪枝技术的基本思想或算法是,边生成博弈树边计算评估各节点的倒推值,并且根据评估出的倒推值范围,及时停止扩展那些已无必要再扩展的子节点,即相当于剪去了博弈树上的一些分枝,从而节约了机器开销,提高了搜索效率。 具体的剪枝方法如下: (1) 对于一个与节点 MIN,若能估计出其倒推值的上确界?,并且这个?值不大于 MIN 的父节点(一定是或节点)的估计倒推值的下确界?,即???,则就不必再扩展

防火墙软件的安装与配置实验报告

实验三防火墙软件的安装与配置 一、防火墙软件的安装 1.双击已经下载好的安装程序,出现如下图所示的安装界面: 2. 在出现的如上图所示的授权协议后,请仔细阅读协议,如果你同意协议中的所有条款,请选择“我接受此协议”,并单击下一步继续安装。如果你对协议有任何异议可以单击取消,安装程序将会关闭。必须接受授权协议才可以继续安装天网防火墙。如果同意协议,单击下一步将会出现如下选择安装的文件夹的界面:

3.继续点击下一步出现如下图所示的选择“开始”菜单文件夹,用于程序的快捷方式 4.点击下一步出现如下图所示的正在复制文件的界面,此时是软件正在安装,请用户耐心等待。

5.文件复制基本完成后,系统会自动弹出如下图所示的“设置向导”,为了方便大家更好的使用天网防火墙,请仔细设置。 6.单击下一步出现如下图所示的“安全级别设置”。为了保证您能够正常上网并免受他人的 恶意攻击,一般情况下,我们建议大多数用户和新用户选择中等安全级别,对于熟悉天网防火墙设置的用户可以选择自定义级别。

7.单击下一步可以看见如下图所示的“局域网信息设置”,软件将会自动检测你的IP 地址,并记录下来,同时我们也建议您勾选“开机的时候自动启动防火墙”这一选项,以保 证您的电脑随时都受到我们的保护。 8.单击下一步进入“常用应用程序设置”,对于大多数用户和新用户建议使用默认选

项。 9.单击下一步,至此天网防火墙的基本设置已经完成,单击“结束”完成安装过程。

10.请保存好正在进行的其他工作,单击完成,计算机将重新启动使防火墙生效。 二、防火墙软件的配置 1.局域网地址设置,防火墙将会以这个地址来区分局域网或者是INTERNET的IP来源。 3-1:局域网地址设置 2.管理权限设置,它有效地防止未授权用户随意改动设置、退出防火墙等如图3-2.

五子棋C++实验报告

(此文档为word格式,下载后您可任意编辑修改!)

一、需求分析 1.1开发背景 电脑游戏行业经过二十年的发展,已经成为与影视、音乐等并驾齐驱的全球最重要的娱乐产业之一,其年销售额超过好莱坞的全年收入。互联网的出现为电脑游戏行业发展注入了新的活力,凭借信息双向交流、速度快、不受空间限制等优势,让真人参与游戏,提高了游戏的互动性、仿真性和竞技性,使玩家在虚拟世界里可以发挥现实世界无法展现的潜能,改变了单机版游戏固定、呆板、与机器对话的状况。网络游戏的这些优势不仅使其在电脑游戏行业中异军突起并在某种程度上取代了单机版游戏,而且成为网络业三大(网上金融、网上教育和网络游戏)赢利且利润优厚的领域之一。 网络作为一种新兴的传播方式,主要包括三大内容:娱乐、资讯、通讯。提到网络娱乐,过去主要指的是单机版游戏,没有引入网络的概念但随着科技的发展,游戏娱乐产业也在成长目前,国内的游戏娱乐产业正处于起步阶段,特点表现为:第一,它是一种文化的传播。娱乐产业可以潜移默化地改变人的观念,当前,很多多媒体的播放已被电脑网络所取代。第二,网络游戏加强了人与人的沟通。第三,网络游戏具有一定的教育意义。网络游戏所具有的角色扮演的功能,使得玩家能通过互助更好地完成游戏中的各项任务。网络无国界,游戏在网络文化产业世界的发展中地位会越来越高。 目前在国外,休闲游戏如棋类等,玩家的年龄跨度非常大,这和我国目前网游市场以青少年为主要消费人群的状况截然不同。其实,网络可以解决空间的问题,网络和生活越来越息息相关,因此,开辟适合各个年龄层的游戏产品迫在眉睫。同时,这也涉及到一个企业开发的能力。娱乐产业发展到一定程度,通过不断锻炼和经验的积累,完全可以通过融入娱乐的成分把教条的东西深入浅出地展现给消费者。 就国内的发展来看,最近這两三年内国内的游戏公司如雨后春笋般的成立,所开发或代理的网络游戏更是不胜枚举。以全球游戏业界的发展来看,這几年韩国的表现最为突出,特別是在网络游戏的技术研发兴游戏制作,其所发行的网络游戏更成为全球游戏产业重要的指标之一。去年在美国洛杉矶所举行的 E3(Electronic Entertainment Exposition)展中,已经有几家的韩国厂商挤入世界第一线的游戏开发厂商之列。 近几年来,由于 3D 硬体绘图技术的突破,使得即时描绘的书面越来越精致,而且3D遊戏性更多元化更逼近真实世界,因此在遊戏产业中,3D 游戏已经逐渐取代2D游戏为游戏市场的主流,即使是网络游戏,也慢慢趋向3D化。然而游戏3D化将会带来的游戏开发上的困难等问题,这些问题以后都需要逐步解决。 人们面对电脑的时间越来越多,面对身边的人的时间越来越少,所以我们游戏所要达到的目的就是加大人们之间的沟通,让大家随时随地都可以体验到玩游戏的乐趣。而三子棋是一种受大众广泛喜爱的游戏,其规则简单,变化多端,非常富有趣味性和消遣性。同样的,通过这个游戏,既能在休闲时刻娱乐一下,也能在压力面临的时候放松一刻。

人工智能实验报告大全

人工智能课内实验报告 (8次) 学院:自动化学院 班级:智能1501 姓名:刘少鹏(34) 学号: 06153034

目录 课内实验1:猴子摘香蕉问题的VC编程实现 (1) 课内实验2:编程实现简单动物识别系统的知识表示 (5) 课内实验3:盲目搜索求解8数码问题 (18) 课内实验4:回溯算法求解四皇后问题 (33) 课内实验5:编程实现一字棋游戏 (37) 课内实验6:字句集消解实验 (46) 课内实验7:简单动物识别系统的产生式推理 (66) 课内实验8:编程实现D-S证据推理算法 (78)

人工智能课内实验报告实验1:猴子摘香蕉问题的VC编程实现 学院:自动化学院 班级:智能1501 姓名:刘少鹏(33) 学号: 06153034 日期: 2017-3-8 10:15-12:00

实验1:猴子摘香蕉问题的VC编程实现 一、实验目的 (1)熟悉谓词逻辑表示法; (2)掌握人工智能谓词逻辑中的经典例子——猴子摘香蕉问题的编程实现。 二、编程环境 VC语言 三、问题描述 房子里有一只猴子(即机器人),位于a处。在c处上方的天花板上有一串香蕉,猴子想吃,但摘不到。房间的b处还有一个箱子,如果猴子站到箱子上,就可以摸着天花板。如图1所示,对于上述问题,可以通过谓词逻辑表示法来描述知识。要求通过VC语言编程实现猴子摘香蕉问题的求解过程。 图1 猴子摘香蕉问题 四、源代码 #include unsigned int i; void Monkey_Go_Box(unsigned char x, unsigned char y) {

数据结构-队列实验报告

《数据结构》课程实验报告 一、实验目的和要求 (1)熟悉C语言的上机环境,进一步掌握C语言的结构特点。 (2)掌握队列的顺序表示和实现。 二、实验环境 Windows7 ,VC 三、实验内容及实施 实验三:队列 【实验要求】 构建一个循环队列, 实现下列操作 1、初始化队列(清空); 2、入队; 3、出队; 4、求队列长度; 5、判断队列是否为空; 【源程序】 #include #define MAXSIZE 100 #define OK 1; #define ERROR 0; typedef struct { int *base; int front; int rear; }SqQueue;//队列的存储结构 int InitQueue(SqQueue &Q) {

Q.base=new int[MAXSIZE]; Q.front=Q.rear=0; return OK; }//队列的初始化 int EnQueue(SqQueue &Q,int e) { if((Q.rear+1)%MAXSIZE==Q.front) return ERROR; Q.base[Q.rear]=e; Q.rear=(Q.rear+1)%MAXSIZE; return OK; }//队列的入队 int DeQueue(SqQueue &Q,int &e) { if(Q.front==Q.rear) return ERROR; e=Q.base[Q.front]; Q.front=(Q.front+1)%MAXSIZE; return OK; }//队列的出队 int QueueLength(SqQueue &Q) { int i; i=(Q.rear-Q.front+MAXSIZE)%MAXSIZE; return i; }//求队列长度 void JuQueue(SqQueue &Q) { if(Q.rear==Q.front) printf("队列为空"); else printf("队列不为空"); }//判断队列是否为空 void QueueTraverse(SqQueue &Q)

防火墙实验报告记录

防火墙实验报告记录

————————————————————————————————作者:————————————————————————————————日期:

一、实验目的 ●通过实验深入理解防火墙的功能和工作原理 ●熟悉天网防火墙个人版的配置和使用 二、实验原理 ●防火墙的工作原理 ●防火墙能增强机构内部网络的安全性。防火墙系统决定了 哪些内部服务可以被外界访问;外界的哪些人可以访问内 部的服务以及哪些外部服务可以被内部人员访问。防火墙 必须只允许授权的数据通过,而且防火墙本身也必须能够 免于渗透。 ●两种防火墙技术的对比 ●包过滤防火墙:将防火墙放置于内外网络的边界;价格较 低,性能开销小,处理速度较快;定义复杂,容易出现因 配置不当带来问题,允许数据包直接通过,容易造成数据 驱动式攻击的潜在危险。 ●应用级网关:内置了专门为了提高安全性而编制的Proxy 应用程序,能够透彻地理解相关服务的命令,对来往的数 据包进行安全化处理,速度较慢,不太适用于高速网 (ATM或千兆位以太网等)之间的应用。 ●防火墙体系结构 ●屏蔽主机防火墙体系结构:在该结构中,分组过滤路由器 或防火墙与Internet 相连,同时一个堡垒机安装在内部

网络,通过在分组过滤路由器或防火墙上过滤规则的设 置,使堡垒机成为Internet 上其它节点所能到达的唯一 节点,这确保了内部网络不受未授权外部用户的攻击。 ●双重宿主主机体系结构:围绕双重宿主主机构筑。双重宿 主主机至少有两个网络接口。这样的主机可以充当与这些 接口相连的网络之间的路由器;它能够从一个网络到另外 一个网络发送IP数据包。但是外部网络与内部网络不能 直接通信,它们之间的通信必须经过双重宿主主机的过滤 和控制。 ●被屏蔽子网体系结构:添加额外的安全层到被屏蔽主机体 系结构,即通过添加周边网络更进一步的把内部网络和外 部网络(通常是Internet)隔离开。被屏蔽子网体系结构 的最简单的形式为,两个屏蔽路由器,每一个都连接到周 边网。一个位于周边网与内部网络之间,另一个位于周边 网与外部网络(通常为Internet)之间。 四、实验内容和步骤 (1)简述天网防火墙的工作原理 天网防火墙的工作原理: 在于监视并过滤网络上流入流出的IP包,拒绝发送可疑的包。基于协议特定的标准,路由器在其端口能够区分包和限制包的能力叫包过滤。由于Internet 与Intranet 的连接多数都要使用路由器,所以Router成为内外通信的必经端口,Router的厂商在Router上加入IP 过

五子棋系统实验报告

湖南工业大学 课程设计任务书 2015—2016学年第2 学期 计算机与通信学院(系、部)计算机科学与技术专业计算机1502班级课程名称:面向对象程序设计 设计题目:五子棋 完成期限:自2016年6月13日至2016年6月19日共1周

指导教师(签字):年月日 系(教研室)主任(签字):年月日

面向对象程序设计课程设计 设计说明书 五子棋 起止日期: 2016年6月13日至 2016年6月18日 学生姓名王回 班级计算机1502学号15408100209成绩 指导教师(签字) 计算机与通信学院 2016年 6 月 18日

五子棋 一、课题的介绍和课题的任务 设计的课题名称:五子棋 实现以下功能: 功能1、模拟真实棋盘棋子 功能2、模拟人与人对战下棋 功能3、模拟实时胜负判断 功能4、模拟棋局的存储与读取 二、设计的要求 具有动画功能(即图像能即时移动),能实现人与人进行简单的对玩,能实现简单的胜负判断 三、系统的分析和系统中类的设计 CWZQApp类作用:初始化应用程序及运行该程序的所需要的成员函数CWZQDoc类作用:存放应用程序的数据以及实现文件的保存,加载功能 CMainFrame类作用:管理应用程序的窗口,显示标题栏,状态栏,工具栏等,同时处理针对窗口操作的信息 CAboutDlg类作用:向导自动生成对话框类 CWZQView类作用:管理视图窗口,在框架窗口中实现用户数据的显示和打印,存放添加的功能模块

CWZQView类中的成员函数与数据成员: void Save(); //**** //保存文件 void OnOpen() //打开文件 void over(CPoint point);//**** //检查是否结束voidOnDraw(CDC* pDC) //画棋盘函数 void OnLButtonUp(UINT nFlags, CPoint point)//模拟下棋函数 HCURSOR hcursorwhite; //**** //两个鼠标 HCURSOR hcursorblack; //**** intwzq[19][19]; //**** //棋盘数组 boolcolorwhite; //**** // colorwhite TRUE时白棋下, 否则黑棋下 CBitmapm_bmblack; //**** //棋子位图 CBitmapm_bmwhite; //**** void CWZQView::OnDraw(CDC* pDC) //构造棋盘,显示白棋以及黑棋 GetDocument() //获取文档指针,在视图中显示文档内容 CBrush //用于构造CBrush对象,然后传给需要画 刷的CDC成员函数 pDC->FillRect(myrect1,&mybrush1) // 画黑框线 四、系统的实现及调试 添加的功能: 1.图标,光标以及位图的绘制 程序运行开始鼠标在进入棋盘界面未放下棋子时变为类似棋子光标,此处需要描绘2种棋子光标: 黑白鼠标Cursor以替换当前鼠标: IDC_CURSOR1 黑棋子 IDC_CURSOR2 白棋子 说明: 由于下棋时我们必须把鼠标热点设置在中间,点击下图(图3-1-3)最右边按扭,然后把鼠标移动到图像中你想设置为热点的地方,按下鼠标左键。

相关文档
最新文档