中国象棋DWord格式文档下载.docx
《中国象棋DWord格式文档下载.docx》由会员分享,可在线阅读,更多相关《中国象棋DWord格式文档下载.docx(25页珍藏版)》请在冰豆网上搜索。
![中国象棋DWord格式文档下载.docx](https://file1.bdocx.com/fileroot1/2022-11/17/343fd129-8d48-4ee7-a08c-d447af35f9e7/343fd129-8d48-4ee7-a08c-d447af35f9e71.gif)
(2)代码编写
在编写代码部分,我们组遇到了许多问题,因为是从未接触过的知识,所以在编程过程中经常报错,为了在规定时间内完成任务,我们组就现学现用,在网上下载相关的代码,结合Java_API手册一遍又一遍的反复读,手册上没有的类就上网查,遇到英文就用翻译软件翻译了来看,最后再一步又一步的解决编程过程中的一个个error
首先介绍一点必备的Java3D相关知识
Java3D的场景图结构:
Java3D实际上是Java语言在三维图形领域的扩展,与Java一样,Java3D有纯粹的面向对象结构。
Java3D的数据结构采用的是Scene
Graphs
Structure(场景图),就是一些具有方向性的不对称图形组成的树状结构(图1)。
我们在一个Java3D应用程序看到的逼真三维场景从程序的角度看来,实际就是由Java3D定义的一系列的对象,这些对象不是杂乱无序,对象之间也不是毫无关系。
如果想让三维图像正常显示,必须在这两点上遵循Java3D场景图的规定。
观察图1,Java3D场景图的树结构由各种各样的对象组成:
在图中出现的这些对象都实现了Java3D中有重要的意义的类,从逻辑上我们将它们分为三类:
•根节点(Root):
Virtual
Universe
Object
•节点(Node):
Local
Object、Branch
Group
Nodes、Behavior
Node、Shape3D
Node…
•叶子节点(Leaf):
Appearance、Geomery..
图1:
在应用中的Java3D场景图
场景图中线和线的交汇点称为节点(Node),这些节点都是Java3D类的实例(Instance
of
Class),节点之间的线表示各个实例之间的关系。
•Virtual
Universe是根节点,每一个场景图的Virtual
Universe是唯一的。
•在Virtual
Universe下面是Locale节点,每个程序可以有一个或多个Locale,但同时只能有一个Locale处于显示状态,就好象一个三维世界非常大,有很多个景点,但我们同时只能在一个景点进行观察。
Java3D允许从一个Locale跳到另一个Locale,不过绝大多数程序只有一个Locale。
•每一个Locale可以拥有多个BranchGroup节点。
所有三维形体的其位置信息(Transform
Group
Nodes)都建立在BranchGroup节点之上。
•TransformGroup
Node用来设定Shape3D在Virtual
Universe中的位置。
•Spape3D
Node是三维图形节点,这个节点的实体放映在最后的显示画面中,就是三维世界中的每个形体。
包括正方体、球体以及任何形状和外观的三维形体。
•位于场景图最下层的是两个叶子节点:
三维体的外观(Appearance)和几何信息(Geometry),这两个节点定义了一个三维体的显示效果。
•View
Platform位于图1的另一个分枝上,与前面所有描述三维体的性质的概念不同,View
Platform和View都是用来定义观察者的信息。
上面所列的概念很多,但是对于建立一个简单的Java3D程序,我们至少需要了解三个概念:
虚拟宇宙(Virtual
Universe)、场景(Locale)、坐标系统。
下面是一些相关代码的具体实现:
1.制作象棋程序的窗体
privateChessFram(){
setpanel=newSetPanel();
ﻩﻩcanvasfactroy= newCanvasFactroy(SimpleUniverse.getPreferredConfiguration());
ﻩthis.setSize(660,600);
ﻩthis.setResizable(false);
ﻩthis.setLocationRelativeTo(null);
this.setTitle("
中国象棋3D"
);
ﻩﻩthis.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.add(canvasfactroy.getCanvas3D(),BorderLayout.CENTER);
ﻩthis.add(setpanel,BorderLayout.EAST);
}
比较简单,就不介绍了
2.构建棋板
publicCanvasFactroy(GraphicsConfiguration config){
ﻩcanvas3d =newCanvas3D(config);
ﻩbounding = newBoundingSphere(new Point3d(0,0,0), 1000);
ﻩﻩstartabs= newAbsChess('
炮'
newPoint(2,3),Color.red);
//开始节点信息
ﻩendabs =newAbsChess('
'
newPoint(3,3),Color.red);
//结束节点信息
ﻩﻩSimpleUniverse universe =new SimpleUniverse(canvas3d);
//创造一个虚拟场景
ﻩBranchGroupbranchgroup =newBranchGroup();
//创建一个组群
ﻩtransgroup=newTransformGroup();
//定义摆放位置
transgroup.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
ﻩﻩtransgroup.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
ﻩtransgroup.addChild(createBgAndLight());
//添加背景色和光线
ﻩtransgroup.addChild(createChessboard());
//添加棋板
transgroup.addChild(createStartInfo());
//添加开始信息
ﻩtransgroup.addChild(createEndInfo());
//添加结束信息
ﻩﻩArrayList<
ChessPiece>
arr=newArrayList<
ChessPiece>
();
//添加棋子
ﻩfor(AbsChessa :
ChessConfig.ChessPieces) {
ChessPiececp=newChessPiece(a.getChessName(), a.getChessPoint(),
a.getChessColor());
ﻩarr.add(cp);
ﻩtransgroup.addChild(cp.getPieceGroup());
ﻩﻩ}
ﻩﻩpieceaction=new PieceAction(arr,startabs,endabs);
ﻩbranchgroup.addChild(transgroup);
//将对象添加到组群里
ﻩOrbitBehaviororbit= newOrbitBehavior(canvas3d,//定义对象能否通过鼠标选择
ﻩﻩOrbitBehavior.REVERSE_ALL|OrbitBehavior.STOP_ZOOM);
ﻩﻩorbit.setSchedulingBounds(bounding);
ﻩﻩViewingPlatformviewingPlatform =universe.getViewingPlatform();
//添加人物视角
ﻩviewingPlatform.setNominalViewingTransform();
ﻩviewingPlatform.setViewPlatformBehavior(orbit);
ﻩﻩuniverse.addBranchGraph(branchgroup);
ﻩﻩcanvas3d.addMouseListener(this);
ﻩcanvas3d.addMouseMotionListener(this);
ﻩ}
3.构造棋子
publicclass AbsChess{//定义一个棋子的数据结构,包括棋子名字,坐标,颜色
ﻩpublicAbsChess(charchessName,PointchessPoint,ColorchessColor){
super();
ﻩﻩChessName=chessName;
ﻩChessPoint=chessPoint;
ﻩﻩChessColor=chessColor;
ﻩ}
ﻩpublicchargetChessName(){
ﻩreturnChessName;
public voidsetChessName(charchessName){
ChessName =chessName;
ﻩpublicPoint getChessPoint() {
ﻩﻩreturn ChessPoint;
ﻩpublicvoid setChessPoint(PointchessPoint){
ﻩChessPoint=chessPoint;
}
publicColor getChessColor(){
ﻩreturnChessColor;
publicvoidsetChessColor(ColorchessColor) {
ChessColor =chessColor;
ﻩprivatecharChessName;
ﻩprivatePointChessPoint;
privateColorChessColor;
}
4.构造3D棋子
publicclassChessPiece extends AbsChess{//类的继承
publicChessPiece(charchessName,Point chessPoint,ColorchessColor) {
ﻩﻩsuper(chessName,chessPoint,chessColor);
ﻩpiecegroup= new TransformGroup();
ﻩﻩpiece