搜档网
当前位置:搜档网 › java程序设计五子棋

java程序设计五子棋

java程序设计五子棋
java程序设计五子棋

package FiveChess;

import java.awt.Color;

import java.awt.Graphics;

public class Chess {

int id;

int chess_x;

int chess_y;

int state;

int radius=13;

public Chess(){}

public Chess(int id,int chess_x,int chess_y,int state){ this.id=id;

this.chess_x=chess_x;

this.chess_y=chess_y;

this.state=state;

}

public int getChess_x() {

return chess_x;

}

public void setChess_x(int chess_x) {

this.chess_x = chess_x;

}

public int getChess_y() {

return chess_y;

}

public void setChess_y(int chess_y) {

this.chess_y = chess_y;

}

public int getState() {

return state;

}

public void setState(int state) {

this.state = state;

}

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public void drawChess(Graphics g){

Color color=null;

if(state==1){

color=new Color(255,255,255);

g.setColor(color);

g.fillOval(chess_x*30-radius, chess_y*30-radius, radius*2, radius*2);

}else if(state==-1){

color=new Color(0,0,0);

g.setColor(color);

g.fillOval(chess_x*30-radius, chess_y*30-radius, radius*2, radius*2);

}

}

}

package FiveChess;

import java.awt.Graphics;

public class ChessBoard {

int [][]board=new int[16][16];

public ChessBoard(){

initialBoard();

}

public void initialBoard(){

for(int i=0;i

for(int j=0;j

board[i][j]=0;//0无棋1白棋-1黑棋

}

}

}

public void draw(Graphics g){

g.drawLine(25, 25, 455, 25);

g.drawLine(455, 25, 455, 455);

g.drawLine(25, 455, 455, 455);

g.drawLine(25, 25, 25, 455);

int i=1,j=1;

while(i

g.drawLine(i*30, 30, i*30, 15*30);

i++;

}

while(j

g.drawLine(30,j*30 , 15*30, j*30);

j++;

}

}

public int getState(int x,int y){

if(x>0&y>0&x<16&y<16) return board[x][y];

else return -2;

}

public void setState(int x,int y,int state){

board[x][y]=state;

}

}

package FiveChess;

import java.awt.BorderLayout;

import java.awt.Color;

import java.awt.Dimension;

import java.awt.Image;

import java.awt.TextArea;

import java.awt.Toolkit;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.KeyListener;

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

import java.io.IOException;

import https://www.sodocs.net/doc/ca5596584.html,.ServerSocket;

import https://www.sodocs.net/doc/ca5596584.html,.Socket;

import java.sql.Time;

import javax.swing.ImageIcon;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JMenu;

import javax.swing.JMenuBar;

import javax.swing.JMenuItem;

import javax.swing.JOptionPane;

import javax.swing.JPanel;

import javax.swing.JSplitPane;

import javax.swing.JTextField;

import javax.swing.border.Border;

public class ChessServer extends JFrame implements ActionListener{ public static final int frame_width=35;//窗体的宽度

public static final int frame_height=27;//窗体的高度

public static final int frame_opration=10;//操作区域的宽度

public static final int block_width=20;//单位宽度

public static final int block_height=20;//单位高度

ServerWar jpz=new ServerWar(this);//创建服务器端主面板

JMenuBar menubar=new JMenuBar();//创建菜单条

JMenu fileMenu=new JMenu("文件");

JMenuItem one = new JMenuItem("单人游戏");

JMenuItem two =new JMenuItem("双人游戏");

JMenuItem exit=new JMenuItem("退出");

JPanel jpy=new JPanel();//创建操作区的面板

JLabel jlPort=new JLabel("端口号");//创建提示用户输入端口号的标签

JTextField jtfPort=new JTextField("9999");//创建用于输入端口号的文本框,默认是9999 JLabel jlNickName=new JLabel("昵称");//创建用于提示输入昵称的标签JTextField jtfNickName=new JTextField("Player2");//创建用于输入昵称的文本框JButton jbNew=new JButton("建主");//创建"建主","停止","开始"三个动作按钮

JButton jbStop=new JButton("停止");

JButton jbStart=new JButton("开始");

JButton jbSend=new JButton("发送");

TextArea jaChat=new TextArea("",5000,1,TextArea.SCROLLBARS_VERTICAL_ONLY);

int textIndex=0;

JTextField jtfMessage=new JTextField("你好");

JSplitPane jsp=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,jpz,jpy);//创建JSplitPane

ServerSocket ss;//声明ServerSocket引用

ServerThread st;//声明服务器线程

ServerAgentThread sat;//声明服务器代理线程引用

public ChessServer(){

this.addComponent();//初始化窗体,将控件添加到窗体中

this.addListener();//为相应控件注册监听器

this.initialFrame();//初始化窗体

jpz.setFocusable(true);

jpz.requestFocus(true);//使左边面板获得焦点

}

public void addComponent(){//添加控件的方法

jpy.setLayout(null);//设为空布局

jlPort.setBounds(10,20,40,25);

jpy.add(jlPort);//添加"端口号"标签

jtfPort.setBounds(55,20,100,25);

jpy.add(jtfPort);//添加输入端口号的文本框

jlNickName.setBounds(10,50,40,25);

jpy.add(jlNickName);//添加"昵称"标签

jtfNickName.setBounds(55,50,100,25);

jpy.add(jtfNickName);//添加输入昵称的文本框

jbNew.setBounds(20,85,60,20);

jpy.add(jbNew);//添加"建主"按钮

jbStop.setBounds(100,85,60,20);

jpy.add(jbStop);//添加"停止"按钮

jbStart.setBounds(20,120,140,30);

jpy.add(jbStart);//添加"开始"按钮

jaChat.setBounds(10, 230, 160, 205);

jaChat.setForeground(Color.blue);

jaChat.setEditable(false);

jpy.add(jaChat);

jtfMessage.setBounds(10, 440, 100, 25);

jpy.add(jtfMessage);

jbSend.setBounds(120, 440, 60, 20);

jpy.add(jbSend);

jsp.setDividerLocation((frame_width-frame_opration)*block_width);

jsp.setDividerSize(4);//设置JSplitPane分割线的位置及宽度

fileMenu.add(one);

fileMenu.add(two);

fileMenu.addSeparator();

fileMenu.add(exit);

fileMenu.setBounds(0, 0, 20, 20);

menubar.add(fileMenu);

this.add(menubar,BorderLayout.NORTH);

this.add(jsp);//添加jsp

}

public void addListener(){//为控件注册监听器

jbNew.addActionListener(this);//为"建主"按钮注册监听器

jbStop.addActionListener(this);//为"停止"按钮注册监听器

jbStart.addActionListener(this);//为"开始"按钮注册监听器

one.addActionListener(this);

two.addActionListener(this);

exit.addActionListener(this);

jbSend.addActionListener(this);

}

public void actionPerformed(ActionEvent e){

if(e.getSource()==this.jbNew){//当按下"建主"按钮时

int port=0;

try{//获得用户输入的端口号

port=Integer.parseInt(this.jtfPort.getText().trim());

}

catch(Exception ee){//如果不是数字则给出提示

JOptionPane.showMessageDialog(this,"端口号只能是整数","错误",

JOptionPane.ERROR_MESSAGE);

return;

}

if(port>65535||port<0){//判断端口号是否在有效范围内

JOptionPane.showMessageDialog(this,"端口号只能是0-65535的整数",

"错误",JOptionPane.ERROR_MESSAGE);

return;

}

try{

ss=new ServerSocket(port);//创建ServerSocket

st=new ServerThread(this,ss);//创建服务器线程

st.start();//启动服务器线程

JOptionPane.showMessageDialog(this,"服务器启动成功","提示",

https://www.sodocs.net/doc/ca5596584.html,RMATION_MESSAGE);//给出成功的提示this.setState(false);//设置窗体状态

this.jbStart.setEnabled(false);

}

catch(Exception ee){//启动失败

JOptionPane.showMessageDialog(this,"服务器启动失败","提示",

https://www.sodocs.net/doc/ca5596584.html,RMATION_MESSAGE);

}

}

else if(e.getSource()==this.jbStop){//当单击"停止"按钮时

try{

if(sat!=null){//代理线程不为空,则向客户端发出离开的消息

sat.dout.writeUTF("<#ServerDown#>");

sat.setFlag(false);//终止代理线程

}

st.setFlag(false);//终止服务器线程

ss.close();//关闭连接

}

catch(IOException ee){ee.printStackTrace();}

this.setState(true);//设置窗体状态

jpz.setGameState(false);//设置游戏状态

}

else if(e.getSource()==this.jbStart){//当单击"开始"按钮时

if(jpz.ready==false){

JOptionPane.showMessageDialog(this,"客户端还未准备",

"提示",https://www.sodocs.net/doc/ca5596584.html,RMATION_MESSAGE);

}else{

int result=JOptionPane.showConfirmDialog(this,"是否开始新游戏?",

"提示",JOptionPane.YES_NO_OPTION);

if(result==0){

try{sat.dout.writeUTF("<#Start#>");}

catch(IOException ee){ee.printStackTrace();}

jpz.setGameState(true);//开始游戏

jpz.setChess_id(0);

jpz.chess=new Chess[255];

jpz.chess[0]=new Chess(0,0,0,0);

jpz.repaint();

}

}

}

else if(e.getSource()==this.one){

//与计算机游戏

jtfPort.setEnabled(false);

jtfNickName.setEnabled(false);

jbNew.setEnabled(false);

jbStop.setEnabled(false);

jbStart.setEnabled(false);

jpz.setGameState(false);

jpz.setOneGameState(true);

}

else if(e.getSource()==this.two){

setState(true);

jpz.setOneGameState(false);

}

else if(e.getSource()==this.exit){

int result=JOptionPane.showConfirmDialog(this,"是否要退出?",

"提示",JOptionPane.YES_NO_OPTION);

if(result==0){

System.exit(0);

}

}

else if(e.getSource()==this.jbSend){

if(!jtfMessage.getText().trim().equals("")){

Time time=new Time(System.currentTimeMillis());

String message=jtfNickName.getText()+" "+time.getHours()+":"+time.getMinutes()+":"+time.getSeconds()+"\n"+jtfMessage.getText()+"\n";

try {

sat.dout.writeUTF("<#ServerMessage#>"+message);

} catch (IOException e1) {

e1.printStackTrace();

}

jtfMessage.setText("");

jaChat.insert(message, textIndex);

textIndex+=message.length();

}else{

String s="不能发送空消息。\n";

jaChat.insert(s,textIndex);

textIndex+=s.length();

}

}

jpz.requestFocus(true);

}

public void initialFrame(){//初始化窗体的方法

this.setState(true);

// Image image=new ImageIcon("ico.gif").getImage();

// this.setIconImage(image);//设置图标

this.setTitle("FiveChess--Server");//设置标题

this.setResizable(false);

Dimension screenSize = //获得屏幕尺寸

Toolkit.getDefaultToolkit().getScreenSize();

int centerX=screenSize.width/2;//计算屏幕的中心坐标

int centerY=screenSize.height/2;

int width=frame_width*block_width;//计算窗口的高度和宽度

int height=frame_height*block_height;

this.setBounds(centerX-width/2,centerY-height/2-30,width,height);//使窗体居中显示

this.addWindowListener(

new WindowAdapter(){

public void windowClosing(WindowEvent e){

if(st==null){//服务器线程为空,则直接退出

System.exit(0);

return;

}

try{

if(sat!=null){//代理线程非空,向客户端发送离开的消息

sat.dout.writeUTF("<#ServerDown#>");

sat.setFlag(false);//终止代理线程

}

st.setFlag(false);//终止服务器线程

ss.close();//关闭连接

}

catch(IOException ee){ee.printStackTrace();}

System.exit(0);

}

}

);

this.setVisible(true);

}

public void setState(boolean state){//设置窗体状态的方法

jtfPort.setEnabled(state);

jtfNickName.setEnabled(state);

jbNew.setEnabled(state);

jbStop.setEnabled(!state);

jbStart.setEnabled(!state);

jaChat.setEnabled(!state);

jbSend.setEnabled(!state);

jtfMessage.setEnabled(!state);

}

public static void main(String[] args) {

new ChessServer();

}

}

package FiveChess;

import java.awt.Color;

import java.io.DataInputStream;

import java.io.DataOutputStream;

import https://www.sodocs.net/doc/ca5596584.html,.Socket;

import javax.swing.JOptionPane;

public class ClientAgentThread extends Thread {

ChessClient father;

Socket sc;//声明Socket引用

boolean flag=true;//控制该线程的标志位

DataInputStream din;//声明数据输入流

DataOutputStream dout;//声明数据输出流

public ClientAgentThread(ChessClient father,Socket sc){//构造器this.father=father;

this.sc=sc;

try{//创建输入输出流

din=new DataInputStream(sc.getInputStream());

dout=new DataOutputStream(sc.getOutputStream());

String name=father.jtfNickName.getText().trim();//获得昵称

dout.writeUTF("<#NICK_NAME#>"+name);//将昵称传送给服务器}

catch(Exception e){e.printStackTrace();}

}

public void run(){

String msg1="";

while(flag){

try{

String msg=din.readUTF().trim();//接收客户端信息

if(msg1.equals(msg)) msg="";

if(msg.startsWith("<#ServerDown#>")){//收到服务器离开的信息

father.jpz.setGameState(false);//设置jpz状态为,停止游戏

this.flag=false;//设置该线程标志位,停止该线程

this.sc.close();//关闭Socket

father.cat=null;//将主窗体的代理线程设为空

JOptionPane.showMessageDialog(father,"主机离开了!!!","提示",

https://www.sodocs.net/doc/ca5596584.html,RMATION_MESSAGE);//弹出提示对话框father.setState(true);//设置客户端主窗体的状态

}else if(msg.startsWith("<#ServerWin#>")){

father.jpz.setGameState(false);

father.jbReady.setBackground(Color.white);

JOptionPane.showMessageDialog(father,"黑棋胜!!!","提示",

https://www.sodocs.net/doc/ca5596584.html,RMATION_MESSAGE);//弹出提示对话框msg1=msg;

}

else if(msg.startsWith("<#Start#>"))

{

father.jpz.setGameState(true);//设置jpz状态位,开始游戏

father.jpz.setChess_id(0);

father.jpz.chess=new Chess[255];

father.jpz.chess[0]=new Chess(0,0,0,0);

father.jpz.repaint();

msg1=msg;

}

else if(msg.startsWith("<#ServerChess#>")){//收到服务器下子的消息

String info=msg.substring(15);//获得有用信息

String[] detail=info.split("/");//分解信息

int chess_id=new Integer(detail[0]);

int chess_x=new Integer(detail[1]);

int chess_y=new Integer(detail[2]);

int state=new Integer(detail[3]);

father.jpz.mouse.addChess(chess_id, chess_x, chess_y, state);

father.jpz.setChess_id(chess_id);

father.jpz.repaint();

msg1=msg;

}

else if(msg.startsWith("<#ServerMessage#>")){

String info=msg.substring(17)+"\n";

father.jaChat.insert(info, father.textIndex);

father.textIndex+=info.length();

msg1=msg;

}

}catch(Exception e){e.printStackTrace();}

}

}

public void setFlag(boolean flag){this.flag=flag;}

}

package FiveChess;

import java.awt.Color;

import java.awt.Graphics;

import java.awt.event.MouseAdapter;

import java.awt.event.MouseEvent;

import java.awt.event.MouseMotionAdapter;

import java.io.IOException;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.Iterator;

import java.util.Map;

import java.util.Set;

import javax.swing.JOptionPane;

import javax.swing.JPanel;

public class ClientWar extends JPanel {

ChessBoard chessBoard =new ChessBoard();

Chess chess[]=new Chess[255];

boolean gameState=false;

boolean oneGameState=true;

int clientChessType=1;

int Chess_id=0;

// CPaintThread cpt;

ChessClient father;

mouseListener mouse=new mouseListener();

public ClientWar(ChessClient father){

this.father=father;

// cpt=new CPaintThread(father);//创建绘制线程

// cpt.start();//启动该绘制线程

// setBackground(Color.LIGHT_GRAY);

addMouseListener(mouse);

chess[0]=new Chess(0,0,0,0);

}

public void paintComponent(Graphics g){

super.paintComponent(g);

chessBoard.draw(g);

int i=0;

while(i<=Chess_id){

draw(g,chess[i]);

i++;

}

}

public void draw(Graphics g,Chess ch){

ch.drawChess(g);

}

class mouseListener extends MouseAdapter {

public void mouseReleased(MouseEvent e){

if(gameState==true&&chess[Chess_id].state!=clientChessType){

int x=e.getX();

int y=e.getY();

if(x%30<=15) x=x/30;

else if(x%30>15) x=x/30+1;

if(y%30<=15) y=y/30;

else if(y%30>15) y=y/30+1;

if(x>0&&y>0&&x<16&&y<16&&chessBoard.getState(x, y)==0){

Chess_id++;

addChess(Chess_id,x,y,clientChessType);

chessBoard.setState(x, y, clientChessType);

//验证是否构成五子

if(isFive(x,y)){

this.sendMsg("<#ClientWin#>");

setGameState(false);

father.jbReady.setBackground(Color.white);

JOptionPane.showMessageDialog(father,"白棋胜!!!","提示",

https://www.sodocs.net/doc/ca5596584.html,RMATION_MESSAGE);//弹出提示对话框

}

repaint();

}

}

else if(gameState==true&&oneGameState==true){

JOptionPane.showMessageDialog(father,"发生错误,自动退出!",

"错误",JOptionPane.ERROR);

System.exit(0);

}

else if(oneGameState==true){

//单人游戏过程

}

else if(gameState==false&&oneGameState==false) JOptionPane.showMessageDialog(father,"请先开始游戏!",

"提示",https://www.sodocs.net/doc/ca5596584.html,RMATION_MESSAGE);

}

public boolean isFive(int chess_x,int chess_y){

int level=1;

int x=chess_x;

int y=chess_y;

while(x>1&&chessBoard.board[x-1][y]==clientChessType){

level++;

if(level==5){

return true;

}

x--;

}

x=chess_x;

y=chess_y;

while(x<15&&chessBoard.board[x+1][y]==clientChessType){

level++;

if(level==5){

return true;

}

x++;

}

int apeak=1;

x=chess_x;

y=chess_y;

if(y>1){

while(y>1&&chessBoard.board[x][y-1]==clientChessType){

apeak++;

if(apeak==5){

return true;

}

y--;

}

}

x=chess_x;

y=chess_y;

while(y<15&&chessBoard.board[x][y+1]==clientChessType){ apeak++;

if(apeak==5){

return true;

}

y++;

}

int bias1=1;

x=chess_x;

y=chess_y;

while(x>1&&y>1&&chessBoard.board[x-1][y-1]==clientChessType){ bias1++;

if(bias1==5){

return true;

}

x--;y--;

}

x=chess_x;

y=chess_y;

while(x<15&&y<15&&chessBoard.board[x+1][y+1]==clientChessType){ bias1++;

if(bias1==5){

return true;

}

x++;y++;

}

int bias2=1;

x=chess_x;

y=chess_y;

while(x<15&&y>1&&chessBoard.board[x+1][y-1]==clientChessType){ bias2++;

if(bias2==5){

return true;

}

x++;y--;

}

x=chess_x;

y=chess_y;

while(x>1&&y<15&&chessBoard.board[x-1][y+1]==clientChessType){ bias2++;

if(bias2==5){

return true;

}

x--;y++;

}

return false;

}

public void addChess(int id,int x,int y,int state){

Chess clientChess=new Chess(id,x,y,state);

// m_chess.put(id, clientChess);

chess[id]=clientChess;

this.sendMsg("<#ClientChess#>"+clientChess.getId()+"/"+clientChess.getChess_x()+"/"+clien tChess.getChess_y()+

"/"+clientChess.getState());//将客户棋子的状态发送给服务期}

public void sendMsg(String msg){//用于向服务器发送消息的方法

try{

father.cat.dout.writeUTF(msg);//发送消息

}

catch(IOException e){e.printStackTrace();}

}

}

public void setGameState(boolean gameState){

this.gameState=gameState;

}

public void setChess_id(int chess_id) {

Chess_id = chess_id;

}

public int getClientChessType() {

return clientChessType;

}

public void setClientChessType(int clientChessType) {

this.clientChessType = clientChessType;

}

public void setOneGameState(boolean oneGameState) {

this.oneGameState = oneGameState;

}

}

package FiveChess;

import java.io.DataInputStream;

import java.io.DataOutputStream;

import https://www.sodocs.net/doc/ca5596584.html,.Socket;

import javax.swing.JOptionPane;

public class ServerAgentThread extends Thread{

ChessServer father;

ServerThread st;//声明服务器线程的引用

Socket sc;//声明Socket引用

boolean flag=true;//控制该线程的标志位

DataInputStream din;//声明数据输入流

DataOutputStream dout;//声明数据输出流

public ServerAgentThread(ChessServer father,Socket sc,ServerThread st){//构造器this.father=father;

this.sc=sc;

this.st=st;

try{//创建输入输出流

din=new DataInputStream(sc.getInputStream());

dout=new DataOutputStream(sc.getOutputStream());

}

catch(Exception e){e.printStackTrace();}

}

public void run(){

String msg1="";

while(flag){

try{

String msg=din.readUTF().trim();//接收客户端信息

if(msg1.equals(msg)) msg="";

if(msg.startsWith("<#NICK_NAME#>")){//如果传来的是名字

JOptionPane.showMessageDialog(father,msg.substring(13)+"加入游戏",

"提示",https://www.sodocs.net/doc/ca5596584.html,RMATION_MESSAGE);//弹出加入游戏的对话框

father.jbStart.setEnabled(true);//将"开始"按钮设为可用

}

else if(msg.startsWith("<#ClientDown#>")){//收到服务器离开的信息

father.jpz.setGameState(false);//设置jpz状态为,停止游戏

this.flag=false;//设置该线程标志位,停止该线程

this.sc.close();//关闭Socket

st.setHasPerson(false);//设置服务器线程标志位

father.sat=null;//将主窗体的代理线程设为空

JOptionPane.showMessageDialog(father,"客户离开了!!!","提示",

https://www.sodocs.net/doc/ca5596584.html,RMATION_MESSAGE);//弹出提示对话框

father.setState(true);//设置客户端主窗体的状态

}else if(msg.startsWith("<#ClientWin#>")){

father.jpz.setGameState(false);

JOptionPane.showMessageDialog(father,"白棋胜!!!","提示",

https://www.sodocs.net/doc/ca5596584.html,RMATION_MESSAGE);//弹出提示对话框

father.jpz.setReady(false);

}

else if(msg.startsWith("<#ClientChess#>")){//收到服务器下子的消息

String info=msg.substring(15);//获得有用信息

String[] detail=info.split("/");//分解信息

int chess_id=new Integer(detail[0]);

int chess_x=new Integer(detail[1]);

int chess_y=new Integer(detail[2]);

int state=new Integer(detail[3]);

father.jpz.mouse.addChess(chess_id, chess_x, chess_y, state);

father.jpz.setChess_id(chess_id);

father.jpz.repaint();

msg1=msg;

}

else if(msg.startsWith("<#Ready#>")){

father.jpz.setReady(true);

msg1=msg;

}

else if(msg.startsWith("<#CancelReady#>")){

father.jpz.setReady(false);

msg1=msg;

}

else if(msg.startsWith("<#ClientMessage#>")){

String info=msg.substring(17)+"\n";

father.jaChat.insert(info, father.textIndex);

father.textIndex+=info.length();

msg1=msg;

}

}catch(Exception e){e.printStackTrace();}

}

}

public void setFlag(boolean flag){this.flag=flag;}

}

package FiveChess;

import https://www.sodocs.net/doc/ca5596584.html,.ServerSocket;

import https://www.sodocs.net/doc/ca5596584.html,.Socket;

public class ServerThread extends Thread{

ChessServer father;//声明服务器主类的引用

ServerSocket ss;//声明ServerSocket引用

boolean flag=true;//控制线程的标志位

boolean hasPerson=false;//是否已经有客户端连接上

public ServerThread(ChessServer father,ServerSocket ss){//构造器

this.father=father;

this.ss=ss;

}

public void run(){//重写的run方法

while(flag){

if(hasPerson==false){//如果还没有客户端连接

try{

Socket sc=ss.accept();//等待客户端连接

ServerAgentThread sat=new ServerAgentThread(father,sc,this);

sat.start();//当有连接时,为其分配一个服务器代理线程并启动

father.sat=sat;

this.hasPerson=true;

}

catch(Exception e){e.printStackTrace();}

}

else

{

try

{

Thread.sleep(1000);

}

catch(Exception e)

{

e.printStackTrace();

}

}

}

}

public void setFlag(boolean flag){//设置标志位的方法

this.flag=flag;

}

public void setHasPerson(boolean hasPerson){//设置线程状态的方法

this.hasPerson=hasPerson;

}

}

package FiveChess;

import java.awt.Color;

import java.awt.Graphics;

import java.awt.Graphics2D;

import java.awt.event.MouseAdapter;

import java.awt.event.MouseEvent;

import java.awt.event.MouseMotionAdapter; import java.io.IOException;

//import java.util.ArrayList;

//import java.util.HashMap;

import java.util.Iterator;

//import java.util.Map;

import java.util.Set;

import javax.swing.JOptionPane;

import javax.swing.JPanel;

public class ServerWar extends JPanel {

ChessBoard chessBoard =new ChessBoard();

Chess chess[]=new Chess[500];

boolean gameState=false;

boolean oneGameState=false;

boolean ready=false;

int serverChessType=-1;

int Chess_id=0;

// SPaintThread spt;

ChessServer father;

mouseListener mouse=new mouseListener();

public ServerWar(ChessServer father){

this.father=father;

// spt=new SPaintThread(father);//创建

绘制线程

// spt.start();//启动该绘制线程

// setBackground(Color.gray);

addMouseListener(mouse);

chess[0]=new Chess(0,0,0,0);

}

public void paintComponent(Graphics g){

super.paintComponent(g);

chessBoard.draw(g);

int i=0;

while(i<=Chess_id){

draw(g, chess

[i]);

i++;

}

// }

}

public void draw(Graphics g,Chess ch){

ch.drawChess(g);

}

class mouseListener extends MouseAdapter {

public void mouseReleased

(MouseEvent e){

if

(gameState==true&&chess[Chess_id].state!

=serverChessType){

int x=e.getX();

int y=e.getY();

if(x%30<=15)

x=x/30;

else if(x

%30>15) x=x/30+1;

if(y%30<=15)

y=y/30;

else if(y

%30>15) y=y/30+1;

if

(x>0&&y>0&&x<16&&y<16&&chessBoard.getState(x, y) ==0){

Chess_id++;

JAVA课程设计 五子棋

攀枝花学院课程业设计 五子棋 学生姓名: 学号: 所在院(系):数学院计算机学院专业:信息与计算科学指导教师:讲师 二〇一四年六月 攀枝花学院教务处制

攀枝花学院本科学生课程设计任务书 注:任务书由指导教师填写。

摘要 五子棋作为一类棋类竞技运动,现在很流行,很多人把它作为一类开发智力的一种游戏,锻炼人的思维。这次课题主要是完成人机对战,在对战中电脑根据人的思维做出相应的反应,电脑对战中通过深度的搜索,使得自身有更大的胜算,估值计算也是一种方法,可以提高电脑的智能度。分析模块中影响智能的因素也不少,通过节点比较与节点连接后的结果做出估计提高智能,了解递归算法、电脑学习等对此有很大帮助。算法是程序的灵魂,一旦算法正确那么程序将很好。不同的人工智能将会有不同的帮助,多去了解将更能提高智能程度。五子棋是我国的一门文化,这将使得它更受世界人们的欢迎。有助我国文化发展。 关键词五子棋,智能,算法,模块,人机对战

目录 1 需求分析 (1) 1.1需求来源 (1) 1.2设计目的 (1) 2 功能需求分析 (1) 2.1功能需求 (1) 3 设计与实现 (2) 3.1设计思想 (2) 3.2系统模块结构 (2) 3.3流程图 (2) 4 概要设计 (4) 4.1抽象数据类型定义 (4) 4.2程序包含模块 (4) 4.3模块间关系 (4) 4.4系统功能实现 (4) 5 模块设计 (5) 5.1主界面模块 (5) 5.2选择模块 (5) 5.3判断模块、 (5) 5.4显示模块 (5) 参考文献 (9)

1 需求分析 1.1需求来源 计算机在我们的生活中有越来越重要的角色,我们也越来越离不开计算机,计算机带给我们许多便利,学习好计算机知识已经是必不可少的一项技能了。特别是电子商务、电子邮件等,人工智能现在的热点方向,人们感叹计算机的高效是也感叹自己的聪明,人工智能现在是很好的以方面。 1.2设计目的 该软件为用户提供一个在Windows系统上运行的五子棋游戏小系统。应达到的目的是:建立人机对战的模块,可以机器思考如何应对。已达到提高智力的效果设计出五子棋的游戏界面,创建对象可以在地图中站位,在每一步后计算机会自己运算自己的下一步,任何一方不可以越界,当一方达到五子是判断谁是胜利者,在过程中尽量使得游戏智能程度更高。 2 功能需求分析 2.1功能需求 现在研究五子棋的算法已经很多了,比较经典的有递归、二叉树等,这也是很基础的,不同算法要求也不同,要求的能力也不同,每一种算法都是使得程序清晰明白,当五子相连就算胜利。故我们要理解中间过程。 每个代码实现功能也是不同的,有的是判断,有的是理解,有的是更好知道程序,程序在执行时我们可以知道哪里出错。哪里会有问题,修改便利。、在错误中学习,加强自己的基础知识与算法的能力。

五子棋报告-java

XXXX大学 XX学院 课程设计报告 课程名称:面向对象程序设计 题目名称:五子棋游戏设计 学生姓名: 专业班级: 指导教师:任晓强

一、课程设计目的与任务(四号、宋体、加黑、顶格) (1)掌握Java编程、面向对象的基础知识。 (2)较熟练地编写Java应用程序Application。 (3)了解Java的常用标准类库、编程技巧、异常处理。 (4)联系已学过的内容,巩固所学的理论,增强独立工作能力。(5)通过设计主要使学生有一个独立编写程序的过程,对理论学习及动手能力都有一个很大的提高。 (6)通过本次设计,进一步培养学生热爱专业的思想,同时对本专业综合素质的提高起一个积极的推动作用。 课程设计过程中,要严格遵守实践环节的时间安排,听从指导教师的指导。正确地完成上述内容,记录实习日记,规范完整地撰写出课程设计报告。 二、课程设计内容 1本设计题目的主要内容 设计一个15╳15围棋棋盘,由两玩家交替进行对战,并可以实现以下功能: 1.选择落子的先后顺序 2.重置棋盘 3.刷新重新开始 4.退出提示 并且规定退出者判为负,但退出过程中要有提示。以防不小心点错了。 最后判断某一方是否为五子连珠。 实现一个简单的多用户五子棋的游戏程序,包括如下两个界面 (1)选择对弈桌(执黑、执白)。 (2)在游戏界面,有开始,退出(游戏未结束、点退出自动判负); 2 设计思想与程序构架

程序流程图 程序的功能分配 a. 棋盘的绘制 public void draw_qipan(Graphics G) 添加按钮 Button b1=new Button("开始"); Button b2=new Button("重置游戏"); Label lblWin=new Label(" "); Checkbox ckbHB[]=new Checkbox[3]; Button exist = new Button("退出"); public void init(){ ckbHB[0]=new Checkbox("执白",ckgHB,false); ckbHB[1]=new Checkbox("执黑",ckgHB,false); ckbHB[2]=new Checkbox("观看",ckgHB, false); } c. 鼠标棋子的触发事件 public void mouseClicked(MouseEvent e) { Graphics g=getGraphics(); int x1,y1; x1=(); y1=(); if ()<20 || ()>300 || ()<20 || ()>300) {

五子棋(JAVA版)实习报告及原代码

实习报告 课程名称信息系统认知实习实习题目java五子棋专业 班级 学号 学生姓名 实习成绩 指导教师 2010年1月 前言

摘要 五子棋作为一个棋类竞技运动,在民间十分流行,为了熟悉五子棋规则及技巧,以及研究简单的人工智能,决定用Java开发五子棋游戏。主要完成了人机对战和玩家之间联网对战2个功能。网络连接部分为Socket编程应用,客户端和服务器端的交互用Class Message定义,有很好的可扩展性,客户端负责界面维护和收集用户输入的信息,及错误处理。服务器维护在线用户的基本信息和任意两个对战用户的棋盘信息,动态维护用户列表。在人机对弈中通过深度搜索和估值模块,来提高电脑棋手的智能。分析估值模块中的影响精准性的几个要素,以及提出若干提高精准性的办法,以及对它们搜索的节点数进行比较,在这些算法的基础上分析一些提高电脑AI方案,如递归算法、电脑学习等。算法的研究有助于理解程序结构,增强逻辑思维能力,在其他人工智能方面也有很大的参考作用。 1引言 1.1课题背景 五子棋是起源于中国古代的传统黑白棋种之一。现代五子棋日文称之为连珠,英译为Renju,英文称之为Gobang或FIR(Five in a Row 的缩写),亦有连五子、五子连、串珠、五目、五目碰、五格等多种称谓。 五子棋起源于古代中国,发展于日本,风靡于欧洲。对于它与围棋的关系有两种说法,一说早于围棋,早在“尧造围棋”之前,民间就已有五子棋游戏;一说源于围棋,是围棋发展的一个分支。在中国的文化里,倍受人们的青睐。本世纪初五子棋传入欧洲并迅速风靡全欧。通过一系列的变化,使五子棋这一简单的游戏复杂化、规范化,而最终成为今天的职业连珠五子棋,同时也成为一种国际 比赛棋。 Java语言是当今最为流行的程序设计语言之一作为一门非常优秀和极为健壮的编程语言,它同时具有的面向对象,与平台无关,分布式应用,安全,稳定和多线程等优良的特征,使用Java语言,不仅可以开发出功能强大的大型应用程序,而且Java语言本身突出的跨平台的特性也使得它特别适合于Internet上的应用开发,可以这样说,Java的出现使得所开发的应用程序“一次编写,处处可用”的 实现成为了可能。 1.2本课题研究的意义 近来随着计算机的快速发展,各种各样的电脑游戏层出不穷,使得我们能有更多的娱乐项目,而棋类游戏能起到锻炼人的思维和修身养性的作用,而且棋类游戏水平颇高,大有与人脑分庭抗礼之势。其中战胜过国际象棋世界冠军-卡斯帕罗夫的“深蓝”便是最具说服力的代表;其它像围棋的“手淡”、象棋的“将族”

五子棋-Java课程设计

《面向对象程序设计》 课程设计报告 实验时间:2010年10月26日 实验班级:********************** 实验报告总份(片)数: 1 份(片) 实验指导老师:***** ******* 设计小组 湖南省吉首市吉首大学 课程设计报告 简单的游戏——五子棋 小组成员(姓名、学号): **(组长)** ** ** ** ** 一、实验分工

二、开发环境(实验编译以及测试环境) 硬件环境: CPU:Intel 奔腾双核E5200 主频2.5GHz 内存:2G 软件环境: 操作系统:Windows 7 编程环境JDK7.0 开发工具:Eclipse SDK 三、使用环境(用户运行环境) 硬件环境: CPU主频在500MHZ以上,内存在128M以上 软件环境: JAVA运行环境+ Windows XP或Windows 2000 以上操作系统 目录 第一章总体设计.............................................................................................................................. 1 1.1设计的目的.......................................................................................................................... 1 1.2本系统的主要功能.............................................................................................................. 1 1.3系统包含的类及类之间的关系。...................................................................................... 1 1.4 Java源文件及其功能......................................................................................................... 2 1.5 项目构建思路..................................................................................................................... 2第二章模块功能介绍.................................................................................................................. 12 2.1主类Chess...................................................................................................................... 12

五子棋java设计文档

安阳工学院 JA V A课程综合项目报告 项目题目:五子棋 专业班级:12网工专升本 学生姓名:阮营营 学生学号:201203060042 指导教师姓名:许研 2012年12月 安阳工学院计算机学院制

目录 一、系统目标 (2) 二、系统设计思路 (2) 三、系统详细设计 (2) 四、系统实现 (9) 五、系统设计总结 (12) 六、参考文献 (12)

一、系统目标 1、主要是介绍开发五子棋的整个过程,体现流程设计与类设计的基本方法,示范了数组的使用,使用了分支结构与循环结构的流程控制 2、通过课程设计把课堂上讲的内容融会贯通,学会设计程序、开发应软件、开发系统软件等各项工作。 3、通过实习掌握语言的语法结构,理解类和对象的概念,准确的使用各种数据类型,对面向对象中的继承和多态的概念要理解、会使用,在程序中提高代码的重用性,使设计的程序结构清晰、易于维护。 二、系统设计思路 1、获取棋盘设计一个11╳11围棋棋盘,由两玩家交替进行对战,并可以实现以下功能。五子棋的规则为: 2、下棋方法两人分别执黑白两色棋子。轮流在棋盘上选择一个无子的交叉点落子,无子的交叉点又被称为空点。 3、输赢判断每次下完一颗棋子,就通过程序从横、竖、斜各个方向扫描棋盘,如果在某个方向中,有同种颜色的棋子达到五连子,则此颜色的玩家为赢。如果没有相同颜色的棋子达到五连子,则继续游戏。 三、系统详细设计 3.1程序流程图

3.2创建棋盘类,绘制棋盘的样式 main方法创建了ChessFrame类的一个实例对象,并启动屏幕显示显示该实例对象。 public static void main(String argc[]) { myframe f = new myframe(); } 构造五子棋的主窗体: class myframe extends Frame implements WindowListener { mypanel panel; myframe() { setLayout(null); panel = new mypanel(); add(panel); panel.setBounds(0, 23, 360, 360);

Java五子棋毕业设计论文

摘要 人工智能是一门正在迅速发展的新兴的,综合性很强的交叉科学。它与生物工程、空间技术一起被并列为二十一世界三大尖端技术。它的中心任务是研究如何使计算机去做那些过去只能靠人的智力才能做的工作。目前各发达国家都把人工智能作为重点项目,列入本国的高科技发展计划当中,投入巨大的人力和物力。 计算机人机对弈也是其中之一。作为人智能研究的一个重要分支,计算机博弈是检验人工水平的一个重要方面。它的研究为人工智能带来了很多重要的方法和理论,产生了广泛的社会影响和学术影响。 五子棋人机对弈是计算机博弈中的一种。研究其计算机算法,可以让我们看到人工智能的稚形,也有助于我们人脑的开发。五子棋是我国发明的,研究它可以让更多的外国人了解五子棋,这有助于我国优秀文化的推广。 关键词:人工智能,计算人机对弈,五子棋,算法

目录 摘要 (Ⅰ) 目录 (Ⅲ) 第一章绪论 (1) 第二章需求分析 (2) 2.1 业务需求 (2) 2.2 性能需求 (2) 2.3 系统平台需求 (2) 第三章五子棋相关基础 (4) 3.1 五子棋解释 (4) 3.2 五子棋的基本规则 (4) 3.3 五子棋的常用术语 (5) 第四章开发工具、环境及其技术 (7) 4.1 Java简介 (7) 4.2 Java编程环境 (9) 第五章程序设计思路与实现 (10) 5.1 程序设计思路 (10) 5.2 程序设计 (13) 结论 (33) 参考文献.................................................................................................................... 致谢............................................................................................................................ 附录............................................................................................................................

JAVA五子棋程序设计课程设计

JAVA五子棋程序设计课程设计

计算机与信息工程系 《JAVA程序实训》设计 五子棋游戏 摘要: 计算机人机对弈作为人智能研究的一个重要分支,计算机博弈是检验人工水平的一个重要方面。它的研究为人工智能带来了很多重要的方法和理论,产生了广泛的社会影响和学术影响。 五子棋人机对弈是计算机博弈中的一种。研究其计算机算法,能够让我们看到人工智能的稚形,也有助于我们人脑的开发。五子棋是中国创造的,研究它能够让更多的外国人了解五子棋,这有助于中国优秀文化的推广。 关键词:人工智能,计算人机对弈,五子棋,算法 , java 1.课程设计介绍 1.1课程设计目的 经过此次课程设计,巩固所学Java语言基本知识,增进Java语言编辑基本功,掌握JDK、NetBeans等开发工具的运用,拓宽常见类库的应用。使我们经过该教学环节与手段,把所学课程及相关知识加以融会贯通,全面掌握Java语言的编程思想及面向对象程序设计的方法,为今后从事实际工作打下坚实的基础。本次课程设计每人一组,自行设计并实现共功能模块。

1.2课程设计任务 实现五子棋游戏,要求:使用图形用户界面,实现人人对战,人机对战。能够判断输赢,有“开始”按钮,当出现棋盘后,按此按钮进入对战状态。当有胜利者(垂直、水平、对角线连续5子),显示对话框,提示谁(黑还是白)胜利了。若当棋盘满了还无胜利者,显示平局对话框。有“悔棋”按钮,玩家能够点击悔棋,回到上一步。 1.3课程设计论文编写要求 (1)要按照书稿的规格打印与写课程设计论文; (2)论文包括目录、设计思路、具体实现、运行调试与分析讨论、设计体会与小结、参考文献、附录(源代码)等; (3)课程设计论文装订按学校的统一要求完成。 2.系统设计 2.1需求分析 2.1.1性能需求 一款小游戏的确立是建立在各种各样的需求上面的,这种需求往往来自于玩家的实际需求,其中玩家的实际需求最为重要.面对游戏拥有不同知识和理解层面的玩家,游戏制作人对玩家需求的理解程度,在很大程度上决定了此类游戏开发的成败.因此如何更好地的了解,分析,明确玩家需求,而且能够准确,清晰以文档的形式表示给游戏制作人,保证开发过程按照满足玩家需求为目的正确开发方向进行,是每游戏游戏制作人需要面正确问题。 作为五子棋的设计需要考虑到的最基本的需求莫过于人机对战与人人对战功能的实现,当然还有下棋过程中的下棋悔棋功能以及判断游戏的胜负等方面的要求。当然最好是要考虑到界面的友好性,作为一个娱乐软件,还应

java课程设计人机对弈五子棋

《Java程序设计》课程设计报告 学院:理学院 班级: 姓名: 学号: 指导教师: 课设时间: 2015-06-23 至2015-06-25 二O一五年六月二十五日

课程设计(论文)任务书 理学院信息与计算科学专业2012-2班 一、课程设计(论文)题目:人机对弈五子棋游戏 二、课程设计(论文)工作: 自2015 年6 月23 日起至2015 年6 月25日止 三、课程设计(论文) 地点: 5-205 四、课程设计(论文)内容要求: 1.本课程设计的目的 (1)使学生掌握软件开发的基本工作流程; (2)巩固JAVA程序设计课程所学的内容; (3)培养学生的计算机思维能力以及合作的精神; (4)培养学生分析、解决问题的能力; (5)提高学生的科技论文写作能力。 2.课程设计的任务及要求 1)基本要求: (1)研究课程设计任务,并进行系统需求分析; (2)对系统进行总体设计,分解系统功能模块,进行任务分配,以实现分工合作;(3)实现各功能模块代码; (4)系统组装,测试、完善系统。 2)创新要求: 在基本要求达到后,可进行创新设计,如改进界面、增加功能或进行代码优化。3)课程设计论文编写要求

(1)要按照书稿的规格打印誊写课程设计论文 (2)论文包括封面、设计任务书(含评语)、摘要、目录、设计内容、设计小结(3)论文装订按学校的统一要求完成 4)参考文献: (1)丁振凡,《JAVA语言程序设计》,清华大学出版社 (2)丁振凡,《JAVA语言程序设计实验指导与习题解答》,清华大学出版社 (3)https://www.sodocs.net/doc/ca5596584.html,/ 5)课程设计进度安排 内容天数地点 系统总体设计 1 实验室 软件设计及调试 1 实验室 答辩及撰写报告 1 实验室、图书馆 学生签名: 2015年6月25日 课程设计(论文)评审意见 (1)课程设计过程(20分):优()、良()、中()、一般()、差(); (2)是否完成调试,系统运行效果(30分):优()、良()、中()、一般()、差(); (3)回答问题(20分):优()、良()、中()、一般()、差();(4)课程设计报告(30分):优()、良()、中()、一般()、差(); (5)格式规范性及考勤是否降等级:是()、否() 评阅人:职称:教授 2015年 6月25日

java+五子棋+课程设计报告 (2)

课程设计(论文)任务书 软件学院软件工程+电子商务专业2007-2班 一、课程设计(论文)题目多用户五子棋游戏 二、课程设计(论文)工作自2009年6月15日起至2009年6月19 日止。 三、课程设计(论文) 地点: 创新大楼310 四、课程设计(论文)内容要求: 1.本课程设计的目的 (1)通过课程设计把课堂上讲的内容融会贯通,学会设计程序、开发应用软件、开发系统软件等各项工作。 (2)通过实习掌握语言的语法结构,理解类和对象的概念,准确的使用各种数据类型,对面向对象中的继承和多态的概念要理解、会使用,在程序中提高代码的重用性,使设计的程序结构清晰、易于维护。 2.课程设计的任务及要求 1)基本要求: 实现一个简单的多用户五子棋的游戏程序,包括如下两个界面 (1)选择对弈桌及角色(执黑、执白、观看)。 (2)在游戏界面,有开始,退出(游戏未结束、点退出自动判负);发言及显示区;用户列表区;棋盘绘制区。 2)创新要求: 在基本要求达到后,可进行创新设计,如改善算法性能、友好的人机界面。 3)课程设计论文编写要求 (1)要按照书稿的规格打印与写课程设计论文 (2)论文包括目录、设计思路、具体实现、运行调试与分析讨论、设计体会与小结、参考文献、附录(源代码)等 (3)课程设计论文装订按学校的统一要求完成 4)答辩与评分标准:

(1)完成基本算法设计:20分; (2)完成设计过程:40分; (3)完成调试:20分; (4)回答问题:20分。 5)参考文献: [1]吴其庆编著.Java程序设计实例教程.北京:冶金工业出版社 [2] 柳西玲.许斌编著.Java语言应用开发基础.北京:清华大学出版社 [3] (美)CayS.Horsttmann Gary Cornell JAVA核心技术卷i:基础知识(原书第七版):机械工业出版社 [4]丁振凡Java 语言实用教程:北京邮电大学出版社 [5]https://www.sodocs.net/doc/ca5596584.html, 6)课程设计进度安排 内容天数地点 构思及收集资料1图书馆 编码与调试 2.5实验室 撰写论文 1.5图书馆、实验室 学生签名: 2009年6 月15 日 课程设计(论文)评审意见 (1)完成基本算法(20分):优()、良()、中()、一般()、差();(2)完成调试(20分):优()、良()、中()、一般()、差();(3)创新设计(20分):优()、良()、中()、一般()、差();(4)设计分析(20分):优()、良()、中()、一般()、差();(5)回答问题(20分):优()、良()、中()、一般()、差();(6)格式规范性及考勤是否降等级:是( )、否() 评阅人:职称: 2009年6月21 日

五子棋JAVA语言毕业课程设计报告

(此文档为word格式,下载后您可任意编辑修改!) 《Java语言程序设计》课程设计报告 学院:信息科学技术学院 班级:软件技术2班 姓名:王更新 学号: 指导教师:郭韶升 课设时间:至 二O一四年三月二十六日

目录 一、设计要求 (2) 二、设计步骤 (2) 2.1程序流程图 (2) 2.2程序的功能分配 (3) 三、设计正文 (6) 3.1创建棋盘类 (6) 3.2判断输赢功能实现 (9) 3.3测试结果 (9) 四、心得体会 (12) 五、参考文献 (12) 附录(源代码) (13) 一、课程设计要求 设计一个15╳15围棋棋盘,由两玩家交替进行对战,并可以实现以下功能:

1.选择落子的先后顺序 2.重置棋盘 3.刷新重新开始 4.退出提示 并且规定退出者判为负,但退出过程中要有提示。以防不小心点错了。最后判断某一方是否为五子连珠。 实现一个简单的多用户五子棋的游戏程序,包括如下两个界面 (1)选择对弈桌(执黑、执白)。 (2)在游戏界面,有开始,退出(游戏未结束、点退出自动判负); 二、设计步骤 2.1程序流程图 2.2 程序的功能分配 a. 棋盘的绘制 public void draw_qipan(Graphics G) 画棋盘 15*15{ G.setColor(Color.lightGray); G.fill3DRect(0,true); G.setColor(Color.black); for(int i=1;i<16;i++){ G.drawLine(20,20*i*i); G.drawLine(20*i,20,20*i,300);

基于JAVA的五子棋游戏设计本科毕业设计

XX大学本科毕业设计 基于JAVA的五子棋游戏设计

毕业设计(论文)原创性声明和使用授权说明 原创性声明 本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料。对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。 作者签名:日期: 指导教师签名:日期: 使用授权说明 本人完全了解大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。 作者签名:日期:

学位论文原创性声明 本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。本人完全意识到本声明的法律后果由本人承担。 作者签名:日期:年月日 学位论文版权使用授权书 本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。本人授权大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。 涉密论文按学校规定处理。 作者签名:日期:年月日 导师签名:日期:年月日

五子棋JAVA语言课程设计报告

《Java语言程序设计》课程设计报告 学院:信息科学技术学院 班级:软件技术2班 姓名:王更新 学号: 1108900505 指导教师:郭韶升 课设时间: 2014-03-17 至2014-03-26 二O一四年三月二十六日

目录 一、设计要求 (2) 二、设计步骤 (2) 2.1程序流程图 (2) 2.2程序的功能分配 (3) 三、设计正文 (6) 3.1创建棋盘类 (6) 3.2判断输赢功能实现 (9) 3.3测试结果 (9) 四、心得体会 (12) 五、参考文献 (12) 附录(源代码) (13)

一、课程设计要求 设计一个15╳15围棋棋盘,由两玩家交替进行对战,并可以实现以下功能: 1.选择落子的先后顺序 2.重置棋盘 3.刷新重新开始 4.退出提示 并且规定退出者判为负,但退出过程中要有提示。以防不小心点错了。 最后判断某一方是否为五子连珠。 实现一个简单的多用户五子棋的游戏程序,包括如下两个界面 (1)选择对弈桌(执黑、执白)。 (2)在游戏界面,有开始,退出(游戏未结束、点退出自动判负); 二、设计步骤 2.1程序流程图

2.2 程序的功能分配 a. 棋盘的绘制 public void draw_qipan(Graphics G) //画棋盘 15*15{ G.setColor(Color.lightGray); G.fill3DRect(10,10,300,300,true); 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); } } b. 添加按钮 Button b1=new Button("开始"); Button b2=new Button("重置游戏"); Label lblWin=new Label(" "); Checkbox ckbHB[]=new Checkbox[3]; Button exist = new Button("退出"); public void init(){ ckbHB[0]=new Checkbox("执白",ckgHB,false); ckbHB[1]=new Checkbox("执黑",ckgHB,false); ckbHB[2]=new Checkbox("观看",ckgHB, false); } c. 鼠标棋子的触发事件 public void mouseClicked(MouseEvent e) { Graphics g=getGraphics(); int x1,y1; x1=e.getX(); y1=e.getY(); if (e.getX()<20 || e.getX()>300 || e.getY()<20 || e.getY()>300) { return; } if (x1%20>10) { x1+=10; } if(y1%20>10) { y1+=10; } x1=x1/20*20; y1=y1/20*20; set_Qizi(x1,y1); m*=(-1); }

Java五子棋毕业设计论文

题目:JAVA五子棋对弈程序的设计与实现

目录 摘要 .................................................................... I Abstract ............................................................... II 1 引言 (1) 2五子棋对弈程序的可行性分析 (1) 2.1 五子棋系统设计思路 (1) 2.2 经济可行性分析 (1) 2.3技术上的可行性 (1) 2.4 管理上的可行性 (2) 3 JAVA五子棋对弈现的需求分析 (2) 3.1 用户需求分析 (2) 3.1.1 普通用户主要需要: (2) 3.1.2 系级管理员主要需要: (2) 3.1.3 系统用例图: (3) 3.2 数据字典的描述 (3) 3.2.1用户信息表的数据字典的描述: (3) 3.2.2用户每次游戏信息表的数据字典描述: (4) 3.2.3 用户每盘棋信息表的数据字典描述: (4) 3.2.4 用户每步棋信息表的数据字典描述: (4) 3.3五子棋对弈系统的数据流图 (4) 3.3.1 用户登录数据流图(DFD) (5) 3.3.2普通用户界面显示数据流图(DFD) (5) 3.3.3管理员用户界面显示数据流图(DFD) (6) 3.3.4用户棋局回放数据流图(DFD) (6) 4 JAVA五子棋对弈系统分析与设计 (7) 4.1 系统设计总体思想、目标 (7) 4.2 五子棋人机对弈系统的ER模型 (7) 4.3 JAVA五子棋对弈系统结构、功能设计 (9) 4.3.1 系统结构设计 (9) 4.3.2 系统功能模块设计 (10) 4.3.3设计思路 (11) 4.4 程序设计分析 (11) 4.5 类的设计 (12) 4.6五子棋对弈系统的数据库设计 (15) 4.6.1 系统用户表 (15) 4.6.2 用户棋局表 (16) 4.6.3 用户棋盘表 (16) 4.6.4 用户下棋信息表 (17) 5五子棋相关基础 (17) 5.1 五子棋相关解释 (17) 5.2 五子棋相关规则 (17) 5.3 五子棋常用术语 (18) 6 系统平台、计算模式及技术 (19)

(完整版)Java五子棋毕业设计论文

优秀论文审核通过 未经允许切勿外传 摘要 人工智能是一门正在迅速发展的新兴的,综合性很强的交叉科学。它与生物工程、空间技术一起被并列为二十一世界三大尖端技术。它的中心任务是研究如何使计算机去做那些过去只能靠人的智力才能做的工作。目前各发达国家都把人工智能作为重点项目,列入本国的高科技发展计划当中,投入巨大的人力和物力。 计算机人机对弈也是其中之一。作为人智能研究的一个重要分支,计算机博弈是检验人工水平的一个重要方面。它的研究为人工智能带来了很多重要的方法和理论,产生了广泛的社会影响和学术影响。 五子棋人机对弈是计算机博弈中的一种。研究其计算机算法,可以让我们看到人工智能的稚形,也有助于我们人脑的开发。五子棋是我国发明的,研究它可以让更多的外国人了解五子棋,这有助于我国优秀文化的推广。 关键词:人工智能,计算人机对弈,五子棋,算法

Abstract Artificial intelligence is a rapidly developing new, integrated a strong Frontier Science. It is with bio-engineering, space technology listed as 21 in the world along with the three cutting-edge technology. Its central task is to study the past to rely on intelligence to do. AI is currently regarded as the focus of the developed countries included in this car's and material resources. Man-machine chess computer is one of them. As a study of an important branch of intelligence, the computer game to test the level of an important aspect of the manual. Its research in artificial intelligence many important methods and theories to produce a wide range of social impact and academic impact. Man-machine chess game Renju in one of the computer. To study the computer algorithm, we can see the beginning of artificial intelligence shadow, but also brain development. Backgammon invented in China, and the research it can allow more foreigners to understand and -machine Cchess Computer, Man-machine Chess, Algorithm

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语言中,所有的类都是直接或间接的继承 https://www.sodocs.net/doc/ca5596584.html,ng.object类而得到的。被继承的类称为基类或父类,继承而的来的类成为子类。子类继承基类的方法和属性,同时也可以修改基类的方法和属性,并增加自己新的属性和方法。Java不支持多重继承。即一个子类不能拥有两个或以上的父类。 3、包 <1、包的定义 在Java中,把相关的代码组织到一起,称为“包”。包市一种将相关类、接口或其他包组织起来的集合体,目的是为了将包含类代码的文件组织起来,易于查找和使用。 <2、包的语法及导入: Package PackageName; //包的定义 Import java.awt.Color //导入包关键字Import 4、接口 <1、接口的定义 Java中的接口可以看成是一种抽象类,它是一些抽象方法和常量的集合,其主要作用是使得处于不同层次上以至于互不相干的类能够执行相同的操作,引用相同的值,而且在一个类中可以同时实现来自不同接口中的多种方法。 <2、接口的定义和实现 Interface 接口名{//抽象方法} //定义接口 Class 类名 implements 接口名称{// 类体} 实现接口 5、线程

java课程设计报告五子棋

工作原理图 2.2功能的规划 1.建立一个棋盘类,绘制棋盘的样式,在棋盘面板上添加各种按钮及相应胡触发事件。同时注意面板的设计,使面板设计的尽量胡的合理美观。 a.棋盘的绘制 public void draw_qipan(Graphics G) //画棋盘 15*15{ G.setColor(Color.lightGray); G.fill3DRect(10,10,300,300,true); 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); } } b.添加按钮与按钮胡规划 Button b1=new Button("开始"); Button b2=new Button("重置游戏"); Label lblWin=new Label(" "); Checkbox ckbHB[]=new Checkbox[3]; Button exist = new Button("退出"); public void init(){ ckbHB[0]=new Checkbox("执白",ckgHB,false); ckbHB[1]=new Checkbox("执黑",ckgHB,false); ckbHB[2]=new Checkbox("观看",ckgHB, false); } C.鼠标棋子胡相应触发事件 public void mouseClicked(MouseEvent e) { Graphics g=getGraphics(); int x1,y1; x1=e.getX(); y1=e.getY(); if (e.getX()<20 || e.getX()>300 || e.getY()<20 || e.getY()>300) { return; } if (x1%20>10) { x1+=10; } if(y1%20>10) { y1+=10; } x1=x1/20*20; y1=y1/20*20; set_Qizi(x1,y1); m*=(-1);

五子棋java课程设计

课程设计(论文)任务书 软件学院学院软件+电子商务专业二班 一、课程设计(论文)题目 java 课程设计《五子棋带聊天系统》 二、课程设计(论文)工作自 2010 年 12 月20 日起至2010 年12 月 24 日止。 三、课程设计(论文) 地点: 软件学院实训中心 四、课程设计(论文)内容要求: 1.本课程设计的目的 (1)掌握Java语言的程序设计方法; (2)理论联系实际,进一步提高学生的软件开发技术; (3)培养学生分析、解决问题的能力; (4)提高学生实践论文撰写能力。 2.课程设计的任务及要求 1)课程设计任务: 实现一个简单的多用户五子棋的游戏程序,包括如下两个界面 设计要求:1、五子棋游戏室界面:用户可以选择对弈桌及角色(执黑、执 白、旁观); 2、游戏界面:有开始、退出、悔棋、判断胜负;发言及显示区;用户列 表区;棋盘绘制区; 3、使用Socket来完成服务端和客户端的通信; 4、使用多线程技术支持多用户操作; 5、增强功能:支持用户注册、添加和删除好友、战绩显示、发送消息、 接受消息、多人聊天等功能;使用数据库保存用户信息。 2)创新要求: 以上任务还未完善,悔棋、用户列表区及增强功能板块未完善。今后,参考资料书,实现五子棋网络对战及数据库的利用。 3)课程设计论文编写要求 (1)课程设计任务及要求 (2)设计思路--工作原理、功能规划 (3)详细设计---数据分析、算法思路、类设计、功能实现(含程序流程图、主要代码及注释)、界面等。 (4)运行调试与分析讨论---给出运行屏幕截图,分析运行结果,有何改进想法等。(5)设计体会与小结---设计遇到的问题及解决办法,通过设计学到了哪些新知识,

Java五子棋游戏的设计毕业设计论文

基于Java的五子棋游戏的设计

毕业设计(论文)原创性声明和使用授权说明 原创性声明 本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料。对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。 作者签名:日期: 指导教师签名:日期: 使用授权说明 本人完全了解大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。 作者签名:日期:

摘要 五子棋作为一个棋类竞技运动,在民间十分流行,为了熟悉五子棋规则及技巧,以及研究简单的人工智能,决定用Java开发五子棋游戏。主要完成了人机对战和玩家之间联网对战2个功能。网络连接部分为Socket编程应用,客户端和服务器端的交互用Class Message定义,有很好的可扩展性,客户端负责界面维护和收集用户输入的信息,及错误处理。服务器维护在线用户的基本信息和任意两个对战用户的棋盘信息,动态维护用户列表。在人机对弈中通过深度搜索和估值模块,来提高电脑棋手的智能。分析估值模块中的影响精准性的几个要素,以及提出若干提高精准性的办法,以及对它们搜索的节点数进行比较,在这些算法的基础上分析一些提高电脑AI方案,如递归算法、电脑学习等。算法的研究有助于理解程序结构,增强逻辑思维能力,在其他人工智能方面也有很大的参考作用。 关键词:深度搜索;估值;电脑AI;五子棋;算法

相关主题