当前位置:文档之家› 编程-C语言-课程设计-黑白棋

编程-C语言-课程设计-黑白棋

编程-C语言-课程设计-黑白棋
编程-C语言-课程设计-黑白棋

黑白棋实验报告

一、功能说明:

主要由三个界面实现。现以界面为序进行逐一介绍。

界面一:自动恢复:

功能简介:恢复棋局。

进入条件:

当上次从下棋界面进行了非正常跳出时,跳出。如果这个非正常跳出是关闭窗口,则在下次打开程序时跳出。

(定义:下棋界面的非正常跳出指的是在一局棋没有下完并且也没有储存的状态下,点击restart按钮或者关闭窗口。)

跳出方向:

有询问是否进行自动回复的按钮。如果选择是,则回到下棋界面,并恢复上次未下完的棋局。如果选择否,对上次未下完的棋局进行清空并进入游戏模式选择界面。

界面二:游戏模式选择

功能简介:游戏模式选择。主要有一下几种模式:

人人对弈

人机对弈,玩家先手

人机对弈,玩家后手

机机对弈

(其中,每种有AI参与的模式中的每个AI均可以有6种选择)

读取记录

(从三个记录中选取一个进行读取,若该记录为空,则会在本界面中有文字提示。)

进入条件:

A.在保存或下完后从下棋界面点击restart时。

B.上次是正常退出,这次打开程序时

跳出方向:

点击确定则按照选取的模式开始新的游戏,进入下棋界面。

点击确定读取且读取成功,则按照读取文件的信息继续游戏,进入下棋界面。

界面特色:

按照人人对弈、机机对弈、人机对弈的逻辑要求,从显示上提示玩家颜色、AI1策略、AI2策略的有意义与否并若无意义,则无法对该量进行更改。

界面三:下棋界面

功能简介:主要包括以下几个方面。

A.下棋:

a.人人对弈

b.人机对弈(在玩家被欠手时,会Sleep3000ms)

c.机机对弈(在任一方被欠手时,会Sleep3000ms)

双方ai均在控制者按任意键时开始走子。

B.悔棋:悔到上一次玩家操作时的状态。

C.落子提示:提示下一方的可落子点(染灰),可以通过reminder按钮进行关闭。提

示上一次所落的点位(黄框)。

D.执棋方提示与现在比分提示。

E.搜索进度提示:在有搜索的AI进行运行时,在开始搜索“如果AI走点P”时,将

点P的颜色染成绿色,从而与落子提示一同构成搜索进度提示。

F.背景音乐:选取古筝曲《春江花月夜》循环播放。且在这个界面可以执行暂停、

继续操作。

G.储存:选择储存的目标文件与确定储存按钮。

H.Restart按钮

(在悔棋和保存时,会有情况判断。拒绝开局和游戏结束时的保存和悔棋,并在界面中

有文字提示说明。(结束时悔棋太赖了~而保存功能主要是为了以后接着下的,结束时

保存无意义,想留一下棋局的话直接按prt sc吧~))

进入条件:

A.在模式选择界面选择玩游戏模式并按确定键时

B. 在模式选择界面选择读取时

C.在

自动恢复界面选择“是”(自动回复)时。

跳出方向:

在按restart按钮时,会根据是否是正常跳出,跳到自动恢复界面或游戏模式选择界面。

其它特色:

鼠标操作手动截流。(graphics.h的获取鼠标信息函数不截流,会导致明明只按了一下

却响应多下的情况,于是手动对次进行了一下调整。)

AI功能说明:(六个AI基本依强弱序,搜索一与搜索二强弱差异不大)

随机策略:

从所有能走的点中随机选取一个点落子。(为1所写)

贪吃策略:

考虑5步,选择所有五步后的情况中,己方子数最多的一种情况进行走子。

复合估价:

针对一个随输入棋盘情况的不同而动态调整估价值的估值函数进行直接估价,走

子。

这个动态估价函数会在一个比较复杂的估价列表的基础上,对于十二种不同的特

定边角情况进行判断然后进行估价调整。

复合的地方在于:首先,它会判断一下有没有点能走完之后使得对手欠手。如果

有,直接走。其次,在临终局12步时,进入残局搜索,一搜到底。

搜索(一):

针对一个随输入棋盘情况的不同而动态调整估价值的估价函数进行4步搜索估价,

走子。(估值函数比较慢,所以只能搜4步了.....)

这个估价函数随行动力和边角稳定点的数目会有微调。(估值函数为1所写)

并且:首先,它会判断一下有没有点能走完之后使得对手欠手。如果有,直接走。

其次,在临终局12步时,进入残局搜索,一搜到底。

搜索(二):

针对一个静态估价值的估价函数进行5步搜索估价,走子。

这个估价函数的主要原理就是角、边、其它地方的价格不再同一个数量级上,其

他地方的价格之间有细微差距。

并且:首先,它会判断一下有没有点能走完之后使得对手欠手。如果有,直接走。

其次,在临终局12步时,进入残局搜索,一搜到底。

搜索(三):

针对一个随输入棋盘情况的不同而动态调整估价值的估价函数进行5步搜索估价,

走子。

这个估价函数就是复合估价的估价函数。

并且:首先,它会判断一下有没有点能走完之后使得对手欠手。如果有,直接走。

其次,在临终局12步时,进入残局搜索,一搜到底。

二、分工说明:

1完成:

AI ai001 ()

nt wendingdian(qp qipan,int i,int j)

int gujia3(qp qipan,int b)

实现随机AI功能与搜索一AI的估价核心。

2完成:

其它函数和功能。

三、函数说明:

头文件:

#include

#include

#include

#include

#include

#include

#pragma comment(lib,"Winmm.lib")

using namespace std;

全局参量与结构体的定义

int qizi[10][10];//棋子状态:0为空,1为黑,2为白,3为空但目前可让黑棋下,4为空但目前可让白棋下。

int qishou;//棋手状态:1为黑,2为白。

int music;//音乐状态:1为开,0为关。

int reminder;//提示状态:1为开,0为关。

int wanjiayanse;//玩家颜色:1为黑(后手),2为白(先手)。

int mode;//游戏模式:1为人人对弈,2为人机对弈,3为机机对弈。

int black,white;//当前状态下某种颜色棋子的数目,分别为白色和黑色。

char black1,black2,white1,white2;//不能直接输出数据,于是将black与white存在这两组字符数中。

int couldmoveblack,couldmovewhite;//记录截止到现在最后一次该黑/白走时,它所能走的不同步数。

int ifjieshu;//标记游戏是否已经结束,0为未结束,1为结束。

int ifrestart;//标记现在是否急切地需要进行restart的操作,如果真的需要的话,为1,否则为0。int ifneedautoload=1;//标记是否需要启动自动读取。0为需要,1为不需要。

int ifload=0;//是否进行了自动读取,0为否;1为是。

int savecase=1;//标记储存量,0为不需要执行储存操作,1、2、3分别为需要对文件1、2、3进行储存操作

int loadcase=1;//标记读取量,0为不需要执行读取操作,1、2、3分别为需要对文件1、2、3进行读取操作

int ifcouldload=0;//这个量是针对手动读取的,如果为1,则认为这个量不可读,否则,则认为可读。

int kindofai=1; //这个量标记了现在AI的状态。

//1为随机AI

//2为3步贪吃AI

//3为复合ai1

//4为搜索(一)AI014

//5为搜索(二)

//6为搜索(三)

int kindofai_=1;//这个量标记了现在AI的状态。

//1为随机AI

//2为3步贪吃AI

//3为复合ai1

//4为搜索(一)AI014

//5为搜索(二)

//6为搜索(三)

struct xx

{

int a[9][9][65];//储存全部棋盘的状态(0为空,1为黑,2为白,3为空但目前可让黑棋下,4为空但目前可让白棋下。)

int n;//为目前已走的步数,确切的说为目前棋盘上的棋子总数再减去4。

int c[65];//第i部到底是谁走的?1为黑,2为白。

int x[65];//第i步所走位置的x坐标

int y[65];//第i步所走位置的y坐标

};

struct yy

{

int left;

int right;

int upper;

int under;

int upperleft;

int underleft;

int upperright;

int underright;

int sum;

};

struct AI

{

int x;

int y;

};

xx chucun;//用结构体xx定义储存量,但这个东西其实也就只能算是历史量了~。我拒绝在初始状态下进行储存!

yy zhuangtai[9][9];//用结构体yy定义棋子状态,有8个参量表示8个方向能吃到的子的数目。

一个参量表示这八个量的总和。

在后面有越序调用的函数的声明。

(略)

储存相关函数:

void savex (wchar_t *place)

//这个函数是对于存档进行转存,将save.txt中的全部内容存到*place中,并将save.txt清空void savexx ()

//这个函数是根据全局变量savecase进行转存,1、2、3分别对应save1.txt、save2.txt、save3.txt,然后对savecase进行归1。

void loadx (wchar_t *place)

//这个函数是将*place转存到save.txt中,再将save读到内存

void loadxx ()

//这个函数是根据loadcase进行读取,1、2、3分别对应save1.txt、save2.txt、save3.txt,然后对loadcase进行归1。

void pdifcouldload ()

//这个函数是根据loadcase进行判断该量可不可以读取,1、2、3分别对应save1.txt、save2.txt、save3.txt,将结果储存在ifcouldload中。

void saveas ()

//这个函数是针对在游戏中点击“确定储存”后的不同情况,进行不同的处理。

void pdifneedautoload ()

//这个函数是读一下save的第一个数据(ifjieshu),如果结束了,认为不再需要自动读取,否则认为需要进行自动读取。

void save ()

//这是个储存几乎所有全局参量的函数,到save.txt

void load ()

//这是个读取几乎所有全局参量的函数,从save.txt

界面与控制相关函数:

void menuload0 ()

//这个是在系统检测到你上一次没有正常退出时跳出的菜单

void menu0 ()

//这是执行最初的那个选择菜单.在这个选择菜单中,通过一系列鼠标操作对一些控制游戏模式的全局参量进行修改。

//并且,在这个菜单中还可以选择读取。

void countandchangestyle ()

//计数black与white并将其转存到black1、2与white1、2中。然后再画出来。

void drawscreen0 ()

//绘制图像,所有与棋盘状态无关的部分。

yy jszhuangtai (int qz[10][10],int m,int n,int a)

//a为要判断的子的颜色,1为黑,2为白。返回的是对于一个输入的棋盘状态,计算m,n位的

子,在八个方向能吃到的子数。

//用于判断能否走棋以及怎么走棋。

void judgement (int a)

//a为要判断的子的颜色,1为黑,2为白。

//对棋盘上的所有位置调用jszhuangtai进行调用,并计入到全局参数YY zhuangtai中。void drawscreen1 ()

//初始化棋盘上的那四个子

void drawscreen2 (int qz[10][10])

//针对棋盘上的落子情况进行绘图,只是画那些与子相关的部分。

void musiccontrol ()

//切换music的播放与暂停并刷屏

void remindercontrol ()

//切换提示的显示与否并刷屏

void huiqicaozuo ()

//对于点击“悔棋”之后的具体状态,进行悔棋的具体操作并储存。

void mousecontrol ()

//绘图,定义鼠标状态结构体,判断走棋点

//根据游戏模式获取玩家鼠标操作内容或ai返回数据

/*根据不同的点击位置,调用函数:

musiccontrol ();

remindercontrol ();

huiqicaozuo ();

savecase change

saveas ();

落子(落子之后进行棋手转换、储存)

//所有在主界面中与鼠标有关的操纵,可以说是执行的主程序

Ai相关函数(基础)

AI ai001 ()

//是个随机AI

AI ai002 ()

//这个AI会寻找全场吃子最多的点并返回。

AI ai003 ()

//这个AI会寻找全场吃子最少的点并返回。

AI ai004 ()

//这是混合AI。

//在后27步执行ai002

//否则,按照占角、占边、占3 3位的顺序进行抢点性返回。

// 如果没有可抢的点,则执行ai003

AI ai005 ()

//这是个直接估价然后作调整的ai。

//先有一个基础价:角高,可能使对方得角的点低,3 3位高,1 3位高,2、7路为负值。//以及之后有以下十二中边角特殊情况的估值调整

/*

一、说白了,就是想吃对方边上的子~

二、以上是对当角位已被走了之后对每个角位可能造成对方得角的3个点的价值矫正

(使这三个点的估价提升)

三、以上是对情况

┏━┳━┳━┳━┳━┳━┳━┳━┓

┃┃┃○┃x┃空┃┃┃┃

┣━╋━╋━╋━╋━╋━╋━╋━┫

┃┃┃┃┃┃┃┃┃

┣━╋━╋━╋━╋━╋━╋━╋━┫

┃┃┃┃┃┃┃┃┃

┣━╋━╋━╋━╋━╋━╋━╋━┫

┃┃┃┃┃┃┃┃┃

┣━╋━╋━╋━╋━╋━╋━╋━┫

┃┃┃┃┃┃┃┃┃

┣━╋━╋━╋━╋━╋━╋━╋━┫

┃┃┃┃┃┃┃┃┃

┣━╋━╋━╋━╋━╋━╋━╋━┫

┃┃┃┃┃┃┃┃┃

┣━╋━╋━╋━╋━╋━╋━╋━┫

┃┃┃┃┃┃┃┃┃

┗━┻━┻━┻━┻━┻━┻━┻━┛

及其另外7种对称情况出现时,X位的估价修正(白棋为对方)

(使X点的估价下降)

四、以上是对情况

┏━┳━┳━┳━┳━┳━┳━┳━┓

┃┃┃○┃x┃●┃空┃┃┃

┣━╋━╋━╋━╋━╋━╋━╋━┫

┃┃┃┃┃┃┃┃┃

┣━╋━╋━╋━╋━╋━╋━╋━┫

┃┃┃┃┃┃┃┃┃

┣━╋━╋━╋━╋━╋━╋━╋━┫

┃┃┃┃┃┃┃┃┃

┣━╋━╋━╋━╋━╋━╋━╋━┫

┃┃┃┃┃┃┃┃┃

┣━╋━╋━╋━╋━╋━╋━╋━┫

┃┃┃┃┃┃┃┃┃

┣━╋━╋━╋━╋━╋━╋━╋━┫

┃┃┃┃┃┃┃┃┃

┣━╋━╋━╋━╋━╋━╋━╋━┫

┃┃┃┃┃┃┃┃┃

┗━┻━┻━┻━┻━┻━┻━┻━┛

及其另外7种对称情况出现时,X位的估价修正(白棋为对方,黑棋为AI)

(使X点的估价下降)

五、以上是对情况

┏━┳━┳━┳━┳━┳━┳━┳━┓

┃┃┃○┃x┃●┃●┃空┃┃

┣━╋━╋━╋━╋━╋━╋━╋━┫

┃┃┃┃┃┃┃┃┃

┣━╋━╋━╋━╋━╋━╋━╋━┫

┃┃┃┃┃┃┃┃┃

┣━╋━╋━╋━╋━╋━╋━╋━┫

┃┃┃┃┃┃┃┃┃

┣━╋━╋━╋━╋━╋━╋━╋━┫

┃┃┃┃┃┃┃┃┃

┣━╋━╋━╋━╋━╋━╋━╋━┫

┃┃┃┃┃┃┃┃┃

┣━╋━╋━╋━╋━╋━╋━╋━┫

┃┃┃┃┃┃┃┃┃

┣━╋━╋━╋━╋━╋━╋━╋━┫

┃┃┃┃┃┃┃┃┃

┗━┻━┻━┻━┻━┻━┻━┻━┛

及其另外7种对称情况出现时,X位的估价修正(白棋为对方,黑棋为AI)(使X点的估价下降)

六、以上是对情况

┏━┳━┳━┳━┳━┳━┳━┳━┓

┃┃○┃x┃●┃●┃●┃空┃┃

┣━╋━╋━╋━╋━╋━╋━╋━┫

┃┃┃┃┃┃┃┃┃

┣━╋━╋━╋━╋━╋━╋━╋━┫

┃┃┃┃┃┃┃┃┃

┣━╋━╋━╋━╋━╋━╋━╋━┫

┃┃┃┃┃┃┃┃┃

┣━╋━╋━╋━╋━╋━╋━╋━┫

┃┃┃┃┃┃┃┃┃

┣━╋━╋━╋━╋━╋━╋━╋━┫

┃┃┃┃┃┃┃┃┃

┣━╋━╋━╋━╋━╋━╋━╋━┫

┃┃┃┃┃┃┃┃┃

┣━╋━╋━╋━╋━╋━╋━╋━┫

┃┃┃┃┃┃┃┃┃

┗━┻━┻━┻━┻━┻━┻━┻━┛

及其另外7种对称情况出现时,X位的估价修正(白棋为对方,黑棋为AI)(使X点的估价下降)

七、以上是对情况

┏━┳━┳━┳━┳━┳━┳━┳━┓

┃○┃x┃●┃●┃●┃●┃空┃┃

┣━╋━╋━╋━╋━╋━╋━╋━┫

┃┃┃┃┃┃┃┃┃

┣━╋━╋━╋━╋━╋━╋━╋━┫

┃┃┃┃┃┃┃┃┃

┣━╋━╋━╋━╋━╋━╋━╋━┫

┃┃┃┃┃┃┃┃┃

┣━╋━╋━╋━╋━╋━╋━╋━┫

┃┃┃┃┃┃┃┃┃

┣━╋━╋━╋━╋━╋━╋━╋━┫

┃┃┃┃┃┃┃┃┃

┣━╋━╋━╋━╋━╋━╋━╋━┫

┃┃┃┃┃┃┃┃┃

┣━╋━╋━╋━╋━╋━╋━╋━┫

┃┃┃┃┃┃┃┃┃

┗━┻━┻━┻━┻━┻━┻━┻━┛

及其另外7种对称情况出现时,X位的估价修正(白棋为对方,黑棋为AI)(使X点的估价下降)

八、以上是对情况

┏━┳━┳━┳━┳━┳━┳━┳━┓

┃○┃x┃●┃●┃●┃●┃●┃空┃

┣━╋━╋━╋━╋━╋━╋━╋━┫

┃┃┃┃┃┃┃┃┃

┣━╋━╋━╋━╋━╋━╋━╋━┫

┃┃┃┃┃┃┃┃┃

┣━╋━╋━╋━╋━╋━╋━╋━┫

┃┃┃┃┃┃┃┃┃

┣━╋━╋━╋━╋━╋━╋━╋━┫

┃┃┃┃┃┃┃┃┃

┣━╋━╋━╋━╋━╋━╋━╋━┫

┃┃┃┃┃┃┃┃┃

┣━╋━╋━╋━╋━╋━╋━╋━┫

┃┃┃┃┃┃┃┃┃

┣━╋━╋━╋━╋━╋━╋━╋━┫

┃┃┃┃┃┃┃┃┃

┗━┻━┻━┻━┻━┻━┻━┻━┛

及其另外7种对称情况出现时,X位的估价修正(白棋为对方,黑棋为AI)(使X点的估价下降)

九、以上是对情况

┏━┳━┳━┳━┳━┳━┳━┳━┓

┃┃┃●┃x┃x┃●┃┃┃

┣━╋━╋━╋━╋━╋━╋━╋━┫

┃┃┃┃┃┃┃┃┃

┣━╋━╋━╋━╋━╋━╋━╋━┫

┃┃┃┃┃┃┃┃┃

┣━╋━╋━╋━╋━╋━╋━╋━┫

┃┃┃┃┃┃┃┃┃

┣━╋━╋━╋━╋━╋━╋━╋━┫

┃┃┃┃┃┃┃┃┃

┣━╋━╋━╋━╋━╋━╋━╋━┫

┃┃┃┃┃┃┃┃┃

┣━╋━╋━╋━╋━╋━╋━╋━┫

┃┃┃┃┃┃┃┃┃

┣━╋━╋━╋━╋━╋━╋━╋━┫

┃┃┃┃┃┃┃┃┃

┗━┻━┻━┻━┻━┻━┻━┻━┛

及其另外3种对称情况出现时,X位的估价修正(AI为黑棋)

(使X位的估价下降)

十、以上是对情况

┏━┳━┳━┳━┳━┳━┳━┳━┓

┃┃┃○┃x┃○┃┃┃┃

┣━╋━╋━╋━╋━╋━╋━╋━┫

┃┃┃┃┃┃┃┃┃

┣━╋━╋━╋━╋━╋━╋━╋━┫

┃┃┃┃┃┃┃┃┃

┣━╋━╋━╋━╋━╋━╋━╋━┫

┃┃┃┃┃┃┃┃┃

┣━╋━╋━╋━╋━╋━╋━╋━┫

┃┃┃┃┃┃┃┃┃

┣━╋━╋━╋━╋━╋━╋━╋━┫

┃┃┃┃┃┃┃┃┃

┣━╋━╋━╋━╋━╋━╋━╋━┫

┃┃┃┃┃┃┃┃┃

┣━╋━╋━╋━╋━╋━╋━╋━┫

┃┃┃┃┃┃┃┃┃

┗━┻━┻━┻━┻━┻━┻━┻━┛

及其另外3种对称情况出现时,X位的估价修正(玩家为白棋)(使X位的估价提升)

十一、这是对于情况

┏━┳━┳━┳━┳━┳━┳━┳━┓

┃┃┃●┃空┃X┃┃┃┃

┣━╋━╋━╋━╋━╋━╋━╋━┫

┃┃┃┃┃┃┃┃┃

┣━╋━╋━╋━╋━╋━╋━╋━┫

┃┃┃┃┃┃┃┃┃

┣━╋━╋━╋━╋━╋━╋━╋━┫

┃┃┃┃┃┃┃┃┃

┣━╋━╋━╋━╋━╋━╋━╋━┫

┃┃┃┃┃┃┃┃┃

┣━╋━╋━╋━╋━╋━╋━╋━┫

┃┃┃┃┃┃┃┃┃

┣━╋━╋━╋━╋━╋━╋━╋━┫

┃┃┃┃┃┃┃┃┃

┣━╋━╋━╋━╋━╋━╋━╋━┫

┃┃┃┃┃┃┃┃┃

┗━┻━┻━┻━┻━┻━┻━┻━┛

(其中ai为黑棋)及其对称的另外7种情况

避免

┏━┳━┳━┳━┳━┳━┳━┳━┓

┃┃┃●┃空┃●┃┃┃┃

┣━╋━╋━╋━╋━╋━╋━╋━┫

┃┃┃┃┃┃┃┃┃

┣━╋━╋━╋━╋━╋━╋━╋━┫

┃┃┃┃┃┃┃┃┃

┣━╋━╋━╋━╋━╋━╋━╋━┫

┃┃┃┃┃┃┃┃┃

┣━╋━╋━╋━╋━╋━╋━╋━┫

┃┃┃┃┃┃┃┃┃

┣━╋━╋━╋━╋━╋━╋━╋━┫

┃┃┃┃┃┃┃┃┃

┣━╋━╋━╋━╋━╋━╋━╋━┫

┃┃┃┃┃┃┃┃┃

┣━╋━╋━╋━╋━╋━╋━╋━┫

┃┃┃┃┃┃┃┃┃

┗━┻━┻━┻━┻━┻━┻━┻━┛

的发生,对X位的估价进行下降(-1000)

十二、对于使对方一步占角的点的估价修正(不想走这里~)

*/

//接下来,估价的方法为对于每一个可走的点,将这个点所能吃到的子的价值取和

//返回的内容为这些所有的和的最大值所对应的点的坐标。

AI ai006 ()

//这是个混合的ai

//如果有可导致对方欠手的点,直接返回该点。

//否则,执行ai005

AI fuzhu (int cd)

//这不是个ai,但像是个ai【仅仅因为返回了AI结构体.......】。

//在有点可使对方行动力<=cd时返回这个点,否则返回0 0

/*

以下的内容全是为了写搜索而做,因为表示很惭愧的说,我最开始居然没有计划写搜索......

不过懒得改之前写过的函数了,也怕改乱了,决定从头写搜索的东西。这样应该速度上和准确度上都会更高一些吧~

*/

搜索相关的基础函数:

struct qp

{

int a[10][10];

};

//定义棋盘结构体,其实只有一个数组而已。

int countnum (qp qipan,int a)

//输入的a代表颜色,1为黑,2为白。

//计算棋盘中的该颜色数目,并返回。

int countmove (qp qipan,int a)

//输入的a代表颜色,1为黑,2为白。

//计算棋盘中的该颜色可走的点的数目,并返回。

//前提要求qipan在输入前已进行过可走点的标记

yy jszhuangtai0 (qp qipan,int m,int n,int a)

//a为要判断的子的颜色,1为黑,2为白。

//m n 为要判断的点的坐标。

//以YY结构体返回该点在8个方向可吃的子数

qp move (int p,int q,qp qipan,int a,yy zt[10][10])

//p,q为行棋所走的字的坐标,a表示所走子的颜色

//根据之前已经计算的全棋盘下子状态结构体yy zt

int wbiaoji=0;

//这是一个辅助的标记变量

贪吃搜索相关函数:

int zy_1 (qp qipan,int cs,int a)

//这是一个对于这个递归很重要的函数,cs表示搜索步数,a表示下一步该谁走。

AI ai007_1 (int cs)

//这是一个不带剪枝的深搜ai,搜索标准是说当黑白方共走完cs部后,将使得ai方场面上子数最多的下一步棋坐标返回。

残局搜索相关函数

int zy (qp qipan,int cs,int a)

//这是一个对于这个递归很重要的函数,cs表示搜索步数,a表示下一步该谁走。

AI ai007 (int cs)

//这是一个带剪枝的深搜ai,搜索标准是说当黑白方共走完cs部后,将使得ai方场面上子数最多的下一步棋坐标返回。

//但需要注意,它有自暴自弃精神。即它的剪枝标准是只要找到一种能赢的方式,直接输出。//只要对于任一种最后对方有能力赢的局面,直接跳过。

//即当必输时,几乎会随机输出一个子。

//所以只适用于最后的搜到底。

AI ai008 ()

//这个是一个大的复合ai

//在前48步时,执行ai006,后12步时,利用ai007搜到底

搜索二相关函数

int gujia1 (qp qipan,int a)

//输入的a代表颜色,1为黑,2为白。

//这个静态表格的标准主要就是中心、边、角分别在3个数量级上,并且没有任何多想的比如可能导致对方得边、角的点位的值下降。

int zy1 (qp qipan,int cs,int a)

//这是一个对于这个递归很重要的函数,cs表示搜索步数,a表示下一步该谁走。

//边界情况利用gujia1

AI ai009 (int cs)

//这是一个基于一个静态表格的搜索AI

AI ai010 ()

//这是混合AI

//在前48步如果有可使对方欠手的点,直接返回,否则执行搜5步的ai009

//在后12步利用ai007搜到底。

搜索三相关函数

int gujia2 (qp qipan,int a)

//这是一个根据AI005做的估价函数

//返回的估价值是对于输入的状态,己方的子加,对方得的子减,输出结果。

int zy2 (qp qipan,int cs,int a)

//这是一个对于这个递归很重要的函数,cs表示搜索步数,a表示下一步该谁走。

//边界情况利用gujia2

AI ai011 (int cs)

//这是一个基于gujia2的搜索AI,输入为层数

AI ai012 ()

//这是混合AI

//在前48步如果有可使对方欠手的点,直接返回,否则执行搜5步的ai011

//在后12步利用ai007搜到底。

搜索一相关函数

int wendingdian(qp qipan,int i,int j)

//返回i j 是不是稳定点(保证输入点在边上。)

int gujia3(qp qipan,int b)

//这是合作的另一个同学写的估价函数

//边角的值很高。

//并且考虑到行动力会对估价值有所微调。

//以及欠手点及边上稳定点的值和边上点的估价可以匹敌。

int zy3 (qp qipan,int cs,int a)

//这是一个对于这个递归很重要的函数,cs表示搜索步数,a表示下一步该谁走。

//边界情况利用gujia3

AI ai013 (int cs)

//这是一个基于gujia3的搜索AI

AI ai014 ()

//这是混合AI

//在前48步如果有可使对方欠手的点,直接返回,否则执行搜5步的ai013

//在后12步利用ai007搜到底。

主函数

int main ()

//标记一个用以restart后goto的位置

//判断是否需要启动自动读取功能,并以此结果进行跳出自动读取窗口

//如果没有启动自动读取,则进入游戏模式选择

//做出原始图像

//进入鼠标操作函数

//判断跳出鼠标操作函数时有没有进行restart操作,如果进行了,goto到beginning的位置

课程设计心得体会5篇【精选】

最近发表了一篇名为《课程设计心得体会5篇》的,觉得应该跟大家分享,为了方便大家的阅读。 课程设计是一个有目的、有计划、有结构的产生课程计划、课程标准以及教材等系统化活动。以下是课程设计心得体会,欢迎大家阅读! 历时三个星期的课程设计终于在今天完成了。这次课程设计让我学到了很多东西,首先对自己所做的系统进行了一系列的分析和论证。在得出了此系统完全可运行的基础上,再次进行了各种可行性分析,最终确定了这套公司考勤管理系统。 在开始做的阶段,首先运用软件工程所学的东西,画出了系统流程图,物理流程图,E —R图等。这为我后来的系统提供了很大的帮助。在做系统的时候我选择了在大二时学过的VB,这是面向对象的程序设计方法。经过一段时间的努力之后,终于做出了这套系统。 在主体框架完成的情况下,依据老师的要求,将上述所做东西以报告的形式做成文档。 回想自己所经过的日子,有欢笑有泪水,引用一句歌词“阳光总在风雨后”。成功之后的喜悦是无法用语言来形容的。虽然在此前被老师无情的退了回来,但老师的良苦用心总是很容易被网我们这些做学子的理解。究其原因主要是自己不认真,对这一课程设计没有整体的认识,总是存在侥幸心理能混过去就混过去,现在我认识到了这不是一个人应该有的想法。由小见大,在离开学校走像社会的时候,做任何事情都不能马马虎虎。 通过这次课程设计让我认识到自己的不足,让我知道了学无止境的道理。我们每一个人永远不能满足于现有的成就,人生就像在爬山,一座山峰的后面还有更高的山峰在等着你。 以前从没有学过关于汇编语言的知识,起初学起来感觉很有难度。当知道要做课程设计的时候心里面感觉有些害怕和担心,担心自己不会或者做不好。但是当真的要做的时候也只好进自己作大的努力去做,做到自己最好的。 我们在这个过程中有很多自己的感受,我想很多同学都会和我有一样的感受,那就是感觉汇编语言真的是很神奇,很有意思。我们从开始的担心和害怕渐渐变成了享受,享受着汇编带给我们的快乐。看着自己做出来的东西,心里面的感觉真的很好。虽然我们做的东西都还很简单,但是毕竟是我们自己亲手,呵呵,应该是自己亲闹做出来的。很有成就感。 我想微机原理课程设计和其他课程设计有共同的地方,那就是不仅加深和巩固了我们的课本知识,而且增强了我们自己动脑,自己动手的能力。但是我想他也有它的独特指出,那就是让我们进入一个神奇的世界,那就是编程。对于很多学过汇编或者其他的类似程序的同学来说,这不算新奇,但是对于我来说真的新奇,很有趣,也是我有更多的兴趣学习微机原理和其他的汇编。 微机原理与接口技术是一门很有趣的课程,手机版任何一个计算机系统都是一个复杂的整体,学习计算机原理是要整体的每一部分。讨论某一部分原理时又要其它部分的工作原理。这样一来,不仅不能在短时间内较深入理解计算机的工作原理,而且也很难孤立地理解某一部分的工作原理。所以,在循序渐进的课堂教学过程中,我总是处于“学会了一些新知

2位数计算器程序-汇编语言课程设计

信息学院课程设计题目:2位数计算器程序设计 __ 姓名: __ _____ 学号: ____ ___ 班级: 课程:汇编语言 ________ 任课教师:侯艳艳 ____ 2011年12月

课程设计任务书及成绩评定

目录 摘要 (2) 1.设计目的………………………………………………………………………………………………?2 2.概要设计………………………………………………………………………………………………?3 2.1系统总体分析…………………………………………………………………………?3 2.2程序流程图 (3) 3.详细设计......................................................................................................? (4) 3.1主程序及子程序说明 (4) 3.2程序代码编写 (4) 4.程序调试 (6) 4.1运行界面分析 (6) 4.2算法的分析 (6) 4.3调试过程及分析 (6) 5.心得体会 (7) 5.1设计体会...................................................................................................? (7) 5.2系统改进...................................................................................................? (7) 参考文献 (8)

数据结构课程设计报告模板

课程设计说明书 课程名称:数据结构 专业:班级: 姓名:学号: 指导教师:成绩: 完成日期:年月日

任务书 题目:黑白棋系统 设计内容及要求: 1.课程设计任务内容 通过玩家与电脑双方的交替下棋,在一个8行8列的方格中,进行棋子的相互交替翻转。反复循环下棋,最后让双方的棋子填满整个方格。再根据循环遍历方格程序,判断玩家与电脑双方的棋子数。进行大小判断,最红给出胜负的一方。并根据y/n选项,判断是否要进行下一局的游戏。 2.课程设计要求 实现黑白两色棋子的对峙 开发环境:vc++6.0 实现目标: (1)熟悉的运用c语言程序编写代码。 (2)能够理清整个程序的运行过程并绘画流程图 (3)了解如何定义局部变量和整体变量; (4)学会上机调试程序,发现问题,并解决 (5)学习使用C++程序来了解游戏原理。 (6)学习用文档书写程序说明

摘要 本文的研究工作在于利用计算机模拟人脑进行下黑白棋,计算机下棋是人工智能领域中的一个研究热点,多年以来,随着计算机技术和人工智能技术的不断发展,计算机下棋的水平得到了长足的进步 该程序的最终胜负是由棋盘上岗双方的棋子的个数来判断的,多的一方为胜,少的一方为负。所以该程序主要运用的战术有削弱对手行动战术、四角优先战术、在游戏开局和中局时,程序采用削弱对手行动力战术,即尽量减少对手能够落子的位置;在游戏终局时则采用最大贪吃战术,即尽可能多的吃掉对手的棋子;而四角优先战术则是贯穿游戏的始终,棋盘的四角围稳定角,不会被对手吃掉,所以这里是兵家的必争之地,在阻止对手进角的同时,自己却又要努力的进角。 关键词:黑白棋;编程;设计

语言教学课程设计原理》第六章翻译

6.语言教师与语言学家 在前面的章节里中,我大概叙述了一个关于语言教师职责的方法,有助于语言教学法的学科最近的变化启发了这一方法。在这一节中,我将探索一个更深的语言学和课堂实践以及语言学家、教师、学习者之间的关系的领域。我也将简单地讨论一个标准,这个标准可能会帮助老师去做一个关于用若干当代的方法去进行课程设计和课堂教学的决定。 一方面构成第二语言教育学基础的学科之间的相互影响,另一方面在任意特定的教学情景中发生的事,构成一了个迅速发展的研究领域。当然,这个基本学科是理论语言学、描写语言学、心理语言学和社会语言学。当第二语言教学在学校背景进行时,教育学理论也会明显地考虑在内。这些学科以不同的方式比例与课堂教学相互作用,取决于对语言的性质、语言的教与学的认识。 语言学家占主导 20世纪40年代到60年代,基本学科和课堂实践的相互作用倾向于产生不同的第二语言学教学方法。在发展方法时,运用到课堂时间中的理论被认为是从描写语言学到教学的技巧转换的过程,这就导致了从语言学家到老师的一个关系,这种关系让人联系起家族谱系树。我们以听说教学法为例。 在这个特定的家族中,像Leonard Bloomfield和Charles Fries这样的语言学家扮演了祖父的角色。他们的著作被第二代应用语言学家转变为教学材料:英语模式训练(Lado和Fries,1958)是这个过程中的一个明显的例子,拉多英语系列(Lado1970)和现代西班牙语(Bolinger, Ciruti和Montero 1966)。在这期间,老师通过出版课程、语言实验材料的巨大影响以及正式的项目训练得到训练。这一点也不新鲜。然而,应该提一下的是,在我描述的时候,课堂教师需要训练和材料,把这些材料更好更直接地运用到课堂互动中去。一个生成第二语言项目的完善的模式产生了。在这个模式中,教师是第三代语言学家—或是隔三代语言学家—忠实地执行这些聪慧的前辈传下来的技巧。 第二语言教学方法论的观点源于语言学理论,坚持应用语言学的许多模式。其中最著名的一个模式是Corder模式(1973:156),虽然它也包括来自于社会

汇编语言课程设计

沈阳大学

2.3 MASM的介绍 MASM是微软公司开发的汇编开发环境,拥有可视化的开发界面,使开发人员不必再使用DOS环境进行汇编的开发,编译速度快,支持80x86汇编以及Win32Asm是Windows下开发汇编的利器。它与windows平台的磨合程度非常好,但是在其他平台上就有所限制,使用MASM的开发人员必须在windows下进行开发,历经二三十年的发展,目前MASM的版本已升至6.15,支持MMX Pentium、Pentium II、Pentium III及Pentium 4等指令系统。 2.4总体设计功能 本次课程设计的内容是采用汇编语言设计一个运行于计算机的“霓虹灯”的模拟显示 程序,由$及*字符相间,从两侧向中间螺旋汇聚直至形成一个矩形,这就要求该霓虹灯能够动态地进行变化;霓虹灯模拟显示程序主要是进行程序循环调用,可以通过CMP、JMP、JZ、RET等命令进行跳转。由于是霓虹灯的模拟显示,因此在进行程序循环调用前需要进行数据段定义,以使子程序在进行调用时能够根据数据段的定义来执行,最后显示结果。 定时器中断处理程序:计数器中断的次数记录在计数单元count中,由于定时中断的引发速率是每秒18.2次,即计数一次为55ms,当count计数值为18时,sec计数单元加一(为1秒)。 视频显示程序设计:一般由DOS 或BIOS调用来完成。有关显示输出的DOS功能调用不多,而BIOS调用的功能很强,主要包括设置显示方式、光标大小和位置、设置调色板号、显示字符、显示图形等。用INT 10H中断即可建立某种显示方式。用DOS功能调用显示技术,把系统功能调用号送至AH,把程序段规定的入口参数,送至指定的寄存器,然后由中断指令INT 21H来实现调用。 键盘扫描程序设计:利用DOS系统功能调用的01号功能,接受从键盘输入的字符到AL寄存器,以及检测键盘状态,有无输入,并检测输入各值。 2.5详细功能设计 2.5.1主程序功能 主程序通过调用各个子程序来实现清屏,改变图形等功能,具体调用过程如图1所示。 沈阳大学

五子棋教案

教学目标: 激起学生学习五子棋的兴趣,教育学生沉着冷静,有良好的棋风。 教学准备:五子棋 教学过程: 一、认识五子棋 1.出示棋盘和棋子,教师演示,让学生认识什么是五子棋。 了解:五子棋是一种两人对弈的纯策略型棋类游戏,是起源于古代的传统种之一。发展于日本,流行于欧美。容易上手,老少皆宜,而且趣味横生,引人入胜;不仅能增强思维能力,提高,而且富含,有助于修身养性。 2.明确我们社团的活动内容:五子棋。 二、学下五子棋 1、请会下五子棋的学生说说下棋的规则及下棋的经验。 2.教师总结下棋规则: ①摆成连线的五个子后,则算赢; ②如果手中的子全摆完,则移动棋盘上的子,每次棋只走一步; ③棋盘上的子不列五个就算输。 三、找棋友,分成组 可让学生自行找棋友,拼成三人一组或两人一组,三人一组的,其中一人可当裁判。 四、学生下五子棋 1.小组内可举行比赛,采用三局两胜制,决出优胜者。 2.请小棋手介绍取胜经验 3.结合活动情况评出本次小棋手

教学目标: 在老师帮助下认识五子棋的棋具,学会正确执子下子。 教学准备:五子棋棋具、图片 教学过程: 一、结合实物、图片认识五子棋的棋具 1.棋具包括棋盘和棋子。 2. 了解棋具历史:相传中华民族的祖先轩辕黄帝无意之中画下了十七条横线十条竖线,这无意中的发明造就出了五子棋。早在公元595年古人就用瓷来烧制了。 千百年来,人们用各种材质来制造围棋的棋子,如:玻璃、瓷器、玉、玛瑙、铜等等。 古代五子棋棋盘与围棋棋盘是通用的。五子棋棋子亦称“棋石”分黑、白两色,形状为扁圆形,有一面凸起或两面凸起等形状,厚度不超过厘米,直径为~厘米;一副棋子总数为225枚,其中黑子113枚,白子112枚。按质地的不同,可分为玻璃、陶瓷、塑料、智石、磁铁、蛤贝、烧料、水晶、玛瑙、玉石等棋子。 国内质量比较好的是云子,而日本常用的棋子是贝壳制作的。 3. 认识棋盘和棋子 棋盘:认识棋盘横竖线,交叉点。横向从左到右用a到o共十五个英语字母标出,竖向从下到上用1到15共十五个阿拉伯数字标出。棋盘上的横线和竖线共交叉形成了225个交叉点,棋子就落在棋盘的这些交叉点上。 棋盘上有5个比较特殊的交叉点,用小黑点标识出来,叫做星;中间的星叫天元,表示棋盘的正中心; 四周的4个星叫小星,表示棋盘的四个角落;星在棋盘上起一定的标示位置作用。 棋子:由黑白两种颜色组成。一人拿黑棋,另一个人拿白棋,黑棋先走,白棋后走。共有225个棋子,与交叉点的个数相同;其中黑棋113个,白棋112个,不过平时下棋棋子少些也是可以的。正确的拿棋子的方法是食指的指甲与中指的指肚儿夹住棋子。棋子落在棋盘的交叉点上,落下后不能移动,也不能吃子。 4.学生练习执子、下子,相互纠正。 二、学生分组下五子棋。 五子棋教育活动(三)

黑白棋游戏设计1[1]

VC程序设计课程设计 报告书 设计题目:黑白棋游戏设计 院系: 班级: 组别: 学号: 姓名: 起止日期: 指导教师:

目录 前言 (1) 1. 课程设计计划 (2) 2.需求分析 (3) 3.概要设计 (4) 4.详细设计 (5) 5.编码与测试 (13) 6.心得体会 (15) 参考文献 (16)

前言 黑白棋,也称反棋(Reversi)、奥赛罗棋(Othello),苹果棋,翻转棋。游戏通过相互翻转对方的棋子,最后以棋盘上谁的棋子多来判断胜负。它的游戏规则简单,因此上手很容易,但是它的变化又非常复杂。 起初,黑白棋在西方和日本很流行,近年来,黑白棋正逐步为中国玩家所接受,并深受喜爱。 本次我们组选择这个题目做大作业,一方面是巩固和提高以前所学的VC++的知识;另一方面是因为这可能是我们中的大多数人第一次完成一个软件的系统设计,选择一个中等难度且相对成熟的软件来设计既易于实现又留有一定的上升空间,符合我们的实际情况。 我们所设计的这种黑白棋游戏有几个特点:程序短小精悍,简洁明了;游戏界面美观,容易操作;功能丰富,趣味性强。

1. 课程设计计划 黑白棋游戏设计所完成的就是一个游戏软件系统。其一般的功能包括:开始新局,对弈方式选择,先手选择,棋力设置,限时设置,计算机演示,保存棋局,载入棋局,导出走棋信息,重温棋局,英雄榜,悔棋,设置属性,帮助信息,关于黑白棋的介绍等,要求设计一个黑白棋游戏软件,通过计算机实现各个功能。其具体设计要求为: 1、位图的导入和棋盘的生成 2、记录双方对弈时间的计时器与记录双方子数的计数器 3、选择人机对战与人人对战的函数及控制堆栈难度的主函数 4、实现悔棋功能的堆栈 我们对项目期望能实现 a 可以实现人机对弈。 b 棋力可调,分初级,中级,高级。 c 提示音功能,下错、下对有不同的提示音。 d 玩家遇到疑问,需要帮助时,给予一定的帮助 e 界面色彩友好,给人以良好的视觉冲击。 f 操作方便,容易上手。 本课程设计工作进度计划为: 表1 课程设计计划 本课程设计任务的分工:陈涛涛完成人机对战中的实现保存棋局、载入棋局、重温棋局、英雄榜、悔棋功能。本人完成人机对战中的实现开始,退出,帮助,难度设计,播放背景音乐功能。

汇编语言课程设计报告——实现加减乘除四则运算的计算器

汇编语言课程设计报告 ( 2011 -- 2012 年度第 2 学期) 实现加减乘除四则运算的计算器 专业 计算机科学与技术 学生姓名 班级 学号 指导教师 完成日期

目录 目录错误!未定义书签。 1 概述错误!未定义书签。 设计目的错误!未定义书签。 设计内容错误!未定义书签。 2 系统需求分析错误!未定义书签。 系统目标错误!未定义书签。 主体功能错误!未定义书签。 开发环境错误!未定义书签。 3 系统概要设计错误!未定义书签。 系统的功能模块划分错误!未定义书签。系统流程图错误!未定义书签。 4系统详细设计错误!未定义书签。 5 测试错误!未定义书签。 测试方案错误!未定义书签。 测试结果错误!未定义书签。 6 小结错误!未定义书签。 参考文献错误!未定义书签。 附录错误!未定义书签。 附录源程序清单错误!未定义书签。

实现加减乘除四则运算的计算器 1 概述 设计目的 本课程设计是在学完教学大纲规定的全部内容、完成所有实践环节的基础上,旨在深化学生学习的汇编语言课程基本知识,进一步掌握汇编语言程序设计方法,提高分析问题、解决问题的综合应用能力。 设计内容 能实现加、减、乘、除的计算;该程序接受的是16进制数;执行时,需要在文件名后直接跟上计算表达式,如在命令提示符下执行结果如下: c:\tasm>js 3+2 5 2 系统需求分析 系统目标 本次汇编语言课程设计的最终目的是要实现一个简单加减乘除四则运算的计算器,要求编写一个程序,每运行一次可执行程序,可以实现数的加减乘除四则运算。比如,十进制数的加减乘除四则运算。我们曾经学习过两个具体数字进行加减法运算,但是对于简单计算器用汇编语言实现难点在于这两个要做运算的数是未知的,是由自己调用中断输入到屏幕上并要用程序存储起来的数,然后才能对这两个数进行运算,而且做的是加法运算、减法运算乘法运算还是除法运算也未可知,为此我们还要判断用户所输入的运算是四则运算中的哪一个运算。此外,运算过程中的进位或是借位,选择用什么样的方式进行输出,如何实现清屏等也是要解决的问题。 主体功能 系统分析主要包括设计的功能分析和系统的流程,功能分析放在首位,每一个软件都要能满足一定的功能才有使用价值。根据功能需求来创建应用程序。 本设计的功能如下: 1、输入2个数,先判断是加减运算还是乘除运算,再进行计算 2、判断符号是否为运算符 3、回车为换行符 4、用十进制或十六进制输出运算结果 开发环境 集成环境 3 系统概要设计 系统的功能模块划分 本题目实现的模块图如图3-1所示

幼儿园大班数学教案:黑白棋大赛

幼儿园大班数学教案:黑白棋大赛 Teaching plan of big class mathematics in kindergarten: black a nd white chess competition

幼儿园大班数学教案:黑白棋大赛 前言:本文档根据题材书写内容要求展开,具有实践指导意义,适用于组织或个人。便于学习和使用,本文档下载后内容可按需编辑修改及打印。 活动目的: 1、通过“黑白棋大赛”帮助幼儿学习6的加法。 2、初步培养孩子们的合作精神。 活动准备: 1、大棋谱两副,黑白棋子若干。 2、红、黄、绿、紫队标志一份,每队准备一副棋谱,若干黑白子。 3、数字卡片“6”以内加减算式若干。 活动过程: 一、分队推选小队长 “分成四队,每队4个孩子,自己选出小队长” 二、黑白棋对抗赛

1、规则:每队选2名小队员先后参加比赛,第一名队员用黑子,第二名队员用白子,要求黑子和白子合起来我给你的数。 2、幼儿比赛,教师总结比赛情况。 三、合作摆“6” 1、规则:请一组的小朋友合作摆“6”,一行一种摆法列一道算式,要求算式不能重复,比比看规定时间哪一队找到的6的加法算式最多,最正确。(幼儿摆“6”) 2、相互检查 现在请你们相互检查,先看看他们列了几道算式,是否正确,如果有错错再哪?每队选一位小朋友告诉大家结果。(总结比赛情况) 3、“6子通”抢答赛 我这里有一张大棋谱,里面藏着许多6子通的6的加法算式,能能找到吗? 4、总结得分评出第一名。 五、个人竞赛:猜猜看

1、规则:我给你5个数字“ 2、5、1、 3、4”请你用三十秒的时间记住,然后我把数字翻过去,请你指出和2加起来是6的数。 2、幼儿比赛,答对发奖。 六、延伸 刚才,我们想了许多办法使黑子和白子合起来是6,那么要他们合起来是7,该怎么摆棋子呢?我们到教室里去摆摆看好不好啊? -------- Designed By JinTai College ---------

嵌入式系统黑白棋课程设计报告

嵌入式系统课程设计报告——黑白棋程序设计 学院计算机 专业计算机 教师 学生 学号 2013年x月xx 日

1 设计目的 利用VS2005编程实现基于WINCE的8*8大小的黑白棋程序设计。在WINCE端运行 2、开发环境 软件: Visual Studio 2005 Vc++6.0 3、设计任务及要求 黑白棋棋盘大小为8*8,实现人人对战即可。 设计要求:利用二维数组标记棋盘,下子后判断横向、纵向或对角有无相同颜色棋子,若有则该线段中所有棋子置为该颜色。棋盘所有棋子填满后游戏结束。棋子数多者胜 4、实现过程 1、设计初始化棋盘函数

2、复制棋盘函数 3、显示棋盘函数 4、选择下棋类型 4、计算可落子的位置个数,及该位置落子后翻过的棋子的个数 5、设置棋子的稳定性(计算得分的依据),空白处除外 6、评价棋手得分 4.1 硬件 WINDOWS操作平台利用VC++实现黑白棋游戏设计 Microsoft Visual Studio 2005 4.2驱动程序设计 WinCE界面 4.3用户应用程序设计 #include using namespace std; int const MAX=10000; enum Color { WHITE=-1,BLANK,BLACK //是否能落子 //黑子 }; 主函数

int main(void) /////////////主函数 { Chessboard board; Chessboard *pBoard=&board; enum Color player=BLANK,nowPlayer=BLACK;//声明两个enum枚举变量player,nowplayer Choice choice; Choice *pChoice=&choice; int dif=-1,step=4,success=0; char restart=' '; start: ///////////////////////////////////////////// player=BLANK; ///////////////////////////////////////////// nowPlayer=BLACK; dif=-1; step=4; restart=' '; int b; cout<<"输入1为人人对战,否则为人机对战:"; cin>>b; if(b==1){ /////////人人对战//////////// while(player!=WHITE && player!=BLACK) { cout<<"\n请选择执黑棋(○)(1),或执白棋(●)(-1)\t执黑棋先下:\n"; scanf("%d",&player);/////////////////////////////////////////////////////// ////// if(player!=WHITE && player!=BLACK) { cout<<"黑白设置错误.\n"; } } board.initChessboard(pBoard); /////////初始化棋盘/////////// while(step<64) /* 棋盘上未下满64子 */ { char *nowPlayerName=""; if(nowPlayer==BLACK) { nowPlayerName="黑棋(○)"; } else if(nowPlayer==WHITE)

浅析语言教学的任务型课程设计,长春教育学院学报.doc

浅析语言教学的任务型课程设计,长春教育 学院学报, 浅析语言教学的任务型课程设计曹顺娣摘要:20世纪80年代以来,作为一种有效的教学模式,任务型教学已被许多语言研究者和教师广泛接受,但与此相关的教学研究与实践一直局限于讨论教学方法。本文分析了任务型课程设计的重要性和理论基础,探讨了如何根据詹姆斯布朗(James Brown)提出的六步骤设计一个典型的任务型课程。 关键词:语言教学,任务型教学,课程设计 Abstract: Since 1980s, task-based teaching has been widely accepted by many language researchers and teachers as an effective teaching style, yet the research and teaching practice has been limited to discussion on teaching approaches and methods only. The thesis analyzes the importance of designing task-based curriculums and the theoretical basis of task-based curriculum design. Then it discusses how to design a typical task-based curriculum following the six steps put forward by James Brown. Key words: Language teaching, Task-based teaching, Curriculum design 1. 任务型教学简介 20世纪80年代以来,任务型教学越来越广泛地被语言教师和研究者接受,许多专家学者在这方面做了大量的实践和研究。但是这些实践和研究一直局限于对教学方法的探讨,而任务型课程设计及教材开发则相对滞后,相应的评价方法也没有得到

汇编语言-课程设计1

) 汇编语言课程实验报告 实验名称 课程设计1 实验环境 硬件平台:Intel Core i5-3210M 操作系统:DOSBox in Windows 软件工具:Turbo C , Debug, MASM 实验内容 《 将实验7中的Power idea公司的数据按照下图所示的格式在屏幕上显示出来。 实验步骤 1.要完成这个实验,首先我们需要编写三个子程序。第一个子程序是可以显示字符串到屏 幕的程序,其汇编代码如下: ;名称:show_str

;功能:在屏幕的指定位置,用指定颜色,显示一个用0结尾的字符串 ;参数:(dh)=行号,(dl)=列号(取值范围0~80),(cl)=颜色,ds:si:该字符串的首地址 ;返回:显示在屏幕上 ¥ show_str: push ax push cx push dx push es push si push di mov ax,0b800h - mov es,ax mov al,160 mul dh add dl,dl mov dh,0 add ax,dx mov di,ax mov ah,cl . show_str_x: mov cl,ds:[si] mov ch,0 jcxz show_str_f mov al,cl mov es:[di],ax inc si inc di 【 inc di jmp show_str_x show_str_f: pop di pop si pop es pop dx pop cx } pop ax ret 2.第二个程序是将word型数据转换为字符串,这样我们才能调用第一个程序将其打印出

黑白棋游戏课程设计

黑白棋程序源代码: #include "graphics.h" #include "stdio.h" #include "stdlib.h" #include "conio.h" #include "dos.h" #include "math.h" #define LEFT 0x4b00 #define RIGHT 0x4d00 #define DOWN 0x5000 #define UP 0x4800 #define ESC 0x011b #define ENTER 0x1c0d #define F1 0x3b00 #define F2 0x3c00 #define F3 0x3d00 #define F4 0x3e00 int a[8][8]={0},key,score1,score2;/*具体分数以及按键与存放棋子的变量*/ char playone[3],playtwo[3];/*两个人的得分转换成字符串输出*/ void playtoplay(void);/*人人对战函数*/ void DrawQp1(void); void DrawQp2(void); void DrawQp(void);/*画棋盘函数*/ void SetPlayColor(int x);/*设置棋子第一次的颜色*/ void MoveColor(int x,int y);/*恢复原来棋盘状态*/ int QpChange(int x,int y,int z);/*判断棋盘的变化*/ void DoScore(void);/*处理分数*/ void PrintScore(int n);/*输出成绩*/

英语课程设计

初中英语教学设计与反思 上传: 刘萍更新时间:2012-5-28 12:55:33 基本信息 课题:七年级英语第一单元第三个话题 c部分 工作单位:江西省于都县固院初中刘萍 教材分析 七年级英语第一单元第三个话题 c部分。这一课可分为两部分,一是阅读课文,阅读课教学是英语教学重要一环,如何培养学生良好阅读习惯和阅读方法,提高阅读能力,这正是素质教育中对英语教学的要求。即要求学生尽可能的获取大量信息,开阔视野,提高兴趣,扩大词汇量,在丰富知识的同时提高应用语言的能力。二是学习名词的复数形式以及句子的单复数变化。本教材倡导语言教学的交互性和实用性,为学生提供了自然的、有意义的语言环境。本单元三个话题分别为:1. nice to meet you! 2. where are you from? 3. what class are you in? 前两个话题主要是学习问候、介绍、感谢和道别等句型,学习介绍自己,了解他人信息,如电话号码、年龄、国籍等,学习十以内的数字。而即将要讲授第三个话题,我们将继续学习如何介绍自己,懂得怎样了解他人的年龄以及所在年级、班级,谈论电话号码等;学习二十以内的数字;初步学习可数名词的单复数及其使用。这个话题是以前两个为基础,从了解姓名到谈论来自哪里,再到谈论年龄、班级、电话号码等,用层层递进的方式逐步扩大和加深,具有很强的

逻辑性和整体感。 教学目标 1、知识目标: 帮助学生掌握三会、四会单词,如:year now school same but friend these egg those bus等; 同时让学生掌握部分可数名词的复数形式以及句子的单复数变化。 2. 能力目标: 对学生良好的阅读习惯和阅读方法进行启蒙;同时让学生懂得利用信息提示填写表格,或者利用信息介绍一个人。 3. 情感目标: 通过向同学朋友咨询了解个人信息,学会与同学和睦共处、互相关心、得体交流,懂得待人以善以诚的道理。 教学重点与难点 教学重点: 在于让学生初步懂得从段落文章中查找信息,学会模仿课文介绍自己或他人;后部分重点为可数名词以及句子的单数形式变化。 教学难点: 理解汉语和英语在表达复数上的差异。 教学过程 在课堂的整体设计上我主要遵循整体教学的思路,运用情景教学法和交际法,分以下五个主要步骤进行,即:复习、呈现、巩固、活动练习和作业。

c++五子棋课程设计报告

福建农林大学计算机与信息学院 课程设计报告 课程名称:面向对象程序设计课程设计 课程设计题目:五子棋 姓名: 系:计算机 专业:软件工程 年级: 学号: 指导教师: 职称: 年月日

福建农林大学计算机与信息学院计算机类课程设计报告结果评定

目录 1.设计目的 (4) 2.设计要求 (4) 3.设计方案 (4) 4.设计内容 (7) 4.1系统的主要结构和类结构 (7) 4.2 (2)五子棋类的结构 (7) 4.3⑶系统工作流程介绍.................................................... 7错误!未定义书签。⑷类的介绍. (8) 4.5 (5) 各个模块的介绍 (8) 4.6 (6)程序运行图示 (14) 5.总结 (16) 参考文献 (17)

(a)1.设计目的 (1)加深我对面向对象程序基本的理解和掌握。 (2)熟练掌握基本流程图的绘制。 (3)熟练visio的一些操作方法。 (4)能够在调试程序中快速发现并排除程序中的错误。 (5)提高面向对象程序语言解决实际中的问题的能力。 (b)2.设计要求 五子棋是玩家在游戏棋盘上逐个输入黑子或白子的坐标,因此游戏要求在DOS界面生成一个可供操作的棋盘。通过输入坐标完成对应落子情况,在输入过程中判断落子是否正确、是否有一方胜利等情况。编写代码可以在VC6.0下编译通过。游戏要能实现五子棋游戏的简单操作。程序中要体现面向对象思想。 (c)3.设计方案 (必须包含系统功能说明、用例图和类图) 一、用例图 落子 基于用户的用例图

步数用例图 系统用例图 1)输出棋盘界面菜单及图像2)开始进入控制3)黑白棋正确输入格式控制4)判断黑白输赢控制5)正确计数对羿步数及下一步所要走的棋盘界面

高级语言课程设计论文

青岛农业大学 理学与信息科学学院 高级语言课程设计报告 设计题目学生通讯录设计与实现 学生专业班级电子信息工程专业2012级02班 学生姓名(学号)刘涛(20123134) 设计小组其他同学姓名(学号)王博宸(20123190)于勐涛(20123294)周巧丽(20123288)周倩(20123287)邓楚玉(20120822) 指导教师孙华丽 完成时间2014.12.25 设计地点理信学院软件实验室 2014 年 12 月 25 日

学生通讯录设计与实现 一、课程设计目的和意义 高级语言课程设计是计算机科学与技术专业的主要实践性教学环节。其目的在于加深对面向对象程序设计语言程序设计理论和基本知识的理解,掌握使用C++语言进行面向对象程序设计的基本方法,提高运用面向对象知识解决实际问题的能力。为毕业设计和以后的工程实践打下良好的基础。该课程设计的意义也十分重大,它可以充分锻炼自己的逻辑思维,提升自己对编程语言的认识和运用,我在设计过程中充分的与其他的学科进行了整合,使自己加深了对程序语言的认识,自己的治学态度也得到了提升。 二、需求分析与设计 1.设计任务分析 设计任务为学生通讯录设计与实现。学生通讯录拥有以下几种功能:添加记录、查找记录、删除记录、修改记录。添加功能可以向数据库中追加数据,查找功能能够根据要求超找记录,删除能够删除数据库中的指定记录,修改功能能够修改制定记录的指定内容。 记录储存在文本数据库中,每个记录记录一个联系人的详细信息,记录内容分别为姓名、年龄、电话、邮箱、地址。 我们小组每个人都有明确的任务分工,本次课程设计我主要负责添加纪录模块的设计与实现。 该程序使用Python语言来进行设计。Python,是一种面向对象、解释型计算机程序设计语言,应用于设计各种各样的应用程序。Python在设计上坚持了清晰划一的风格,语法简洁而清晰,具有丰富和强大的类库,这使得Python成为一门易读、易维护,并且被大量用户所欢迎的、用途广泛的语言。 2.设计方案论证 程序通过调用4个函数来实现通讯录的4个模块功能,通过一个home()函数来实现主界面。 home()函数使用一个while循环,根据用户的输入来选定通讯录的功能。 addMes()函数用来添加记录,通过input()函数来获取用户的输入,将一个用户的记录写到一个字典对象中,然后将字典对象字符串化存储到数据库文件中。 findMes()函数用来查找记录,通过input()函数获取要查询的关键类型和关键字,通过字典的键-值映射来查询数据并输出到屏幕上。 delMes()函数用来删除记录,通过input()函数获取要删除的用户的用户名,在循环中通过字典的键-值映射找到要删除的记录,将其余的记录储存在一个list列表中,循环结束后再将列表重新写入数据库文件中。 changeMes()函数用来修改记录,通过input()函数获取要修改的关键类型和关键字,在循环中通过字典的键-值映射找到要修改的记录,将其值修改后与其他记录一同储存在一个list列表中,循环结束后再将列表重新写入数据库文件中。 几大模块功能相辅相成,利用Python语言函数进行纪录的添加,查找,删除和修改,共同实现学生通讯录的设计与实现。 三、设计代码 #!/usr/bin/python # -*- coding: cp936 -*- #Filename : 学生通讯录

(新)汇编语言课程设计四则运算

计算机与信息工程学院《汇编语言》课程设计四则运算器的设计 专业:计算机科学与技术 班级:控制11-2班 姓名: 倪天天 学号:2011025745 指导教师:郝维来 2013年6月28日

摘要 计算器是最简单的计算工具,简单计算器具有加、减、乘、除四项运算功能。想要用汇编语言实现简单的计算器,就必须通过对数据存储,寄存器的使用,加减乘除相关指令以及模块的调用等汇编语言知识进行运用,以实现一个基本功能完善,界面友好,操作简便易行的计算器。用汇编语言实现简单计算器还涉及到输入输出模块的设计,加减乘除运算的判断以及退出程序的判断的设计。通过对各种指令的合理使用,设计各个功能模块。当实现各个程序模块后,通过程序的调用最终实现一个简单的计算器。 关键词:计算器,汇编语言,四则运算,功能模块

Abstract Calculator is the easiest calculation tools, a simple calculator with addition, subtraction, multiplication, division four arithmetic functions. Want to use assembly language to achieve a simple calculator, you must pass on the data storage, register usage, addition, subtraction, and related instructions such as assembly language module calls the use of knowledge in order to achieve a basic functional, user-friendly, easy to operate easy calculator. Using assembly language to achieve a simple calculator also involves the design of input and output modules, the judgment of arithmetic operations and exit the program to judge design. Through the rational use of various commands, design various functional modules. When implementing various program modules, through a call to the ultimate realization of the program a simple calculator. Keyword:Calculator, assembly language, four arithmetic, functional modules

新整理大班数学活动黑白棋大赛教案反思

大班数学活动黑白棋大赛教案反思 活动目标: 1、通过“黑白棋大赛”帮助幼儿学习6的加法。 2、初步培养孩子们的合作精神。 3、培养幼儿比较和判断的能力。 4、引导幼儿积极与材料互动,体验数学活动的乐趣。 5、发展幼儿逻辑思维能力。 活动准备: 1、大棋谱两副,黑白棋子若干。 2、红、黄、绿、紫队标志一份,每队准备一副棋谱,若干黑白子。 3、数字卡片“6”以内加减算式若干。 活动过程: 一、分队推选小队长 “分成四队,每队4个孩子,自己选出小队长” 二、黑白棋对抗赛 1、规则:每队选2名小队员先后参加比赛,第一名队员用黑子,第二名队员用白子,要求黑子和白子合起来我给你的数。 2、幼儿比赛,教师总结比赛情况。 三、合作摆“6”

1、规则:请一组的小朋友合作摆“6”,一行一种摆法列一道算式,要求算式不能重复,比比看规定时间哪一队找到的6的加法算式最多,最正确。(幼儿摆“6”) 2、相互检查 现在请你们相互检查,先看看他们列了几道算式,是否正确,如果有错错再哪?每队选一位小朋友告诉大家结果。(总结比赛情况) 3、“6子通”抢答赛 我这里有一张大棋谱,里面藏着许多6子通的6的加法算式,能能找到吗? 4、总结得分评出第一名。 四、个人竞赛:猜猜看 1、规则:我给你5个数字“ 2、5、1、 3、4”请你用三十秒的时间记住,然后我把数字翻过去,请你指出和2加起来是6的.数。 2、幼儿比赛,答对发奖。 五、延伸 刚才,我们想了许多办法使黑子和白子合起来是6,那么要他们合起来是7,该怎么摆棋子呢?我们到教室里去摆摆看好不好啊? 活动反思: 数学能为幼儿动手、动口、动脑,多种感官参与学习活动创

五子棋课程设计报告

单 位 分院(系) 专 业 学 号 学生姓名 指导教师 完成日期 2011 年 05 月 日 摘 要 五子棋的历史:五子棋是一种两人对弈的纯策略型棋类游戏,是起源于中国古代 的传统黑白棋种之一.发展于日本,流行于欧美.容易上手,老少皆宜,而且趣味横生,引人入胜;不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性. 五子棋相传起源于四千多年前的尧帝时期,比围棋的历史还要悠久,可能早在“尧造围棋”之前,民间就已有五子棋游戏.有关早期五子棋的文史资料与围棋有相似之处,因为古代五子棋的棋具与围棋是完全相同的.在上古的神话传说中有“女娲造人,伏羲做棋”一说,《增山海经》中记载:“休舆之山有石焉,名曰帝台之棋,五色而文状鹑卵.”李善注引三国魏邯郸淳《艺经》中曰:“棋局,纵横各十七道,合二百八十九道,白黑棋子,各一百五十枚”.这段虽没明讲是何种棋类,但至少知道远古就以漂亮的石头为棋子.因而规则简单的五子棋也可能出自当时,并是用石子作棋子.亦有传说,五子棋最初流行于少数民族地区,以后渐渐演变成围棋并在炎黄子孙后代中遍及开来. 程序说明:本程序是一款棋类益智游戏程序,是用WIN-TC 编写在WINDOWS 系统下运行的娱乐游戏.本程序可以实现人人对战,操作采用键盘上的上下左右键控制棋子的上下左右移动,由空格键控制下棋,双方都可通过ESC 键终止游戏. 石家庄铁道大学课程设计 五子棋 课程设计题目

游戏开始后,红、白双方轮流下棋,程序会根据双方下棋的先后顺序自动显示不同颜色的棋子,提示当前下棋的棋手,任何一方由五子连成一线时,游戏结束,结束时会显示对战双方胜负情况. 关键词:五子棋游戏应用程序,C语言,图形函数 目录 第1章选题的意义2 意义2 设计思路 2 系统的基本要求3 第1章选题的意义 意义 通过游戏过程增加编程的兴趣,提高编程水平.编制该程序我对以下的知识点进行的巩固和掌握:1.数组元素为结构体的数组应用.2.全局变量应用.3.按键的处理.4.数组元素与蛇、食物的对应关系.5.图形方式等等.加深对所学知识的理解与掌握,增强自己对所学知识解决实际问题的能力,为以后的程序开发打下基础. 设计思路 棋盘设计为18×18格,初始状态光标在棋盘的中央,玩家1先走,轮流落子,当一方连成五子或下满棋盘时,游戏结束(连成五子的一方获胜,下满棋盘为和棋).当游戏一方胜利后显示胜利信息.从程序表面看,这是一个二维平面图,所以数据用二维数组来表示,数组两个下标可以表示棋盘上的位置,数组元素的值代表棋格上的状态,共有三种情况,分别是0代表空格,1代表白棋,2代表黑棋.这样程序的主要工作是接收棋手按键操作,棋手用Up、Down、Left、Right控制光标移动,空格键表示落子.一旦接收到空格键,说明棋手落子,先判断是否是有效位置,也就是说已经有棋子的位置不能重叠

相关主题
文本预览
相关文档 最新文档