程序设计课程设计五子棋实验报告(附代码)

合集下载

五子棋实验报告(含代码)

五子棋实验报告(含代码)

实验报告实验一五子棋游戏北方工业大学 2013级计算机技术米鹏一、实验原理及方法五子棋游戏开发借用Visual Studio 2012软件开发平台,选用C#语言进行编写。

整体程序主要分为三部分:界面操作部分、AI逻辑部分和棋子定点分析部分。

1、界面操作部分界面操作部分代码主要针对图像呈现、对应矩阵存储、下棋过程控制等可见的操作环节进编写。

同时负责整个程序的初始化工作。

图像呈现采用C#中Graphics进行绘制。

棋盘被划分为15行15列,每个划分出的小方格均为30*30的正方形,棋盘可操作的范围规定在(20,20)、(460,460)两点的确定的正方形区域内。

通过鼠标左击来确定下子地点。

程序会根据鼠标鼠标点击的位置进行计算,计算得到时对应矩阵的行列,之后再改变对应矩阵的内容后,在通过行列值乘以小方格边长计算得到在显示区域中的具体位置,再稍加变动后画到显示区域中。

以X点坐标为例,下面是计算X(Column)的流程图:在对应矩阵存储方面,后面AI逻辑和棋子分析所用到的矩阵都是来源这里。

同时AI 逻辑和棋子分析不能去修改对应矩阵内容。

图像呈现点的位置、重绘的根据都是来源这里。

在下棋过程控制方面采用信号亮的机制,当操作者下过后,根据信号AI会立即计算将要下点的位置同时改变信号亮变量。

当AI下过棋子后,由于信号亮的的限制就等待操作者去下棋,同时改变信号亮变量内容。

AI和操作者的所有下子、修改矩阵、显示棋子的过程都是统一的。

在每一盘游戏开始时程序会对一些重要的变量进行初始化这里包括矩阵、信号亮、第一步棋子颜色、呈现图像等内容进行初始化。

同时AI会在棋盘中央下第一子。

2、AI逻辑部分AI逻辑部分算是整个程序策略的灵魂。

其中的一些关键性判别的前后关系将影响AI 的下棋的结果。

同时加大和降低AI的难度也是这里。

下面是我设计的策略过程:从下棋者的考虑角度进行考虑,尽可能保证每一次下子都是有必要的、都是在情理当中的。

我所设计的策略并不是完整,漏洞在与没有考虑三棋子连续的情况。

java五子棋小游戏实验资料报告材料(附源代码)

java五子棋小游戏实验资料报告材料(附源代码)

手机五子棋游戏的设计与实现专业::班级:学号:指导教师:J2ME(Java 2 Micro Edition)是近年来随着各种不同设备,尤其是移动通信设备的飞速发展而诞生的一项开发技术。

它因其“write once,run anywhere”的Java特性而提高了开发的效率。

随着手机性能的不断提高,手机休闲娱乐应用将成为PC休闲娱乐应用之后又一重要业务增长点。

棋类游戏规则单一,比较适合在手机等便携终端推广。

由于具有跨平台、易于移植、占用空间小的优势,J2ME成为移动应用开发平台的主流,并提供了很多用以支持移动应用软件的开发的API。

现将该技术用于这次的手机游戏开发,可以实现游戏的快速开发,不但便于查看游戏运行过程中存的占用量和程序的每一部分代码消耗了多少处理器时间,而且可以不断地优化代码,使代码具有高度的复用性、可扩展性、可维护性。

游戏的开发以J2ME为平台,利用Java技术,结合J2ME的MIDP技术,并对于程序设计思想,重要类、方法等展开讨论。

在对弈部分,分析设计走棋算法,选择合适的方式组织成代码,实现基本的人工智能。

过程中使用了J2ME中的CLDC/MIDP软件体系,主要运用了MID Profile的特定类的支持,来完成游戏的开发。

关键词:J2ME;CLDC;MIDPJ2ME is a kind of fast developing technology implemented on various devices especially mobile communication equipments. It improves the efficiency of the development process because of its "write once, run anywhere" nature. The development trend of the entertainment market based on the cell phone is very obvious because the handset performance enhances unceasingly. The entertainment market based on the cell phone will to be the new important business growth point follow the PC entertainment market. As the rules of a single chess game, it is more suitable for mobile phones and other portable terminal extension.J2ME has been the preferred platform for development because of its platform independent and compatibility, and provides a lot of APIs to support the development of mobile application software. The technology for mobile game development, can achieve the rapid development of the game. It is not only easy to observe the memory consumption and processor consumed time during the operation of the game, but also can optimize the code, so that the code has a high degree of reusability, scalability, maintainability.The game has designed by J2ME, the Java technology and the MIDP technology. I studied the procedure thought, the important class and the method. In the playing chess part, I have analyzed the algorithm, choosed the appropriate way to organize the code and realized the basic artificial intelligence. On the other hand,I learned software system of CLDC/MIDP and the specific class of the MID Profile to complete the game development.Key words: J2ME;CLDC;MIDP目录1 概述 (5)1.1 课题研究背景 (5)1.2 课题研究意义 (5)2 开发技术背景 (6)2.1 JAVA语言概述 (6)2.2 J2ME简介 (6)2.3 移动信息设备简表 (6)3 系统分析及总体设计 (7)3.1 可行性分析 (7)3.2 需求分析 (8)3.3 系统概要设计 (8)4 系统详细设计 (9)4.1 界面设计 (9)4.1.1 图形的低级绘制 (10)4.1.2 用户按键设计 (10)4.2 走棋算法 (11)4.3 胜负判断 (11)5 系统测试 (11)5.1 测试方案 (11)5.2 测试结果 (12)6总结 (14)基于J2ME的手机五子棋游戏的设计与实现1 概述1.1 课题研究背景五子棋是当前非常流行的一种棋。

程序设计课程设计五子棋实验报告(附代码)

程序设计课程设计五子棋实验报告(附代码)
3
程序设计课程设计报告书
1、引言
1.1 编写目的
学会 MFC 的一些基本操作,会使用其中的部分函数,编写一个五子连珠的小游戏, 游戏由两人对弈,用鼠标操作,执黑子者先下。
1.2 读者对象
计算机专业的学生或对编程感兴趣的学生
1.3 软件项目概述
项目名称:五子棋游戏 简称:五子棋 项目代号:无 软件项目的大致功能和性能要求
4、界面要求
人机界面要容易操作,有比较舒适的背景,遇到禁手、悔棋、保存、胜利 等可弹出对话框。人机交互和谐。
5、测试方案
1. 检验判断胜利:
6
程序设计课程设计报告书
若胜利,则弹出对话框,并显示是何种胜利 2. 检验禁手
7
程序设计课程设计报告书
以上仅列出六种禁手,当然还有跟多情况 3. 检验保存
当按下“保存”图标菜单时,会弹出对话框,可给棋局取个文件名,如“1” 然后单击“保存(S)” 4. 检验打开 重现打开游戏,按下“打开”图标菜单,现在打开“1” 会显示对话框,选择要打开的文件“1” 单击“打开”,则会复盘,显示上次未完成的游戏,继续对弈 5. 悔棋(有个撤销按钮,不便验收展示) 6. 综上,基本实现新局、保存棋局、打开棋局、悔棋、禁手、判断胜利
1.1 编写目的..............................................................................................................................4 1.2 读者对象..............................................................................................................................4 1.3 软件项目概述......................................................................................................................4 1.4 文档概述..............................................................................................................................4 1.5 定义......................................................................................................................................5 1.6 参考资料..............................................................................................................................5 2、任务概述....................................................................................................................................... 5 2.1 目标....................................................................................................................................... 5 2.2 软件的开发和运行环境.......................................................................................................5 2.3 用户特征..............................................................................................................................5 2.4 假设与约束..........................................................................................................................5 2.5 进度要求..............................................................................................................................5 2.6 验收要求...............................................................................................................................5 3、功能需求描述............................................................................................................................... 6 3.1 基本功能........................................................................................... 错误!未定义书签。 3.2 增加功能........................................................................................... 错误!未定义书签。 4、界面要求....................................................................................................................................... 6 5、测试方案....................................................................................................................................... 6 6、功能设计..................................................................................................................................... 10 6.1 类的关系描述.....................................................................................................................10 6.2 类的设计............................................................................................................................. 11 7、使用指南..................................................................................................................................... 11 8、维护接口..................................................................................................................................... 11 9、总结............................................................................................................................................. 12

java五子棋小游戏实验报告(附源代码)

java五子棋小游戏实验报告(附源代码)

手机五子棋游戏的设计与实现专业:姓名:班级:学号:指导教师:J2ME(Java 2 Micro Edition)是近年来随着各种不同设备,尤其是移动通信设备的飞速发展而诞生的一项开发技术。

它因其“write once,run anywhere”的Java特性而提高了开发的效率。

随着手机性能的不断提高,手机休闲娱乐应用将成为PC休闲娱乐应用之后又一重要业务增长点。

棋类游戏规则单一,比较适合在手机等便携终端推广。

由于具有跨平台、易于移植、占用空间小的优势,J2ME成为移动应用开发平台的主流,并提供了很多用以支持移动应用软件的开发的API。

现将该技术用于这次的手机游戏开发,可以实现游戏的快速开发,不但便于查看游戏运行过程中内存的占用量和程序的每一部分代码消耗了多少处理器时间,而且可以不断地优化代码,使代码具有高度的复用性、可扩展性、可维护性。

游戏的开发以J2ME为平台,利用Java技术,结合J2ME的MIDP技术,并对于程序设计思想,重要类、方法等展开讨论。

在对弈部分,分析设计走棋算法,选择合适的方式组织成代码,实现基本的人工智能。

过程中使用了J2ME中的CLDC/MIDP软件体系,主要运用了MID Profile的特定类的支持,来完成游戏的开发。

关键词:J2ME;CLDC;MIDPJ2ME is a kind of fast developing technology implemented on various devices especially mobile communication equipments. It improves the efficiency of the development process because of its "write once, run anywhere" nature. The development trend of the entertainment market based on the cell phone is very obvious because the handset performance enhances unceasingly. The entertainment market based on the cell phone will to be the new important business growth point follow the PC entertainment market. As the rules of a single chess game, it is more suitable for mobile phones and other portable terminal extension.J2ME has been the preferred platform for development because of its platform independent and compatibility, and provides a lot of APIs to support the development of mobile application software. The technology for mobile game development, can achieve the rapid development of the game. It is not only easy to observe the memory consumption and processor consumed time during the operation of the game, but also can optimize the code, so that the code has a high degree of reusability, scalability, maintainability.The game has designed by J2ME, the Java technology and the MIDP technology. I studied the procedure thought, the important class and the method. In the playing chess part, I have analyzed the algorithm, choosed the appropriate way to organize the code and realized the basic artificial intelligence. On the other hand,I learned software system of CLDC/MIDP and the specific class of the MID Profile to complete the game development.Key words: J2ME;CLDC;MIDP目录1 概述 (5)1.1 课题研究背景 (5)1.2 课题研究意义 (5)2 开发技术背景 (6)2.1 JAVA语言概述 (6)2.2 J2ME简介 (6)2.3 移动信息设备简表 (6)3 系统分析及总体设计 (7)3.1 可行性分析 (7)3.2 需求分析 (8)3.3 系统概要设计 (8)4 系统详细设计 (9)4.1 界面设计 (9)4.1.1 图形的低级绘制 (10)4.1.2 用户按键设计 (10)4.2 走棋算法 (11)4.3 胜负判断 (11)5 系统测试 (11)5.1 测试方案 (11)5.2 测试结果 (12)6总结 (13)基于J2ME的手机五子棋游戏的设计与实现1 概述1.1 课题研究背景五子棋是当前非常流行的一种棋。

(最新版)五子棋毕业课程设计报告

(最新版)五子棋毕业课程设计报告

上海海事大学程序设计课程设计报告课程题目FIVE CHESS GAME作者姓名学号联系方式指导教师学科(专业)所在学院提交日期目录1引言 (3)1.1五子棋介绍 (3)1.2选题背景和动机 (3)1.3系统所要解决的问题 (3)2 系统框架 (5)2.1棋盘类 (6)2.1.1 主要成员变量说明: (6)2.1.2清空棋盘——Clear (6)2.1.3绘制棋子——Draw (6)2.1.4左键消息——OnLButtonUp (7)2.1.5载入棋盘 (7)2.1.6对方落子完毕——Over (7)2.1.7设置游戏模式——SetGameMode (7)2.1.8胜负的判断——Win (7)2.2游戏模式类 (8)3关键技术 (9)3.1 棋盘对话框的制作 (9)3.1.1 对话框机制 (9)3.1.3 棋子 (10)3.2 人机对弈 (10)3.2.1 难度的选择 (10)3.2.2 机器的落子判断 (11)4运行结果 (15)4.1开发环境及运行环境 (15)4.1.1开发环境 (15)4.1.2运行环境 (15)4.2运行图示 (15)4.2.1 棋盘显示 (15)4.2.2 开始的选择对话框 (16)4.2.3 主界面中的游戏难度选项 (16)4.2.4 电脑的应对 (17)5调试分析 (19)6总结 (21)参考文献 (22)1引言1.1五子棋介绍五子棋是起源于中国古代的传统黑白棋种之一。

现代五子棋日文称之为“連珠”,英译为“Renju”,英文称之为“Gobang”或“FIR”(Five in a Row的缩写),亦有“连五子”、“五子连”、“串珠”、“五目”、“五目碰”、“五格”等多种称谓。

五子棋不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。

五子棋既有现代休闲的明显特征“短、平、快”,又有古典哲学的高深学问“阴阳易理”;它既有简单易学的特性,为人民群众所喜闻乐见,又有深奥的技巧和高水平的国际性比赛;它的棋文化源渊流长,具有东方的神秘和西方的直观;既有“场”的概念,亦有“点”的连接。

C语言五子棋游戏程序课程设计

C语言五子棋游戏程序课程设计

C++五子棋游戏程序设计一、课设内容1. 掌握C++基本编程风格。

2. 编写程序代码,实现各个模块的功能。

3. 完成小型游戏应用系统的设计开发.4. 关键语句写注释。

5. 测试程序,写出测试报告。

6. 在实验报告写出综合设计心得。

二、实验内容在此次大作业中,我学习设计一个五子棋游戏的程序,源代码及分析如下:#include<iostream.h>#include<iomanip.h>void shuchu(char a[15][15]){int x,y,i;cout<<" ";for(i=0;i<15;i++)cout<<setw(3)<<i;cout<<endl;for(x=0;x<15;x++){cout<<setw(2)<<x;for(y=0;y<15;y++)cout<<setw(3)<<a[x][y];cout<<endl;}}bool osheng(char a[15][15]){int x,y;for(x=0;x<15;x++)for(y=0;y<11;y++)if(a[x][y]=='o'&&a[x][y+1]=='o'&&a[x][y+2]=='o'&&a[x][y+3]=='o'&&a[x][y+4]=='o' )return 1;for(x=0;x<11;x++)for(y=0;y<15;y++)if(a[x][y]=='o'&&a[x+1][y]=='o'&&a[x+2][y]=='o'&&a[x+3][y]=='o'&&a[x+4][y]=='o' )return 1;for(x=0;x<11;x++)for(y=0;y<11;y++)if(a[x][y]=='o'&&a[x+1][y+1]=='o'&&a[x+2][y+2]=='o'&&a[x+3][y+3]=='o'&&a[x+4][y +4]=='o')return 1;for(x=15;x>4;x--)return 0;}bool xsheng(char a[15][15]){int x,y;for(x=0;x<15;x++)for(y=0;y<11;y++)if(a[x][y]=='x'&&a[x][y+1]=='x'&&a[x][y+2]=='x'&&a[x][y+3]=='x'&&a[x][y+4]=='x' )return 1;for(x=0;x<11;x++)for(y=0;y<15;y++)if(a[x][y]=='x'&&a[x+1][y]=='x'&&a[x+2][y]=='x'&&a[x+3][y]=='x'&&a[x+4][y]=='x')return 1;for(x=0;x<11;x++)for(y=0;y<11;y++)if(a[x][y]=='x'&&a[x+1][y+1]=='x'&&a[x+2][y+2]=='x'&&a[x+3][y+3]=='x'&&a[x+4][y +4]=='x')return 1;for(x=15;x>4;x--)for(y=15;y>4;y--)if(a[x][y]=='x'&&a[x+1][y-1]=='x'&&a[x+2][y-2]=='x'&&a[x+3][y-3]=='x'&&a[x-4][y +4]=='x')return 1;return 0;}bool he(char a[15][15]){int x,y;for(x=0;x<15;x++)for(y=0;y<15;y++)if(a[x][y]=='-')return 0;return 1;}void main(){int x,y,s,q;char a[15][15];for(x=0;x<15;x++)for(y=0;y<15;y++)cin>>q;if(q==1)goto two;/* elsegoto one; */two:cout<<"请选择是否进入悔棋模式:1.是;2.否\n";cin>>q;if(q==2)goto three;shuchu(a);while(1){s: while(1){cout<<"请玩家1输入下子的坐标"<<endl;cin>>x>>y;if(a[x][y]=='o'||a[x][y]=='x')cout<<"此处已经有字,请重下"<<endl;else{a[x][y]='o';break;}}shuchu(a);cout<<"是否需要悔棋?是请输入:1;否请输入:0"<<endl;cin>>s;switch(s){case 1:a[x][y]='-';goto s;break;case 0:goto s1;break;}s1: if(osheng(a)){cout<<"玩家1胜";break;}s2: while(1){cout<<"请玩家2输入下子的坐标"<<endl;cin>>x>>y;if(a[x][y]=='o'||a[x][y]=='x')cout<<"此处已经有字,请重下"<<endl;else{a[x][y]='x';break;}}shuchu(a);cout<<"是否需要悔棋?是请输入:1;否请输入:0"<<endl;cin>>s;switch(s){case 1:a[x][y]='-';goto s2;break;case 0:goto s3;break;}s3: if(xsheng(a)){cout<<"玩家2胜";if(he(a)){cout<<"平局";break;}}three: shuchu(a);while(1){while(1){cout<<"请玩家1输入下子的坐标"<<endl;cin>>x>>y;if(a[x][y]=='o'||a[x][y]=='x')cout<<"此处已经有字,请重下"<<endl;else{a[x][y]='o';break;}}shuchu(a);if(osheng(a)){cout<<"玩家1胜";break;}}shuchu(a);if(xsheng(a)){cout<<"玩家2胜";break;}if(he(a)){cout<<"平局";break;}}}三、感想体会希望对大家有所帮助,多谢您的浏览!本实验是用C++来设计完成了五子棋游戏。

【报告】c五子棋实验报告

【关键字】报告c五子棋实验报告篇一:五子棋对战实验报告实验项目五子棋网络对战和聊天实验日期XX0406实验报告要求:一、实验目的:学习和使用socket编程,熟练软件开发二、实验原理:使用socket进行网络通信,java作为编程语言三、实验要求:编写五子棋程序可以实现联机网络对战,并且可以进行聊天四、实验步骤、结果(程序+注释+截图)及分析:首先拟定编程语言与开发方案,选择java语言,考虑到java可以跨平台运行,然后决定把这个程序拆分为客户端、服务器两个部分,每个部分再分成5个小的部分实现不同功能。

1、然后考虑使用java的swing包,创建ClientChessPanel类负责棋盘部分,包括判断输赢,使用数组chesses[i][j]记录棋盘上棋子的分布,对数组进行不同的赋值表示网格节点上无棋、黑棋、白棋;使用playChessHandler作为鼠标单击事件,单击事件调用Clientskt中的函数传送棋子坐标以及输赢信息。

drawChess函数画棋子,drawGrids画网格,gameOver判断棋盘棋子分布,输赢情况。

importjavax.swing.*;importjava.awt.*;;importChatOneToOneClient.Clientskt;classClientChessPanel extends JPanel{private static final long serialVersionUID = 1L;private int space=20; //网格间的距离private int grids=30; //棋盘的网格数private int radius=space/2; //棋的半径Clientsktskt;//当chesses[i][j]=0,表示网格节点(i,j)上无棋//当chesses[i][j]=1,表示网格节点(i,j)上放白棋//当chesses[i][j]=2,表示网格节点(i,j)上放黑棋privateint[][] chesses=new int[grids+1][grids+1];private intcurrColor=1; //当前棋的颜色privateMouseListenerplayChessHandler=new MouseAdapter(){public void mouseClicked(MouseEvent e){if(skt.reMouseGo()){int x=e.getX();int y=e.getY();//放一颗棋子if(x=0 && y=0)if(chesses[round(x)][round(y)]==0){chesses[round(x)][round(y)]=currColor;repaint(); //刷新图形skt.dataout("x:"+String.valueOf(round(x)));skt.dataout("y:"+String.valueOf(round(y)));skt.setMouseGo(false);if(gameOver(currColor)){skt.dataout("g:你输了");ClientMyDialog(skt.chat,"你赢了");;}currColor=currColor==1?2:1; //切换棋子的颜色}}}};public int round(float a){ //获得接近a的网格节点坐标float f=a/space;returnMath.round(f);}publicClientChessPanel(intspace,intgrids,Clientsktskt){ this.space=space;this.grids=grids;this.radius=space/2;this.skt=skt;setBackground(Color.BLUE);setSize(space*grids,space*grids);addMouseListener(playChessHandler);startChess();}public void startChess(){clearGrids(); //清空棋盘currColor=1;repaint(); //刷新图形private void clearGrids(){for(inti=0;i for(int j=0;j chesses[i][j]=0;}//画一颗棋子private void drawChess(Graphics g,intx,inty,int color){g.setColor(color==1?Color.GREEN:Color.BLACK);g.fillOval(x*space-radius,y*space-radius,radius*2,radius*2);}//画网格private void drawGrids(Graphics g){g.setColor(Color.DARK_GRAY);for(inti=0;i g.drawLine(0,i*space,grids*space,i*space);g.drawLine(i*space,0,i*space,grids*space);}}//接收对方下的棋坐标public void paintChess(intx,int y){if(x=0 && y=0){if(chesses[x][y]==0){chesses[x][y]=currColor;currColor=currColor==1?2:1; //切换棋子的颜色skt.setMouseGo(false);skt.setMouseGo(true);repaint(); //刷新图形}}}//判断游戏是否结束publicbooleangameOver(intgameOver){int five=0;//用于判断是否有连续5个子for(inti=0;i for(int j=0;j if(chesses[i][j]==gameOver){five++;for(in(本文来自:小草范文网:c五子棋实验报告)t k=1;k if(chesses[i][j+k]==gameOver){five++;if(five==5){return true;}else{five=1;k=5;}}for(int k=1;k if(chesses[i+k][j]==gameOver){ five++;if(five==5){return true;}}else{five=1;k=5;}}for(int k=1;k if(chesses[i+k][j+k]==gameOver){ five++;if(five==5){return true;}}else{five=1;k=5;}}for(int k=1;k4;k++){//左斜向比较if(chesses[i+k][j-k]==gameOver){five++;if(five==5){return true;}}else{five=1;}}}}five=0;}return false;}public void paintComponent(Graphics g){ //覆盖paintComponent()方法super.paintComponent(g); //必须先调用父类的方法drawGrids(g); //画网格for(inti=0;i for(int j=0;j if(chesses[i][j]!=0)drawChess(g,i,j,chesses[i][j]); //画棋子}}2、ClientComponentPopupMenu类主要负责聊天的部分,使用JTextField并且对其添加单击事件以及鼠标事件,可以实现文本的剪贴、复制粘贴等功能。

c 五子棋实验报告

c 五子棋实验报告
C五子棋实验报告
引言
五子棋是一种古老的策略游戏,它既考验了玩家的思维能力,又具有很高的娱乐性。

在本次实验中,我们将利用C语言编程,设计一个简单的五子棋游戏,并对其进行实验测试。

实验目的
1. 学习使用C语言进行游戏开发;
2. 设计并实现一个简单的五子棋游戏;
3. 对游戏进行功能测试和性能评估。

实验方法
1. 使用C语言编写五子棋游戏的程序代码;
2. 设计游戏界面和用户交互功能;
3. 实现游戏规则和胜负判定功能;
4. 进行功能测试和性能评估。

实验结果
经过实验,我们成功地设计并实现了一个简单的五子棋游戏。

游戏具有清晰的界面和简单的操作方式,玩家可以轻松上手。

在功能测试中,游戏能够正确判定胜负,且没有出现明显的bug。

在性能评估中,游戏在常见的操作系统上都能够流畅运行,响应速度较快。

实验结论
通过本次实验,我们学习到了使用C语言进行游戏开发的基本方法和技巧。


们成功地设计并实现了一个简单的五子棋游戏,并对其进行了功能测试和性能
评估。

实验结果表明,我们的游戏具有良好的稳定性和性能表现,能够满足玩
家的基本需求。

展望
在未来,我们可以进一步完善游戏的功能和界面设计,增加更多的游戏模式和
挑战性。

我们也可以考虑将游戏移植到其他平台上,以提供更广泛的游戏体验。

同时,我们还可以利用更先进的技术和算法,进一步优化游戏的性能和用户体验。

总之,我们将继续努力,不断改进和完善我们的五子棋游戏,为玩家提供
更好的游戏体验。

五子棋(JAVA版)实习报告及原代码

实习报告课程名称信息系统认知实习实习题目java五子棋专业班级学号学生姓名实习成绩指导教师2010年1月前言摘要五子棋作为一个棋类竞技运动,在民间十分流行,为了熟悉五子棋规则及技巧,以及研究简单的人工智能,决定用Java开发五子棋游戏。

主要完成了人机对战和玩家之间联网对战2个功能。

网络连接部分为Socket编程应用,客户端和服务器端的交互用Class Message定义,有很好的可扩展性,客户端负责界面维护和收集用户输入的信息,及错误处理。

服务器维护在线用户的基本信息和任意两个对战用户的棋盘信息,动态维护用户列表。

在人机对弈中通过深度搜索和估值模块,来提高电脑棋手的智能。

分析估值模块中的影响精准性的几个要素,以及提出若干提高精准性的办法,以及对它们搜索的节点数进行比较,在这些算法的基础上分析一些提高电脑AI方案,如递归算法、电脑学习等。

算法的研究有助于理解程序结构,增强逻辑思维能力,在其他人工智能方面也有很大的参考作用。

1引言1.1课题背景五子棋是起源于中国古代的传统黑白棋种之一。

现代五子棋日文称之为连珠,英译为Renju,英文称之为Gobang或FIR(Five in a Row 的缩写),亦有连五子、五子连、串珠、五目、五目碰、五格等多种称谓。

五子棋起源于古代中国,发展于日本,风靡于欧洲。

对于它与围棋的关系有两种说法,一说早于围棋,早在“尧造围棋”之前,民间就已有五子棋游戏;一说源于围棋,是围棋发展的一个分支。

在中国的文化里,倍受人们的青睐。

本世纪初五子棋传入欧洲并迅速风靡全欧。

通过一系列的变化,使五子棋这一简单的游戏复杂化、规范化,而最终成为今天的职业连珠五子棋,同时也成为一种国际比赛棋。

Java语言是当今最为流行的程序设计语言之一作为一门非常优秀和极为健壮的编程语言,它同时具有的面向对象,与平台无关,分布式应用,安全,稳定和多线程等优良的特征,使用Java语言,不仅可以开发出功能强大的大型应用程序,而且Java语言本身突出的跨平台的特性也使得它特别适合于Internet上的应用开发,可以这样说,Java的出现使得所开发的应用程序“一次编写,处处可用”的实现成为了可能。

java五子棋报告

五子棋一、程序功能介绍设计一个20*20的五子棋盘,由两个玩家交替下子,并且可以实现以下功能:1.鼠标点击横竖线交汇处落子2.通过落子使得五个黑子或者五个白子在一条横线、竖线或斜线上2.重新开始按钮刷新重新开始3. 检查是否实现了五子连珠4. 有一方五子连珠时提示结果5.结束按钮结束程序二、课程设计过程1.如图一:程序流程图2.程序功能设计(1)先写draw类,在类中先画出一个Jframe窗口体,在这个窗口体上增加重新开始,退出,和主棋盘按钮。

并且设置监听按钮的监听。

并在draw类中设置主函数启动程序。

(2)fivechess类实现程序的功能,定义wh_array二维数组表示棋盘。

定义wh_arr一维数组,将wh_array值通过从上往下转换成一维,可用于判断输赢。

定义paintComponent(Graphics g)绘图函数,将整个棋盘给画出。

3.程序中用的变量、方法、类等class fivechess extends JPanel{} //定义变量,落子监听,判断输赢int[][] wh_array = new int[20][20]; // 定义二维数组,表示棋子在棋盘的位置int[] wh_arr = new int[430]; // 定义一维数组,转换二维数组,判断是否连线public void mouseClicked(MouseEvent e) // 单击鼠标落子并且判断输赢public fivechess() {} // 鼠标操作protected void paintComponent(Graphics g) // 绘图函数public Dimension getPerferredSize() //返回期盼大小public class draw extends JFrame {} //添加按钮,设置监听,启动程序public draw() //绘制窗口,增加重新开始和退出按钮b.addActionListener() //重新开始按钮设置监听exit. addActionListener()//退出按钮设置监听public static void main(String args[]){}//主函数启动程序三、程序设计的完整代码及注解//双人对战五子棋import java.awt.*;import java.awt.event.*;import javax.swing.*;class fivechess extends JPanel { // 函数int wh_color, x1, y1, wh_x, wh_y, wh_i, wh_j, wh_arri, wh_stop = 3;// 定义各种整型变量//x1,y1表示坐标wh_x,wh_y圆大小坐标wh_i,wh_j二维数组boolean wh_rf; // 定义布尔型变量,判断玩家String s;int[][] wh_array = new int[20][20]; // 定义二维数组int[] wh_arr = new int[430]; // 定义一维数组public fivechess() { // 鼠标操作for (int i = 0; i < 20; i++) { // 给二维数组赋值为0for (int j = 0; j < 20; j++) {wh_array[i][j] = 0; // 赋值为0}}for (int i = 0; i < 400; i++) { // 给一维数组赋初始值0wh_arr[i] = 0;}addMouseListener(new MouseListener() { // 鼠标监听器public void mouseClicked(MouseEvent e) // 单击鼠标{Graphics g = getGraphics();if (wh_stop == 3) // 当wh_stop==3时运行程序{x1 = e.getX(); // 返回鼠标当前x坐标y1 = e.getY(); // 返回鼠标当前y坐标wh_i = (x1 - 54) / 32; // 计算列值wh_j = (y1 - 34) / 32; // 计算行值wh_arri = 20 * wh_j + wh_i; // 计算二维数组变为一维数组时的对应值if (x1 > 54 && x1 < 694 && y1 > 34 && y1 < 674) // 在棋盘范围内单击鼠标才运行程序{if (wh_array[wh_i][wh_j] == 0) // 当二维数组取值为0时运行程序{wh_rf = !wh_rf; // Boolean值单击后循环变化if (wh_rf == true) // Boolean值为TRUE时{wh_color = 1; // 令wh_color=1s = "黑棋";wh_array[wh_i][wh_j] = 1; // 对应的二维数组值赋为1wh_arr[wh_arri] = 1; // 对应的一维数组赋值为1}if (wh_rf == false) // Boolean值为FALSE时{wh_color = 2; // wh_color为2s = "白棋";wh_array[wh_i][wh_j] = 2; // 对应的二维数组值赋为2wh_arr[wh_arri] = 2; // 对应的一维数组值赋为2}for (int i = 0; i < 20; i++) // 确定鼠标位置的范围{for (int j = 0; j < 20; j++) {if (x1 >= 54 + i * 32&& x1 < 54 + (i + 1) * 32&& y1 >= 34 + j * 32&& y1 < 34 + (j + 1) * 32)// 鼠标在此范围内时{wh_x = 54 + (i) * 32 + 1; // 取这个小方格的左上角x坐标值+1wh_y = 34 + (j) * 32 + 1; // 取这个小方格的左上角y坐标值+1}}}if (wh_color == 1) // 当棋子为黑色时{g.setColor(Color.BLACK); // 设置颜色}if (wh_color == 2) // 如果棋子为白色{g.setColor(Color.WHITE); // 设置颜色}g.fillOval(wh_x, wh_y, 30, 30); // 在这个小方格范围内画圆形}}for (int i = 0; i < 395; i++) // 判断黑白双方谁胜利{g.setColor(Color.RED);if ((wh_arr[i] == 1 && wh_arr[i + 1] == 1&& wh_arr[i + 2] == 1 && wh_arr[i + 3] == 1&& wh_arr[i + 4] == 1 && (i + 4) / 20 == i / 20)|| // 判断横行黑子连续为5个(wh_arr[i] == 1 && wh_arr[i + 20] == 1&& wh_arr[i + 40] == 1&& wh_arr[i + 60] == 1&& wh_arr[i + 80] == 1 && (i + 4) / 20 == i / 20)|| // 判断竖行黑子连续为5个(wh_arr[i] == 1 && wh_arr[i + 19] == 1&& wh_arr[i + 2 * 19] == 1&& wh_arr[i + 3 * 19] == 1&& wh_arr[i + 4 * 19] == 1 && (i - 4) / 20 == i / 20)|| // 判断斜左黑子连续为5个(wh_arr[i] == 1 && wh_arr[i + 21] == 1&& wh_arr[i + 2 * 21] == 1&& wh_arr[i + 3 * 21] == 1 && wh_arr[i + 4 * 21] == 1)) // 判断斜右黑子连续为5个{g.drawString("黑棋胜利", 300, 300); // 显示黑棋胜利wh_stop = 0; // 当胜利时赋值为0,再次运行时将停止}if ((wh_arr[i] == 2 && wh_arr[i + 1] == 2&& // 判断白棋子wh_arr[i + 2] == 2 && wh_arr[i + 3] == 2&& wh_arr[i + 4] == 2 && (i + 4) / 20 == i / 20)|| // 判断横行白子连续为5个(wh_arr[i] == 2 && wh_arr[i + 20] == 2&& wh_arr[i + 40] == 2&& wh_arr[i + 60] == 2&& wh_arr[i + 80] == 2 && (i + 4) / 20 == i / 20)|| // 判断竖行白子连续为5个(wh_arr[i] == 2 && wh_arr[i + 19] == 2&& wh_arr[i + 2 * 19] == 2&& wh_arr[i + 3 * 19] == 2&& wh_arr[i + 4 * 19] == 2 && (i - 4) / 20 == i / 20)|| // 判断斜左白子连续为5个(wh_arr[i] == 2 && wh_arr[i + 21] == 2&& wh_arr[i + 2 * 21] == 2&& wh_arr[i + 3 * 21] == 2 && wh_arr[i + 4 * 21] == 2)) // 判断斜行连续5子{g.drawString("白棋胜利", 300, 300);wh_stop = 0;}}}} // 单击事件结束public void mouseEntered(MouseEvent e) // 鼠标进入组件的事件{}public void mouseExited(MouseEvent e) // 鼠标离开组件的事件{}public void mousePressed(MouseEvent e) // 鼠标按下时的事件{}public void mouseReleased(MouseEvent e) // 鼠标放开时的事件{}}); // 监听器结束addMouseMotionListener(new MouseMotionListener() // 鼠标motion监听{public void mouseMoved(MouseEvent e) // 处理鼠标移动事件{}public void mouseDragged(MouseEvent e) // 处理鼠标拖动事件{}});}protected void paintComponent(Graphics g) // 绘图函数{g.setColor(Color.gray);g.fill3DRect(0, 0, 748, 728, true);g.setColor(Color.BLACK); // 设置颜色for (int i = 0; i < 20; i++) // 循环画棋盘{g.drawLine(70, 50 + i * 32, 678, 50 + i * 32); // 画棋盘的横线g.drawLine(70 + i * 32, 50, 70 + i * 32, 658); // 画棋盘的纵线}g.drawString("五子棋", 300, 30); // 在面板上输出"五子棋"wh_stop = 3; // 刷新后wh_stop由0变为3可以响应buttonfor (int i = 0; i < 20; i++) // 给二维数组赋值为0{for (int j = 0; j < 20; j++) {wh_array[i][j] = 0; // 赋值为0}}for (int i = 0; i < 400; i++) { // 给一维数组赋初始值0 wh_arr[i] = 0;}}public Dimension getPerferredSize() {return new Dimension(748, 728);}}public class draw extends JFrame { // 函数JTextField t;public draw() //{super("五子棋"); // 窗口名Container c = getContentPane(); // 返回当前内容窗值c.setLayout(null);fivechess wh = new fivechess();wh.setBounds(0, 0, 748, 728); // 设置panel大小JButton b = new JButton("重新开始"); // 定义按钮JButton exit = new JButton("退出"); // 定义按钮c.add(exit);c.add(b); // 添加按钮c.add(wh); // 添加panelb.setBounds(70, 20, 100, 20); // 设置按钮大小exit.setBounds(580, 20, 80, 20);b.addActionListener(new ActionListener() // 设置监听{public void actionPerformed(ActionEvent e) {repaint(); // 重画}});exit.addActionListener(new ActionListener() // 设置监听{public void actionPerformed(ActionEvent e) {System.exit(0);}});}public static void main(String args[]) // 主函数{draw app = new draw(); //app.setLocation(300, 0); // 设置窗口位置app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 关闭框架行为属性app.setSize(748, 728); // 设置面板框架frame大小app.setVisible(true); // 设置可见app.setResizable(false);}}四、程序运行的结果分析1.如图二:进入游戏界面2.如图三:落子图三落子3.如图四:结束游戏图四游戏结束五、课程设计总结通过短短的一个学期java的学习,我们从一个对JAVA编程不懂的学生到现在可以试着用JAVA 进行简单程序的设计和编写,也更加了解了面向对象的思想。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4、界面要求
人机界面要容易操作,有比较舒适的背景,遇到禁手、悔棋、保存、胜利 等可弹出对话框。人机交互和谐。
5、测试方案
1. 检验判断胜利:
6
程序设计课程设计报告书
若胜利,则弹出对话框,并显示是何种胜利 2. 检验禁手
7
程序设计课程设计报告书
以上仅列出六种禁手,当然还有跟多情况 3. 检验保存
当按下“保存”图标菜单时,会弹出对话框,可给棋局取个文件名,如“1” 然后单击“保存(S)” 4. 检验打开 重现打开游戏,按下“打开”图标菜单,现在打开“1” 会显示对话框,选择要打开的文件“1” 单击“打开”,则会复盘,显示上次未完成的游戏,继续对弈 5. 悔棋(有个撤销按钮,不便验收展示) 6. 综上,基本实现新局、保存棋局、打开棋局、悔棋、禁手、判断胜利
1.3
加入 Serialize 函数,实现文件的保存与读取 1.4
加入背景,丰富画面效果
1.5
2
程序设计课程设计报告书
目录
目录..................................................................................................................................................... 3 1、引言............................................................................................................................................... 4
4
2010/7/2 张三
5
2010/7/4 张三
6
2010/7/5 张三
创建框架
1.0
加入 OnDraw、OnLButtenDown、OnWzqNewgame、
OnWzqGoback 函数,实现黑白对弈、重开局、 1.1
悔棋等基本功能
加入 Forbid 函数,实现禁手功能
1.2
完善 Forbid 函数,添加更多禁手规则
3
程序设计课程设计报告书
1、引言
1.1 编写目的
学会 MFC 的一些基本操作,会使用其中的部分函数,编写一个五子连珠的小游戏, 游戏由两人对弈,用鼠标操作,执黑子者先下。
1.2 读者对象
计算机专业的学生或对编程感兴趣的学生
1.3 软件项目概述
项目名称:五子棋游戏 简称:五子棋 项目代号:无 软件项目的大致功能和性能要求
4
程序设计课程设计报告书
1.5 定义
1.6 参考资料
《深入浅出 MFC》
《Visual C++6.0 类参考详解》 刘金龙 高兆法 巩玉国 编
《程序设计课程设计》
计算机学院 编
2、任务概述
2.1 目标
可实现两人对弈,用鼠标操作,黑子先下。
2.2 软件的开发和运行环境
系统:Windows XP or Windows7 软件:VC 6.0
2.3 用户特征
双人对弈,熟悉游戏规则的任何用户
2.4 假设与约束
游戏中可能含有比较多的禁手规则使得先下的一方比较难以取得胜利
2.5 进度要求
按期完成用户需求
2.6 验收要求
各项功能如:新局、保存棋局、打开棋局、悔棋、禁手、判断胜利等功能 都能实现
5
程序设计课程设计报告书
3、功能需求描述
可实现两人对弈,用鼠标操作,黑子先下。要求: 1. 设计一个五子连珠类; 2. 记录游戏双方的落子过程,允许悔棋; 3. 实现保存棋谱和根据棋谱复盘的功能; 4. 判断双方输赢,先走出五子连珠的一方赢; 5. 响应用户鼠标信息,并显示棋盘信息; 6. 判断先下者落子禁手情况。
1.1 编写目的..............................................................................................................................4 1.2 读者对象..............................................................................................................................4 1.3 软件项目概述......................................................................................................................4 1.4 文档概述..............................................................................................................................4 1.5 定义......................................................................................................................................5 1.6 参考资料..............................................................................................................................5 2、任务概述....................................................................................................................................... 5 2.1 目标....................................................................................................................................... 5 2.2 软件的开发和运行环境.......................................................................................................5 2.3 用户特征..............................................................................................................................5 2.4 假设与约束..........................................................................................................................5 2.5 进度要求..............................................................................................................................5 2.6 验收要求...............................................................................................................................5 3、功能需求描述............................................................................................................................... 6 3.1 基本功能........................................................................................... 错误!未定义书签。 3.2 增加功能........................................................................................... 错误!未定义书签。 4、界面要求....................................................................................................................................... 6 5、测试方案....................................................................................................................................... 6 6、功能设计..................................................................................................................................... 10 6.1 类的关系描述.....................................................................................................................10 6.2 类的设计............................................................................................................................. 11 7、使用指南..................................................................................................................................... 11 8、维护接口..................................................................................................................................... 11 9、总结............................................................................................................................................. 12
相关文档
最新文档