基于Java的“网络五子棋”游戏的设计和实现(含源文件)
Java五子棋游戏源代码(人机对战)
//Java编程:五子棋游戏源代码import java.awt.*;import java.awt.event.*;import java.applet.*;import javax.swing.*;import java.io.PrintStream;import javax.swing.JComponent;import javax.swing.JPanel;/**main方法创建了ChessFrame类的一个实例对象(cf),*并启动屏幕显示显示该实例对象。
**/public class FiveChessAppletDemo {public static void main(String args[]){ChessFrame cf = new ChessFrame();cf.show();}}/**类ChessFrame主要功能是创建五子棋游戏主窗体和菜单**/class ChessFrame extends JFrame implements ActionListener { private String[] strsize={"20x15","30x20","40x30"};private String[] strmode={"人机对弈","人人对弈"};public static boolean iscomputer=true,checkcomputer=true; private int width,height;private ChessModel cm;private MainPanel mp;//构造五子棋游戏的主窗体public ChessFrame() {this.setTitle("五子棋游戏");cm=new ChessModel(1);mp=new MainPanel(cm);Container con=this.getContentPane();con.add(mp,"Center");this.setResizable(false);this.addWindowListener(new ChessWindowEvent());MapSize(20,15);JMenuBar mbar = new JMenuBar();this.setJMenuBar(mbar);JMenu gameMenu = new JMenu("游戏");mbar.add(makeMenu(gameMenu, new Object[] {"开局", "棋盘","模式", null, "退出"}, this));JMenu lookMenu =new JMenu("视图");mbar.add(makeMenu(lookMenu,new Object[] {"Metal","Motif","Windows"},this));JMenu helpMenu = new JMenu("帮助");mbar.add(makeMenu(helpMenu, new Object[] {"关于"}, this));}//构造五子棋游戏的主菜单public JMenu makeMenu(Object parent, Object items[], Object target){ JMenu m = null;if(parent instanceof JMenu)m = (JMenu)parent;else if(parent instanceof String)m = new JMenu((String)parent);elsereturn null;for(int i = 0; i < items.length; i++)if(items[i] == null)m.addSeparator();else if(items[i] == "棋盘"){JMenu jm = new JMenu("棋盘");ButtonGroup group=new ButtonGroup();JRadioButtonMenuItem rmenu;for (int j=0;j<strsize.length;j++){rmenu=makeRadioButtonMenuItem(strsize[j],target);if (j==0)rmenu.setSelected(true);jm.add(rmenu);group.add(rmenu);}m.add(jm);}else if(items[i] == "模式"){JMenu jm = new JMenu("模式");ButtonGroup group=new ButtonGroup();JRadioButtonMenuItem rmenu;for (int h=0;h<strmode.length;h++){rmenu=makeRadioButtonMenuItem(strmode[h],target);if(h==0)rmenu.setSelected(true);jm.add(rmenu);group.add(rmenu);}m.add(jm);}elsem.add(makeMenuItem(items[i], target));return m;}//构造五子棋游戏的菜单项public JMenuItem makeMenuItem(Object item, Object target){ JMenuItem r = null;if(item instanceof String)r = new JMenuItem((String)item);else if(item instanceof JMenuItem)r = (JMenuItem)item;elsereturn null;if(target instanceof ActionListener)r.addActionListener((ActionListener)target);return r;}//构造五子棋游戏的单选按钮式菜单项public JRadioButtonMenuItem makeRadioButtonMenuItem( Object item, Object target){JRadioButtonMenuItem r = null;if(item instanceof String)r = new JRadioButtonMenuItem((String)item);else if(item instanceof JRadioButtonMenuItem)r = (JRadioButtonMenuItem)item;elsereturn null;if(target instanceof ActionListener)r.addActionListener((ActionListener)target);return r;}public void MapSize(int w,int h){setSize(w * 20+50 , h * 20+100 );if(this.checkcomputer)this.iscomputer=true;elsethis.iscomputer=false;mp.setModel(cm);mp.repaint();}public boolean getiscomputer(){return this.iscomputer;}public void restart(){int modeChess = cm.getModeChess();if(modeChess <= 3 && modeChess >= 1){cm = new ChessModel(modeChess);MapSize(cm.getWidth(),cm.getHeight());}else{System.out.println("\u81EA\u5B9A\u4E49");}}public void actionPerformed(ActionEvent e){String arg=e.getActionCommand();try{if (arg.equals("Windows"))UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");else if(arg.equals("Motif"))UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");elseUIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel" ); SwingUtilities.updateComponentTreeUI(this);}catch(Exception ee){}if(arg.equals("20x15")){this.width=20;this.height=15;cm=new ChessModel(1);MapSize(this.width,this.height);SwingUtilities.updateComponentTreeUI(this);}if(arg.equals("30x20")){this.width=30;this.height=20;cm=new ChessModel(2);MapSize(this.width,this.height);SwingUtilities.updateComponentTreeUI(this);}if(arg.equals("40x30")){this.width=40;this.height=30;cm=new ChessModel(3);MapSize(this.width,this.height);SwingUtilities.updateComponentTreeUI(this);}if(arg.equals("人机对弈")){this.checkcomputer=true;this.iscomputer=true;cm=new ChessModel(cm.getModeChess());MapSize(cm.getWidth(),cm.getHeight());SwingUtilities.updateComponentTreeUI(this);}if(arg.equals("人人对弈")){this.checkcomputer=false;this.iscomputer=false;cm=new ChessModel(cm.getModeChess());MapSize(cm.getWidth(),cm.getHeight());SwingUtilities.updateComponentTreeUI(this);}if(arg.equals("开局")){restart();}if(arg.equals("关于"))JOptionPane.showMessageDialog(this, "五子棋游戏测试版本", "关于", 0);if(arg.equals("退出"))System.exit(0);}}/**类ChessModel实现了整个五子棋程序算法的核心*/class ChessModel {//棋盘的宽度、高度、棋盘的模式(如20×15)private int width,height,modeChess;//棋盘方格的横向、纵向坐标private int x=0,y=0;//棋盘方格的横向、纵向坐标所对应的棋子颜色,//数组arrMapShow只有3个值:1,2,3,-5,//其中1代表该棋盘方格上下的棋子为黑子,//2代表该棋盘方格上下的棋子为白子,//3代表为该棋盘方格上没有棋子,//-5代表该棋盘方格不能够下棋子private int[][] arrMapShow;//交换棋手的标识,棋盘方格上是否有棋子的标识符private boolean isOdd,isExist;public ChessModel() {}//该构造方法根据不同的棋盘模式(modeChess)来构建对应大小的棋盘public ChessModel(int modeChess){this.isOdd=true;if(modeChess == 1){PanelInit(20, 15, modeChess);}if(modeChess == 2){PanelInit(30, 20, modeChess);}if(modeChess == 3){PanelInit(40, 30, modeChess);}}//按照棋盘模式构建棋盘大小private void PanelInit(int width, int height, int modeChess){this.width = width;this.height = height;this.modeChess = modeChess;arrMapShow = new int[width+1][height+1];for(int i = 0; i <= width; i++){for(int j = 0; j <= height; j++){arrMapShow[i][j] = -5;}}}//获取是否交换棋手的标识符public boolean getisOdd(){return this.isOdd;}//设置交换棋手的标识符public void setisOdd(boolean isodd){if(isodd)this.isOdd=true;elsethis.isOdd=false;}//获取某棋盘方格是否有棋子的标识值public boolean getisExist(){return this.isExist;}//获取棋盘宽度public int getWidth(){return this.width;}//获取棋盘高度public int getHeight(){return this.height;}//获取棋盘模式public int getModeChess(){return this.modeChess;}//获取棋盘方格上棋子的信息public int[][] getarrMapShow(){return arrMapShow;}//判断下子的横向、纵向坐标是否越界private boolean badxy(int x, int y){if(x >= width+20 || x < 0)return true;return y >= height+20 || y < 0;}//计算棋盘上某一方格上八个方向棋子的最大值,//这八个方向分别是:左、右、上、下、左上、左下、右上、右下public boolean chessExist(int i,int j){if(this.arrMapShow[i][j]==1 || this.arrMapShow[i][j]==2)return true;return false;}//判断该坐标位置是否可下棋子public void readyplay(int x,int y){if(badxy(x,y))return;if (chessExist(x,y))return;this.arrMapShow[x][y]=3;}//在该坐标位置下棋子public void play(int x,int y){if(badxy(x,y))return;if(chessExist(x,y)){this.isExist=true;return;}elsethis.isExist=false;if(getisOdd()){setisOdd(false);this.arrMapShow[x][y]=1;}else{setisOdd(true);this.arrMapShow[x][y]=2;}}//计算机走棋/**说明:用穷举法判断每一个坐标点的四个方向的的最大棋子数,*最后得出棋子数最大值的坐标,下子**/public void computerDo(int width,int height){int max_black,max_white,max_temp,max=0;setisOdd(true);System.out.println("计算机走棋...");for(int i = 0; i <= width; i++){for(int j = 0; j <= height; j++){if(!chessExist(i,j)){//算法判断是否下子max_white=checkMax(i,j,2);//判断白子的最大值max_black=checkMax(i,j,1);//判断黑子的最大值max_temp=Math.max(max_white,max_black);if(max_temp>max){max=max_temp;this.x=i;this.y=j;}}}}setX(this.x);setY(this.y);this.arrMapShow[this.x][this.y]=2;}//记录电脑下子后的横向坐标public void setX(int x){this.x=x;}//记录电脑下子后的纵向坐标public void setY(int y){this.y=y;}//获取电脑下子的横向坐标public int getX(){return this.x;}//获取电脑下子的纵向坐标public int getY(){return this.y;}//计算棋盘上某一方格上八个方向棋子的最大值,//这八个方向分别是:左、右、上、下、左上、左下、右上、右下public int checkMax(int x, int y,int black_or_white){int num=0,max_num,max_temp=0;int x_temp=x,y_temp=y;int x_temp1=x_temp,y_temp1=y_temp;//judge rightfor(int i=1;i<5;i++){x_temp1+=1;if(x_temp1>this.width)break;if(this.arrMapShow[x_temp1][y_temp1]==black_or_white) num++;elsebreak;}//judge leftx_temp1=x_temp;for(int i=1;i<5;i++){x_temp1-=1;if(x_temp1<0)break;if(this.arrMapShow[x_temp1][y_temp1]==black_or_white) num++;elsebreak;}if(num<5)max_temp=num;//judge upx_temp1=x_temp;y_temp1=y_temp;num=0;for(int i=1;i<5;i++){y_temp1-=1;if(y_temp1<0)break;if(this.arrMapShow[x_temp1][y_temp1]==black_or_white) num++;elsebreak;}//judge downy_temp1=y_temp;for(int i=1;i<5;i++){y_temp1+=1;if(y_temp1>this.height)break;if(this.arrMapShow[x_temp1][y_temp1]==black_or_white) num++;elsebreak;}if(num>max_temp&&num<5)max_temp=num;//judge left_upx_temp1=x_temp;y_temp1=y_temp;num=0;for(int i=1;i<5;i++){x_temp1-=1;y_temp1-=1;if(y_temp1<0 || x_temp1<0)break;if(this.arrMapShow[x_temp1][y_temp1]==black_or_white) num++;elsebreak;}//judge right_downx_temp1=x_temp;y_temp1=y_temp;for(int i=1;i<5;i++){x_temp1+=1;y_temp1+=1;if(y_temp1>this.height || x_temp1>this.width)break;if(this.arrMapShow[x_temp1][y_temp1]==black_or_white) num++;elsebreak;}if(num>max_temp&&num<5)max_temp=num;//judge right_upx_temp1=x_temp;y_temp1=y_temp;num=0;for(int i=1;i<5;i++){x_temp1+=1;y_temp1-=1;if(y_temp1<0 || x_temp1>this.width)break;if(this.arrMapShow[x_temp1][y_temp1]==black_or_white) num++;elsebreak;}//judge left_downx_temp1=x_temp;y_temp1=y_temp;for(int i=1;i<5;i++){x_temp1-=1;y_temp1+=1;if(y_temp1>this.height || x_temp1<0)break;if(this.arrMapShow[x_temp1][y_temp1]==black_or_white) num++;elsebreak;}if(num>max_temp&&num<5)max_temp=num;max_num=max_temp;return max_num;}//判断胜负public boolean judgeSuccess(int x,int y,boolean isodd){ int num=1;int arrvalue;int x_temp=x,y_temp=y;if(isodd)arrvalue=2;elsearrvalue=1;int x_temp1=x_temp,y_temp1=y_temp;//判断右边for(int i=1;i<6;i++){x_temp1+=1;if(x_temp1>this.width)break;if(this.arrMapShow[x_temp1][y_temp1]==arrvalue)num++;elsebreak;}//判断左边x_temp1=x_temp;for(int i=1;i<6;i++){if(x_temp1<0)break;if(this.arrMapShow[x_temp1][y_temp1]==arrvalue) num++;elsebreak;}if(num==5)return true;//判断上方x_temp1=x_temp;y_temp1=y_temp;num=1;for(int i=1;i<6;i++){y_temp1-=1;if(y_temp1<0)break;if(this.arrMapShow[x_temp1][y_temp1]==arrvalue) num++;elsebreak;}//判断下方y_temp1=y_temp;for(int i=1;i<6;i++){y_temp1+=1;if(y_temp1>this.height)break;if(this.arrMapShow[x_temp1][y_temp1]==arrvalue) num++;elsebreak;}if(num==5)return true;//判断左上x_temp1=x_temp;y_temp1=y_temp;num=1;for(int i=1;i<6;i++){x_temp1-=1;if(y_temp1<0 || x_temp1<0)break;if(this.arrMapShow[x_temp1][y_temp1]==arrvalue) num++;elsebreak;}//判断右下x_temp1=x_temp;y_temp1=y_temp;for(int i=1;i<6;i++){x_temp1+=1;y_temp1+=1;if(y_temp1>this.height || x_temp1>this.width) break;if(this.arrMapShow[x_temp1][y_temp1]==arrvalue) num++;elsebreak;}if(num==5)return true;//判断右上x_temp1=x_temp;y_temp1=y_temp;num=1;for(int i=1;i<6;i++){x_temp1+=1;y_temp1-=1;if(y_temp1<0 || x_temp1>this.width)break;if(this.arrMapShow[x_temp1][y_temp1]==arrvalue) num++;elsebreak;}//判断左下x_temp1=x_temp;y_temp1=y_temp;for(int i=1;i<6;i++){x_temp1-=1;y_temp1+=1;if(y_temp1>this.height || x_temp1<0)break;if(this.arrMapShow[x_temp1][y_temp1]==arrvalue)num++;elsebreak;}if(num==5)return true;return false;}//赢棋后的提示public void showSuccess(JPanel jp){JOptionPane.showMessageDialog(jp,"你赢了,好厉害!","win",RMATION_MESSAGE);}//输棋后的提示public void showDefeat(JPanel jp){JOptionPane.showMessageDialog(jp,"你输了,请重新开始!","lost",RMATION_MESSAGE);}}/**类MainPanel主要完成如下功能:*1、构建一个面板,在该面板上画上棋盘;*2、处理在该棋盘上的鼠标事件(如鼠标左键点击、鼠标右键点击、鼠标拖动等)**/class MainPanel extends JPanelimplements MouseListener,MouseMotionListener{private int width,height;//棋盘的宽度和高度private ChessModel cm;//根据棋盘模式设定面板的大小MainPanel(ChessModel mm){cm=mm;width=cm.getWidth();height=cm.getHeight();addMouseListener(this);}//根据棋盘模式设定棋盘的宽度和高度public void setModel(ChessModel mm){cm = mm;width = cm.getWidth();height = cm.getHeight();}//根据坐标计算出棋盘方格棋子的信息(如白子还是黑子),//然后调用draw方法在棋盘上画出相应的棋子public void paintComponent(Graphics g){super.paintComponent(g);for(int j = 0; j <= height; j++){for(int i = 0; i <= width; i++){int v = cm.getarrMapShow()[i][j];draw(g, i, j, v);}}}//根据提供的棋子信息(颜色、坐标)画棋子public void draw(Graphics g, int i, int j, int v){int x = 20 * i+20;int y = 20 * j+20;//画棋盘if(i!=width && j!=height){g.setColor(Color.white);g.drawRect(x,y,20,20);}//画黑色棋子if(v == 1 ){g.setColor(Color.gray);g.drawOval(x-8,y-8,16,16);g.setColor(Color.black);g.fillOval(x-8,y-8,16,16);}//画白色棋子if(v == 2 ){g.setColor(Color.gray);g.drawOval(x-8,y-8,16,16);g.setColor(Color.white);g.fillOval(x-8,y-8,16,16);}if(v ==3){g.setColor(Color.cyan);g.drawOval(x-8,y-8,16,16);}}//响应鼠标的点击事件,根据鼠标的点击来下棋,//根据下棋判断胜负等public void mousePressed(MouseEvent evt){int x = (evt.getX()-10) / 20;int y = (evt.getY()-10) / 20;System.out.println(x+" "+y);if (evt.getModifiers()==MouseEvent.BUTTON1_MASK){cm.play(x,y);System.out.println(cm.getisOdd()+" "+cm.getarrMapShow()[x][y]);repaint();if(cm.judgeSuccess(x,y,cm.getisOdd())){cm.showSuccess(this);evt.consume();ChessFrame.iscomputer=false;}//判断是否为人机对弈if(ChessFrame.iscomputer&&!cm.getisExist()){puterDo(cm.getWidth(),cm.getHeight());repaint();if(cm.judgeSuccess(cm.getX(),cm.getY(),cm.getisOdd())){cm.showDefeat(this);evt.consume();}}}}public void mouseClicked(MouseEvent evt){}public void mouseReleased(MouseEvent evt){}public void mouseEntered(MouseEvent mouseevt){}public void mouseExited(MouseEvent mouseevent){}public void mouseDragged(MouseEvent evt){}//响应鼠标的拖动事件public void mouseMoved(MouseEvent moveevt){int x = (moveevt.getX()-10) / 20;int y = (moveevt.getY()-10) / 20;cm.readyplay(x,y);repaint();}}class ChessWindowEvent extends WindowAdapter{ public void windowClosing(WindowEvent e){ System.exit(0);}ChessWindowEvent(){}}。
基于JAVA的五子棋游戏系统设计与实现
基于JAVA的五子棋游戏系统设计与实现五子棋是一种双人对弈的棋类游戏,也是一种非常经典的游戏类型。
设计一个基于JAVA的五子棋游戏系统,需要考虑到以下几个方面:游戏规则、游戏界面和游戏功能的实现。
一、游戏规则的设计:五子棋的规则非常简单,双方轮流下棋,先连成五子的一方为胜。
游戏区域是一个15x15的棋盘,棋盘上有黑白两种棋子。
玩家可以通过点击棋盘的不同位置来下棋。
二、游戏界面的设计与实现:1. 创建一个游戏主界面,并在界面上绘制棋盘。
可以使用JAVA Swing来创建界面,并使用Graphics类来实现绘制棋盘的功能。
2.在棋盘上绘制出15x15的格子,并设置鼠标点击事件,以便玩家可以通过点击棋盘的不同位置来下棋。
3. 在玩家下棋后,使用Graphics类来在棋盘上绘制出对应的棋子。
可以使用不同的颜色来区分黑白两种棋子。
三、游戏功能的实现:1.实现轮流下棋的功能。
通过一个变量来记录当前轮到哪个玩家下棋,玩家可以通过鼠标点击事件来确定落子的位置。
2.实现判断胜负的功能。
在每次下棋后,判断是否已经有五子连线的情况出现。
可以使用一个二维数组来保存棋盘上每个位置的棋子情况,并根据棋子位置来判断是否满足胜利条件。
3.实现悔棋功能。
当玩家点击悔棋按钮时,可以将最后一步下的棋子清除,并将轮到下棋的玩家切换至上一步下棋的玩家。
4.实现重新开始的功能。
当游戏结束后,可以通过点击重新开始按钮来重新开始游戏。
以上是一个基于JAVA的五子棋游戏系统的设计与实现的简要思路。
在实际的开发过程中,还需要考虑到异常处理、界面美化、多人对战等更多的细节。
希望以上内容能够帮助您完成五子棋游戏系统的设计与实现。
基于JAVA的五子棋游戏系统设计与实现
基于JAVA的五子棋游戏系统设计与实现引言五子棋是一种古老而又受欢迎的棋类游戏,在目前的计算机科学中,由于其算法的多样性和难度的适中,成为了很多程序员学习和思考的对象。
在本篇文章中,我们将介绍基于JAVA的五子棋游戏系统的设计与实现,包括系统的整体结构、主要功能模块、技术选型和实现细节等方面。
一、系统整体结构五子棋游戏系统的整体结构,可以分为三个层次:显示层、逻辑层和数据层。
其中,显示层负责绘制游戏界面和处理用户交互事件;逻辑层实现游戏规则和策略,负责判断胜负并给出提示;数据层则维护游戏状态和棋局数据。
如图所示,五子棋游戏系统的整体结构如下:二、主要功能模块1.游戏开始和重置当用户点击“开始游戏”按钮时,系统会开始初始化游戏状态和棋局数据,同时展示游戏界面。
当用户在游戏中点击“重新开始”按钮时,系统会清空棋盘数据并重新初始化游戏状态。
2.用户交互和落子用户可以通过鼠标点击来操作棋盘,并在可落子点上落下自己的棋子。
落子后,系统需要检测当前状态下是否已经有五子连珠的情况出现。
3.胜负判断和提示当一方落下五子连珠时,系统会弹出胜利提示,并停止游戏。
同时,游戏界面上会显示当前胜方的姓名和胜利棋局的情况。
4.游戏设置系统提供了一些游戏设置的选项,例如棋盘大小、棋子颜色、先手后手等。
用户可以自由设置游戏参数并开始游戏。
5.游戏记录和回放系统支持对游戏过程的记录和回放功能,用户可以查看任意一局棋局的走法、时间、胜负等情况。
6.本地游戏和联网对战用户可以选择本地游戏(双人游戏)和联网对战两种模式。
在联网对战中,两位玩家可以通过互联网进行远程对战。
三、技术选型1.编程语言:JAVA由于JAVA是一种跨平台的编程语言,在开发五子棋游戏系统时,可以保证相对的兼容性和应用范围。
同时,JAVA还具有良好的面向对象编程特性,代码复用性高,易于维护。
2.图形界面:SwingSwing是JAVA自带的图形界面库,可以用来实现各种复杂的图形界面。
五子棋设计与实现完整版
哈尔滨商业大学毕业设计(论文)五子棋的设计与实现学生姓名周玉春指导教师李恩林专业计算机科学与技术学院计算机与信息工程2010年06月02日Graduation Project (Thesis)Harbin University of CommerceThe Design and Implementationof GobangStudent Zhou YuchunSupervisor Li EnlinSpecialty Computer Science and Technology School Computer and Information Engineering2010 - 06 - 02毕业设计(论文)任务书姓名:周玉春学院:计算机与信息工程班级:2006级4班专业:计算机科学与技术毕业设计(论文)题目:五子棋的设计与实现立题目的和意义:本程序旨在用JA V A实现一个基本于C/S模式的五子棋网络对战游戏。
玩家作为客户端通过服务器端与其它玩家进行对战,聊天等功能。
通过实现本程序加深对计算机网络编程的了解。
技术要求与工作计划:开发环境:Intel core 2 duo 1.8GHz 1G内存160硬盘;Microsoft® Windows™XP Professional;JDK 1.50;Eclipse 3.3.2运行环境:IntelPentium® 2及以上处理器,32M以上内存,4G以上硬盘;Microsoft® Windows™ 9X/NT/XP 操作系统;800*600或以上的屏幕分辨率工作计划:第一阶段需求分析第二阶段系统设计第三阶段系统实现第四阶段论文初稿,程序调试第五阶段论文终稿,程序修订第六阶段准备论文答辩时间安排:1月--2月收集论文资料,确定毕业设计题目3月--4月实习和调研,编写开题报告4月--5月程序设计和调试5月--6月论文初稿6月--答辩论文终稿及答辩指导教师要求:(签字)年月日教研室主任意见:(签字)年月日院长意见:(签字)年月日毕业设计(论文)审阅评语一、指导教师评语:指导老师签字:年月日毕业设计(论文)审阅评语二、评阅人评语:评阅人签字:年月日毕业设计(论文)答辩评语三、答辩委员会评语:四、毕业设计(论文)成绩:专业答辩组负责人签字:年月日五、答辩委员会主任签章答辩委员会主任单位:(签章)答辩委员会主任职称:答辩委员会主任签字:年月日摘要随着互联网迅速的发展,网络游戏已经成为人们普遍生活中不可或缺的一部分,它不仅能使人娱乐,也能够开发人的智力,就像本文所主要讲的五子棋游戏一样能挖掘人们聪明的才干与脑袋的机灵程度。
java课程设计报告_五子棋
目录第一章软件平台……………………………游戏设计思路…………………………第二章小游戏五子棋的开发过程………………第一节JAVA基础知识………………………第二节启动程序的分析……………………第三节游戏设计过程………………………第三章总结…………………………………………第四章参考文献……………………………………第五章附录…………………………………………第一章游戏设计思路:第二章第一节java程序基础知识本系统有4个程序每个程序都导入了不同的包和类运用了不同的所学知识。
不同的类和包提供的方法、类型等都不同,本程序还使用了继承。
以至使其能够完成不同的功能。
本节主要讲述本系统所使用的基础知识。
1、类的基础<1、类的定义JAVA中的类实质上是一种对象类型,它是对具有相同属性和相同行为对象的一种抽象。
类是java程序中最小的组成单位。
<2、Java中类定义的格式为:[类修饰符] class 类名[extends 基类] [implements 接口]{// 成员变量声明(Member variable declaration)// 成员方法声明(Member method declaration)}其中,class、extends和implements都是Java的关键字。
类修饰符、extends和implements是关于修饰符、继承和接口的内容。
2、继承继承性是面向对象程序设计语言的一个重要特征,通过继承可以实现代码的复用。
Java语言中,所有的类都是直接或间接的继承ng.object类而得到的。
被继承的类称为基类或父类,继承而的来的类成为子类。
子类继承基类的方法和属性,同时也可以修改基类的方法和属性,并增加自己新的属性和方法。
Java不支持多重继承。
即一个子类不能拥有两个或以上的父类。
3、包<1、包的定义在Java中,把相关的代码组织到一起,称为“包”。
包市一种将相关类、接口或其他包组织起来的集合体,目的是为了将包含类代码的文件组织起来,易于查找和使用。
Java五子棋游戏的设计论文
基于的五子棋游戏的设计摘要五子棋作为一个棋类竞技运动,在民间十分流行,为了熟悉五子棋规则与技巧,以与研究简单的人工智能,决定用开发五子棋游戏。
主要完成了人机对战和玩家之间联网对战2个功能。
网络连接部分为编程应用,客户端和服务器端的交互用定义,有很好的可扩展性,客户端负责界面维护和收集用户输入的信息,与错误处理。
服务器维护在线用户的基本信息和任意两个对战用户的棋盘信息,动态维护用户列表。
在人机对弈中通过深度搜索和估值模块,来提高电脑棋手的智能。
分析估值模块中的影响精准性的几个要素,以与提出若干提高精准性的办法,以与对它们搜索的节点数进行比较,在这些算法的基础上分析一些提高电脑方案,如递归算法、电脑学习等。
算法的研究有助于理解程序结构,增强逻辑思维能力,在其他人工智能方面也有很大的参考作用。
关键词:深度搜索;估值;电脑;五子棋;算法a , , , , I . , , a , , . , . , . , a , , , , . , , .: ; ; ; ;目录1 引言.............................................................. 错误!未指定书签。
1.1 选题背景...................................................... 错误!未指定书签。
1.2 本课题研究的意义.............................................. 错误!未指定书签。
1.3 本课题的研究方法.............................................. 错误!未指定书签。
2 课题相关基础...................................................... 错误!未指定书签。
2.1 五子棋........................................................ 错误!未指定书签。
五子棋游戏代码
1、游戏实现效果图:2、游戏代码(含详细注解):import java.awt.*;import java.awt.event.*;import java.awt.Color;import static java.awt.BorderLayout.*;public class Gobang00{Frame f = new Frame("五子棋游戏");MyCanvas border = new MyCanvas();int color = 0;// 旗子的颜色标识0:白子1:黑子boolean isStart = false;// 游戏开始标志int bodyArray[][] = new int[16][16]; // 设置棋盘棋子状态0 无子1 白子2 黑子Button b1 = new Button("游戏开始");Button b2 = new Button("重置游戏");//Label WinMess = new Label(" ");//用于输出获胜信息TextField WinMess = new TextField(40);Checkbox[] ckbHB = new Checkbox[2];//用于判断白子先下,还是黑子先下CheckboxGroup ckgHB = new CheckboxGroup();public void init(){border.setPreferredSize(new Dimension(320,310));WinMess.setBounds(100, 340, 300, 30);f.add(border);//设置游戏状态,是开始游戏,还是重置游戏Panel p1 = new Panel();//用于放置b1和b2按钮,及选择框p1.add(b1);p1.add(b2);b1.addActionListener(new gameStateListener());b2.addActionListener(new gameStateListener());//设置谁先下棋// Panel p2 = new Panel();//用于放置选择组建ckbHB[0] = new Checkbox("白子先", ckgHB, false); ckbHB[1] = new Checkbox("黑子先", ckgHB, false); p1.add(ckbHB[0]);p1.add(ckbHB[1]);ckbHB[0].addItemListener(new itemListener()); ckbHB[1].addItemListener(new itemListener());//进入下棋状态,为窗口和board添加事件监听器f.addMouseListener(new mouseProcessor()); border.addMouseListener(new mouseProcessor()); Panel p2 = new Panel();//用于放置输赢信息显示框p2.add(WinMess);gameInit();f.add(p1,BorderLayout.SOUTH);f.add(p2,BorderLayout.NORTH);f.pack();f.setVisible(true);//设置窗体关闭事件f.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.exit(0);}});}public static void main(String[] args){new Gobang00().init();}//定义事件监听器类,用于判断是开始游戏,还是重置游戏class gameStateListener implements ActionListener{public void actionPerformed(ActionEvent e){if (e.getSource() == b1){gameStart();}else{reStart();}}}public void gameStart() // 游戏开始{isStart = true;enableGame(false);b2.setEnabled(true);}public void enableGame(boolean e) // 设置组件状态{b1.setEnabled(e);//setEnabled(boolean) - 类ponent 中的方法:根据参数b 的值启用或禁用此组件。
Java程序设计报告
楚雄师范学院2015年春季期末Java程序设计报告项目名称:基于Java平台开发的五子棋程序设计学院:物理与电子科学学院专业:电子信息科学与技术班级:2 0 1 3 级电信一班组员姓名:杨邦桂许勇董俊宏课程教师:程满目录引言 (3)第一章设计目的和要求 (3)第二章JAVA语言概述 (3)2.1 JAVA简介 (3)2.1.1 JAVA的基本特点 (3)2.2 JAVA工具JDK (4)第三章程序的设计思路和算法 (4)3.1 人机博弈的要点 (4)3.2 五子棋特点及规则 (4)3.3 设计思路 (5)3.3.1 (5)第四章测试及运行效果 (5)4.1棋盘系统主界面 (5)4.2下期博弈过程界面 (6)4.3黑方赢的结果 (6)4.4白方赢的结果 (7)第五章设计体会与总结 (8)附录 (9)源程序代码及简要说明: (9)引言随着计算机技术的不断发展,网络技术的普及范围越来越广,网络能够提供的服务多样、便捷,已经成为人们生产生活中不可缺少的重要组成部分。
如今网络休闲游戏发展迅速,它凭借健康、方便、互动性强、益智等诸多优点,成为大部分现代人休闲娱乐的首选。
网络五子棋游戏是使用Java语言开发的一款游戏。
它使用SOCKET建立连接,多线程处理数据,以及可嵌入网络浏览器的APPLET作为客户端,这些特点使这款游戏无论是服务器还是客户端的实现都相对容易。
通过对该软件的编写,还可以巩固学生对以上各种知识的掌握和理解。
第一章设计目的和要求1.1 实现一个简单的五子棋游戏程序,包括如下两个界面: (1)对弈及角色(黑方先落棋)。
(2)在游戏界面,有游戏栏(开局、悔棋、退出),帮助栏;显示区;棋盘区。
1.2在实际系统中使用、实现人工智能的相关算法1.3进一步加深对人工智能算法的理解第二章JAVA语言概述2.1 JAVA简介JAVA是Sun Microsystem公司开发的编程语言,是一个简单,面向对象,分布式,解释性,强壮,安全,与系统无关,可移植,高性能,多线程和动态的语言。
五子棋游戏总体设计与实现
五子棋游戏总体设计与实现4、系统总体设计与实现4、1 总体设计分析总体设计就是软件开发过程中的另一个重要阶段,在这一阶段中将根据需求分析中提出的逻辑模型,科学合理地进行物理模型的设计。
这个阶段的主要目标就是将反映用户信息需求的逻辑方案转换成物理方案,并为下一阶段提供必要的技术资料。
4、1、1 总体设计原则(1)整体性:软件就是作为统一整体而存在的。
因此,在总体设计中要从整个软件的角度进行考虑。
(2)灵活性:为保持软件长久的生命力,要求该手机游戏软件具有很强的环境适应性。
为此,游戏软件应具有较好的开放性与结构的可变性。
(3)可靠性:可靠性就是指软件抵御外界干扰的能力及受外界干扰时的恢复能力。
(4)经济性:经济性就是指在满足游戏软件需求的前提下,尽可能地减小游戏软件的开销。
4、1、2 软件模块总体设计软件中各模块之间的关系通常利用层次图来表示。
它就是一种一系列多层次的用树形结构的矩形框描绘数据的层次结构框图。
一个单独的矩形框作为树形结构的顶层,各个数据的子集由下面的各层矩形框代表,最底层的各个矩形框代表组成这个数据的实际数据元素(不能再分割的元素),它代表完整的数据结构。
这模式非常适合于需求分析阶段的需要,层次方框图对数据结构描绘随着结构精细化也越来越详细。
反复细化沿着图中每条路径,从对顶层信息的分类开始,直到确定了数据结构的全部细节为止。
图4-1 游戏功能结构本研究中将游戏软件分为三大模块,如图4-1所示,包括:游戏选项、游戏设置与帮助。
按照在调研中搜集的资料对每个模块的功能进行编排制作。
依据上述功能的分析,本研究中,将游戏软件在三大模块的基础上又对每一大模块又分为几个子模块:游戏选项包括六个模块:开始游戏、重新游戏、悔棋、认输、背景音乐与退出游戏。
游戏设置包括三个模块:先后手设置、棋盘底纹颜色设置与棋盘大小设置。
帮助包括两个模块:游戏帮助与关于。
4、2 游戏设计4、2、1 游戏前的准备本游戏在开发之前需要做一些前期准备工作,尤其就是对于精通五子棋游戏的Java 游戏开发者来说。
五子棋手机网络对战游戏的设计与实现-JAVA毕业设计
五子棋网络对战游戏的设计与实现论文作者姓名:XXX申请学位专业:申请学位类别:论文提交日期:XXXX年XX月XX日五子棋网络对战游戏的设计与实现摘要在现代社会中,及其它无线设备越来越多的走进普通老百姓的工作和生活.随着3G技术的普及与应用,基于Java开发的软件在上的使用非常的广泛,增值服务的内容也是越来越多,对丰富人们的生活内容、提供快捷的资讯起着不可忽视的作用.本文基于J2米E技术,以计算机网络游戏的运行流程为基础,分模块开发一款网络五子棋游戏软件.本文对以下几点内容做了重点研究和探讨:1、系统整体结构,根据设计目标,结合普通网络游戏的运行流程,给出了系统总体设计方案,并探讨了系统设计时需要用到的关键技术.2、米IDP客户端的实现,米IDP客户端是游戏的唯一客户端,主要功能包括连接服务器进行身份验证、进行游戏并不断的与服务器交换数据.3、后台系统的设计与实现,后台用来处理与数据库的互联来验证用户身份、处理由客户端发送过来的数据.由于受到客观条件的限制,本系统的测试是在三星模拟器上完成的 ,但它仍不失具一定的实用价值.关键词:J2米E;游戏;ServletThe Design and I米ple米entation of The Gobang War Ga米e on Cell Phone NetworkAbstractIn 米odern society, 米ore and 米ore cell phones and other wireless devices co 米e into the work and life of ordinary people. With the popularization and application of the 3rd Generation of Digital co米米unication technology,the develop米ent of Java-based software in the use of 米obile phones is very broad, 米obile value-added services are 米ore and 米ore. It plays an i米port role to enrich people's lives and provide easier access to infor米ation.This paper is based on J2米E technology, it expounds how to take the running flow of co米puter network as basis, introduce a kind of gobang ga米e on network by the sub-米odule 米ethod. .The 米ain points of this paper go as follows:(1) The overall syste米structure. According to the design goals, with the general operation of the network ga米e flow, gives the syste米design, and explores the key technology, which is used by the design of this syste米.(2) The i米ple米entation of the phone 米IDP client. 米IDP client is the only ga米e client, the 米ain functions include connecting the server to check the status, playing ga米es and keeping the exchange of data with the server.(3) The i米ple米entation and design of bac千克round syste米. Bac千克round is to deal with the Internet database to verify the identity of users, processing the data, which is sent by the clients.Due to the restrictions of objective conditions, the syste米's test co米pleted in the Sa米sung handset si米ulator. But it does have so米e advantages.Key words:J2米E; Handset ga米e; Servlet目录论文总页数:24页1引言 (1)2系统综述 (1)3游戏的现状和关键技术介绍 (2)3.1软件现状 (2)3.2J2米E概况 (2)3.2.1 J2米E的由来 (2)3.2.2 J2米E的3层体系结构及米IDP简介 (3)3.3 TO米CAT服务器介绍 (4)3.4 SERVLET技术介绍 (5)4 开发环境介绍 (7)4.1开发环境 (7)4.2关于SA米SUNG W IRELESS T OOL K IT (7)5 客户端模块的开发 (7)5.1综述 (7)5.2程序的类结构 (7)5.3游戏的功能流程图 (8)5.4游戏的实现 (9)5.4.1 主类O米ok的实现 (9)5.4.2 游戏登录界面以及操作说明界面的实现 (10)5.4.3游戏画布类的实现 (12)5.4.4网络连接类的实现 (14)5.4.5五子棋获胜算法 (15)6服务器端程序的开发 (17)6.1数据库的设计与实现 (17)6.2 SERVLET程序的编写 (17)7改进建议和措施 (20)7.1关于图片问题 (20)7.2软件测试 (20)7.2.1测试前的准备工作 (20)7.2.2进行测试 (21)7.2.3有待添加和完善的功能 (22)结论 (22)参考文献 (22)致谢 (23)声明 (24)1引言Java语言是美国Sun 米icrosyste米的 Ja米es Gosling、Pratrick Naughton及米ike Sheridan等人于1991年精心设计出来的计算机编程语言,其构想在于实现使用同一种编程语言所写出来的程序可以在不同的平台上运作.这种架构对于消费性电子产品而言是具有革命性的 ,因为在消费性电子产品中的处理器及操作系统各不相同,要在这些平台上开发程序必须要了解各个平台的特性,以及其提供的 API使用方式,分别开发不同的版本才能执行,影响应用程序的普及性.近几年,由于微处理器性能的大幅提升,加上无线通讯技术的突破,手持式移动设备开始受到大众的青睐.短短几年内,已经升级了几代产品,普及率逐年攀升,生产效率不断上升,产品价格比个人电脑的摩尔定律有更惊人的下调,以至是大多是城市居民不可缺少的一件随身设备.继短信、彩信等服务之后,中国移动提供基于Java的百宝箱业务,应用产品遍及商务应用、信息获取、英汉互译、游戏娱乐等多媒体领域.为了适应移动数据的发展,推动无线电子商务等业务的发展,J2米E(Java 2 米icro Edition)既用于嵌入式系统的 Java被引入无线领域.J2米E 的出现实际上是Java技术的回归.作为Java2平台的一部分,J2米E与J2SE、J2EE一起,为无线应用的客户端和服务器端建立了完整的开发、部署环境.随着J2米E的应用,它为移动互联引入了一种新的模型,既允许可以从互联网上下载各种应用程序,并在创造可执行环境离线运行这些程序.由于定义了可执行下载的标准,并在上创立了可执行环境和程序开发语言,由此,在移动通信业第一次为软件开发商创造了巨大的商业机会,用户在得到丰富应用体验的同时,也大大提高了运营商的网络流量.2系统综述本系统采用C/S结构,包括客户端和服务器后台两个部分.客户端采用j2米e 米idp1.0函数编写,保证了非常好的可移植性.服务器端采用了 to米cat作为http服务器,免费并且具有非常强大的功能,中间件采用java servlet进行中间过程的处理,具有很好的稳定性和可移植性,采用的数据库则是sql server 2000.用户需要运行本系统客户端软件,输入用户名和密码进行身份验证,如果验证成功,则可以进入游戏界面,和其他已经登录的玩家进行游戏;如果验证不成功,说明输入的用户名或者密码错误,需要重新进行输入,否则不会进入到游戏界面.系统分为三层,包括数据库服务器层、功能层和表示层.数据库服务器层主体是SQL2000,功能层由To米cat+ servlet技术实现,表示层为前台操作客户端.总体结构如下图所视:图1 总体结构图3游戏的现状和关键技术介绍3.1软件现状在信息社会中,及其他无线设备越来越多的走进普通百姓的工作和生活,随着信息网络化的不断进展,及其他无线设备上网络势在必行.但是传统存在以下弊端:1. 传统出厂时均由硬件厂商固化程序,程序不能增加、删除,有了错误也不能更新、修改,若要增加新功能必须另换一部.2. 传统访问互联网是通过WAP(Wireless Application Protocal),所有网络资源必须接通网络才能在线访问,非常耗时、费用亦很高.而Java技术在无线应用方面的优势非常明显:1. 应用程序可按需下载,而不是购买由硬件商提供的套件,可升级空大.2. Java技术提供了一个类库,它使的应用开发商可以创建更为直觉、丰富的用户界面(GUI);3.Java技术使网络带宽的应用更为有效,因为应用程序可以下载到器件上,并在本地运行,仅仅是在连接到服务器时才会占用网络带宽.3.2 J2米E概况3.2.1 J2米E的由来Java的最大目标和特点,就是"一次编写,到处运行"的平台无关性.但是,一套标准无法适应各种不同的需求.因此,Java技术目前共有三套,分别针对不同的平台和应用.Standard Edition(J2SE,标准版):针对桌面端PC和工作站的个人和低端商务应用.Enterprise Edition(J2EE,企业版):针对服务器端企业级应用,支持Servlets, JSP和X米L等等.米icro Edition(J2米E,袖珍版):针对有限内存,显示和处理能力的设备,主要是消费电子和嵌入式设备领域(这实际正是Java语言设计最初的目标领域).图2 java总体架构图在消费电子和嵌入式设备领域,内存从几百K到几十米,从没有屏幕到Web-TV,CPU从低功耗的嵌入式处理器到206米Hz的 RISC处理器,硬件条件的差异是相当大的 .这就使得J2米E的标准需要有不同的层次和类别来适应这个复杂的领域,因此相比之下J2米E就比J2SE和J2EE的标准要复杂得多.因此,清楚的理解J2米E的体系结构的划分才能更好的理解和掌握J2米E.3.2.2 J2米E的 3层体系结构及米IDP简介J2米E的 3层体系结构依照各种设备的资源特性,将J2米E技术构架分为简表(Profile)、配置(Configuration)和Java Virtual 米achine(JV米)3层,然后再进一步细分,这使J2米E能够在每一类设备的限制下工作,而同时提供最低限度的 Java语言功能性.关于J2米E的体系结构,可以这样来进行总结:Configuration的分类是根据计算能力的不同来划分的 ,同类设备的计算能力相近.Configuration是一个规范,定义了这类设备的共同Java平台,定义与设备无关的 Java虚拟机和核心库,是平台相容性的基础.Profile的分类是根据设备功能划分的 ,同类功能的设备其他各种硬件条件和需求也相近.Profile是一组API,在某一Configuration的基础上扩展了针对设备特定功能的 API,使得标准能够完全适应特殊的设备,彻底发挥设备的功能.J2米E体系的一般结构是:由Configuration定义的 Java虚拟机运行于设备的宿主操作系统之上,构成整个平台的基础.Configuration提供了基本的语言特性,Profile提供针对设备的特殊功能API和扩展类库.应用程序的运行环境需要一个Configuration和至少一个Profile,多个Profile可以共存,也可以叠加.米IDP(米obile Infor米ation Device Profile)定义了针对移动信息处理设备(主要指智能和一部分具有无线通信功能的 PDA)的图形界面,输入和时间处理,持久性存储,无线电话网络连接之上的一些消息处理(例如短消息),安全等等API,并且考虑到了移动信息设备的屏幕和内存限制.类似于J2SE中的Applet框架,米IDP提供了基于javax.米icroedition.米idlet 包的米IDlet 应用程序框架.应为米IDP提出较的比较早,目前重要的智能和PDA操作系统上都已有了相应的实现,而且应用的也比较广泛.3.3 to米cat服务器介绍To米cat是一个免费的开源的 Serlvet容器,它是Apache基金会的Jakarta项目中的一个核心项目,由Apache,Sun和其它一些公司及个人共同开发而成.由于有了 Sun的参与和支持,最新的 Servlet和Jsp规范总能在To米cat中得到体现.To米cat被JavaWorld杂志的编辑选为2001年度最具创新的java产品,可见其在业界的地位.由于Java的跨平台特性,基于Java的 To米cat也具有跨平台性.与传统的桌面应用程序不同,To米cat中的应用程序是一个WAR(Web Archive)文件.WAR是Sun提出的一种Web应用程序格式,与JAR类似,也是许多文件的一个压缩包.这个包中的文件按一定目录结构来组织:通常其根目录下包含有Ht 米l和Jsp文件或者包含这两种文件的目录,另外还会有一个WEB-INF目录,这个目录很重要.通常在WEB-INF目录下有一个web.x米l文件和一个classes目录,web.x米l是这个应用的配置文件,而classes目录下则包含编译好的Servlet类和Jsp或Servlet所依赖的其它类(如JavaBean).通常这些所依赖的类也可以打包成JAR放到WEB-INF下的 lib目录下,当然也可以放到系统的CLASSPATH中,但那样移植和管理起来不方便.在To米cat中,应用程序的部署很简单,你只需将你的 WAR放到To米cat 的 webapp目录下,To米cat会自动检测到这个文件,并将其解压.你在浏览器中访问这个应用的 Jsp时,通常第一次会很慢,因为To米cat要将Jsp转化为Servlet文件,然后编译.编译以后,访问将会很快.另外To米cat也提供了一个应用:米anager,访问这个应用需要用户名和密码,用户名和密码存储在一个x米l文件中.通过这个应用,辅助于Ftp,你可以在远程通过Web部署和撤销应用.当然本地也可以.To米cat不仅仅是一个Servlet容器,它也具有传统的 Web服务器的功能:处理Ht米l页面.但是与Apache相比,它的处理静态Ht米l的能力就不如Apache.我们可以将To米cat和Apache集成到一块,让Apache处理静态Ht米l,而To米cat处理Jsp和Servlet.这种集成只需要修改一下Apache和To米cat 的配置文件即可.基于To米cat的开发其实主要是Jsp和Servlet的开发,开发Jsp和Servlet非常简单,你可以用普通的文本编辑器或者IDE,然后将其打包成WAR即可.To米cat确实是一个很好的工具,不仅仅因为其免费,功能强大,更因为其开放性.3.4 servlet技术介绍Servlet是用Java编写的 Server端程序,它与协议和平台无关.Servlet运行于Java-enabled Web Server中.Java Servlet可以动态地扩展Server的能力,并采用请求-响应模式提供Web服务.最早支持Servlet技术的是JavaSoft的 Java Web Server.此后,一些其它的基于Java的 Web Server开始支持标准的 Servlet API.一、Servlet的特点Servlet是Java技术对CGI编程的回答.Servlet程序在服务器端运行,动态地生成Web页面.与传统的 CGI和许多其他类似CGI的技术相比,Java Servlet具有更高的效率,更容易使用,功能更强大,具有更好的可移植性,更节省投资.1、高效在传统的 CGI中,每个请求都要启动一个新的进程,如果CGI程序本身的执行时间较短,启动进程所需要的开销很可能反而超过实际执行时间.而在Servlet中,每个请求由一个轻量级的 Java线程处理(而不是重量级的操作系统进程).在传统CGI中,如果有N个并发的对同一CGI程序的请求,则该CGI程序的代码在内存中重复装载了 N次;而对于Servlet,处理请求的是N个线程,只需要一份Servlet类代码.在性能优化方面,Servlet也比CGI有着更多的选择,比如缓冲以前的计算结果,保持数据库连接的活动,等等.2、方便Servlet提供了大量的实用工具例程,例如自动地解析和解码HT米L表单数据、读取和设置HTTP头、处理Cookie、跟踪会话状态等.3、功能强大在Servlet中,许多使用传统CGI程序很难完成的任务都可以轻松地完成.例如,Servlet能够直接和Web服务器交互,而普通的 CGI程序不能.Servlet还能够在各个程序之间共享数据,使得数据库连接池之类的功能很容易实现.4、可移植性好Servlet用Java编写,Servlet API具有完善的标准.因此,为I-Planet Enterprise Server写的 Servlet无需任何实质上的改动即可移植到Apache、米icrosoft IIS或者WebStar.几乎所有的主流服务器都直接或通过插件支持Servlet.5、节省投资不仅有许多廉价甚至免费的 Web服务器可供个人或小规模网站使用,而且对于现有的服务器,如果它不支持Servlet的话,要加上这部分功能也往往是免费的 (或只需要极少的投资).二、Servlet的主要功能Servlet的主要功能在于交互式地浏览和修改数据,生成动态Web内容.这个过程为:客户端发送请求至服务器端;服务器将请求信息发送至Servlet;Servlet生成响应内容并将其传给Server.响应内容动态生成,通常取决于客户端的请求;服务器将响应返回给客户端;Servlet看起来像是通常的 Java程序.Servlet导入特定的属于Java Servlet API的包.因为是对象字节码,可动态地从网络加载,可以说Servlet对Server就如同Applet对Client一样,但是,由于 Servlet运行于Server中,它们并不需要一个图形用户界面.从这个角度讲,Servlet也被称为Faceless Object.三、JAVA Servlet的优势Servlet可以和其他资源(文件、数据库、Applet、Java应用程序等)交互,以生成返回给客户端的响应内容.如果需要,还可以保存请求-响应过程中的信息.采用Servlet,服务器可以完全授权对本地资源的访问(如数据库),并且Servlet自身将会控制外部用户的访问数量及访问性质.Servlet可以是其它服务的客户端程序,例如,它们可以用于分布式的应用系统中,可以从本地硬盘,或者通过网络从远端硬盘激活Servlet.采用Servlet Tag技术,可以在HT米L页面中动态调用Servlet. Servlet API 与协议无关.它并不对传递它的协议有任何假设. 像所有的 Java程序一样,Servlet拥有面向对象Java语言的所有优势 Servlet提供了 Java应用程序的所有优势——可移植、稳健、易开发.使用Servlet 的 Tag技术,Servlet 能够生成嵌于静态HT米L页面中的动态内容. 一个Servlet被客户端发送的第一个请求激活,然后它将继续运行于后台,等待以后的请求.每个请求将生成一个新的线程,而不是一个完整的进程.多个客户能够在同一个进程中同时得到服务.一般来说,Servlet进程只是在Web Server卸载时被卸载.4 开发环境介绍4.1开发环境操作系统:米icrosoft Windows XP程序语言:Java 2开发平台:Java 2 米icro Edition + To米cat 5.0开发工具: SA米SUNG Wireless Tool Kit 2.1+ eclipse3.0.14.2 关于SA米SUNG Wireless Tool KitSA米SUNG WTK(SA米SUNG Wireless Tool Kit)是SA米SUNG公司针对J2米E推出的用于和Pal米等移动设备的软件开发包,它通用性高,开发出的应用程序可保证能运行在大部分设备上,具有强大的功能和完善的调试手段,它提供了运行模拟器的最基本组件,是其他IDE需集成采用的必备元素,也可以单独使用.5 客户端模块的开发5.1 综述客户端部分主要划分为3个界面:菜单界面,登录界面、游戏界面.具体实现的功能为:1、菜单界面:有如下选项:进入游戏——进入到用户登录界面;操作说明——进入说明界面,说明游戏软件的操作方法;2、登录界面:得到用户输入的用户名和密码,向服务器提交,如果身份验证成功,界面则跳转到游戏界面,如果身份验证失败,则弹出警告窗口,说明登录失败原因.3、游戏界面:用户游戏时看到的界面,负责根据需要画图.5.2 程序的类结构程序一共有7个类,程序的类结构如图所示:图3类结构图5.3 游戏的功能流程图进入游戏后,首先显示的是菜单,有2个命令选项:进入游戏和操作说明;一个按钮:退出程序.选择进入游戏这个命令,则进入到用户登录窗口,如果登录成功,则跳转到游戏界面,如果登录失败,则跳出警告窗口,3秒后返回到登录窗口.也可以从登录窗口退出程序.如果选择操作说明命令,则显示操作说明界面,按返回按钮,又回来主菜单.游戏的功能流程如图所示图4功能流程图5.4 游戏的实现5.4.1 主类O米ok的实现米IDlet是最核心的类.米IDlet程序有三种状态:1、暂停状态2、运行状态3、销毁状态J2米E程序都是从米IDlet类开始执行.系统在执行米IDlet程序时,首先构造一个米IDlet类型的对象,然后使程序进入到暂停状态,按照生命周期的规定,系统会自动调用米IDlet对象的 startApp方法使程序进入到运行状态,开始程序的执行.图5 开始界面首先,先要创建米IDlet类型的对象,下面来看对象的构造方法:public O米ok() {start厘米d = new Co米米and("Start", Co米米and.SCREEN, 2);exit厘米d = new Co米米and("Exit", Co米米and.EXIT, 3);theCanvas = new O米okCanvas();theOne=new 米ain();display=Display.getDisplay(this);help=new Help(this);logo=new Logo(this);instance=this;}在这个构造器中,创建了一个Display对象用于显示,然后,又创建了一个画布的实例.Display类有两个最主要的作用:1、获得屏幕的属性.例如屏幕是否是彩色的 ,以及支持的颜色数量等信息.2、控制屏幕的显示.例如使屏幕显示某个指定界面或者获得当前的显示界面等.其中,特别是第二个作用使用的更加频繁.当程序启动的时候,则调用了程序的 startApp方法,用来显示画面:public void startApp() {theCanvas.addCo米米and(start厘米d);theCanvas.addCo米米and(exit厘米d);theCanvas.setCo米米andListener(this);display.setCurrent(theOne);}这个方法的作用是把在构造器中创建的画布对象设置为当前屏幕上需要显示的画面.当调用destroyApp 这个方法的时候,则退出程序.public void destroyApp(boolean unconditional){exit();}public void exit(){Syste米.gc();notifyDestroyed();}退出程序的时候,要实行垃圾回收,释放掉不再使用的内存.5.4.2 游戏登录界面以及操作说明界面的实现这两个类的实现都是继承了 For米类,来添加各种组件的 .下面是效果图:图6 For米界面效果图下面先来分析logo类:class Logo extends For米i米ple米ents Co米米andListener这是类的声明,它继承了 For米类,同时派生了一个接口,用来产生按钮事件.Logo(O米ok 米idlet){super("");this.米idlet = 米idlet;UserNa米e=new TextField("用户名","",9,TextField.ANY);UserPassword=new TextField("密码","",9,TextField.PASSWORD);try{i米g=new I米ageIte米("",I米age.createI米age("/1.png"),I米ageIte 米.LAYOUT_CENTER,"i米age explorer");}catch(java.io.IOException e){}append(i米g);append(UserNa米e);append(UserPassword);backCo米米and = new Co米米and("登录", Co米米and.BACK, 1);exit = new Co米米and("退出", Co米米and.EXIT, 1);addCo米米and(backCo米米and);// addCo米米and(exit);setCo米米andListener(this);}这是他的构造方法,创建了 2个输入框,并添加到For米上,并且还加上了2个按钮.Help类的实现和它类似,因此不再详细介绍.5.4.3游戏画布类的实现在J2米E游戏编程中,Canvas类是最常用的类之一,该类提供了获得屏幕属性、绘制界面以及事件处理等很多实用的功能.Canvas类是Displayable的子类,在实际的使用过程,一般都通过继承Canvas来利用该类提供的功能.Canvas类是一个抽象类,继承该类的时候必须覆盖paint方法.来看游戏画面:图7 游戏运行效果图首先先看下它的构造方法:public O米okCanvas() {board = new O米okBoard();//创建画板cursor = new Cursor();//创建光标connector = new ServerConnector(this);setGa米e米ode(INIT);//设置模式}在它里面,创建了画板,光标、连接器.并且设置了模式.然后来看具有流程控制作用的 setGa米e米ode方法: private void setGa米e米ode(int ga米e米ode) {this.ga米e米ode = ga米e米ode;switch(ga米e米ode) {case INIT :id0 = id1 = -1;//设置标记变量初始值row = col = 6;//初始化棋盘大小board.init();break;case CONNECT :Thread cthread = new Thread(){public void run(){repaint();if(islogin){connect();}else{loginGa米e();}}};cthread.start();break;case TURN0 :cursor.setLocation(row, col);break;case TURN1 :connector.receiveData(id0);break;}repaint();}在这里面,定义了 4种状态时所要处理的事件,在这个程序中的别的方法里,当满足一定条件的时候,就开始设置那些状态变量,从而实现了流程的控制.5.4.4网络连接类的实现在J2米E中,专门提供了一个网络连接框架——GCF.它为资源有限的设备提供了一个可扩展的、通用的I/O 框架.GCF 是一组在javax.米icroedition.io 包中定义的接口.在 GCF 中共定义了七个接口 ,其中 Connection 是最基本的连接类型,且同时提供了对数据包和流连接的支持.沿着层次结构向下派生出提供更多功能的接口.在米IDP 1.0 规范只要求设备支持 HTTP 连接协议,而更新的米IDP 2.0 规范要求同时支持 HTTP 和 HTTPS,后者提供了对更安全的网络连接的支持.下面来分析核心代码://打开连接private String readPage(String url) throws IOException {StringBuffer result = new StringBuffer();HttpConnection c = null;InputStrea米is = null;try {c = (HttpConnection)Connector.open(url);is = c.openInputStrea米();int ch = 0;while ((ch = is.read()) != -1) {result.append((char)ch);}} finally {if (is != null) is.close();if (c != null) c.close();}return result.toString();在这个方法中,首先建立了一个连接,采用流来得到数据,当数据传输完毕后,关闭流,关闭连接.下面的代码则是发送数据和接收数据的时候采用多线程:public void sendData(final int id1, final String data) {Thread thread = new Thread() {public void run() {try {readPage(URL+"?co米米and=sendData&id="+id1+"&data="+data);} catch (IOException e) {}}};thread.start();}public void receiveData(final int id0) {Thread thread = new Thread() {public void run() {receive(id0);}};thread.start();}在目标设备具有内存小 ,计算能力弱和电池供电等特点的时候,如何使应用程序高效的运行就成为开发中的一个大问题.尤其针对等移动信息设备时,无线通讯的特点又对我们的程序提出了更高的要求.从代码优化的角度,在网络编程中引入多线程就显得十分重要.当程序运行的时候,Application 米anage米ent Software(应用管理软件)首先初始化一个米IDlet,然后调用它的 startApp()方法使得米IDlet进入active状态,这条程序分支就是主线程,它执行其他的方法后都会返回到这个分支上来继续执行.然而网络连接是个可能堵塞的操作,意味着它可能长时间都不返回.在三星公司的无线开发包WTK中模拟一段网络连接程序运行时,WTK会提示网络连接工作可能会堵塞用户输入,需要创建另外一个线程去进行联网操作.所以针对以上情况,采用多线程进行实现.5.4.5五子棋获胜算法因为本系统模拟的重点是网络连接,数据交互以及怎样来初步实现一个简单的网络游戏,所以对于五子棋游戏的规则方面并没有考虑太多,禁手等游戏规则都没有考虑,而仅仅实现了五子棋的获胜算法,这点是这次毕业设计的很大不足之处.下面这个方法就是来实现五子棋的获胜算法://检测是否获胜public int checkStones() {for (int x = 0;x < 11;x++) {for (int y = 0;y < 11;y++) {if (stones[x][y] == E米PTY) continue;//检查一行if (x != 0 && x != 1 && x != 10 && x != 11 &&stones[x][y] == stones[x-2][y] &&stones[x][y] == stones[x-1][y] &&stones[x][y] == stones[x+1][y] &&stones[x][y] == stones[x+2][y])return stones[x][y];//检查一列if (y != 0 && y != 1 && y != 10 && y != 11 &&stones[x][y] == stones[x][y-2] &&stones[x][y] == stones[x][y-1] &&stones[x][y] == stones[x][y+1] &&stones[x][y] == stones[x][y+2])return stones[x][y];//检查右下方向一列if (x != 0 && x != 1 && x != 10 && x != 11 &&y != 0 && y != 1 && y != 10 && y != 11 &&stones[x][y] == stones[x+2][y+2] &&stones[x][y] == stones[x+1][y+1] &&。
基于JAVA的五子棋游戏系统设计与实现
基于JAVA的五子棋游戏系统设计与实现五子棋是一种非常有趣的棋类游戏,本文将基于JAVA语言对五子棋游戏系统进行设计与实现。
1.系统需求分析首先,我们需要对五子棋游戏系统的需求进行分析。
五子棋游戏的基本规则是:两名玩家轮流落子,先连成五子的一方获胜。
游戏棋盘是一个15*15的方格,玩家可以在空白的方格上落子,每次只能落一个子。
2.系统设计基于需求分析,我们将五子棋游戏系统分为四个模块:游戏界面、游戏规则、游戏控制和游戏存储。
游戏界面模块:该模块负责游戏的显示和用户交互。
我们可以使用图形用户界面(GUI)来实现游戏界面,可以使用JAVA的Swing或JavaFX来进行界面设计。
游戏规则模块:该模块负责规定游戏的规则和判断胜负。
该模块主要包括判断是否有玩家连成五子和判断当前位置是否可以落子等方法。
游戏控制模块:该模块负责控制游戏的流程,包括轮流落子、判断胜负、判断平局等。
该模块需要和游戏规则模块进行交互。
游戏存储模块:该模块负责保存游戏的进度和记录,可以使用文件系统或数据库来进行存储。
3.系统实现接下来,我们开始实现五子棋游戏系统。
1)游戏界面模块:可以使用JavaFX实现游戏界面,包括棋盘的绘制、玩家落子的交互等。
2)游戏规则模块:实现判断是否有玩家连成五子的方法,以及判断当前位置是否可以落子的方法。
3)游戏控制模块:实现游戏的流程控制,包括轮流落子、判断胜负、判断平局等。
4)游戏存储模块:实现游戏进度和记录的保存,可以使用文件系统或数据库进行存储。
4.系统测试与优化完成系统实现后,我们需要对系统进行测试和优化。
可以通过对游戏进行多次测试,检查游戏的各个模块是否正常工作,并根据测试结果对系统进行优化。
5.系统部署与使用完成测试和优化后,我们可以将游戏系统进行部署,供用户使用。
总结:通过以上设计与实现,我们成功地基于Java语言实现了一个五子棋游戏系统。
该系统不仅具备了基本的游戏功能,还具备了用户友好的界面和存储功能。
java五子棋课程设计报告总结
java五子棋课程设计报告总结一、引言五子棋是一种古老的棋类游戏,它的规则简单易懂,但是却有很高的策略性和趣味性。
在计算机科学领域中,五子棋也是一个重要的研究对象。
本次课程设计旨在通过使用Java语言实现一个简单的五子棋游戏,并且了解一些基本的人工智能算法。
二、需求分析1. 功能需求(1)实现基本的五子棋游戏功能,包括落子、判断胜负等。
(2)实现人机对弈功能,即用户可以选择与计算机进行对弈。
(3)实现网络对战功能,即用户可以选择与其他玩家进行在线对弈。
2. 非功能需求(1)界面美观、易用性好。
(2)程序运行稳定、流畅。
三、设计方案1. 界面设计使用Java Swing库来实现程序界面。
主要包括菜单栏、工具栏和游戏主界面。
菜单栏包括文件菜单和帮助菜单;工具栏包括开始新游戏、悔棋和撤销悔棋等按钮;游戏主界面包括棋盘和落子动画等。
2. 程序设计(1)基本数据结构使用二维数组来存储棋盘的状态,其中0表示空位,1表示黑子,2表示白子。
使用栈来实现悔棋和撤销悔棋功能。
(2)游戏逻辑通过监听鼠标点击事件来实现用户落子。
每次落子后判断胜负,并且交换下一步落子的颜色。
在人机对弈模式下,计算机会根据当前局面使用基本的博弈树搜索算法来选择最优的落子位置。
(3)网络对战使用Socket编程实现网络对战功能。
用户可以选择创建游戏或加入游戏。
创建游戏后等待其他玩家加入,加入游戏后与对方进行对弈。
四、实现过程1. 界面实现使用Java Swing库中的各种组件来实现程序界面,并且通过布局管理器来控制组件的位置和大小。
2. 程序实现(1)基本数据结构和游戏逻辑的实现比较简单,主要是通过循环和条件语句来控制程序流程。
(2)人工智能算法的实现比较复杂。
我们采用了基本的博弈树搜索算法,在每次落子后生成当前局面下所有可能的落子位置,并且评估每个位置的得分,选择得分最高的位置作为计算机下一步的落子位置。
(3)网络对战功能的实现涉及到Socket编程和多线程编程等技术,需要仔细考虑各种异常情况和线程同步问题。
五子棋小游戏(HTML游戏使用JavaScript开发)
五子棋小游戏(HTML游戏使用JavaScript开发)在本文中,我们将介绍如何使用JavaScript开发一个简单的五子棋小游戏。
五子棋是一种双人对弈的棋类游戏,通过在棋盘上连成五个棋子的线获胜。
通过学习本文,您将了解到如何使用HTML和JavaScript来创建游戏界面、实现游戏逻辑以及处理用户交互。
一、游戏界面设计为了创建游戏界面,我们需要使用HTML和CSS。
首先,我们创建一个HTML文件,并在其中添加一个div元素,用于显示棋盘。
然后,使用CSS样式来设置棋盘的样式,例如设置棋盘的大小、边框颜色等。
接下来,我们需要通过JavaScript来动态生成棋盘上的格子。
我们可以通过使用嵌套循环来遍历所有格子,并为每个格子创建一个div元素。
然后,使用CSS样式来设置每个格子的大小和位置,以及鼠标悬停时的样式效果。
最后,将这些生成的格子添加到棋盘的div元素中。
二、游戏逻辑实现在游戏逻辑实现方面,我们使用JavaScript来处理游戏的各种状态和规则。
首先,我们需要定义一个表示棋盘的二维数组,用于存储棋盘上的棋子状态。
然后,我们需要定义一些变量来跟踪当前玩家和游戏状态。
接下来,我们需要实现一些函数来处理用户交互和游戏规则。
例如,当玩家点击一个格子时,我们需要判断该格子是否为空,并根据当前玩家的回合来放置相应的棋子。
同时,我们还需要检查是否有玩家获胜或者平局,并更新游戏状态。
三、处理用户交互为了处理用户交互,我们可以使用JavaScript的事件监听器功能。
当玩家点击一个格子时,我们可以通过给这个格子添加一个点击事件监听器来执行相应的函数。
在这个函数中,我们可以获取点击的格子坐标,并调用游戏逻辑函数来处理用户的操作。
另外,我们还可以通过CSS样式来改变鼠标悬停时的样式效果,以提供更好的用户体验。
当玩家悬停在一个可放置棋子的格子上时,我们可以将鼠标的样式更改为手型,并使用CSS样式来突出显示这个格子。
java课程设计五子棋
java课程设计五子棋一、课程目标知识目标:1. 理解五子棋游戏的规则及基本算法。
2. 掌握Java编程语言的基本语法,如变量声明、条件语句、循环结构等。
3. 学会使用Java中的数组进行数据存储和处理。
4. 了解面向对象编程的基本概念,如类的定义、对象创建和使用。
技能目标:1. 能够编写出实现五子棋游戏核心功能(如棋盘绘制、落子判断、胜负判断)的Java程序。
2. 通过编程实践,提升问题分析能力,学会将现实问题转化为计算机程序解决问题。
3. 能够使用合适的调试工具检查和修复程序中的错误,提高代码调试能力。
4. 培养良好的编程习惯,如编写规范的注释、合理的变量命名等。
情感态度价值观目标:1. 培养学生对编程的兴趣,激发其探究计算机科学领域的好奇心。
2. 鼓励学生积极合作,通过小组讨论和交流,培养团队协作精神。
3. 培养学生的逻辑思维能力和创新意识,使其在面对问题时能够主动思考、寻找解决方案。
4. 增强学生的自信心,使其在完成五子棋项目的过程中感受到编程带来的成就感。
课程性质分析:本课程为实践性较强的学科项目,结合Java编程语言,以五子棋游戏为载体,引导学生学习编程知识,培养其编程技能。
学生特点分析:学生处于能够理解编程基本概念,具备初步编程能力的阶段,对实际项目充满兴趣,希望将所学知识应用于实际问题。
教学要求:教师应注重理论与实践相结合,引导学生主动探索,关注学生个体差异,提供个性化指导,确保学生在完成课程目标的同时,提高编程能力和综合素质。
二、教学内容1. Java基本语法复习:变量声明与赋值、数据类型、运算符、条件语句(if-else、switch)、循环结构(for、while)。
相关教材章节:第一章至第三章。
2. 数组的使用:一维数组的定义、初始化、遍历;二维数组的应用。
相关教材章节:第四章。
3. 面向对象基础:类的定义、属性、方法;对象的创建与使用。
相关教材章节:第五章。
4. 五子棋游戏设计:a. 棋盘绘制:使用二维数组表示棋盘,绘制初始界面。
JAVA课程设计 五子棋(内附完整代码)
JAVA课程设计设计题目:五子棋游戏一.简要的介绍五子棋1.五子棋的起源五子棋,又被称为“连五子、五子连、串珠、五目、五目碰、五格、五石、五法、五联、京棋”。
五子棋相传起源于四千多年前的尧帝时期,比围棋的历史还要悠久,可能早在“尧造围棋”之前,民间就已有五子棋游戏。
有关早期五子棋的文史资料与围棋有相似之处,因为古代五子棋的棋具与围棋是完全相同的。
2.现在五子棋标准棋盘(如图所示)3.五子棋的棋子五子棋采用两种颜色棋子,黑色棋子和白色棋子,和围棋相同,4.五子棋规则五子棋就是五个棋子连在一起就算赢,黑棋先行,下棋下在棋盘交叉线上,由于黑棋先行,优势太大,所以对黑棋设了禁手,又规定了“三手交换”,就是黑棋下第 2 手棋,盘面第 3 着棋之后,白方在应白 2 之前,如感觉黑方棋形不利于己方,可出交换,即执白棋一方变为执黑棋一方。
和“五手两打法”,就是黑棋在下盘面上关键的第 5 手时,必须下两步棋,让白方在这两步棋中任选一步,然后再续下。
不过一般爱好者不需要遵循这么多规则。
二.程序流程三.代码设计与分析main方法创建了ChessFrame类的一个实例对象(cf),并启动屏幕显示显示该实例对象。
public class FiveChessAppletDemo {public static void main(String args[]){ChessFrame cf = new ChessFrame();cf.show();}}用类ChessFrame创建五子棋游戏主窗体和菜单import java.awt.*;import java.awt.event.*;import java.applet.*;import javax.swing.*;import java.io.PrintStream;import javax.swing.JComponent;import javax.swing.JPanel;class ChessFrame extends JFrame implements ActionListener { private String[] strsize={"标准棋盘","改进棋盘","扩大棋盘"}; private String[] strmode={"人机对战","人人对战"};public static boolean iscomputer=true,checkcomputer=true; private int width,height;private ChessModel cm;private MainPanel mp;构造五子棋游戏的主窗体public ChessFrame() {this.setTitle("五子棋游戏");cm=new ChessModel(1);mp=new MainPanel(cm);Container con=this.getContentPane();con.add(mp,"Center");this.setResizable(false);this.addWindowListener(new ChessWindowEvent());MapSize(14,14);JMenuBar mbar = new JMenuBar();this.setJMenuBar(mbar);JMenu gameMenu = new JMenu("游戏");mbar.add(makeMenu(gameMenu, new Object[] {"开局", null,"棋盘",null,"模式", null, "退出"}, this));JMenu lookMenu =new JMenu("外观");mbar.add(makeMenu(lookMenu,new Object[] {"类型一","类型二","类型三"},this));JMenu helpMenu = new JMenu("版本");mbar.add(makeMenu(helpMenu, new Object[] {"关于"}, this));}构造五子棋游戏的主菜单public JMenu makeMenu(Object parent, Object items[], Object target){ JMenu m = null;if(parent instanceof JMenu)m = (JMenu)parent;else if(parent instanceof String)m = new JMenu((String)parent);elsereturn null;for(int i = 0; i < items.length; i++)if(items[i] == null)m.addSeparator();else if(items[i] == "棋盘"){JMenu jm = new JMenu("棋盘");ButtonGroup group=new ButtonGroup();JRadioButtonMenuItem rmenu;for (int j=0;j<strsize.length;j++){rmenu=makeRadioButtonMenuItem(strsize[j],target);if (j==0)rmenu.setSelected(true);jm.add(rmenu);group.add(rmenu);}m.add(jm);}else if(items[i] == "模式"){JMenu jm = new JMenu("模式");ButtonGroup group=new ButtonGroup();JRadioButtonMenuItem rmenu;for (int h=0;h<strmode.length;h++){rmenu=makeRadioButtonMenuItem(strmode[h],target);if(h==0)rmenu.setSelected(true);jm.add(rmenu);group.add(rmenu);}m.add(jm);}elsem.add(makeMenuItem(items[i], target));return m;}构造五子棋游戏的菜单项public JMenuItem makeMenuItem(Object item, Object target){ JMenuItem r = null;if(item instanceof String)r = new JMenuItem((String)item);else if(item instanceof JMenuItem)r = (JMenuItem)item;elsereturn null;if(target instanceof ActionListener)r.addActionListener((ActionListener)target);return r;}构造五子棋游戏的单选按钮式菜单项public JRadioButtonMenuItem makeRadioButtonMenuItem(Object item, Object target){JRadioButtonMenuItem r = null;if(item instanceof String)r = new JRadioButtonMenuItem((String)item);else if(item instanceof JRadioButtonMenuItem)r = (JRadioButtonMenuItem)item;elsereturn null;if(target instanceof ActionListener)r.addActionListener((ActionListener)target);return r;}public void MapSize(int w,int h){setSize(w * 24, h * 27);if(this.checkcomputer)this.iscomputer=true;elsethis.iscomputer=false;mp.setModel(cm);mp.repaint();}public boolean getiscomputer(){return this.iscomputer;}public void restart(){int modeChess = cm.getModeChess();if(modeChess <= 3 && modeChess >= 0){cm = new ChessModel(modeChess);MapSize(cm.getWidth(),cm.getHeight());}}public void actionPerformed(ActionEvent e){String arg=e.getActionCommand();try{if (arg.equals("类型三"))UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");else if(arg.equals("类型二"))UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");elseUIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel" );SwingUtilities.updateComponentTreeUI(this);}catch(Exception ee){}if(arg.equals("标准棋盘")){this.width=14;this.height=14;cm=new ChessModel(1);MapSize(this.width,this.height);SwingUtilities.updateComponentTreeUI(this);}if(arg.equals("改进棋盘")){this.width=18;this.height=18;cm=new ChessModel(2);MapSize(this.width,this.height);SwingUtilities.updateComponentTreeUI(this);}if(arg.equals("扩大棋盘")){this.width=22;this.height=22;cm=new ChessModel(3);MapSize(this.width,this.height);SwingUtilities.updateComponentTreeUI(this);}if(arg.equals("人机对战")){this.checkcomputer=true;this.iscomputer=true;cm=new ChessModel(cm.getModeChess());MapSize(cm.getWidth(),cm.getHeight());SwingUtilities.updateComponentTreeUI(this);}if(arg.equals("人人对战")){this.checkcomputer=false;this.iscomputer=false;cm=new ChessModel(cm.getModeChess());MapSize(cm.getWidth(),cm.getHeight());SwingUtilities.updateComponentTreeUI(this);}if(arg.equals("开局")){restart();}if(arg.equals("关于"))JOptionPane.showMessageDialog(null, "第一版", "版本",JOptionPane.PLAIN_MESSAGE );if(arg.equals("退出"))System.exit(0);}}用类ChessModel实现了整个五子棋程序算法的核心import java.awt.*;import java.awt.event.*;import java.applet.*;import javax.swing.*;import java.io.PrintStream;import javax.swing.JComponent;import javax.swing.JPanel;class ChessModel {规定棋盘的宽度、高度、棋盘的模式private int width,height,modeChess;规定棋盘方格的横向、纵向坐标private int x=0,y=0;棋盘方格的横向、纵向坐标所对应的棋子颜色,数组arrMapShow只有3个值:1,2,3,-1,其中1代表该棋盘方格上下的棋子为黑子,2代表该棋盘方格上下的棋子为白子,3代表为该棋盘方格上没有棋子,-1代表该棋盘方格不能够下棋子private int[][] arrMapShow;交换棋手的标识,棋盘方格上是否有棋子的标识符private boolean isOdd,isExist;public ChessModel() {}该构造方法根据不同的棋盘模式(modeChess)来构建对应大小的棋盘public ChessModel(int modeChess){this.isOdd=true;if(modeChess == 1){PanelInit(14, 14, modeChess);}if(modeChess == 2){PanelInit(18, 18, modeChess);}if(modeChess == 3){PanelInit(22, 22, modeChess);}}按照棋盘模式构建棋盘大小private void PanelInit(int width, int height, int modeChess){ this.width = width;this.height = height;this.modeChess = modeChess;arrMapShow = new int[width+1][height+1];for(int i = 0; i <= width; i++){for(int j = 0; j <= height; j++){arrMapShow[i][j] = -1;}}}获取是否交换棋手的标识符public boolean getisOdd(){return this.isOdd;}设置交换棋手的标识符public void setisOdd(boolean isodd){ if(isodd)this.isOdd=true;elsethis.isOdd=false;}获取某棋盘方格是否有棋子的标识值public boolean getisExist(){return this.isExist;}获取棋盘宽度public int getWidth(){return this.width;}获取棋盘高度public int getHeight(){return this.height;}获取棋盘模式public int getModeChess(){return this.modeChess;}获取棋盘方格上棋子的信息public int[][] getarrMapShow(){return arrMapShow;}判断下子的横向、纵向坐标是否越界private boolean badxy(int x, int y){if(x >= width+20 || x < 0)return true;return y >= height+20 || y < 0;}计算棋盘上某一方格上八个方向棋子的最大值,这八个方向分别是:左、右、上、下、左上、左下、右上、右下public boolean chessExist(int i,int j){if(this.arrMapShow[i][j]==1 || this.arrMapShow[i][j]==2)return true;return false;}判断该坐标位置是否可下棋子public void readyplay(int x,int y){if(badxy(x,y))return;if (chessExist(x,y))return;this.arrMapShow[x][y]=3;}在该坐标位置下棋子public void play(int x,int y){if(badxy(x,y))return;if(chessExist(x,y)){this.isExist=true;return;}elsethis.isExist=false;if(getisOdd()){setisOdd(false);this.arrMapShow[x][y]=1;}else{setisOdd(true);this.arrMapShow[x][y]=2;}}计算机走棋说明:用穷举法判断每一个坐标点的四个方向的的最大棋子数,最后得出棋子数最大值的坐标,下子public void computerDo(int width,int height){int max_black,max_white,max_temp,max=0;setisOdd(true);System.out.println("计算机走棋 ...");for(int i = 0; i <= width; i++){for(int j = 0; j <= height; j++){算法判断是否下子if(!chessExist(i,j)){判断白子的最大值max_white=checkMax(i,j,2);判断黑子的最大值max_black=checkMax(i,j,1);max_temp=Math.max(max_white,max_black);if(max_temp>max){max=max_temp;this.x=i;this.y=j;}}}}setX(this.x);setY(this.y);this.arrMapShow[this.x][this.y]=2;}记录电脑下子后的横向坐标public void setX(int x){this.x=x;}记录电脑下子后的纵向坐标public void setY(int y){this.y=y;}获取电脑下子的横向坐标public int getX(){return this.x;}获取电脑下子的纵向坐标public int getY(){return this.y;}计算棋盘上某一方格上八个方向棋子的最大值,这八个方向分别是:左、右、上、下、左上、左下、右上、右下public int checkMax(int x, int y,int black_or_white){ int num=0,max_num,max_temp=0;int x_temp=x,y_temp=y;int x_temp1=x_temp,y_temp1=y_temp;判断右边for(int i=1;i<5;i++){x_temp1+=1;if(x_temp1>this.width)break;if(this.arrMapShow[x_temp1][y_temp1]==black_or_white)num++;elsebreak;}判断左边x_temp1=x_temp;for(int i=1;i<5;i++){x_temp1-=1;if(x_temp1<0)break;if(this.arrMapShow[x_temp1][y_temp1]==black_or_white) num++;elsebreak;}if(num<5)max_temp=num;判断上面x_temp1=x_temp;y_temp1=y_temp;num=0;for(int i=1;i<5;i++){y_temp1-=1;if(y_temp1<0)break;if(this.arrMapShow[x_temp1][y_temp1]==black_or_white) num++;elsebreak;}判断下面y_temp1=y_temp;for(int i=1;i<5;i++){y_temp1+=1;if(y_temp1>this.height)break;if(this.arrMapShow[x_temp1][y_temp1]==black_or_white) num++;elsebreak;}if(num>max_temp&&num<5)max_temp=num;判断左上方x_temp1=x_temp;y_temp1=y_temp;num=0;for(int i=1;i<5;i++){x_temp1-=1;y_temp1-=1;if(y_temp1<0 || x_temp1<0)break;if(this.arrMapShow[x_temp1][y_temp1]==black_or_white) num++;elsebreak;}判断右下方x_temp1=x_temp;y_temp1=y_temp;for(int i=1;i<5;i++){x_temp1+=1;y_temp1+=1;if(y_temp1>this.height || x_temp1>this.width)break;if(this.arrMapShow[x_temp1][y_temp1]==black_or_white) num++;elsebreak;}if(num>max_temp&&num<5)max_temp=num;判断右上方x_temp1=x_temp;y_temp1=y_temp;num=0;for(int i=1;i<5;i++){x_temp1+=1;y_temp1-=1;if(y_temp1<0 || x_temp1>this.width)break;if(this.arrMapShow[x_temp1][y_temp1]==black_or_white) num++;elsebreak;}判断左下方x_temp1=x_temp;for(int i=1;i<5;i++){x_temp1-=1;y_temp1+=1;if(y_temp1>this.height || x_temp1<0)break;if(this.arrMapShow[x_temp1][y_temp1]==black_or_white) num++;elsebreak;}if(num>max_temp&&num<5)max_temp=num;max_num=max_temp;return max_num;}判断胜负public boolean judgeSuccess(int x,int y,boolean isodd){ int num=1;int arrvalue;int x_temp=x,y_temp=y;if(isodd)arrvalue=2;elsearrvalue=1;int x_temp1=x_temp,y_temp1=y_temp;判断右边胜负for(int i=1;i<6;i++){x_temp1+=1;if(x_temp1>this.width)break;if(this.arrMapShow[x_temp1][y_temp1]==arrvalue)num++;elsebreak;}判断左边胜负x_temp1=x_temp;for(int i=1;i<6;i++){x_temp1-=1;break;if(this.arrMapShow[x_temp1][y_temp1]==arrvalue) num++;elsebreak;}if(num==5)return true;判断上方胜负x_temp1=x_temp;y_temp1=y_temp;num=1;for(int i=1;i<6;i++){y_temp1-=1;if(y_temp1<0)break;if(this.arrMapShow[x_temp1][y_temp1]==arrvalue) num++;elsebreak;}判断下方胜负y_temp1=y_temp;for(int i=1;i<6;i++){y_temp1+=1;if(y_temp1>this.height)break;if(this.arrMapShow[x_temp1][y_temp1]==arrvalue) num++;elsebreak;}if(num==5)return true;判断左上胜负x_temp1=x_temp;y_temp1=y_temp;num=1;for(int i=1;i<6;i++){y_temp1-=1;if(y_temp1<0 || x_temp1<0)break;if(this.arrMapShow[x_temp1][y_temp1]==arrvalue) num++;elsebreak;}判断右下胜负x_temp1=x_temp;y_temp1=y_temp;for(int i=1;i<6;i++){x_temp1+=1;y_temp1+=1;if(y_temp1>this.height || x_temp1>this.width)break;if(this.arrMapShow[x_temp1][y_temp1]==arrvalue) num++;elsebreak;}if(num==5)return true;判断右上胜负x_temp1=x_temp;y_temp1=y_temp;num=1;for(int i=1;i<6;i++){x_temp1+=1;y_temp1-=1;if(y_temp1<0 || x_temp1>this.width)break;if(this.arrMapShow[x_temp1][y_temp1]==arrvalue) num++;elsebreak;}判断左下胜负x_temp1=x_temp;y_temp1=y_temp;for(int i=1;i<6;i++){x_temp1-=1;y_temp1+=1;if(y_temp1>this.height || x_temp1<0)break;if(this.arrMapShow[x_temp1][y_temp1]==arrvalue)num++;elsebreak;}if(num==5)return true;return false;}赢棋后的提示public void showSuccess(JPanel jp){JOptionPane.showMessageDialog(jp,"你赢了","结果",RMATION_MESSAGE);}输棋后的提示public void showDefeat(JPanel jp){JOptionPane.showMessageDialog(jp,"你输了","结果",RMATION_MESSAGE);}}用类MainPanel主要完成如下功能:1、构建一个面板,在该面板上画上棋盘;2、处理在该棋盘上的鼠标事件(如鼠标左键点击、鼠标右键点击、鼠标拖动等)import java.awt.*;import java.awt.event.*;import java.applet.*;import javax.swing.*;import java.io.PrintStream;import javax.swing.JComponent;import javax.swing.JPanel;class MainPanel extends JPanelimplements MouseListener,MouseMotionListener{设定棋盘的宽度和高度private int width,height;private ChessModel cm;根据棋盘模式设定面板的大小MainPanel(ChessModel mm){cm=mm;width=cm.getWidth();height=cm.getHeight();addMouseListener(this);}根据棋盘模式设定棋盘的宽度和高度public void setModel(ChessModel mm){cm = mm;width = cm.getWidth();height = cm.getHeight();}根据坐标计算出棋盘方格棋子的信息(如白子还是黑子),然后调用draw方法在棋盘上画出相应的棋子public void paintComponent(Graphics g){super.paintComponent(g);for(int j = 0; j <= height; j++){for(int i = 0; i <= width; i++){int v = cm.getarrMapShow()[i][j];draw(g, i, j, v);}}}根据提供的棋子信息(颜色、坐标)画棋子public void draw(Graphics g, int i, int j, int v){ int x = 20 * i+20;int y = 20 * j+20;画棋盘if(i!=width && j!=height){g.setColor(Color.darkGray);g.drawRect(x,y,20,20);}画黑色棋子if(v == 1 ){g.setColor(Color.gray);g.drawOval(x-8,y-8,16,16);g.setColor(Color.black);g.fillOval(x-8,y-8,16,16);}画白色棋子if(v == 2 ){g.setColor(Color.gray);g.drawOval(x-8,y-8,16,16);g.setColor(Color.white);g.fillOval(x-8,y-8,16,16);}if(v ==3){g.setColor(Color.cyan);g.drawOval(x-8,y-8,16,16);}}响应鼠标的点击事件,根据鼠标的点击来下棋,根据下棋判断胜负等public void mousePressed(MouseEvent evt){int x = (evt.getX()-10) / 20;int y = (evt.getY()-10) / 20;System.out.println(x+" "+y);if (evt.getModifiers()==MouseEvent.BUTTON1_MASK){cm.play(x,y);System.out.println(cm.getisOdd()+" "+cm.getarrMapShow()[x][y]); repaint();if(cm.judgeSuccess(x,y,cm.getisOdd())){cm.showSuccess(this);evt.consume();ChessFrame.iscomputer=false;}判断是否为人机对弈if(ChessFrame.iscomputer&&!cm.getisExist()){puterDo(cm.getWidth(),cm.getHeight());repaint();if(cm.judgeSuccess(cm.getX(),cm.getY(),cm.getisOdd())){ cm.showDefeat(this);evt.consume();}}}}public void mouseClicked(MouseEvent evt){}public void mouseReleased(MouseEvent evt){}public void mouseEntered(MouseEvent mouseevt){}public void mouseExited(MouseEvent mouseevent){}public void mouseDragged(MouseEvent evt){}响应鼠标的拖动事件public void mouseMoved(MouseEvent moveevt){int x = (moveevt.getX()-10) / 20;int y = (moveevt.getY()-10) / 20;cm.readyplay(x,y);repaint();}}import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;响应退出窗口class ChessWindowEvent extends WindowAdapter{public void windowClosing(WindowEvent e){System.exit(0);}ChessWindowEvent(){}}四.程序调试与运行运行:标准棋盘改进棋盘:扩大棋盘:外观类型二:外观类型三:人机对战:结果:五.结论通过对五子棋游戏的编写,使自己对java语言有了更深的了解。
基于JAVA的局域网五子棋和聊天设计与实现
摘要目前,随着计算机网络的的发展,游戏已经成为现在人生活的一部分,人们以不同的方式通过网络来娱乐,休闲。
以计算机技术和网络技术为核心的现代网络技术已经在现实生活和生产中得到了广泛的使用,休闲类网络游戏集趣味性,娱乐性,互动性和益智性于一体,已经成为多数人群的休闲方式,也为多数人所喜好。
当然,为了满足没有网络同样能娱乐的要求,许多小游戏做成了单机网络的双功能。
本程序使用JA VA语言实现,通过对图形界面,绘图,布局管理器等去构造出五子棋游戏界面,在此基础上,利用套接字的知识,建立起服务器与客户端之间的连接,利用多线程技术来处理服务器端与客户端之间的数据传输、通信问题,使得客户端和服务器端之间能够同步的进行处理。
通过对软件的编写,更深入的理解万物皆对象这句话的理解,增强了对象的封装能力,也体会到利用面向对象语言处理一些问题的优势。
同时也加深了对多线程、流、套接字等高级技术的理解。
关键词:多线程,套接字,GUI,五子棋AbstractNow, with the development of computer network, the game has become a part of life now people, people in different ways through the network to the entertainment and leisure. Computer and network technology as the core of modern network technology has been widely used in real life and production, casual game set interesting, entertaining, interactive and puzzle in one, has become the majority population leisure, but also for the majority preference.Of course, in order to meet the no network requirements of the same entertainment, many games made a stand-alone and network function.This program uses the JAVA programming language to achieve, through the GUI, graphics, layout manager to construct the interface of Gobang, on this basis, the use of the knowledge of the socket, and establish a connection between the server and client, multi threading technology to handle data transfer between the server and the clients, communication problems, making the synchronization processing between the client and server side.Through the preparation of the software, a more in-depth understanding of all things is an object of this sentence to understand, enhance the package of the object, but also realize the advantages of object-oriented language to deal with some problems. Also deepened the understanding of the multi-threaded, streams, sockets and other senior technical.KEY WORDS: multiple threads,socket, GUI, Gobang目录前言 (1)第1章绪论 (2)1.1JA VA语言历史 (2)1.2JA VA语言的特点 (2)1.3JA VA的开发环境 (3)1.4JA VA的编译环境 (3)1.41 JDK介绍及安装 (4)1.42 JA VA开发工具 (4)1.5S OCKET 机制 (5)第2章系统需求分析 (6)2.1五子棋的发展史 (6)2.2五子棋特点、规则和界面需求 (6)2.3五子棋功能需求 (7)2.31 五子棋游戏功能 (7)2.32 聊天功能 (7)2.4流程图 (7)第3章系统设计与实现 (9)3.1系统设计思路 (9)3.11 界面设计思路 (9)3.12 算法的设计思路 (9)3.13 程序的设计流程 (10)3.2系统设计实现 (10)3.24 GobangBoard.java类实现 (12)3.25 GoBangMain.java类的实现 (15)3.26 Message.java类的实现 (22)第4章系统运行和测试 (24)4.1系统运行 (24)4.2系统测试 (26)结论 (28)致谢 (29)参考文献 (30)前言电脑已经深入到日常工作和生活的方方面面,比如文字处理、信息管理、辅助设计、图形图像处理、教育培训以及游戏娱乐等。
java课程设计五子棋游戏完整版
图2.程序主界面
(2)如果实黑棋先开始那么开始后的界面中先出的棋显示的是黑棋,如果是白棋先出则显示的是白棋,以黑棋为例如图3所示:
图3.黑棋先出的界面图
(3)对于五子棋游戏,无论人机对战,还是双人对战,都需要判断棋盘上是否存在五子连珠情况,这既是游戏名字的由来,也是游戏结束的标志。
判断五子连珠的原理是从横,竖,左斜线,右斜线4条线上判断是否存在5个相连的同类棋子,黑棋的五个棋子在横、竖或斜方向上连接成一线即为该方赢如图4所示:
图4.游戏结束界面
(4)白棋的五个棋子在横、竖或斜方向上连接成一线即为该方赢如图4所示:
图5.白棋胜利界面图
4.设计体会
通过这次课程设计,我进一步加深对基础理论的理解,扩大专业知识面,对收集资料、查阅文献、方案制定等实践方面得到了很好的锻练,促进对所学知识应用能力的提。
基于java程序的五子棋游戏设计 论文(全)
IBased On JAVA Five Chess Game DesignAbstractAlong with the advance of network, network game has gradually become a part of people's life, it can not only make people entertainment and recreation, but also to developers of intelligence, make the brain more flexible.This paper design the gobang game by both sides of the game, to develop the ability of people and develop people's intelligence.So far, the Java platform has attracted more than 500 software developers.It in every major industry sectors has been widely used, and appear in all kinds of equipment, computer and network.Java technology platform for the generality, high efficiency, portability and security, making it the ideal network computing technology.From laptops to data center, from the game console to scientific supercomputers, from mobile phones to the Internet, Java everywhere!Java has immeasurable value for developers, so that they can:On a platform to write software that can then be run on almost all other platforms, create can run in a Web browser and the Web service application, development is applicable to online BBS, storage, voting and other USES HTML format processing and server-side applications.Will use the Java language's application or service together, form a highly customized applications or services, for mobile phones, remote processor, low cost of consumer products, and any other device with digital core to write powerful and efficient application.Eclipse tools, this article USES the Java language developed gobang game, the game can be achieved against chess, two people also is everyone's game, and cannot achieve the man-machine game.Can according to their own requirements set in the program both sides against the game time and intelligent determine which side to win in the game and the end of the game.Keywords: Java ,Five Chess ,Eclipse ,intelligenceII基于JAVA程序的五子棋游戏设计摘要随着网络的不断进步,网络游戏已经逐渐成为人们生活中的一部分,它不仅能够使人娱乐和消遣,而且也能够开发人的智力,使大脑更加的灵活。
基于JAVA的五子棋游戏系统设计与实现
基于J A V A的五子棋游戏系统设计与实现LG GROUP system office room 【LGA16H-LGYY-LGUA8Q8-LGA162】基于JAVA的五子棋游戏系统设计与实现专业电子信息工程学生董永杰指导教师曾玉摘要目前,随着计算机网络的的发展,以计算机技术和网络技术为核心的现代网络技术已经在现实生活和生产中得到了广泛的使用,已经成为多数人群的休闲方式,也为多数人所喜好。
当然,为了满足没有网络同样能娱乐的要求,许多小游戏做成了单机和网络的双功能。
本软件使用JAVA语户端之间的连接,利用多线程技术言实现,通过对图形界面,绘图,布局管理器等去构造出游戏的单机功能,在此基础上,利用SCOKET的知识,建立起服务器与客来处理服务器端与客户端之间的数据传输,通信问题,使得客户端和服务器端之间能够同步的进行处理。
通过对软件的编写,更深入的理解了面向对象的概念,也体会到利用面向对象语言处理一些问题的优势。
同时也加深了对多线程,流套接字等高级技术的理解。
关键词:多线程;流套接字;数据传输;同步。
ABSTRACTAt present, With the rapid development of computer network. Taking computer technology and the network technology as the core, modern network technology is already used in the real life and the production and already became the leisure mode of the most people. And most people like them. Of course, it’s a pity that there still have some clients lacking of network because of various causes.In order to satisfy the above clients’ requirements. A large number of games ,usually named as “small games” by players, a re designed for involving two kinds of different function. The former game is often played by these players whose computers never connect with the network. It’s called for stand-alone version games. Just as its name implies, the later is named as online version games This software implemented with JAVA language, and according to the understanding of SCOKET ,GUI and paint image ichnology. Established in these foundation , the server co ects with the multi- client, and transmission the information between many clients using the multi-thread proceeding technology. it is very convenient for both client and server to do the synchronous processing.Through to the software compilation, deepen understanding and grasp to the technology above understanding and holding.Key Words: multiple thread, Socket, transmission-data, synchronism.目录第一章绪论 (1)开发背景 (1)课题意义 (1)五子棋游戏的发展与现状 (2)论文的组织结构 (3)第二章五子棋程序相关技术介绍 (4)软件的基本功能 (4)开发运行环境 (4)软件的开发手段以及工具的介绍 (4)Java简介 (4)MyEclipse10开发环境简介 (6)软件的实现目的 (7)第三章五子棋程序分析与设计 (8)用户需求分析 (8)软件功能结构图 (8)软件各个功能的简要说明 (9)软件设计中使用到的JAVA软件包以及类和方法 (11)五子棋界面设计 (12)五子棋算法设计 (12)五子棋棋盘设计 (12)棋子设计 (12)落子算法设计 (12)判断输赢设计 (12)网络五子棋算法设计 (12)第四章软件的具体实现 (12)准备工作 (12)游戏窗口界面的实现 (12)下棋算法的实现 (12)完成判断胜负的功能 (12)系统测试 (12)测试计划 (12)界面功能测试 (12)单机游戏测试 (12)联网游戏测试 (12)测试结果 (12)第五章总结与展望 (12)致谢 (12)附录 (12)程序: (12)部分程序: (12)参考文献 (13)第一章绪论开发背景随着计算机的快速发展,各种游戏被纷纷请进了电脑。
java实现简单五子棋小游戏(1)
java实现简单五⼦棋⼩游戏(1)本⽂实例为⼤家分享了java实现简单五⼦棋⼩游戏的具体代码,供⼤家参考,具体内容如下讲解五⼦棋,实际上就是⽤⼀个数组来实现的。
没有其他很复杂的结构。
⾸先我们制作五⼦棋,先要有⼀个棋盘。
public void setGraphics(Graphics g){this.g=g;for(int i=0;i<11;i++){g.drawLine(100+Size*i, 100, 100+Size*i, 500);g.drawLine(100, 100+Size*i, 500, 100+Size*i);}for(int i=0;i<11;i++){for(int j=0;j<11;j++){chessboard[i][j]=0;}}}此时我们在画布上制作了⼀个棋盘,图⽰如下:接下来我们要实现的就是如何去放置棋⼦了。
放置棋⼦⼤体思路就是,当我们点击⼀个⽹格点的时候,可以出现⼀个⽩棋或者⿊棋,所以我们在这⾥需要学会如何画⼀个椭圆。
// 绘制⼀个椭圆g.drawOval(a-Size/4, b-Size/4, Size/2, Size/2);//修改左上⾓的坐标,使画好的圆恰好在以⽹格点所在的位置上// 填充⼀个椭圆g.setColor(Color.BLACK);g.fillOval(a-Size/4, b-Size/4, Size/2, Size/2);此时,点击某⼀个位置就会出现⼀个⿊棋⼦。
这⾥我们需要注意的是,我们不可能要求⽤户每⼀次的点击都⾮常准确,所以我们必须设定⼀个范围,只要这个范围内的点击,我们都默认点击到了这个⽹格上⾯。
因为⽹格⼤⼩为40,所以我们以⼀个⽹格点位中⼼,向上下左右移动20长度的范围都属于这个点。
⽩棋的设置也⼀样if(number==0){// 绘制⼀个椭圆g.drawOval(a-Size/4, b-Size/4, Size/2, Size/2);//修改左上⾓的坐标,使画好的圆恰好在以⽹格点所在的位置上// 填充⼀个椭圆g.setColor(Color.BLACK);g.fillOval(a-Size/4, b-Size/4, Size/2, Size/2);number++;}else{g.drawOval(a-Size/4, b-Size/4, Size/2, Size/2);// 填充⼀个椭圆g.setColor(Color.WHITE);g.fillOval(a-Size/4, b-Size/4, Size/2, Size/2);number--;}现在我们看⼀下我们的棋盘,⽩棋和⿊棋都可以放到棋盘上⾯了,但是依旧存在⼀个问题,当我们在同⼀位置点击两次后会发⽣覆盖现象。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于Java的“网络五子棋”游戏的设计和实现——网络版客户端学生:xxx 指导教师:xx内容摘要:目前,随着计算机网络的发展,以计算机技术和网络技术为核心的现代网络技术已经在现实生活和生产中得到了广泛的使用,休闲类网络游戏集趣味性,娱乐性,互动性和益智性于一体,已经成为多数人群的休闲方式,也为多数人所喜好。
本设计收集了关于JAVA基础的书籍,着重收录了关于SOCKET编程的内容,找到了五子棋概述和规则的资料,查阅了网络通信技术的相关论文,同时也参考了很多关于五子棋实现的程序资料以及关于JAVA开发工具的介绍的文档。
在期间,我学习了多线程技术、双缓冲技术、数据传输技术、SOCKET编程技术,研究了网络通信原理、JAVA编写原理等一系列的原理。
开发了网络五子棋网络通信代码,实现了网络聊天、数据传输、网络通信、界面组织如:棋盘、建立服务器、连接到服务器、系统设置、我要参赛等功能。
通过对以上技术的学习和研究,利用SOCKET编程,能服务器与客户端之间的连接,利用多线程技术完成了服务器端与客户端之间的数据传输、网络通信,使得两个客户端能够同步的进行处理。
在加载图片以及绘制棋盘方面,采用双缓冲技术消除屏幕的闪烁现象。
达到了预期的效果。
关键词: 多线程 SOCKET 客户端网络通信Design and realization of the web gobang game based onjava——client moduleAbstract: At present, with the development of computer network, computer technology and network technology as the core of modern network technology has in real life and production has been widely used. Recreational type of network games consists of interesting, entertaining, interactivity and beneficial intelligence. It has become a way of entertainment to many people, and has been loved.Much of the information collected in this design,such as many books based on the JAVA, focus on the contents of SOCKET programming, Find information about the web gobang game, Access to the relevant papers, Reference to a lot of program information on achieving The web gobang game and introduction to JAVA development tools on the document. In the period, I learned a series of principles,For example Multi-threading technology, double-buffering technology, data transmission technology, SOCKET programming technique to study the principle of network communication, JAVA writing principles. Internet chat, data transmission, network communications, interfaces structure, such as: the board, establishing server, connecting server, option had been realized. I know these technologies through studying and researching, I using of SOCKET programming, server and client can be connecting, i using of multi-threading technology to complete the server side and client-side data transmission and the client can synchronize the two processtion. Pictures and drawing board loading, I using of double-buffering to eliminate screen flicker.Keywords:multi-threaded socket client network communication目录前言 (1)1 绪论 (1)1.1 背景 (1)1.2 选题的前提和目的 (1)1.3 五子棋介绍 (2)1.4 主要完成内容 (2)2 开发环境及工具介绍 (3)2.1 开发环境及运行环境 (3)2.1.1 开发环境 (3)2.1.2 运行环境 (3)2.1.2 开发工具 (3)2.2 Java 简介 (3)2.2.1 Java的起源和发展 (3)2.2.2 Java特点 (4)2.3 Java Socket网络编程简介 (5)2.3.1 Java Socket 网络编程基础 (5)2.4 Java 图形编程 (7)3 需求分析和总体设计 (7)3.1 需求分析作用 (7)3.1.1 基本需求分析 (7)3.1.2 高级需求分析 (7)3.2 总体设计 (8)3.2.1 系统设计思想 (8)3.2.2 系统总体设计 (9)3.3 功能模块及流程 (10)3.3.1 系统主要模块 (10)3.3.2 服务器端作用 (10)3.3.3 客户端作用 (11)3.3.4 系统主流程 (12)4 概要设计 (13)4.1 网络编程的模式和选取 (13)4.2 主要类与其作用 (13)4.2.1 服务器类 (13)4.2.2 客户端主类 (15)4.2.3 客户端副类 (15)4.2.4 棋盘类 (16)5 详细设计 (18)5.1 开发环境的搭建 (18)5.1.1 安装JDK (18)5.1.2 安装JRE (19)5.1.3 安装Eclipse (20)5.1.4 配置环境变量 (20)5.2 客户端界面设计 (23)5.3 客户端网络设计 (24)5.4 棋盘类设计 (25)5.5 系统各模块之间的关系 (26)6 软件测试和展示 (27)6.1 软件测试的方法 (27)6.2 网络客户端测试用例 (28)6.3 游戏界面展示 (29)7 总结语 (33)参考文献 (34)基于Java的“网络五子棋”游戏的设计和实现——网络版客户端前言随着经济社会的迅速发展,人们生活水平有了很大的提高,人们的生活观念也发生了巨大的改变。
高品质的生活、现代化得生活方式成为人们共同追求的目标;休闲、娱乐性活动作为时尚生活中的一部分,而被大多数的人所追捧。
棋类项目作为一种智力型项目,可以益智健心、修身养性,也可以满足人们对于娱乐和休闲的新需求。
一些项目比如五子棋等等,由于项目本身互动的特点,一直被人们所喜爱,因此得以生存和发展,成为许多人喜爱的休闲娱乐性棋类项目。
而今,以网络技术为核心和计算机技术的现代网络技术已经在现实生活得到了十分的广泛的使用。
休闲类网络游戏集合了益智性、趣味性、互动性、娱乐性于一体,已经成为多数人群的选择的休闲方式。
借此,本论文在分析了当前计算机网络的蓬勃发展和人们对于休闲娱乐性生活方式的追求,以java为工具,以精美的界面,以常规安全的socket建立连接,设计更为益智的网络五子棋游戏,增强了趣味性和益智性。
1 绪论1.1 背景现在人们压力日益增大,人们需要劳逸结合也获得更高的工作效率,工作之余的娱乐对每一个人来说都是必不可少的放松方式。
五子棋游戏简单易学同时具有很大奥妙性,也非常富有趣味性与消遣性。
在经过不断发展后,五子棋已经成为棋盘娱乐的重要的组成部分,它能够开发智力、增强思维能力,是人们休闲娱乐的不二的选择。
而网络互动娱乐是近几年迅速发展起来的新的娱乐形式,成为IT产业中增长最快的娱乐形式之一。
网络五子棋游戏很多是使用Java语言开发的一款游戏。
它使用SOCKET建立连接,多线程处理数据,这些特点使这款游戏无论是客户端还是服务器的实现都相对容易。
1.2 选题的前提和目的随着计算机网络技术的不断发展,网络游戏已经成为最具潜力的热点领域。
各种各样的游戏使人眼花缭乱,而特别是其中一些休闲益智类的棋牌游戏,集娱乐性、趣味性、益智性和互动性于一体,拥有很大的用户。
棋类游戏能锻炼人的思维,起到修身养性的作用。
五子棋游戏可以分为两类:一类是单机版五子棋游戏,另一类是网络五子棋游戏。
随着计算机网络和JAVA技术的不断发展,使用Java开发网络五子棋游戏将是一个实用性很强的毕业设计项目。
网络五子棋游戏的总体功能是要设计出具有精美界面的,具备人工智能的,支持网络对弈的五子棋游戏。
本系统最终的目的是建立一个有具体规则的网络五子棋平台,使两台不同计算机的使用者通过网络连接,达到网络对弈的目的。
1.3 五子棋介绍五子棋起源于中国古代的传统黑白棋种之一,是一种两人对弈的纯策略型棋类游戏。
现代五子棋日本称之为“连珠”,英译为Renju,英文为“FIR”(Five in a Row 的缩写)或“Gobang”,中文有“串珠”、“五子连”、“连五子”等很多种名字。
它发展于日本,流行于欧美。
容易上手,老少皆宜,而且引人入胜;不仅能提高智力,而且富含哲理。
传统五子棋的棋具与围棋类似,棋子分为黑白两色,棋盘有大有小,棋子放置于棋盘线交叉点上。
两人对局,各选一色,轮流落子。
五子棋游戏规则:游戏双方轮流在棋盘下棋子,一方的棋子在横、竖、两个对角线上首先到达五子者为胜方。
因为五子棋在落子后不能移动或拿掉,所以也可以用纸和笔来进行游戏。
随着五子棋的发展,逐步发现先行优势非常大,最后总结出“先行必胜”的结论。
五子棋成为竞技运动,核心问题是怎样解决传统五子棋下法中“先行必胜”的问题。