五子棋实训报告电子版.docx
- 文档编号:26222171
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:15
- 大小:18.65KB
五子棋实训报告电子版.docx
《五子棋实训报告电子版.docx》由会员分享,可在线阅读,更多相关《五子棋实训报告电子版.docx(15页珍藏版)》请在冰豆网上搜索。
五子棋实训报告电子版
《JAVA程序设计》实训报告
课程名称:
JAVA程序设计
专业:
计算机应用技术
班级:
11计算机应用班
小组成员:
巨敏石丽涛张娅雯李延
尚文学董丁喜周致远
指导老师:
武文廷
一.实训目的·································1
二.实训题目和要求
2.1实训题目描述·······························1
2.2实训要求··································1
三.实训报告内容
3.1五子棋主框架·································1
3.2棋盘、棋子及说明信息··························1
3.3对弈算法相关问题设计··························1
四.实训中的部分代码·····························2
五.五子棋源程序代码·····························3
六.总结··········································17
一、实训目的
本次实训,学生可以将理论知识与具体实践相结合,巩固对JAVA相关方法和概念的理解。
通过实训单机版五子棋游戏的编程,掌握JAVA语言编程的基础知识并能熟练运用,熟悉累声明与对象的使用,运用JAVAswing编写单机版五子棋游戏,并实现其功能。
通过本次实训,可以开拓思维,增强编程思想,为深入学习JAVA打下良好的基础。
二、实训题目描述和要求
2.1实训题目描述
实训题目:
JAVA五子棋单机版游戏。
描述:
通过JAVA的swing组件,实现五子棋简单的双人对弈,并通过内部条件判断实现输赢的双方的下棋过程。
2.2实训要求
(1)五子棋游戏的主窗口也就是游戏界面的实现
(2)棋子黑白色的设置及判定
(3)完成判断某一横行是否练成五子及所有方向是否练成五子的功能
(4)几个简单按钮的实现,“重新开始”“悔棋”“退出”按钮
(5)菜单栏的实现,“重新开始”“悔棋”“退出”菜单项
三、实训报告内容
3.1主框架
编写一个startCheesJFrame类,主要用来显行主窗体界面,包括工具条面板、菜单栏项。
设置界面关闭事件。
并编写一个内部类MyItemListener来监听按钮和菜单栏的单机事件。
3.2棋盘、棋子
(1)编写point类,包括棋子的X/Y索引,颜色。
定义构造函数和相应的get方法。
(2)编写ChessBoard类,设置棋盘背景颜色为橘黄色
(3)在主框架类中创建ChessBoard对象,并添加到主框架中
(4)编写mousePressed方法来进行绘制棋盘和棋子
3.3对弈算法相关问题设计
(1)编写mousePressed方法的内容,预定义isBlack表示下的是黑棋还是白棋。
PointCount表示当前棋子的个数。
(2)添加相应的判断:
不能画到棋盘外,下过的地方不能再下(需要辅助方法findpoint)。
(3)添加胜利的判断iswin,添加标记变量gameOver。
在mousePressed方法的最前面调用加入gameOver的判断,在mousePressed方法的最后调用iswin,返回true则给出消息提示,gameOver设置为tuer。
四、实训中的部分代码
PrivateChessBoardchessboard;
PrivateJPaneltoolbar;
PrivateJButtonshartButton;
PrivateJButtonbackButton;
PrivateJButtonexiButton;
Publicclasspoint{
Privateintx;
Privateinty;
Privatecolorcolor;
PublicstaticfinalintDIAMETER=30;
Publicpointlintx,inty,colorcolor{
This.X=x;
This.y=y;
This.color=color;
}
PublicstartChessJFrame(){
SetTitle(“单机版五子棋”);
chessboard=newchessboard();
menuBar=newJMenuBar();
sysMenu=newJMenu(“系统”);
startMenuItem=newJMenuItem(“重新开始”);
exitMenuItem=newJMenuItem(“退出”);
backMenuItem=newJMenuItem(“悔棋”);
sysMenu.add(startMenuItem);
五、五子棋源程序代码
//StartChessFrame
importjavax.swing.*;
import;
importjava.awt.*;
publicclassStartChessFrameextendsJFrame{
privateChessBoardchessBoard;
privateJPaneltoolbar
privateJButtonstartButton,backButton,exitButton;
privateJMenuBarmenuBar;
privateJMenusysMenu;
privateJMenuItemstartMenuItem,exitMenuItem,backMenuItem;
publicStartChessFrame(){
setTitle("单机版五子棋");
chessBoard=newChessBoard();
menuBar=newJMenuBar();
sysMenu=newJMenu("系统");
startMenuItem=newJMenuItem("重新开始");
exitMenuItem=newJMenuItem("退出");
backMenuItem=newJMenuItem("悔棋");
sysMenu.add(startMenuItem);
sysMenu.add(backMenuItem);
sysMenu.add(exitMenuItem);
MyItemListenerlis=newMyItemListener();
;
backMenuItem.addActionListener(lis);
exitMenuItem.addActionListener(lis);
menuBar.add(sysMenu);
setJMenuBar(menuBar);
import;
publicclassPoint{
privateintx;
privateinty;
privateColorcolor;
publicstaticfinalintDIAMETER=30;
publicPoint(intx,inty,Colorcolor){
this.x=x;
this.y=y;
this.color=color;
}
publicintgetX(){
returnx;
}
publicintgetY(){
returny;
}
publicColorgetColor(){
returncolor;
}
}
toolbar=newJPanel();
startButton=newJButton("重新开始");
backButton=newJButton("悔棋");
exitButton=newJButton("退出");
toolbar.setLayout(newFlowLayout(FlowLayout.LEFT));
toolbar.add(startButton);
toolbar.add(backButton);
toolbar.add(exitButton);
startButton.addActionListener(lis);
backButton.addActionListener(lis);
exitButton.addActionListener(lis);
add(toolbar,BorderLayout.SOUTH);
add(chessBoard);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//setSize(800,800);
pack();
}
privateclassMyItemListenerimplementsActionListener{
publicvoidactionPerformed(ActionEvente){
Objectobj=e.getSource();
if(obj==||obj==startButton)
{
"重新开始...");
chessBoard.restartGame();
}elseif(obj==exitMenuItem||obj==exitButton){
System.exit(0);
}elseif(obj==backMenuItem||obj==backButton){
"悔棋...");
chessBoard.goback();
}
}
}
publicstaticvoidmain(String[]args){
StartChessFramef=newStartChessFrame();
f.setVisible(true);
}
}
//ChessBoard
importjavax.swing.*;
importjava.awt.*;
import;
import;
import;
publicclassChessBoardextendsJPanelimplementsMouseListener{
publicstaticfinalintMARGIN=30;
publicstaticfinalintGRID_SPAN=35;
publicstaticfinalintROWS=10;
publicstaticfinalintCOLS=10;
Point[]chessList=newPoint[(ROWS+1)*(COLS+1)];
booleanisBlack=true;
booleangameOver=false;
intchessCount;
intxIndex,yIndex;
publicChessBoard()
{
setBackground(Color.ORANGE);
addMouseListener(this);
addMouseMotionListener(newMouseMotionListener(){
publicvoidmouseDragged(MouseEvente){
}
publicvoidmouseMoved(MouseEvente){
intx1=(e.getX()-MARGIN+GRID_SPAN/2)/GRID_SPAN;
inty1=(e.getY()-MARGIN+GRID_SPAN/2)/GRID_SPAN;
if(x1<0||x1>ROWS||y1<0||y1>COLS||gameOver
||findChess(x1,y1))
setCursor(newCursor(Cursor.DEFAULT_CURSOR));
else
setCursor(newCursor(Cursor.HAND_CURSOR));
}
});
}
publicvoidpaintComponent(Graphicsg){
super.paintComponent(g);
for(inti=0;i<=ROWS;i++){
g.drawLine(MARGIN,MARGIN+i*GRID_SPAN,MARGIN+COLS
*GRID_SPAN,MARGIN+i*GRID_SPAN);
}
for(inti=0;i<=COLS;i++){
g.drawLine(MARGIN+i*GRID_SPAN,MARGIN,MARGIN+i*GRID_SPAN,
MARGIN+ROWS*GRID_SPAN);
}
for(inti=0;i intxPos=chessList[i].getX()*GRID_SPAN+MARGIN; intyPos=chessList[i].getY()*GRID_SPAN+MARGIN;g.setColor(chessList[i].getColor()); g.fillOval(xPos-Point.DIAMETER/2,yPos-Point.DIAMETER/2, Point.DIAMETER,Point.DIAMETER); if(i==chessCount-1){ g.setColor(Color.red); g.drawRect(xPos-Point.DIAMETER/2, yPos-Point.DIAMETER/2,Point.DIAMETER, Point.DIAMETER); } } } publicvoidmousePressed(MouseEvente){ if(gameOver) return; StringcolorName=isBlack? "黑棋": "白棋"; xIndex=(e.getX()-MARGIN+GRID_SPAN/2)/GRID_SPAN; yIndex=(e.getY()-MARGIN+GRID_SPAN/2)/GRID_SPAN; if(xIndex<0||xIndex>ROWS||yIndex<0||yIndex>COLS) return; if(findChess(xIndex,yIndex)) return; Pointch=newPoint(xIndex,yIndex,isBlack? Color.black: Color.white); chessList[chessCount++]=ch; repaint(); if(isWin()){ Stringmsg=String.format("恭喜,%s赢了! ",colorName); JOptionPane.showMessageDialog(this,msg); gameOver=true; } isBlack=! isBlack; } publicvoidmouseClicked(MouseEvente){ } publicvoidmouseEntered(MouseEvente){ } publicvoidmouseExited(MouseEvente){ } publicvoidmouseReleased(MouseEvente){ } privatebooleanfindChess(intx,inty){ for(Pointc: chessList){ if(c! =null&&c.getX()==x&&c.getY()==y) returntrue; } returnfalse; } privatebooleanisWin(){ intcontinueCount=1; for(intx=xIndex-1;x>=0;x--){ Colorc=isBlack? Color.black: Color.white; if(getChess(x,yIndex,c)! =null){ continueCount++; }else break; } for(intx=xIndex+1;x<=ROWS;x++){ Colorc=isBlack? Color.black: Color.white; if(getChess(x,yIndex,c)! =null){ continueCount++; }else break; } if(continueCount>=5){ returntrue; }else continueCount=1; for(inty=yIndex-1;y>=0;y--){ Colorc=isBlack? Color.black: Color.white; if(getChess(xIndex,y,c)! =null){ continueCount++; }else break; } for(inty=yIndex+1;y<=ROWS;y++){ Colorc=isBlack? Color.black: Color.white; if(getChess(xIndex,y,c)! =null){ continueCount++; }else break; } if(continueCount>=5){ returntrue; }else continueCount=1; for(intx=xIndex+1,y=yIndex-1;y>=0&&x<=COLS;x++,y--){ Colorc=isBlack? Color.black: Color.white; if(getChess(x,y,c)! =null){ continueCount++; }else break; } for(intx=xIndex-1,y=yIndex+1;y<=ROWS&&x>=0;x--,y++){ Colorc=isBlack? Color.black: Color.white; if(getChess(x,y,c)! =null){ continueCount++; }else break; } if(continueCount>=5){ returntrue; }else continueCount=1; for(intx=xIndex-1,y=yIndex-1;y>=0&&x>=0;x--,y--){ Colorc=isBlack? Color.black: Color.white; if(getChess(x,y,c)! =null){ continueCount++; }else break; } for(intx=xIndex+1,y=yIndex+1;y<=ROWS&&x<=COLS;x++,y++){ Colorc=isBlack? Color.black: Color.white; if(getChess(x,y,c)! =null){ continueCount++; }else break; } if(continueCount>=5){ returntrue; }else continueCount=1; returnfalse; } privatePointgetChess(intxIndex,intyIndex,Colorcolor){ for(Pointc: chessList){ if(c! =null&&c.getX()==xIndex&&c.getY()==yIndex &&c.getColor()==color) returnc; } returnnull; } publicvoidrestartGame(){ for(inti=0;i chessList[i]=null; isBlack=true; gameOver=false; chessCount=0; repaint(); } publicvoidgoback(){ if(chessCount==0) return; chessList[chessCount-1]=null; chessCount--; if(chessCount>0){ xIndex=chessList[chessCount-1].getX
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 五子棋 报告 电子版
![提示](https://static.bdocx.com/images/bang_tan.gif)