“java程序设计”——“五子棋”综合实验报告

上传人:101****457 文档编号:100207528 上传时间:2019-09-22 格式:DOCX 页数:64 大小:83.64KB
返回 下载 相关 举报
“java程序设计”——“五子棋”综合实验报告_第1页
第1页 / 共64页
“java程序设计”——“五子棋”综合实验报告_第2页
第2页 / 共64页
“java程序设计”——“五子棋”综合实验报告_第3页
第3页 / 共64页
“java程序设计”——“五子棋”综合实验报告_第4页
第4页 / 共64页
“java程序设计”——“五子棋”综合实验报告_第5页
第5页 / 共64页
点击查看更多>>
资源描述

《“java程序设计”——“五子棋”综合实验报告》由会员分享,可在线阅读,更多相关《“java程序设计”——“五子棋”综合实验报告(64页珍藏版)》请在金锄头文库上搜索。

1、 “Java程序设计”综合实验报告一、前言1、项目背景通过五子棋这个课程设计。可以让我们更加熟悉Java程序设计这门课程,加强对Eclipse这个软件的使用,加深对Java语言的掌握,提高编程水平。同时培养能力,为将来的工作打下坚实的基础。2、 目标和意义 目标:锻炼我们的能力,提高组中每一个人对Java语言的认识,培养编程兴趣。让每一个人都能参与进来,提高团队合作意识。 意义:通过编写综合类的程序,运用已经学过的知识,和自主学习一些新的知识,提高了学习能力,掌握了一些自主学习的方法。3、 开发分工及进度安排二、功能分析1、主要模块 本项目主要分为3个大的模块,分别为整体布局;界面绘制;与对战

2、的算法。由于游戏规则的设置,这里的游戏模式分为人机对战和人人对战。黑白双方依次落子,由黑子先下,当任意一方在棋盘上形成横向,竖向,斜向连续五个相同颜色的棋子的一方获胜。主要功能实现在2种模式下五子棋的游戏。实现通过鼠标的点击位置放置棋子,达到下棋的目的。实现游戏玩家对游戏模式的自主选择。实现对在每种游戏模式下的黑子先手下棋的规定,先达到5子即为胜利。三、关键功能的设计与实现1、数据结构与算法数据结构:项目中主要数据结构为二维数组。用于存储棋盘上棋子的信息,和保存棋型表。主要算法:(一)iswin()函数:用来判断输赢,通过鼠标事件所得到的点或者电脑下的点的坐标,来扫描该点八个方向的相邻的相同棋

3、子数,上下,左右,斜左上下,斜右上下为四组,任意一组等于5即为胜利,由于本程序没有考虑禁手原则,只考虑了民间规则,所以大于5也为胜利。public int iswin1(int x, int y, int heqi) int k, s1, s2, s3, s4, s5, s6, s7, s8;s1 = 0;s2 = 0;s3 = 0;s4 = 0;s5 = 0;s6 = 0;s7 = 0;s8 = 0;if (heqi = 256)return -1;for (k = 1; k 5; k+) if (y + k 16 & qipanqizixy + k = qipanqizixy)s1+;el

4、sebreak;for (k = 1; k -1 & qipanqizixy - k = qipanqizixy)s2+;elsebreak;for (k = 1; k 5; k+) if (x + k 16 & y + k 16& qipanqizix + ky + k = qipanqizixy)s3+;elsebreak;for (k = 1; k -1 & y - k -1& qipanqizix - ky - k = qipanqizixy)s4+;elsebreak;for (k = 1; k 5; k+) if (x + k 16 & qipanqizix + ky = qipa

5、nqizixy)s5+;elsebreak;for (k = 1; k -1 & qipanqizix - ky = qipanqizixy)s6+;elsebreak;for (k = 1; k -1 & y + k 16& qipanqizix - ky + k = qipanqizixy)s7+;elsebreak;for (k = 1; k 5; k+) if (x + k -1& qipanqizix + ky - k = qipanqizixy)s8+;elsebreak;if (s1 + s2 = 4 | s3 + s4 = 4 | s5 + s6 = 4 | s7 + s8 =

6、 4) return 1; elsereturn 0;(二)人机对战通过对整个棋盘上每一个点的扫描,获得了电脑和玩家的棋型表,表中数据为该点的权值。根据权值来考虑下一步应该下在哪里。棋型表中的权值通过引用下表的值来计算。public void renji() int i, j, max, jx = 0, jy = 0, k = 0;max = -10;q = getGraphics();if (gameover = false) if (isblack = true) if (qipanqiziy1x1 = -1) Point linshi = new Point(x1, y1, Color.

7、black);pointii = new Point(linshi, q);isblack = false;qipanqiziy1x1 = 0;/ 0代表黑棋,1代表白棋,-1代表空if (iswin1(y1, x1, ii) = 1) String msg = String.format(恭喜,你赢了!);JOptionPane.showMessageDialog(this, msg);gameover = true;if (iswin1(y1, x1, ii) = -1) String msg = String.format(和棋!);JOptionPane.showMessageDial

8、og(this, msg);gameover = true;ii+;if (isblack = false) qixing();for (i = 0; i 16; i+)for (j = 0; j 16; j+) if (qixingPCij != 0 & max qixingPCij) max = qixingPCij;jx = i;jy = j;for (i = 0; i 16; i+)for (j = 0; j 16; j+) if (qixingPlayerij != 0 & max qixingPlayerij) max = qixingPlayerij;jx = i;jy = j;

9、Point linshi1 = new Point(jy, jx, Color.white);pointii = new Point(linshi1, q);qipanqizijxjy = 1;isblack=true;if (iswin1(jx, jy, ii) = 1) String msg = String.format(哦,你输啦!);JOptionPane.showMessageDialog(this, msg);gameover = true;if (iswin1(jx, jy, ii) = -1) String msg = String.format(和棋!);JOptionPa

10、ne.showMessageDialog(this, msg);gameover = true;ii+;public void qixing() int i, j;for (i = 0; i 16; i+)for (j = 0; j 16; j+) qixingPCij = 0;qixingPlayerij = 0;for (i = 0; i 16; i+) for (j = 0; j 16; j+) if (qipanqiziij = -1) / 此处没有棋子qixingPCij = heng(i, j, 1, 0) + shu(i, j, 1, 0)+ zuoxie(i, j, 1, 0)

11、 + youxie(i, j, 1, 0);qixingPlayerij = heng(i, j, 0, 1) + shu(i, j, 0, 1)+ zuoxie(i, j, 0, 1) + youxie(i, j, 0, 1);public int heng(int hang, int lie, int num1, int num2) / num1当前棋子颜色,num2对方棋子颜色int i;int left = new int4;int right = new int4;for (i = 1; i -1 & qipanqizihanglie - i = num1)lefti - 1 = num1;else if (lie - i -1 & qipanqizihanglie - i = -1)/ 空lefti - 1 = -1;else if (lie - i -1 & qipanqizihanglie - i = num2)/ 不空,为对方棋子lefti - 1 = num2;else if (lie - i = -1)/ 边界,越界置-2lefti - 1 = -2;for (i = 1; i 5; i+)if (lie + i 16 & q

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号