ImageVerifierCode 换一换
格式:DOCX , 页数:33 ,大小:185.42KB ,
资源ID:8020193      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8020193.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(JAVA中国象棋游戏设计.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

JAVA中国象棋游戏设计.docx

1、JAVA中国象棋游戏设计 佛山科学技术学院可视化编程技术课程设计报告中国象棋游戏设计* * * 学 号: *年级专业:12级教育技术学2* *学 院: 教育科学学院广东佛山提交日期:2014年6月1. 前言22概要设计2 2.1 开发环境 2 2.2 象棋功能 2 2.3 界面设计 33. 详细设计 4 3.1 象棋面板的java类的说明 44. 运行结果86. 源程序24设计总结321 前言随着科学技术的不断发展,计算机已经成为我们工作学习和生活中不可缺少的工具。文本编辑器是个人计算机最司空见惯的应用程序了,在学习了Java语言之后,我决定使用Java语言编写一个简单有趣的中国象棋游戏,可以

2、实现简单的中国象棋游戏功能,满足日常益智娱乐需要。Java是由Sun公司开发的新一代纯面向对象的网络编程语言。其目标是建立一种在任意种机器、任一种操作系统的网络环境中运行的软件,实行所谓的“程序写一次,到处运行”的目标。正因为如此,Java已成为当今Internet上最流行、最受欢迎的一种程序开发语言。Java开发小组把Java按特性分为基本版、移动版、企业版,每个版本有一个软件开发包。Java基本版本叫Java 2标准版(Java 2 Standard Edition,J2SE),它包含建立Java应用程序或者是Applet所需的应用程序编程接口(API)。Java 2移动版(The Jav

3、a 2 Mobile Edition,J2ME)包含创建无线Java应用程序的API。还有Java 2企业版(The Java 2 Enterprise,J2EE)是J2SE的增强版本,包含建立多层架构应用程序API。Java语言是由C+语言发展起而来的,是一种彻底的面向对象的程序设计语言。作为一种纯面向对象的程序设计语言,它非常适合大型软件的开发。Java语言去掉了C+语言的一些容易引起错误的特性。Java语言的特点有:面向对象、跨平台、安全性、多线程和图形功能强。关键字:Java象棋游戏,游戏类,中国象棋游戏2 概要设计2.1开发环境 开发平台:Microsoft Windows XP P

4、rofessional Service Pack 2 开发工具:JBuilder 2007 + JDK 1.6.0_022.2象棋功能功能 1:下棋,游戏开始后通过鼠标点击对棋子进行移动。 功能 2:悔棋,通过back键可以后退一次最近的操作 功能 3:存档,对当前的棋局进行保存 功能 4:读档,可以继承之前保存的记录,继续进行游戏 功能 5:可以设置进行不同模式的对战,可进行双人单机,网络对战,人机对战功能 6:翻转棋盘,可以使红黑双方对调2.3界面设计图2.3 象棋面板3详细设计3.1象棋面板使用的Java类的说明package org.acerge.engine;import java.

5、io.Serializable;import java.util.ArrayList;public class ActiveBoard implements Serializable /Rankx,Filex,Bottomx 比 x % 10,x / 10,x * 10运算快 public static final int RANK = / File19=1,Rank19=9; 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6

6、, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ; public static final int FILE = / File12=1,Rank12=2; 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2,

7、 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8 ; public static final int BOTTOM = 0, 10, 20, 30, 40, 50, 60, 70, 80 ; public static final int HORSE_LEG_TABLE = /int

8、 -10, 0,-10, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 10, 0, 10 /Move.Dst - Move.Src=-21,-19,-12,-8,8,12,19,21 /HorseLegDst-Src+21=-10,-10,-1,1,-1,1,10,10:蹩马腿的增量 /Legal Move: return SquaresMove.Src + HorseLegTabMove.Dst - Move.S

9、rc + 21=0 ; public static final int PIECE_TYPES = -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 6, 6, 6, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 13, 13, 13 ; public final static int MAX_MOVE_NUM = 256; public final static int LOOP_HASH_

10、MASK = 0x3ff; public final static int MAX_CONSECUTIVE_MOVES = 200; private int player; / 0 = Red(White) and 1 = Black private int evalue;/int2Total Value of Red(0)/Black(1) Pieces private int squares;/int90Piece Indexes of each square, Squaresi = 0:Unoccupied, 16-31:Red, 32-47 = Black private int pi

11、eces;/int48Square Indexes of each piece, -1 = Captured/被吃了 / Squarex=y(y: index of PieceTypes in Squarex), / Piecesy=x(y is the pieceType, x represent pieceType Y in Square 5), / x:index of location in board(089) private int bitFiles;/9方便按行位纵线查询BitFiles1表示第1列(b纵线)上的棋子 private int bitRanks;/10方便按列位横线

12、查询 private BitBoard pieceBits;/14分兵种及红黑的棋子位棋盘 private BitBoard allPieces;/整个棋盘 / Zobrist Key and Lock private long zobristKey, zobristLock; / History MoveNodes,用来作为循环重复检测 private int moveNum; MoveNode moveList;/ChessStruct.MaxMoveNum; char loopHash;/LoopHashMask + 1; public ActiveBoard() int i; play

13、er = 0; evalue = new int2; evalue0 = evalue1 = 0; squares = new int90; for (i = 0; i 90; i +) squaresi = 0; pieces = new int48; for (i = 16; i 48; i +) piecesi = -1; bitFiles = new int9; for (i = 0; i 9; i +) bitFilesi = 0; bitRanks = new int10; for (i = 0; i 10; i +) bitRanksi = 0; pieceBits = new

14、BitBoard14; for (i = 0; i 14; i +) pieceBitsi = new BitBoard(0); allPieces = new BitBoard(0); zobristKey = zobristLock = 0; moveNum = 1; moveList = new MoveNodeMAX_MOVE_NUM; for (i = 0;i MAX_MOVE_NUM;i+) moveListi=new MoveNode(); loopHash=new charLOOP_HASH_MASK+1; for (i = 0; i 00010010 or 00100010:

15、其他棋子 Captured = squaresMove.dst & 0xf; if (Captured 10) Captured = RANKMove.dst; return (player!=0) ? (Captured = 5) : (Captured 4; public MoveNode lastMove() return moveListmoveNum - 1; public int evaluation() return evalueplayer - evalue1 - player; private void changePiece(int Square, int Piece) c

16、hangePiece(Square,Piece,false); private void changePiece(int Square, int Piece, boolean IsAdd) int x, y, PieceType, Side, Value; allPieces.assignXor(PreMoveNodesGen.BitMaskSquare); x = FILESquare; y = RANKSquare; bitFilesx = 1 y; bitRanksy = 1 x; PieceType = PIECE_TYPESPiece; pieceBitsPieceType.assi

17、gnXor(PreMoveNodesGen.BitMaskSquare); zobristKey = PreMoveNodesGen.ZobristKeyTablePieceTypeSquare; zobristLock = PreMoveNodesGen.ZobristLockTablePieceTypeSquare; if (PieceType 7) Side = 0; Value = CCEvalue.BasicValuesPieceType + CCEvalue.PosValuesPieceTypeSquare; else Side = 1; Value = CCEvalue.Basi

18、cValuesPieceType - 7 + CCEvalue.PosValuesPieceType - 789 - Square; if (IsAdd) evalueSide += Value; else evalueSide -= Value; public boolean movePiece(MoveNode Move) int Moved, Captured; MoveNode ThisMove; long OldZobristKey; if (Move.src0 | Move.dst0) return false;/add for search function OldZobrist

19、Key = zobristKey; Moved = squaresMove.src; Captured = squaresMove.dst; if (Captured!=0) clearSquare(Move.dst); clearSquare(Move.src); setPiece(Move.dst, Moved); if (checked(player) Moved = squaresMove.dst; clearSquare(Move.dst); setPiece(Move.src, Moved); if (Captured!=0) setPiece(Move.dst, Captured

20、); return false; else if (loopHash(int) (OldZobristKey & LOOP_HASH_MASK)=0) loopHash(int) (OldZobristKey & LOOP_HASH_MASK) = (char) moveNum; changeSide(); ThisMove = Move; ThisMove.cap = Captured; ThisMove.chk = checked(player); moveListmoveNum = ThisMove; moveNum +; return true; public void undoMov

21、e() int Moved; MoveNode ThisMove; moveNum -; ThisMove = moveListmoveNum; Moved = squaresThisMove.dst; clearSquare(ThisMove.dst); setPiece(ThisMove.src, Moved); if (ThisMove.cap!=0) setPiece(ThisMove.dst, ThisMove.cap); changeSide(); if (loopHash(int) (zobristKey & LOOP_HASH_MASK) = moveNum) loopHash

22、(int) (zobristKey & LOOP_HASH_MASK) = 0; / Leagal Move Detection Procedures public boolean leagalMove(MoveNode Move) int Piece, Attack, x, y, BitWord; Piece = squaresMove.src; if (Piece & (player!=0 ? 32 : 16)=0) return false;/所选的棋子是否是当前Player的 Attack = squaresMove.dst; if (Attack & (player!=0 ? 32

23、: 16)!=0) return false;/所吃的棋子是否是对方的 switch (PIECE_TYPESPiece - (player!=0 ? 7 : 0) case 5:/炮,吃子时中间要有炮架 x = FILEMove.src; y = RANKMove.src; if (x = FILEMove.dst) /进退 BitWord = bitFilesx; if (Move.src Move.dst) /进 if (Attack & (player!=0 ? 16 : 32)!=0) /吃子 return Move.dst = PreMoveNodesGen.FileCannonCapMaxyBitWord + BOTTOMx; else /不吃子 return Move.dst Move.Dst,退 if (Attack & (player!=0 ? 16 : 32)!=0) return Move.dst = PreMoveNodesGen.FileCannonCapMinyBitWord + BOTTOMx; else return Move.dst = PreM

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1