Java程序
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
五子棋
重庆邮电大学
Java程序设计
报告
软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载
书
题 目 ___________________________________
二 级 学 院 ____________________
专 业 名 称 ____________________
班 级 ____________________
学 生 学 号 ____________________
学 生 姓 名 ____________________
指导教师(职称学位) __________________
成 绩 ____________________
二00 年 月
一、 课程设计目的
更好的掌握java编程以及布局和设计。特别是JAVA GUI和API的更好的应用。
二、 课程设计内容
1( 课程设计简介
此课程设计是一个小游戏(五子棋)的实现,主要运用了GUI(用户图形
界面)和API(应用程序借口)来实现。当然,Event侦听等也是这个程序的特色。
此程序没有用到图片的引用,棋盘和棋子的设计完全是应用函数绘制,再加入
复选框,按钮,标签及实现本游戏的用户界面布局。虽然本游戏没有使用一般
游戏使用的Timer刷新,但却用Event侦听,加入了估价函数以及构造策略,
同样完美的实现了一个五指棋人机对战游戏。总之,是一款茶余饭后,无聊打
发时间,老少皆宜的简单小游戏。
2( 设计说明(带功能图)
说实话,这个貌似没啥功能,真还不知道咋描述。那就说说废话:两个复
选框按钮实现电脑先落棋还是人先落棋,以及按钮“开始游戏”和“重置游戏”,
后面就是两个标签记录步数和“OH,MY GOD!YOU WIN!”,“OH,MY GOD!YOU LOSE!”。
棋盘就是用来show。我们还是看图:
用 户 界 面
棋复复按按标标
盘选选钮钮签签
展框框:: ::
示 ::游重赢步
人电戏置或数
先 脑开游输
先 始 戏
3( 设计
流程
快递问题件怎么处理流程河南自建厂房流程下载关于规范招聘需求审批流程制作流程表下载邮件下载流程设计
(带流程图)
运行游戏
游戏初始化
游 白棋赢 戏
用户界面 重 黑棋赢
置 人先 电脑先
人选黑棋 电脑黑棋
判断 电脑白棋 人选白棋
准备就绪
游戏开始 落子
此设计流程图大致就这样,浅显易懂,呵呵。当然,就像简介中说的这事一个事件监听触发游戏,没有Timer。但值得指出的是监听从游戏初始化完成即开始一直到推出本游戏。设计流程这里就不再赘述,相信这图简单得够直观了,对此我也相当郁闷~
4( 实现功能(带实现图)
a. 首先我们先看看初始化好的游戏界面
b. 选择谁先走第一步以及黑白棋的选择。游戏这里设计的是谁先走谁就是黑棋,也就是间接的选择了白子还是黑子。另外还要一起说明的就是选择了黑白子以及谁走第一步之后,尚不能在棋盘上点棋。那么‘游戏开始’按钮点击之后就可以落棋了。如图:
?.人先走(为了和电脑先区别,我们这里没有预先落子)
?.电脑先走(我们可以看见点按哦已经先落子了,并且落子必是在棋盘正中心‘天元’位置)
c. 五子输赢以及便签功能的实现
d.重置游戏。(这里就不在贴图了,因为重置之后就如a的图)
5(详细设计
下面才是此游戏的重点,我们只列举关键的几项:
开始之前,我们先看一下JAVA API这个是学习JAVA必须的。(1.6中文版)
? 包,继承,借口
import java.awt.*;
import javax.swing.*;
*AWT和SWING既是GUI的关键组成,但现目前逐渐被SWT取代*
import java.awt.event.*;
import java.awt.Color;
public class FiveStone extends JPanel implements
ActionListener,MouseListener,MouseMotionListener,ItemListener
*JPanel是轻量级容器,属JComponent的子类*
//ActionListener 用于接收操作事件的侦听器接口。对处理操作事件感兴趣的类可以实现此接口,而使用该类创建的对象可使用组件的 addActionListener
方法
快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载
向该组件注册。在发生操作事件时,调用该对象的 actionPerformed 方法。
//MouseListener 用于接收组件上“感兴趣”的鼠标事件(按下、释放、单击、进入或离开)的侦听器接口。
//MouseMotionListener 用于接收组件上的鼠标移动事件的侦听器接口。 //ItemListener 接收项事件的侦听器接口。特别适于处理项事件的类实现此接口。
?paint与repaint
public void paint(Graphics g)//覆盖javax.swing.JComponent.paint {
draw_qipan(g);
}
public void Game_re() //游戏重新开始
{
repaint();//重绘此组件。 如果此组件是轻量级组件,则此方法会尽快调用此组件的 paint 方法。否则此方法会尽快调用此组件的 update 方法。
Game_start_csh();
}
这里paint进行重写,实例化主类调用构造函数时一起调用,并且paint不能直接调用,必需要repaint来,在调用repaint的时候程序会尽快调用paint。这点非常重要~ 这里只做需要的简单介绍,那重写的paint里提到画棋盘,那么我们简单说说画棋盘。
public void draw_qipan(Graphics G) //画棋盘 15*15
{
G.setColor(Color.lightGray);//背景色
G.fill3DRect(10,10,500,500,true);//绘制一个用当前颜色填充的 3-D 高亮显示矩形。矩形的边是高亮显示的,以至于从左上角看呈斜面并加亮。高亮显示效果所用的颜色根据当前颜色确定。
G.setColor(Color.black);
for(int i=1;i<16;i++)
{
G.drawLine(20,20*i,300,20*i);
G.drawLine(20*i,20,20*i,300);
}
G.fillOval(158,158,6,6);
G.fillOval(77,77,6,6);
G.fillOval(77,237,6,6);
G.fillOval(237,77,6,6);
G.fillOval(237,237,6,6);
}
drawLine既是画棋盘,前一个调用函数画横线,后一个画竖线。fillOval前两个参数是在frame中的坐标,后一个是画的矩形的大小,第一个画‘天元’,后四个画‘星位’。 ?Event监视
public void mousePressed(MouseEvent e){}//“鼠标按下”事件。鼠标按下时生效
public void mouseClicked(MouseEvent e)//"鼠标点击"事件。鼠标按下释放时生效
{
//Graphics g=getGraphics();
int x1,y1;
x1=e.getX();//返回事件相对于源组件的水平 x 坐标。
y1=e.getY();//返回事件相对于源组件的水平 y 坐标。
if (e.getX()<20 || e.getX()>300 || e.getY()<20 || e.getY()>300)
{
return;
}
if (x1%20>10)
{
x1+=20;
}
if(y1%20>10)
{
y1+=20;
}
x1=x1/20*20;
y1=y1/20*20;
set_Qizi(x1,y1);
}
public void mouseEntered(MouseEvent e){}//鼠标进入事件
public void mouseExited(MouseEvent e){}//鼠标退出事件
public void mouseReleased(MouseEvent e){}//鼠标释放事件
public void mouseDragged(MouseEvent e){}//鼠标点中拖拉移动事件
public void mouseMoved(MouseEvent e){}//鼠标移动事件 在这些函数中,没有进行重写的都不具备实在意义,mouseClicked(MouseEvent e)在本游戏中才有实在意义。即:鼠标点击落子,鼠标点击按钮,鼠标点击复选框,鼠标点击最小化最大化以及退出。
?人工智能
在这个游戏中,我们需要电脑像我们一样,堵住对方的棋和布局自己的棋,但是我们要怎样实现这样抽象的东西呢,这时候我们需要估计函数及其构造策略。简单的说就是电脑在判断下一步棋的最有价值的走法,在15*15的棋盘上的可落子点进行评估。
我们先从五子棋步数由少到多说起:
AutoPlay.java当棋子才开始只有一两步时,这时周围的落子点的价值都差不多,所以看 public class AutoPlay{
int x,y;
void autoPlay(int chesspad[][],int a,int b){
int randomNumber=(int)(Math.random()*8)+1;
switch(randomNumber){
case(1):
...
case(2):
...
case(3):
...
case(4):
...
case(5): 中
...
case(6):
...
case(7):
...
case(8):
...
}
}
}//针对八种
方案
气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载
,随机一点即可。看右图
Scan.java当针对三步及以上时,周围的落子点的价值就会出现明显的偏差,我们看,这里
我们不再粘贴代码,直接到源文件就可以:
public class Scan{
int shape[][][]=new int[16][16][5];//java对于未赋值的数组元素初始化赋为
0,对越界数组在编译时可以通过,在解释的时候提示错误。
void scan(int chesspad[][],int colour){//查看八方向上相邻同色棋子个数
int i,j;
for(i=1;i<=15;i++){
for(j=1;j<=15;j++){
if(chesspad[i][j]==0){
int m=i,n=j;
向上 向下-------竖线
向左 向右-------横线
左上 右下-------左斜线
左下 右上-------右斜线
}
}
}
}
}
shape[i][j][0] shape[i][j][1] shape[i][j][2] shape[i][j][3] 用于横七竖八
连接棋子的数目; shape[i][j][4]用于权值的记录 看图:
横 七 竖 八 然后在用Sort.java给shape[i][j][0] shape[i][j][1] shape[i][j][2]
shape[i][j][3]排序,最大值排前。
Evaluate.java最后是估计函数和搜索策略:
public class Evaluate{
int max_x,max_y,max;
public void evaluate(int shape[][][]){
int i=1,j=1;
for(i=1;i<=15;i++)
for(j=1;j<=15;j++){
switch(shape[i][j][0]) {
case 5:实现五子相连给予最高权值
case 4:若第一没有五子只有四子情况
switch(shape[i][j][1]){
case 4:当排序中第一与第二值等为4,给予权值
shape[i][j][4]=150+shape[i][j][2]+shape[i][j][3];
case 3:当排序中第二值为3,给予权值
shape[i][j][4]=100+shape[i][j][2]+shape[i][j][3];
default:剩下情况,连子少在其线上落子的价值就低,给予权值
shape[i][j][4]=50+shape[i][j][2]+shape[i][j][3];
}
break;
case 3:若第一只有三子的情况
switch(shape[i][j][1]){
case 3:当排序第一与第二值等为3,给予权值
shape[i][j][4]=75+shape[i][j][2]+shape[i][j][3];
default: 剩下情况,连子少在其线上落子的价值就低,给予权值
shape[i][j][4]=20+shape[i][j][2]+shape[i][j][3];
}
break;
case 2:若第一只有两子的情况给予权值
shape[i][j][4]=10+shape[i][j][1]+shape[i][j][2]+shape[i][j][3];
break;
case 1:若只有一子给予权值
shape[i][j][4]=shape[i][j][0]+shape[i][j][1]+shape[i][j][2]+shape[i][j][3];
default :
shape[i][j][4]=0;无子则为零
}
}
int x=1,y=1;
max=0;
for(x=1;x<=15;x++)
for(y=1;y<=15;y++)
if(max
本文档为【Java程序设计 五子棋】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。