搜档网
当前位置:搜档网 › c语言课程设计中国象棋

c语言课程设计中国象棋

c语言课程设计中国象棋
c语言课程设计中国象棋

南昌航空大学信息工程学院

课程设计说明书

课程名称: C语言课程设计

设计题目:中国象棋

专业:计算机科学与技术班级:______

姓名:学号:___

评分:指导教师:

2012 年 6月26日

目录Ⅰ摘要

Ⅱ前言

Ⅲ功能描述

Ⅳ配置要求

Ⅴ总体设计(个人负责模块)

一、功能模块设计

二、数据结构设计

三、函数功能描述

四、代码实现

五、运行结果

Ⅵ小结

Ⅰ摘要

中国象棋是一款很古老、很受欢迎的游戏,其开发过程有一定的技巧和方法,其中

涉及到函数调用、二维数组、键盘操作等方面的知识。本游戏的开发者需要基本掌握复杂情况下函数的编写以及调用能力、二维数组的运用能力、复杂算法的设计能力等。

Ⅱ前言

中国象棋是一款经典的智力游戏,具有悠久的历史,早在战国时期就有了关于中国象棋的记载,经过几千年的流传,目前仍然是中国家喻户晓的棋类游戏,颇受欢迎。因此,我们决定借这次机会通过用C语言将中国象棋实现出来,当然,我们也借鉴了前人的一些技巧经验。有不足之处,希望老师能够谅解,我们以后将会再接再厉。

Ⅲ功能描述

本人负责棋子帅(将)、象(相)、士(仕)、卒(兵)子函数的编写,它们的所能实现的功能分别是:

(1)帅(将):控制棋子帅(将)能符合现实情况下的游戏规则而行走,例如帅(将)只能在规定范围内向上或向左、右、下行走一格,最后返回一个行走正确或行走错误的数据。

(2)象(相):控制棋子象(相)能符合现实情况下的游戏规则而行走,例如象(相)只能在自己领域内走“田”字格,且中间不能有其他棋子阻挡,最后返回一个行走正确或行走错误的数据。

(3)士(仕):控制棋子士(仕)能符合现实情况下的游戏规则而行走,例如士(仕)只能在规定范围内斜着跨一格,然后返回一个行走正确或行走错误的数据。

(4)卒(兵):控制棋子卒(兵)能符合现实情况下的游戏规则而行走,例如卒(兵)只能一次走一格,同时在自己领域内只能向前走,而在对方领域内可向前、左、右方向走一格,最后返回一个行走正确或行走错误的数据。

Ⅳ配置要求

(1) 硬件配置

CPU :≥Pentium III 600 内存:≥64MB

硬盘剩余空间:≥128MB (2) 软件环境

Visual C++6.0及其以上版本

Ⅴ 总体设计(个人负责模块)

本人为小组成员,负责的模块是:棋子帅(将)、象(相)、士(仕)、卒(兵)子函数的设计与编写。

一、系统模块设计

1、系统模块图

本人所负责的模块共有四个小项目组成,分别是控制棋子正确行走的帅(将)、象(相)、士(仕)、卒(兵)子函数。 (1)帅(将)

该子函数主要负责控制维持棋子帅(将)的正确行走,返回正确或错误的数据信息。 (2)象(相)

该子函数主要负责控制维持棋子象(相)的正确行走,返回正确或错误的数据信息。 (3)士(仕)

该子函数主要负责控制维持棋子士(仕)的正确行走,返回正确或错误的数据信息。 (4)卒(兵)

该子函数主要负责控制维持棋子卒(兵)的正确行走,返回正确或错误的数据信息。

调 调

用 调 调 调

用 用

图1. 系统模块图

2、任务执行流程图

在玩家进行游戏移动棋子帅(将)、象(相)、士(仕)、卒(兵)的时候,主函数调用这几个子函数的执行流程图均为:

图2. 任务执行流程图

二、数据结构设计

四个子函数均定义了局部变量x1,x2,y1,y2,table[][10],通过主函数调用将玩家从键盘输入的值传递给x1,x2,y1,y2. table[][10]是在主函数中定义的一个二维数组,在子函数中同样控制棋盘的输出。

三、函数功能描述

1.chekshuai ( )

函数原型:int checkshuai(int x1,int y1,int x2,int y2,int table[][10]) checkshuai( )函数控制棋子帅(将)的正确行走,通过主函数将初始位置的坐标x1,y1与目标位置的坐标x2,y2传递给该子函数,从而判别帅(将)的行走是否符合规则。

2.checkxiang ( )

函数原型:int checkxiang(int x1,int y1,int x2,int y2,int table[][10])

checkxiang( )函数控制棋子象(相)的正确行走,通过主函数将初始位置的坐标x1,y1与目标位置的坐标x2,y2传递给该子函数,从而判别象(相)的行走是否符合规则。

3.checkshi ( )

函数原型:int checkshi(int x1,int y1,int x2,int y2,int table[][10])

checkshi( )函数控制棋子士(仕)的正确行走,通过主函数将初始位置的坐标x1,y1与目标位置的坐标x2,y2传递给该子函数,从而判别士(仕)的行走是否符合规则。

4.checkbing ( )

函数原型:int checkbing(int x1,int y1,int x2,int y2,int table[][10])

checkbing( )函数控制棋子士(仕)的正确行走,通过主函数将初始位置的坐标x1,y1与目标位置的坐标x2,y2传递给该子函数,从而判别士(仕)的行走是否符合规则。

四、代码实现

1. 帅(将)

int checkshuai(int x1,int y1,int x2,int y2,int table[][10])

{

if ((x2<8 || x2>10 || y2<4 ||y2>6)&&(x2<1 || x2>3 || y2<4|| y2>6))

//控制棋子的行走范围是在自己领域的九宫格内

{

printf("\n将或者帅是不能移出九宫区域的,重新输入吧!\n");

return 0; // 规则错误后出现提示信息并且返回0进行重新输入

}

else if ((abs(x2-x1)==1)&&(abs(y2-y1)==1))

// 控制棋子的行走只能是直线

{

printf("\n将或者帅是不能走斜线的哦,重新输入吧!\n");

return 0; // 规则错误后出现提示信息并且返回0进行重新输入

}

else if (table[x2][y2]*table[x1][y1]>0)

// 控制棋子只能覆盖对方棋子以分清敌我

{

printf("\n自己不能吃掉自己呀,重新输入吧!\n");

return 0; // 规则错误后出现提示信息并且返回0进行重新输入}

else if ((abs(x2-x1)>=2)||(abs(y2-y1)>=2))

// 控制棋子每次只能跨越一格

{

printf("\n将或者帅不能一次走多格呀,重新输入吧!\n");

return 0; // 规则错误后出现提示信息并且返回0进行重新输入}

else return 1; // 若未遇到错误则返回1继续进行游戏

}

2. 象(相)

int checkxiang(int x1,int y1,int x2,int y2,int table[][10])

{

if ((abs(x2-x1))!=2 || (abs(y2-y1))!=2)

// 控制棋子的行走路线为田字格对角线

{

printf("\n相(象)只能走田字呀,重新输入吧!\n");

return 0; // 规则错误后出现提示信息并且返回0进行重新输入}

else if ((table[x1][y1]>0 &&x2>5)||(table[x1][y1]<0 &&x2<5)) // 控制棋子只能在自己领域内移动

{

printf("\n相(象)不能渡过楚河汉界呀,重新输入吧!\n");

return 0; // 规则错误后出现提示信息并且返回0进行重新输入}

else if (table[(x1+x2)/2][(y1+y2)/2]!=0)

// 当棋子移动路径上有其他棋子阻挡时棋子不能移动

{

printf("\n您要移动的路径上有其他棋挡着呢,不能移动,重新输入吧!\n"); return 0; // 规则错误后出现提示信息并且返回0进行重新输入

}

else if (table[x2][y2]*table[x1][y1]>0)

// 控制棋子只能覆盖对方棋子以分清敌我

{

printf("\n自己不能吃掉自己呀,重新输入吧!\n");

return 0; // 规则错误后出现提示信息并且返回0进行重新输入

}

else return 1; // 若未遇到错误则返回1继续进行游戏

}

3. 士(仕)

int checkshi(int x1,int y1,int x2,int y2,int table[][10])

{

if ((x2<8 || x2>10 || y2<4 ||y2>6)&&(x2<1 || x2>3 || y2<4|| y2>6)) //控制棋子的行走范围是在自己领域的九宫格内

{

printf("\n士或者仕是不能移出九宫区域的,重新输入吧!\n");

return 0; // 规则错误后出现提示信息并且返回0进行重新输入

}

else if (table[x2][y2]*table[x1][y1]>0)

// 控制棋子只能覆盖对方棋子以分清敌我

{

printf("\n自己不能吃掉自己呀,重新输入吧!\n");

return 0; // 规则错误后出现提示信息并且返回0进行重新输入

}

else if ((abs(x2-x1)>=2)||(abs(y2-y1)>=2))

// 控制棋子每次只能跨越一格

{

printf("\n士或者仕不能一次走多格呀,重新输入吧!\n");

return 0; // 规则错误后出现提示信息并且返回0进行重新输入}

else if (!((abs(x2-x1)==1)&&(abs(y2-y1)==1)))

// 控制棋子行走路径只能是沿着一格的对角线

{

printf("\n士或者仕只能斜着走呀,重新输入吧!\n");

return 0; // 规则错误后出现提示信息并且返回0进行重新输入}

else return 1; // 若未遇到错误则返回1继续进行游戏

}

4. 卒(兵)

int checkbing(int x1,int y1,int x2,int y2, int table[][10])

{

if(table[x1][y1]>0)

// 兵(卒)是否是甲方棋子(在上方)

{

if(table[x2][y2]>0)

// 控制棋子只能覆盖对方棋子以分清敌我

{

printf("\n拜托,不能自己吃自己!!!\n");

return 0; // 规则错误后出现提示信息并且返回0进行重新输入}

if(x1<6)

// 此时兵(卒)没过河

{

if((y1==y2)&&(x2-x1==1))

// 控制棋子只能向前走

{

return 1; // 若符合规则则继续游戏

}

else

{

printf("\n兵(卒)过河前只能向前走,重新输入吧!\n");

return 0; // 规则错误后出现提示信息并且返回0进行重新输入

}

}

else

// 若此时兵(卒)已过河

{

if(((y1==y2)&&(x2-x1==1))||((y1-y2==1)&&(x2==x1))||((y2-y1==1)&&(x2==x1))) //控制棋子过河后只能向前或者向左、右移动

{

return 1; // 若符合规则则继续游戏

}

else

{

printf("\n兵(卒)过河后只能向前走或者平移,不能后退,重新输入吧!\n"); return 0; // 规则错误后出现提示信息并且返回0进行重新输入

}

}

}

else

//判断兵是否在乙方(在下方)

{

if(table[x2][y2]<0)

// 控制棋子只能覆盖对方棋子以分清敌我

{

printf("\n拜托,自己不能吃自己!!!\n");

return 0; // 规则错误后出现提示信息并且返回0进行重新输入

}

if(x1>5)

// 如果兵(卒)没过河

{

if((y1==y2)&&(x1-x2==1))

// 控制棋子只能向前走

return 1; // 若符合规则则继续游戏

else

{

printf("\n兵(卒)过河前只能向前走,重新输入吧!\n");

return 0; // 规则错误后出现提示信息并且返回0进行重新输入

}

}

else

// 如果兵(卒)已过河

{

if(((y1==y2)&&(x1-x2==1))||((y1-y2==1)&&(x2==x1))||((y2-y1==1)&&(x2==x1))) //控制棋子过河后只能向前或者向左、右移动

return 1; // 若符合规则则继续游戏

else

{

printf("\n兵(卒)过河后只能向前走或者平移,不能后退,重新输入吧!\n");

return 0; // 规则错误后出现提示信息并且返回0进行重新输入

}

}

}

}

五、运行结果

1、游戏进入初始界面

进入游戏后显示的初始界面截图如下图:

图3. 游戏初始界面

2、游戏进行中的界面

如下显示了游戏进行中的界面截图:

图4. 游戏进行过程中界面3、游戏结束

完成游戏后结束的界面截图:

图5.游戏结束界面

Ⅵ小结

两周的课程设计结束了,这次的课程设计不仅检验了我们所学的知识,同时也培养了大家如何去把一件事情认认真真的做好。在整个设计过程中,我们互相讨论、互相学习、互相监督。

C语言程序设计是一门基础性极强的计算机语言,它具有功能丰富、表达能力强、使用灵活方便、应用面广、目标程序效率高、可移植性好,既具有高级语言的优点,又具有低级语言的许多特点,既适于编写系统软件,又能方便的用来编写应用软件。因此作为理工科院校的大学生,学好、用好C语言这个工具是一项最基本的要求,也是为日后的工作打下良好的基础。

通过这次课程设计,我们都熟练掌握了函数调用以及二维数组、多分支结构、循环结构等的运用,其他很多方面也有所提高。

中国象棋源代码Java程序

import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.util.*; import java.io.*; public class Chess{ public static void main(String args[]){ new ChessMainFrame("中国象棋:观棋不语真君子,棋死无悔大丈夫"); } } class ChessMainFrame extends JFrame implements ActionListener,MouseListener,Runnable{ //玩家 JLabel play[] = new JLabel[32]; //棋盘 JLabel image; //窗格 Container con; //工具栏 JToolBar jmain; //重新开始 JButton anew; //悔棋 JButton repent; //退出 JButton exit; //当前信息 JLabel text; //保存当前操作 Vector Var; //规则类对象(使于调用方法) ChessRule rule; /** ** 单击棋子 ** chessManClick = true 闪烁棋子并给线程响应 ** chessManClick = false 吃棋子停止闪烁并给线程响应 */ boolean chessManClick;

/** ** 控制玩家走棋 ** chessPlayClick=1 黑棋走棋 ** chessPlayClick=2 红棋走棋默认红棋 ** chessPlayClick=3 双方都不能走棋 */ int chessPlayClick=2; //控制棋子闪烁的线程 Thread tmain; //把第一次的单击棋子给线程响应 static int Man,i; ChessMainFrame(){ new ChessMainFrame("中国象棋"); } /** ** 构造函数 ** 初始化图形用户界面 */ ChessMainFrame(String Title){ //获行客格引用 con = this.getContentPane(); con.setLayout(null); //实例化规则类 rule = new ChessRule(); Var = new Vector(); //创建工具栏 jmain = new JToolBar(); text = new JLabel("欢迎使用象棋对弈系统"); //当鼠标放上显示信息 text.setToolTipText("信息提示"); anew = new JButton(" 新游戏 "); anew.setToolTipText("重新开始新的一局"); exit = new JButton(" 退出 "); exit.setToolTipText("退出象棋程序程序"); repent = new JButton(" 悔棋 "); repent.setToolTipText("返回到上次走棋的位置"); //把组件添加到工具栏 jmain.setLayout(new GridLayout(0,4)); jmain.add(anew);

中国象棋(代码)

中国象棋(web版源代码) 程序: using System; using System.Collections; using System.Configuration; using System.Data; using System.Linq; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Xml.Linq; using System.Data.SqlClient; namespace WebApplication1 {

public partial class WebForm1 : System.Web.UI.Page { int tru = 20; int fals = 40; public ImageButton[,] _Image=new ImageButton[11,10]; //将上一次点击点的坐标保存到数据库中的lastx和lasty public void SaveToLast() { if (Session["user"].ToString() == "red" && _GetUserState(Session["user"].ToString()) == 20) { int x, y, lastx, lasty; x = Getpointx(); y = Getpointy(); lastx = x; lasty = y; Updatalastx(lastx); Updatalasty(lasty); } if (Session["user"].ToString() == "black" && _GetUserState(Session["user"].ToString()) == 20) { int x, y, lastx, lasty; x = Getpointx(); y = Getpointy(); lastx = x; lasty = y; Updatalastx(lastx); Updatalasty(lasty); } } //将棋盘上所有棋子图片显示到棋盘上 private void _Drawqizi() { //_Init(); int i,j,k; if (_GetUserState("red") != 0 && _GetUserState("black") != 0)

中国象棋源代码-C语言小程序

*--------------------chess.c----------------------*/ #include "dos.h" #include "stdio.h" /*----------------------------------------------------*/ #define RED 7 #define BLACK 14 #define true 1 #define false 0 #define SELECT 0 #define MOVE 1 #define RED_UP 0x1100 #define RED_DOWN 0x1f00 #define RED_LEFT 0x1e00 #define RED_RIGHT 0x2000 #define RED_DO 0x3900 #define RED_UNDO 0x1000 #define BLACK_UP 0x4800 #define BLACK_DOWN 0x5000 #define BLACK_LEFT 0x4b00 #define BLACK_RIGHT 0x4d00 #define BLACK_DO 0x1c00 #define BLACK_UNDO 0x2b00 #define ESCAPE 0x0100 #define RED_JU 1 #define RED_MA 2 #define RED_XIANG 3 #define RED_SHI 4 #define RED_JIANG 5 #define RED_PAO 6 #define RED_BIN 7 #define BLACK_JU 8 #define BLACK_MA 9 #define BLACK_XIANG 10 #define BLACK_SHI 11 #define BLACK_JIANG 12 #define BLACK_PAO 13 #define BLACK_BIN 14 /*----------------------------------------------------*/ int firsttime=1; int savemode;

JAVA课程设计 五子棋

攀枝花学院课程业设计 五子棋 学生姓名: 学号: 所在院(系):数学院计算机学院专业:信息与计算科学指导教师:讲师 二〇一四年六月 攀枝花学院教务处制

攀枝花学院本科学生课程设计任务书 注:任务书由指导教师填写。

摘要 五子棋作为一类棋类竞技运动,现在很流行,很多人把它作为一类开发智力的一种游戏,锻炼人的思维。这次课题主要是完成人机对战,在对战中电脑根据人的思维做出相应的反应,电脑对战中通过深度的搜索,使得自身有更大的胜算,估值计算也是一种方法,可以提高电脑的智能度。分析模块中影响智能的因素也不少,通过节点比较与节点连接后的结果做出估计提高智能,了解递归算法、电脑学习等对此有很大帮助。算法是程序的灵魂,一旦算法正确那么程序将很好。不同的人工智能将会有不同的帮助,多去了解将更能提高智能程度。五子棋是我国的一门文化,这将使得它更受世界人们的欢迎。有助我国文化发展。 关键词五子棋,智能,算法,模块,人机对战

目录 1 需求分析 (1) 1.1需求来源 (1) 1.2设计目的 (1) 2 功能需求分析 (1) 2.1功能需求 (1) 3 设计与实现 (2) 3.1设计思想 (2) 3.2系统模块结构 (2) 3.3流程图 (2) 4 概要设计 (4) 4.1抽象数据类型定义 (4) 4.2程序包含模块 (4) 4.3模块间关系 (4) 4.4系统功能实现 (4) 5 模块设计 (5) 5.1主界面模块 (5) 5.2选择模块 (5) 5.3判断模块、 (5) 5.4显示模块 (5) 参考文献 (9)

1 需求分析 1.1需求来源 计算机在我们的生活中有越来越重要的角色,我们也越来越离不开计算机,计算机带给我们许多便利,学习好计算机知识已经是必不可少的一项技能了。特别是电子商务、电子邮件等,人工智能现在的热点方向,人们感叹计算机的高效是也感叹自己的聪明,人工智能现在是很好的以方面。 1.2设计目的 该软件为用户提供一个在Windows系统上运行的五子棋游戏小系统。应达到的目的是:建立人机对战的模块,可以机器思考如何应对。已达到提高智力的效果设计出五子棋的游戏界面,创建对象可以在地图中站位,在每一步后计算机会自己运算自己的下一步,任何一方不可以越界,当一方达到五子是判断谁是胜利者,在过程中尽量使得游戏智能程度更高。 2 功能需求分析 2.1功能需求 现在研究五子棋的算法已经很多了,比较经典的有递归、二叉树等,这也是很基础的,不同算法要求也不同,要求的能力也不同,每一种算法都是使得程序清晰明白,当五子相连就算胜利。故我们要理解中间过程。 每个代码实现功能也是不同的,有的是判断,有的是理解,有的是更好知道程序,程序在执行时我们可以知道哪里出错。哪里会有问题,修改便利。、在错误中学习,加强自己的基础知识与算法的能力。

中国象棋算法

解剖大象的眼睛——中国象棋程序设计探索 黄晨*2005年6月 ( * 联系地址:复旦大学化学系表面化学实验室,eMail:morning_yellow@elephantbas https://www.sodocs.net/doc/9c13005078.html,) (一) 引言 我在今年2月写出了象棋程序ElephantEye的第一个版本(0.90),本来它只是象棋界面ElephantBoard的调试引擎。在设计程序的过程中,我尝试性地加入了很多算法,发现每次改进都能让程序的棋力有大幅度的提高,因此便对象棋程序的算法产生了浓厚的兴趣。到现在我已经陆续对ElephantEye作了几十次加工(目前版本为0.94),使得它的棋力接近了中等商业软件的水平,在公开源代码的象棋程序中,ElephantEye是最强的一个。 我希望能通过公开源代码的方式,推动中国象棋程序水平的整体发展,然而根据很 多网友的反馈意见,发现源代码中的很多部分并不是那么容易理解的。因此我才打算以《中国象棋程序设计探索》为题,写几篇详细介绍ElephantEye算法的连载,希望能让的源代码充分发挥它的作用。 下面我先简要谈一下我自己对ElephantEye的体会。 1.1 ElephantEye用到了哪些算法? 在我写本次连载以前,我已经完成了《象棋百科全书》网站上《对弈程序基本技术 》专题中所有文章的翻译,ElephantEye的大部分算法都参考了这些文章,这些算法我会在连载中一笔带过,详细的内容希望读者参考这些译文,那里还有我加的很多译注,希 望它们能够加深读者对这些算法的体会。 当然,仅根据这些文章所提供的算法,是写不出很好的程序的,我参考了王小春的《PC游戏编程——人机博弈》一书,也参考了一些国际象棋的源程序,并通过自己的探索,在ElephantEye中加入了另外的非常重要的算法,尤其是启发算法,我认为它们在程序中发挥了关键性的作用,而且很多细节在绝大多数文字资料中没有详细给出,我会在 我的连载中重点介绍。 我猜读者最感兴趣的内容是ElephantEye的着法生成器,这应该算是象棋程序的核心部分,同时也是各个程序差异最大的部分。在写ElephantEye以前,我在《象棋百科全书》网站上刊登了大量介绍“位棋盘”的文章,这是个非常有吸引力的思想,但是我试验 下来觉得它的速度并不快,在ElephantEye的程序里我只把位棋盘运用在将军判断上。尽管如此,ElephantEye短短10行的将军判断也许是程序的一个亮点吧,那么这部分内容我将尽量介绍得详细一点。 此外,一些看似和棋力关系不大的技术,诸如开局库、长将检测、后台思考、时间 策略、引擎协议等等,其实也直接影响着象棋程序的稳定性,因此也有必要逐一讲解。 总之,每个技术都很重要,我的连载虽然不能面面俱到,但我会尽我所能来作详细 阐述的。 1.2 如何正确评价ElephantEye目前的棋力?

五子棋java设计文档

安阳工学院 JA V A课程综合项目报告 项目题目:五子棋 专业班级:12网工专升本 学生姓名:阮营营 学生学号:201203060042 指导教师姓名:许研 2012年12月 安阳工学院计算机学院制

目录 一、系统目标 (2) 二、系统设计思路 (2) 三、系统详细设计 (2) 四、系统实现 (9) 五、系统设计总结 (12) 六、参考文献 (12)

一、系统目标 1、主要是介绍开发五子棋的整个过程,体现流程设计与类设计的基本方法,示范了数组的使用,使用了分支结构与循环结构的流程控制 2、通过课程设计把课堂上讲的内容融会贯通,学会设计程序、开发应软件、开发系统软件等各项工作。 3、通过实习掌握语言的语法结构,理解类和对象的概念,准确的使用各种数据类型,对面向对象中的继承和多态的概念要理解、会使用,在程序中提高代码的重用性,使设计的程序结构清晰、易于维护。 二、系统设计思路 1、获取棋盘设计一个11╳11围棋棋盘,由两玩家交替进行对战,并可以实现以下功能。五子棋的规则为: 2、下棋方法两人分别执黑白两色棋子。轮流在棋盘上选择一个无子的交叉点落子,无子的交叉点又被称为空点。 3、输赢判断每次下完一颗棋子,就通过程序从横、竖、斜各个方向扫描棋盘,如果在某个方向中,有同种颜色的棋子达到五连子,则此颜色的玩家为赢。如果没有相同颜色的棋子达到五连子,则继续游戏。 三、系统详细设计 3.1程序流程图

3.2创建棋盘类,绘制棋盘的样式 main方法创建了ChessFrame类的一个实例对象,并启动屏幕显示显示该实例对象。 public static void main(String argc[]) { myframe f = new myframe(); } 构造五子棋的主窗体: class myframe extends Frame implements WindowListener { mypanel panel; myframe() { setLayout(null); panel = new mypanel(); add(panel); panel.setBounds(0, 23, 360, 360);

象棋游戏的设计与实现

象棋游戏的设计与实现

目录 1引言 (1) 1.1象棋设计背景和研究意义 (1) 1.2象棋设计研究方法 (1) 2人工智能算法设计 (2) 2.1棋局表示 (3) 2.2着法生成 (4) 2.3搜索算法 (5) 2.4历史启发及着法排序 (9) 2.5局面评估 (9) 2.6程序组装 (11) 3界面及程序辅助设计 (12) 3.1界面基本框架 (12) 3.2多线程 (13) 3.3着法名称显示 (14) 3.4悔棋和还原 (15) 4系统实现 (16) 结论 (19) 参考文献 (20)

1引言 1.1 象棋设计背景和研究意义 电脑游戏行业经过二十年的发展,已经成为与影视、音乐等并驾齐驱的全球最重要的娱乐产业之一,其年销售额超过好莱坞的全年收入。游戏,作为一种娱乐活动。早期的人类社会由于生产力及科技的制约,只能进行一些户外的游戏。随着生产力的发展和科技进步,一种新的游戏方式——电子游戏也随之诞生。 当计算机发明以后,电子游戏又多了一个新的载体。电子游戏在整个计算机产业的带动下不断地创新、发展着。自从计算机发明,向各个领域发展,到成为我们现在每天工作和生活必不可少的一部分的这个过程中,电子游戏也逐步渗入我们每个人的娱乐活动中。而计算机已经普及的今天,对于可以用计算机进行程序编辑的人来说,开发属于自己的游戏,已经不再是梦想。事实上,个人计算机软件市场的大约80%销售份额是来自游戏软件。棋牌游戏属于休闲类游戏,相对于角色扮演类游戏和即时战略类游戏等其它游戏,具有上手快、游戏时间短的特点,更利于用户进行放松休闲,为人们所喜爱,特别是棋类游戏,方便、快捷、操作简单,在休闲娱乐中占主要位置。作为中华民族悠久文化的代表之一,中国象棋不仅源远流长,而且基础广泛,作为一项智力运动,中国象棋开始走向世界。 随着计算机处理速度的飞速提高,人们很早就提出了疑问:计算机是否会超越人类?世界国际象棋大师已被计算机打败,计算机已经超过了人类?而人工智能是综合性很强的一门边缘学科,它的中心任务是研究如何使计算机去做那些过去只能靠人的智力才能做的工作。因此,对游戏开发过程中的人工智能技术的研究自然也就成了业界的一个热门研究方向。 1.2 象棋设计研究方法 对于象棋来说,核心设计主要包括人工智能算法的以及整个游戏中界面及程序辅助部分的实现,主要用 Visual C++ 进行开发,里面的MFC类库,使游戏开发更加方便,并利用人工智能相关搜索算法实现人工智能的着法生成,从而完善整个游戏的功能。 本文的目标是实现一款有着一定下棋水平且交互友好的中国象棋人机对弈程序。 该程序功能包括: *人机对弈; *搜索深度设定; (电脑棋力选择)

五子棋-Java课程设计

《面向对象程序设计》 课程设计报告 实验时间:2010年10月26日 实验班级:********************** 实验报告总份(片)数: 1 份(片) 实验指导老师:***** ******* 设计小组 湖南省吉首市吉首大学 课程设计报告 简单的游戏——五子棋 小组成员(姓名、学号): **(组长)** ** ** ** ** 一、实验分工

二、开发环境(实验编译以及测试环境) 硬件环境: CPU:Intel 奔腾双核E5200 主频2.5GHz 内存:2G 软件环境: 操作系统:Windows 7 编程环境JDK7.0 开发工具:Eclipse SDK 三、使用环境(用户运行环境) 硬件环境: CPU主频在500MHZ以上,内存在128M以上 软件环境: JAVA运行环境+ Windows XP或Windows 2000 以上操作系统 目录 第一章总体设计.............................................................................................................................. 1 1.1设计的目的.......................................................................................................................... 1 1.2本系统的主要功能.............................................................................................................. 1 1.3系统包含的类及类之间的关系。...................................................................................... 1 1.4 Java源文件及其功能......................................................................................................... 2 1.5 项目构建思路..................................................................................................................... 2第二章模块功能介绍.................................................................................................................. 12 2.1主类Chess...................................................................................................................... 12

中国象棋源代码及文档

摘要 象棋程序可以分为两大部分:人工智能和界面程序辅助。人工智能的主要部分,反 映了计算机下象棋的想法,电脑怎么想,最好的方法去完成下一步,优先搜索算法进行 搜索,和各种可能的行动,评估,选择胜利面最大的一步;界面和程序协助部分主要是界 面友好,以更好地适应用户下象棋的想法。 本文研究了中国象棋在电脑中如何表示,然后讨论如何产生走法的一系列相关技术。使用MFC架构和Visual C + +开发工具,实现一定技能的中国象棋人机对弈功能。 关键词:中国象棋;人工智能;下棋

Title The Design And Realize of human-computer Chess Game Abstract Chess program can be divided into two major auxiliary artificial intelligence and interface program. The AI part of the main reflected computer chess ideas, computer how to think and go to the best method to complete the next step, first search algorithm to search, and a variety of possible moves, valuations, choose victory surface step; the interface and the program assisted some of the major user-friendly game of chess by the previous step, to better adjust the chess ideas. This paper studies the Chinese chess computer, and then discuss how to generate a series of related moves. MFC architecture and Visual C development tools, to achieve a certain chess skills, Chinese chess, human-computer chess program. Keywords: Chess; artificial intelligence; chess

JAVA五子棋程序设计课程设计

JAVA五子棋程序设计课程设计

计算机与信息工程系 《JAVA程序实训》设计 五子棋游戏 摘要: 计算机人机对弈作为人智能研究的一个重要分支,计算机博弈是检验人工水平的一个重要方面。它的研究为人工智能带来了很多重要的方法和理论,产生了广泛的社会影响和学术影响。 五子棋人机对弈是计算机博弈中的一种。研究其计算机算法,能够让我们看到人工智能的稚形,也有助于我们人脑的开发。五子棋是中国创造的,研究它能够让更多的外国人了解五子棋,这有助于中国优秀文化的推广。 关键词:人工智能,计算人机对弈,五子棋,算法 , java 1.课程设计介绍 1.1课程设计目的 经过此次课程设计,巩固所学Java语言基本知识,增进Java语言编辑基本功,掌握JDK、NetBeans等开发工具的运用,拓宽常见类库的应用。使我们经过该教学环节与手段,把所学课程及相关知识加以融会贯通,全面掌握Java语言的编程思想及面向对象程序设计的方法,为今后从事实际工作打下坚实的基础。本次课程设计每人一组,自行设计并实现共功能模块。

1.2课程设计任务 实现五子棋游戏,要求:使用图形用户界面,实现人人对战,人机对战。能够判断输赢,有“开始”按钮,当出现棋盘后,按此按钮进入对战状态。当有胜利者(垂直、水平、对角线连续5子),显示对话框,提示谁(黑还是白)胜利了。若当棋盘满了还无胜利者,显示平局对话框。有“悔棋”按钮,玩家能够点击悔棋,回到上一步。 1.3课程设计论文编写要求 (1)要按照书稿的规格打印与写课程设计论文; (2)论文包括目录、设计思路、具体实现、运行调试与分析讨论、设计体会与小结、参考文献、附录(源代码)等; (3)课程设计论文装订按学校的统一要求完成。 2.系统设计 2.1需求分析 2.1.1性能需求 一款小游戏的确立是建立在各种各样的需求上面的,这种需求往往来自于玩家的实际需求,其中玩家的实际需求最为重要.面对游戏拥有不同知识和理解层面的玩家,游戏制作人对玩家需求的理解程度,在很大程度上决定了此类游戏开发的成败.因此如何更好地的了解,分析,明确玩家需求,而且能够准确,清晰以文档的形式表示给游戏制作人,保证开发过程按照满足玩家需求为目的正确开发方向进行,是每游戏游戏制作人需要面正确问题。 作为五子棋的设计需要考虑到的最基本的需求莫过于人机对战与人人对战功能的实现,当然还有下棋过程中的下棋悔棋功能以及判断游戏的胜负等方面的要求。当然最好是要考虑到界面的友好性,作为一个娱乐软件,还应

java中国象棋报告

贵州航天职业技术学院Java课程设计报告 专业:计算机软件技术 班级:09软件二 学号:A093GZ053020152 姓名:韦治成 指导老师:肖宏启 时间:

目录 摘要 ------------------------------------------------------------------- 3【摘要】 ------------------------------------------------------------ 3【关键字】 --------------------------------------------------------- 4系统概述 ---------------------------------------------------------------- 4 1.棋盘表示 ---------------------------------------------------------- 4 3.人人对弈 ---------------------------------------------------------- 4系统分析 ---------------------------------------------------------------- 4 1. 设计内容--------------------------------------------------------- 4 2. 设计要求--------------------------------------------------------- 5 3.中国象棋软件-------------------------------------------------- 6 4.运行效果-------------------------------------------------------- 8系统设计 ---------------------------------------------------------------- 8 1.总体设计 ---------------------------------------------------------- 8 运行界面: ------------------------------------------------------- 10 2.运行输出结果 -------------------------------------------------- 10 3.总结与说明 ----------------------------------------------------- 11 4.象棋界面实现: ----------------------------------------------- 11 5.对弈功能的实现: -------------------------------------------- 15 参考文献 -------------------------------------------------------------- 16

Java扫雷游戏源代码

import java.awt.BorderLayout; import java.awt.Container; import java.awt.Font; import java.awt.GridLayout; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JPanel; import javax.swing.Timer; public class ScanLei1 extends JFrame implements ActionListener{ private static final long serialVersionUID = 1L; private Container contentPane; private JButton btn; private JButton[] btns; private JLabel b1; private JLabel b2; private JLabel b3; private Timer timer; private int row=9; private int col=9; private int bon=10; private int[][] a; private int b; private int[] a1; private JPanel p,p1,p2,p3; public ScanLei1(String title){ super(title); contentPane=getContentPane(); setSize(297,377); this.setBounds(400, 100, 400, 500); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); timer =new Timer(1000,(ActionListener) this); a = new int[row+2][col+2];

java+五子棋+课程设计报告 (2)

课程设计(论文)任务书 软件学院软件工程+电子商务专业2007-2班 一、课程设计(论文)题目多用户五子棋游戏 二、课程设计(论文)工作自2009年6月15日起至2009年6月19 日止。 三、课程设计(论文) 地点: 创新大楼310 四、课程设计(论文)内容要求: 1.本课程设计的目的 (1)通过课程设计把课堂上讲的内容融会贯通,学会设计程序、开发应用软件、开发系统软件等各项工作。 (2)通过实习掌握语言的语法结构,理解类和对象的概念,准确的使用各种数据类型,对面向对象中的继承和多态的概念要理解、会使用,在程序中提高代码的重用性,使设计的程序结构清晰、易于维护。 2.课程设计的任务及要求 1)基本要求: 实现一个简单的多用户五子棋的游戏程序,包括如下两个界面 (1)选择对弈桌及角色(执黑、执白、观看)。 (2)在游戏界面,有开始,退出(游戏未结束、点退出自动判负);发言及显示区;用户列表区;棋盘绘制区。 2)创新要求: 在基本要求达到后,可进行创新设计,如改善算法性能、友好的人机界面。 3)课程设计论文编写要求 (1)要按照书稿的规格打印与写课程设计论文 (2)论文包括目录、设计思路、具体实现、运行调试与分析讨论、设计体会与小结、参考文献、附录(源代码)等 (3)课程设计论文装订按学校的统一要求完成 4)答辩与评分标准:

(1)完成基本算法设计:20分; (2)完成设计过程:40分; (3)完成调试:20分; (4)回答问题:20分。 5)参考文献: [1]吴其庆编著.Java程序设计实例教程.北京:冶金工业出版社 [2] 柳西玲.许斌编著.Java语言应用开发基础.北京:清华大学出版社 [3] (美)CayS.Horsttmann Gary Cornell JAVA核心技术卷i:基础知识(原书第七版):机械工业出版社 [4]丁振凡Java 语言实用教程:北京邮电大学出版社 [5]https://www.sodocs.net/doc/9c13005078.html, 6)课程设计进度安排 内容天数地点 构思及收集资料1图书馆 编码与调试 2.5实验室 撰写论文 1.5图书馆、实验室 学生签名: 2009年6 月15 日 课程设计(论文)评审意见 (1)完成基本算法(20分):优()、良()、中()、一般()、差();(2)完成调试(20分):优()、良()、中()、一般()、差();(3)创新设计(20分):优()、良()、中()、一般()、差();(4)设计分析(20分):优()、良()、中()、一般()、差();(5)回答问题(20分):优()、良()、中()、一般()、差();(6)格式规范性及考勤是否降等级:是( )、否() 评阅人:职称: 2009年6月21 日

C语言知识学习程序源代码-中国象棋

#include #include #include #include #include #include"c:\tc\LIB\1.c" #define W 119 #define S 115 #define A 97 #define D 100 #define space 32 #define UP 72 #define DOWN 80 #define LEFT 75 #define RIGHT 77 #define ENTER 13 void qipan(); void jiemian(int); void guangbiao1(int,int); void guangbiao2(int,int);

void xuanzhong(int,int); void gaizi(int,int); char array(int,int); void xiazi(int,int,int,int); /*int panding(char,int,int,int,int);*/ main() { int gdriver,gmode,i=0,c=0,x=190,y=190,m,n; char p; FILE *fp; gdriver=DETECT; gmode=0; if((fp=fopen("file.txt","at")) == NULL) { printf("Cannot open file!"); system("pause"); exit(0); } printf("%d,%d",gdriver,gmode); registerbgidriver(EGAVGA_driver);

象棋游戏的开发及测试

华夏学院 课程设计报告书课程名称:软件测试综合设计 题目:象棋游戏的开发及测试系名:信息工程系 专业班级: 姓名: 学号:102128 指导教师:司晓梅 2013 年1 月4 日

课程设计任务书 学生姓名:专业班级: 指导教师:工作单位:信息工程系 设计题目:象棋游戏的开发及测试 初始条件: jdk1.5+MyEclipse 要求完成的主要任务: 用Java语言实现一个网络象棋游戏软件,并对实现后的软件进行测试。要求按照IEEE 标准模板给出具体的测试计划书、软件的黑盒测试用例规格说明,并按照测试用例进行测试,提交缺陷报告。 提示:IEEE标准测试文档模板可以参阅人民邮电出版社佟伟光主编的教材《软件测试》 设计报告撰写格式要求: 1设计题目与要求 2 设计思想 3系统结构 4 数据结构的说明和模块的算法流程图 5 使用说明书(即用户手册)、运行结果、关键界面截图 6 测试计划说明书、测试用例规格说明、缺陷报告 7 自我评价与总结 8 附录:程序清单,注意加注释(包括关键字、方法、变量等),在每个模块前加 注释; 时间安排 12月24日~12月29日完成网络象棋游戏的开发、系统的打包和验收; 1月2 日~1月4日完成测试计划、测试用例的设计、测试缺陷报告的写作,并将以上工作整理成为课程设计报告,于1月4日下午提交课程设计报告。 指导教师签字:2012年 1 月4日

系主任签字:2012年 1 月4日 课程设计报告书 1.设计题目与要求 1.1.设计题目 象棋游戏的开发及测试 1.2.设计要求 实现一个基于网络的象棋游戏,可以让两方在网上进行象棋游戏对战。红方先走,然后黑方走,交替进行。给每个棋子定义标准的走法规则。 对每个棋子的走法规则进行测试,写出各个棋子走法的测试用例。 3.设计思想 中国象棋是双方在有着9条竖线和10条横线的棋盘上对弈,竖线和横线的交叉称为棋点或对弈点,每个棋子都是在棋点上行走。所以要先在画布的具体位置上画出棋盘。10条横线和9条竖线形成90个正方形的小方格,4条对角线构成帅和将的九方格。一个和棋盘背景颜色相同的填充矩形形成红黑方的分界。 楚河汉界将棋盘分成两等份,每一边都有一块有9个点组成的九宫,棋子“将”、“帅”和“士”只能在九宫内移动,并且“将”和“帅”每一步只可以水平或垂直移动一个棋点;“士”只能在九宫内移动,并且它每一步只可以沿着对角线移动一个棋点;“象”必须一次沿着对角线方向走两个棋点,但它不能过河也不能跳过或穿越障碍,“马”没一步只可以水平或垂直移动两个棋点,但必须按对角线向左或向右移动。中国象棋的“马”不能跳过障碍,即马不能别腿。“车”可以水平或垂直方向移动人一个无障碍的点。“炮”移动起来和车类似,但它必须跳过一个棋子来吃掉对方的一个棋子,被跳过的那个棋子称为桥或者屏风。“兵”每步只能向前移动一个棋子过河以后,它便增加了向左右移动的能力,并不允许向后移动 移动棋子,实际上就是监听了鼠标点击相应事件,先选棋子,通过点击了某

Free pascal 中国象棋源代码

Free pascal 中国象棋源代码[By angwuy] 中国象棋的源程序,中文模式下方可使用。 update:对修改程序向原作者angwuy道歉 程序代码: type qp=array[0..9,1..9]of shortint; const es:array['a'..'i']of byte=(1,2,3,4,5,6,7,8,9); se:array[ 1 .. 9 ]of char=('a','b','c','d','e','f','g','h','i'); ci:array['0'..'9']of byte=(0,1,2,3,4,5,6,7,8,9); qz:array[ 1 ..14 ]of string[2]=('車','馬','炮','仕','相','兵','帅','车','马','包','士','象','卒','将'); yqp:qp=(( 8, 9,12,11,14,11,12, 9, 8), ( 0, 0, 0, 0, 0, 0, 0, 0, 0), ( 0,10, 0, 0, 0, 0, 0,10, 0), (13, 0,13, 0,13, 0,13, 0,13), ( 0, 0, 0, 0, 0, 0, 0, 0, 0), ( 0, 0, 0, 0, 0, 0, 0, 0, 0), ( 6, 0, 6, 0, 6, 0, 6, 0, 6), ( 0, 3, 0, 0, 0, 0, 0, 3, 0), ( 0, 0, 0, 0, 0, 0, 0, 0, 0), ( 1, 2, 5, 4, 7, 4, 5, 2, 1)); var t,sx,sy,ex,ey,bushu:integer; qipan:qp; procedure initqp(var a:qp); var i,j:integer; begin fillchar(a,sizeof(a),0); for i:=1 to 9 do for j:=0 to 9 do a[j,i]:=yqp[j,i]; end; procedure print(q:qp); var i,j:integer; b:array[1..10,1..9]of string[2]; begin writeln; writeln('中国象棋[By angwuy]'); writeln('红:帅仕相車馬炮兵'); writeln('黑:将士象车马包卒');

相关主题