Java课程设计报告模板算法类Word文档格式.docx
- 文档编号:17964024
- 上传时间:2022-12-12
- 格式:DOCX
- 页数:17
- 大小:110.25KB
Java课程设计报告模板算法类Word文档格式.docx
《Java课程设计报告模板算法类Word文档格式.docx》由会员分享,可在线阅读,更多相关《Java课程设计报告模板算法类Word文档格式.docx(17页珍藏版)》请在冰豆网上搜索。
初始化棋盘
2
Autoplay
实现电脑可以自动下棋
分为8种情况
3
Scan
扫描整个棋盘记录连在一起的黑白棋子数
为判断胜负服务
4
Sort
实现人与电脑有次序的下棋
黑棋白棋有序的下
5
Judge
判断人与电脑的胜负
可以在文本框中显示胜负结果
6
Evaluate
电脑估计
为电脑下棋提供帮助
1.5项目构建思路
此程序旨在打造一个小型五子棋娱乐游戏,经过认真分析和探索。
终于,在大家的共同努力之下,完成了这个小型五子棋游戏。
游戏编辑思路,五子棋是一种互动性的益智游戏。
需要棋盘、棋子、棋手、裁判。
首先,我们绘制一个五子棋棋盘,关键代码如下:
//绘制棋盘函数
publicvoidpaint(Graphicsg){
for(inti=40;
i<
=400;
i=i+20){
g.drawLine(40,i,400,i);
}//绘制棋盘行
for(intj=40;
j<
j=j+20){
g.drawLine(j,40,j,400);
}//绘制棋盘列
g.fillOval(97,97,6,6);
//使用当前颜色填充外接指定矩形框的椭圆
g.fillOval(337,97,6,6);
g.fillOval(97,337,6,6);
g.fillOval(337,337,6,6);
g.fillOval(217,217,6,6);
}
其次,我们生成两种颜色不一样的棋子,关键代码如下:
黑色棋子代码如下:
//ChessPoint_black类继承Canvas类
classChessPoint_blackextendsCanvasimplementsMouseListener{
ChessPadchesspad=null;
ChessPoint_black(ChessPadp){
setSize(20,20);
//设置棋盘每一小格的长宽
addMouseListener(this);
chesspad=p;
g.setColor(Color.black);
//设置黑色棋子的颜色
g.fillOval(0,0,18,18);
//使用黑色填充椭圆棋子
白色棋子代码如下:
classChessPoint_whiteextendsCanvasimplementsMouseListener{
ChessPoint_white(ChessPadp){
publicvoidpaint(Graphicsg){//绘制棋子的颜色
g.setColor(Color.white);
//设置为白色
//填充白子
再次,为实现双方行棋,我们实现了电脑自动下棋的函数,一共分为8种情况,关键代码如下:
classAutoPlay{//AutoPlay类实现电脑可以自动下棋
intx,y;
//X统计玩家的连起来的棋子数
//Y电脑玩家的连起来的棋子数
voidautoPlay(intchesspad[][],inta,intb){
intrandomNumber=(int)(Math.random()*8)+1;
//获取一个随机数
switch(randomNumber){//分情况实现电脑自动下棋
case
(1):
//通过a,b的值执行不同的运算,最后返回不同的
//值。
达到执行不同的操作。
if(chesspad[a-1][b-1]==0)
{x=a-1;
y=b-1;
}
if(chesspad[a-1][b+1]==0)
y=b+1;
}
elseif(chesspad[a-2][b-2]==0)
{x=a-2;
y=b-2;
else{x=a-3;
y=b-3;
break;
case
(2):
if(chesspad[a-1][b]==0)
y=b;
elseif(chesspad[a-2][b]==0)
case(3):
elseif(chesspad[a-2][b+2]==0)
y=b+2;
y=b+3;
case(4):
if(chesspad[a][b+1]==0)
{x=a;
elseif(chesspad[a][b+2]==0)
else{x=a;
case(5):
if(chesspad[a+1][b+1]==0)
{x=a+1;
elseif(chesspad[a+2][b+2]==0)
{x=a+2;
else{x=a+3;
case(6):
if(chesspad[a+1][b]==0)
elseif(chesspad[a+2][b]==0)
case(7):
if(chesspad[a+1][b-1]==0)
elseif(chesspad[a+2][b-2]==0)
case(8):
if(chesspad[a][b-1]==0)
elseif(chesspad[a][b-2]==0)
else{x=a;
第四,为规范双方行棋的先后顺序,我们实现了一个判断函数,关键代码如下:
classSort{//sort类实现人与电脑有次序的下棋
publicvoidsort(intshape[][][]){
inttemp;
for(inti=0;
19;
i++)
for(intj=0;
j++){
for(inth=1;
h<
=4;
h++){
for(intw=3;
w>
=h;
w--){
if(shape[i][j][w-1]<
shape[i][j][w]){
//如果前者小于后者,则交换
temp=shape[i][j][w-1];
shape[i][j][w-1]=shape[i][j][w];
shape[i][j][w]=temp;
}
第五,脑只是简单的执行代码,没有智能思考的能力。
在行棋之前,他需要对整个棋盘上的棋子做一个判断,然后决定该怎么行棋,关键代码如下:
classEvaluate{//Evaluate类
intmax_x,max_y,max;
publicvoidevaluate(intshape[][][]){
inti=0,j=0;
for(i=0;
for(j=0;
switch(shape[i][j][0]){
//电脑根据传进来的三维数组决定该怎么行棋,
case5:
shape[i][j][4]=200;
case4:
switch(shape[i][j][1]){
shape[i][j][4]=150+shape[i][j][2]+
shape[i][j][3];
case3:
shape[i][j][4]=100+
shape[i][j][2]+
default:
shape[i][j][4]=50+
shape[i][j][2]+
shape[i][j][3];
shape[i][j][4]=75+
shape[i][j][4]=20+
case2:
shape[i][j][4]=10+shape[i][j][1]
+shape[i][j][2]
+shape[i][j][3];
case1:
shape[i][j][4]=shape[i][j][0]+shape[i][j][1]
default:
shape[i][j][4]=0;
intx=0,y=0;
max=0;
for(x=0;
x<
x++)
for(y=0;
y<
y++)
if(max<
shape[x][y][4]){
max=shape[x][y][4];
max_x=x;
max_y=y;
第六,在双方行棋后,我们需要判断那一方赢。
裁判的功能代码如下
//判断人与电脑的胜负
classJudge{
staticbooleanjudge(inta[][],intcolor){
inti,j,flag;
i++){//行
flag=0;
j++)//列
if(a[i][j]==color){
flag++;
//棋子计数器
if(flag==5)//如果棋子数等于5
returntrue;
}//返回true
elseflag=0;
//返回false
if(a[i][j]==color)//每一列的棋子颜色一样
{
flag++;
if(flag==5)//棋子数为5
}//返回true否则返回true
for(j=4;
intm=j;
=j;
i++){
if(a[i][m--]==color){//对角线棋字数一样
if(flag==5)//为5则返回true
}//棋子计数器归零
for(j=14;
j>
=0;
j--){
=18-j;
if(a[i][m++]==color){//对角线棋子数是否一样
if(flag==5)
}//棋子书为5则返回true
}//否则归零
for(i=14;
i>
i--){
intn=i;
19-i;
if(a[n++][j]==color){
if(flag==5)
for(i=18;
if(a[i][m++]==color){
returnfalse;
最后,我们最终的程序是急于可视化的,所以,需要容器及组建来实现,关键代码如下:
classChessPadextendsPanelimplementsMouseListener,ActionListener{
//创建棋盘
intarray[][]=newint[19][19];
//创建二维数组,生成棋盘
Sortsort=newSort();
inti=0;
//控制棋子颜色
intx=-1,y=-1,棋子颜色=1;
Buttonbutton=newButton("
重新开局"
);
//确定按钮
TextFieldtext_1=newTextField("
请黑棋下子"
),//创建文本组件并初始化第一个
text_2=newTextField(),
text_3=newTextField();
ChessPad(){//ChessPad函数的构造函数
setSize(440,440);
//
setLayout(null);
setBackground(Color.pink);
//设置背景为粉色
add(button);
//向组件添加指定的重新开局菜单
button.setBounds(10,5,60,26);
//移动组件并调整其大小。
由x和y指定左上角的新位置,由width和height指定新的大小。
button.addActionListener(this);
//添加指定的操作侦听器,以接收来自此按钮的操作事件
add(text_1);
text_1.setBounds(90,5,90,24);
add(text_2);
text_2.setBounds(290,5,90,24);
add(text_3);
text_3.setBounds(200,5,80,24);
j++)
{array[i][j]=0;
}//初始化数组为0
j++)
for(inth=0;
5;
h++)
{scanp.shape[i][j][h]=0;
scanc.shape[i][j][h]=0;
}//初始化三维数组为0
text_1.setEditable(false);
text_2.setEditable(false);
//设置文本组件为不可编辑
第二章模块功能介绍
2.1主类Chess
(1)成员变量见表2-1
表2-1主要成员变量(属性)
成员变量描述
变量类型
名称
控制棋子颜色
int
i
重新开局
Button
请黑棋下子
TextField
text_1
请白棋下子
text_2
这是第"
+i+"
步
text_3
(2)方法见表2-2
表2-2主要方法
方法名称
返回类型
功能
ChessPad()
设置棋盘颜色,
Voidpaint(Graphicsg)
对棋子等图像进行初始化
设置棋子大小,颜色等
PublicvoidmousePressed(MouseEvente)
鼠标的实践监听
单击实践
publicvoidmousePressed(MouseEvente)
publicvoidpaint(Graphicsg)
画出图像
控制图像的大小范围
处理按下鼠标的事件
选中下棋的位置
publicvoidmouseReleased(MouseEvente)
处理鼠标离开的事件
本步下棋结束
publicvoidmouseExited(MouseEvente)
处理鼠标离开棋盘时
鼠标离开组件不实现任何事件
publicvoidmouseClicked(MouseEvente)
处理发生单击的事件
实现下棋以及重新开始游戏
(3)源代码见文件Chess.java中的公共类Chess
2.2类Autoplay
(1)成员变量见表2-3
表2-3主要成员变量
统计玩家的连起来的棋子数
X
电脑玩家的连起来的棋子数
Int
Y
(2)方法见表2-4
表2-4主要方法
方法名
voidautoPlay(intchesspad[][],inta,intb)
分情况实现电脑自动下棋
使用switch语句分为8种情况来下棋
(3)源代码见文件Chess.java中的Autoplay类
2.3类Scan
(1)成员变量见表2.5
表2-5Scan
统计棋盘种五个连起来的棋子数
数组
intshape[][][]
控制行数
控制列数
j
(2)方法见表2.6
表2-6Scan
voidscan(intchesspad[][],intcolour){
判断棋盘上连在一起的黑白棋子个数。
(3)源代码见文件Chess.java中的Scan类
第三章功能测试及运行效果
3.1系统主界面
图3-1初始化棋盘效果,玩家为黑棋。
图3-2可以统计下棋步数,与下棋的位置。
图3-3可以实现胜负的判断,并终止游戏。
3.2参考文献
3.3总结
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 课程设计 报告 模板 算法
![提示](https://static.bdocx.com/images/bang_tan.gif)