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

合集下载

五子棋报告-java

五子棋报告-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) {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);}d. 按钮的触发事件public void actionPerformed(ActionEvent e) { Graphics g=getGraphics();if ()==b1) {Game_start();}else{Game_re();}if()==exist){Game_re();(Get_qizi_color(color_Qizi)+"输了!");intGame_Start=0;}e. 判断落子的位置及画出相应的黑白棋子public void set_Qizi(int x,int y) 判断胜负if (Game_win_1(x/20,y/20)) 进入游戏界面游戏开始的界面有三个选择项,用户可以选择相应的角色,选择完毕后点击开始进入游戏。

java课程设计报告_五子棋

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五子棋课程设计报告总结

java五子棋课程设计报告总结

课程设计报告:Java五子棋1. 背景五子棋是一种两人对弈的策略棋类游戏,它的目标是在一个棋盘上先将自己的五个棋子连成一条线,可以是横线、竖线、斜线等。

五子棋具有简单规则、易于上手、趣味性强等特点,因此在各个年龄段都备受欢迎。

本次课程设计旨在使用Java语言实现一个简单的五子棋游戏,并通过该项目来提高学生对面向对象编程和图形用户界面开发的理解和实践能力。

2. 分析2.1 需求分析根据五子棋游戏的规则,我们需要实现以下功能:•创建一个可视化的游戏界面,包括棋盘和落子提示•实现落子操作,玩家可以通过点击鼠标来在合法位置落下自己的棋子•判断胜负条件,当任意一方连成五个棋子时,游戏结束并宣布胜利者•提供重新开始和退出游戏的选项2.2 设计思路为了实现上述功能,我们将采取以下设计思路:•使用Java Swing库来创建游戏界面,包括棋盘和落子提示•使用二维数组来表示棋盘,并通过判断数组中的元素来确定当前位置是否已经有棋子•使用鼠标事件监听器来实现玩家的落子操作•使用算法判断胜负条件,例如遍历棋盘判断是否有五个连续的棋子•使用菜单栏和对话框来实现重新开始和退出游戏的选项3. 实现3.1 游戏界面设计我们将使用Java Swing库来创建游戏界面。

首先,我们需要创建一个主窗口,并设置其大小、标题和布局。

然后,在主窗口上添加一个棋盘面板和一个状态栏面板。

在棋盘面板上,我们使用GridLayout布局将其分割为15行15列的格子。

每个格子可以是一个按钮,用于玩家落子操作。

同时,我们还需要在每个格子上显示当前位置是否已经有棋子。

在状态栏面板上,我们将显示当前玩家的提示信息(轮到哪一方落子)以及胜利者信息(如果有)。

3.2 落子操作实现为了实现玩家的落子操作,我们需要使用鼠标事件监听器。

当玩家点击某个格子时,程序会捕捉到鼠标点击事件,并根据当前玩家的身份在对应的位置上落下棋子。

为了判断当前位置是否已经有棋子,我们可以使用一个二维数组来表示棋盘。

java课程设计五子棋游戏完整版

java课程设计五子棋游戏完整版

沈阳大学沈阳大学沈阳大学沈阳大学沈阳大学沈阳大学沈阳大学沈阳大学算下一步棋,isMatrix位true参数为插入点棋格坐标,否则参数为插入点像素坐标。

当游戏结束的时候使用Graphics g调用方法,在游戏过程中如果是黑方或是白方获胜在棋盘中就会显示是哪方获胜。

3.设计结果与分析(1)当进入到游戏当中可以选择是哪个颜色的棋先出,选择好之后便可以单机开始进行下棋,如果在游戏过程中出现什么问题可以单机再来一局重新开始游。

五子棋游戏的主界面如图2所示:图2.程序主界面(2)如果实黑棋先开始那么开始后的界面中先出的棋显示的是黑棋,如果是白棋先出则显示的是白棋,以黑棋为例如图3所示:沈阳大学图3.黑棋先出的界面图(3)对于五子棋游戏,无论人机对战,还是双人对战,都需要判断棋盘上是否存在五子连珠情况,这既是游戏名字的由来,也是游戏结束的标志。

判断五子连珠的原理是从横,竖,左斜线,右斜线4条线上判断是否存在5个相连的同类棋子,黑棋的五个棋子在横、竖或斜方向上连接成一线即为该方赢如图4所示:沈阳大学图4.游戏结束界面(4)白棋的五个棋子在横、竖或斜方向上连接成一线即为该方赢如图4所示:沈阳大学图5.白棋胜利界面图4.设计体会通过这次课程设计,我进一步加深对基础理论的理解,扩大专业知识面,对收集资料、查阅文献、方案制定等实践方面得到了很好的锻练,促进对所学知识应用能力的提高。

同时我渐渐的复习了Java使用方法和编程语法,之后的编程过程也相对得心应手,基本完成了预期计划的要求。

在此感谢我的指导老师—原玥老师,她在课题的研究上不遗余力的给予指导。

她严谨的治学态度深深的影响了我,使我受益匪浅!这个课设题对我来说有一定的挑战性,因为我自己也不知道自己到底学到了一个什么样的境界。

但可以肯定,这个课设题的要求绝对在我的能力范围以上。

之所以选择这个题目是想逼着自己去查更多的资料,学到更多的东西。

结果也确实是这样的,我在这次课设中学到了不少东西,也理解了许多原来不理解的东西。

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编程和多线程编程等技术,需要仔细考虑各种异常情况和线程同步问题。

java课程设计报告五子棋

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);}d.按钮的触发事件public void actionPerformed(ActionEvent e) {Graphics g=getGraphics();if (e.getSource()==b1) {Game_start();}else{Game_re();}if(e.getSource()==exist){Game_re();lblWin.setText(Get_qizi_color(color_Qizi)+"输了!");intGame_Start=0;}2.编写一个功能判断落子的位置及画出相应的黑白棋子public void set_Qizi(int x,int y) //落子{if (intGame_Start==0) //判断游戏未开始{return;}if (intGame_Body[x/20][y/20]!=0) {return;}Graphics g=getGraphics();if (color_Qizi==1)//判断黑子还是白子{g.setColor(Color.black);color_Qizi=0;}else{g.setColor(Color.white);color_Qizi=1;}g.fillOval(x-10,y-10,20,20);intGame_Body[x/20][y/20]=color_Qizi+1;}3.判断胜负if (Game_win_1(x/20,y/20)) //判断输赢1{lblWin.setText(Get_qizi_color(color_Qizi)+"赢了!");intGame_Start=0;}if (Game_win_2(x/20,y/20)) //判断输赢2{lblWin.setText(Get_qizi_color(color_Qizi)+"赢了!");intGame_Start=0;}if (Game_win_3(x/20,y/20)) //判断输赢3{lblWin.setText(Get_qizi_color(color_Qizi)+"赢了!");intGame_Start=0;}if (Game_win_4(x/20,y/20)) //判断输赢4{lblWin.setText(Get_qizi_color(color_Qizi)+"赢了!");intGame_Start=0;} }4.添加用户聊天功能NetchatClient chat=new NetchatClient();chat.frame();chat.setVisible(true);三具体实现3.1创建棋盘类Public class WcyChess extends Applet implements ActionListener,MouseListener,MouseMotionListener,ItemListener{ int color_Qizi=0;//旗子的颜色标识 0:白子 1:黑子int intGame_Start=0;//游戏开始标志 0未开始 1游戏中int intGame_Body[][]=new int[16][16]; //设置棋盘棋子状态int m=-1;Button b1=new Button("开始");Button b2=new Button("重置游戏");Label lblWin=new Label(" ");Checkbox ckbHB[]=new Checkbox[3];Button exist = new Button("退出");CheckboxGroup ckgHB=new CheckboxGroup();NetchatClient chat=new NetchatClient();public void init(){setLayout(null);addMouseListener(this);add(b1);b1.setBounds(330,50,80,30);b1.addActionListener(this);add(b2);b2.setBounds(330,90,80,30);b2.addActionListener(this);ckbHB[0]=new Checkbox("执白",ckgHB,false);ckbHB[0].setBounds(320,20,60,30);ckbHB[1]=new Checkbox("执黑",ckgHB,false);ckbHB[1].setBounds(380,20,60,30);ckbHB[2]=new Checkbox("观看",ckgHB, false);add(ckbHB[0]);add(ckbHB[1]);add(ckbHB[2]);ckbHB[0].addItemListener(this);ckbHB[1].addItemListener(this);add(lblWin);lblWin.setBounds(330,180,80,30);lblWin.setBackground(Color.red);lblWin.setText("胜利者!");//没有显示?ckbHB[2].setBounds(440, 20,60, 30);add(exist);exist.setBounds(330,130,80,30);exist.addActionListener(this);// add(chat);chat.setBounds(20, 500, 300, 300);chat.frame();chat.setVisible(true);Game_start_csh();setSize(500,600);setVisible(true);}public void itemStateChanged(ItemEvent e) {if (ckbHB[0].getState()) //选择黑子还是白子{color_Qizi=0;}else{color_Qizi=1;}}public void mousePressed(MouseEvent e){}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);}public void actionPerformed(ActionEvent e) {Graphics g=getGraphics();if (e.getSource()==b1) {Game_start();}else {Game_re();}if(e.getSource()==exist){Game_re();lblWin.setText(Get_qizi_color(color_Qizi)+"输了!");intGame_Start=0;}}public void mouseEntered(MouseEvent e){}public void mouseExited(MouseEvent e){}public void mouseReleased(MouseEvent e){}public void mouseDragged(MouseEvent e){}public void mouseMoved(MouseEvent e){}public void paint(Graphics g) {draw_qipan(g);}3.2判断输赢功能实现if (Game_win_1(x/20,y/20)){ //判断输赢1lblWin.setText(Get_qizi_color(color_Qizi)+"赢了!");intGame_Start=0;}if (Game_win_2(x/20,y/20)){//判断输赢2lblWin.setText(Get_qizi_color(color_Qizi)+"赢了!");intGame_Start=0;}if (Game_win_3(x/20,y/20)) //判断输赢3{lblWin.setText(Get_qizi_color(color_Qizi)+"赢了!");intGame_Start=0;}if (Game_win_4(x/20,y/20)) //判断输赢4{lblWin.setText(Get_qizi_color(color_Qizi)+"赢了!");intGame_Start=0;}//判断输赢程序实现在详细过程public boolean Game_win_1(int x,int y){ //横向判断输赢int x1,y1,t=1;x1=x;y1=y;for (int i=1;i<5 ;i++ ) {if (x1>15) {break;}if (intGame_Body[x1+i][y1]==intGame_Body[x][y]) {t+=1;}else{break;}}for (int i=1;i<5 ;i++ ){if (x1<1)break;}if(intGame_Body[x1-i][y1]==intGame_Body[x][y])t+=1;}else{break;}}if (t>4){return true;}else{return false;}}public boolean Game_win_2(int x,int y) { //纵向判断输赢int x1,y1,t=1;x1=x;y1=y;for (int i=1;i<5 ;i++ ){if (x1>15){break;}if (intGame_Body[x1][y1+i]==intGame_Body[x][y]){ t+=1;}else{break;}}for (int i=1;i<5 ;i++ ){if (x1<1){break;}if(intGame_Body[x1][y1-i]==intGame_Body[x][y]){ t+=1;}else{break;}}if (t>4){return true;}else{return false;}}public boolean Game_win_3(int x,int y) //左斜判断输赢{ int x1,y1,t=1;x1=x;y1=y;for (int i=1;i<5 ;i++ ){if (x1>15){break;}if (intGame_Body[x1+i][y1-i]==intGame_Body[x][y]){ t+=1;}else{break;}}for (int i=1;i<5 ;i++ ){if (x1<1){break;}if(intGame_Body[x1-i][y1+i]==intGame_Body[x][y]){ t+=1;}else{break;}}if (t>4){return true;}else{return false;}}public boolean Game_win_4(int x,int y) { //左斜判断输赢int x1,y1,t=1;x1=x;y1=y;for (int i=1;i<5 ;i++ ) {if (x1>15) {break;}if (intGame_Body[x1+i][y1+i]==intGame_Body[x][y]) {t+=1;}else{break;}}for (int i=1;i<5 ;i++ ) {if (x1<1) {break;}if(intGame_Body[x1-i][y1-i]==intGame_Body[x][y]) {t+=1;}else{break; } }if (t>4) {return true;}else{return false;}}3.3实现聊天功能类package NetchatClient;import java.awt.*;import java.awt.event.*;import .*;import java.io.*;import javax.swing.*;public class NetchatClient extends Frame {Frame x=new Frame("liaotianchengxu");TextField tf=new TextField();TextArea ta=new TextArea();Socket s=null;DataOutputStream dos=null;public static void main(String[] args) {new NetchatClient().frame();}public void frame(){System.out.println("frame()");setLocation(20, 400);setSize(300,300);add(tf,BorderLayout.SOUTH);add(ta,BorderLayout.NORTH);pack();setVisible(true);connect();this.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent arg0) { cconnect();System.exit(0);}});addWindowListener(new WindowAdapter()//窗口适配器 {public void windowClosing(WindowEvent e) {System.exit(0);//程序退出} } );tf.addActionListener(new nclistener());}public void connect() {System.out.println("connnect()..");try {s=new Socket("127.0.0.1",8888);//设置客户端的IP和端口 dos=new DataOutputStream(s.getOutputStream());} catch (UnknownHostException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}public void cconnect(){try {dos.close();s.close();} catch (IOException e) {e.printStackTrace();} }public class nclistener implements ActionListener{public void actionPerformed(ActionEvent e) {String st=tf.getText();ta.setText(st);tf.setText("");try {dos.writeUTF(st);dos.flush();} catch (IOException e1) {e1.printStackTrace();} } } }四测试结果4.1 进入游戏的界面分析:游戏开始的界面有三个选择项,用户可以选择相应的角色,选择完毕后点击开始进入游戏。

java五子棋报告

java五子棋报告

五子棋一、程序功能介绍设计一个20*20的五子棋盘,由两个玩家交替下子,并且可以实现以下功能:1.鼠标点击横竖线交汇处落子2.通过落子使得五个黑子或者五个白子在一条横线、竖线或斜线上2.重新开始按钮刷新重新开始3. 检查是否实现了五子连珠4. 有一方五子连珠时提示结果5.结束按钮结束程序二、课程设计过程1.如图一:程序流程图2.程序功能设计(1)先写draw类,在类中先画出一个Jframe窗口体,在这个窗口体上增加重新开始,退出,和主棋盘按钮。

并且设置监听按钮的监听。

并在draw类中设置主函数启动程序。

(2)fivechess类实现程序的功能,定义wh_array二维数组表示棋盘。

定义wh_arr一维数组,将wh_array值通过从上往下转换成一维,可用于判断输赢。

定义paintComponent(Graphics g)绘图函数,将整个棋盘给画出。

3.程序中用的变量、方法、类等class fivechess extends JPanel{} //定义变量,落子监听,判断输赢int[][] wh_array = new int[20][20]; // 定义二维数组,表示棋子在棋盘的位置int[] wh_arr = new int[430]; // 定义一维数组,转换二维数组,判断是否连线public void mouseClicked(MouseEvent e) // 单击鼠标落子并且判断输赢public fivechess() {} // 鼠标操作protected void paintComponent(Graphics g) // 绘图函数public Dimension getPerferredSize() //返回期盼大小public class draw extends JFrame {} //添加按钮,设置监听,启动程序public draw() //绘制窗口,增加重新开始和退出按钮b.addActionListener() //重新开始按钮设置监听exit. addActionListener()//退出按钮设置监听public static void main(String args[]){}//主函数启动程序三、程序设计的完整代码及注解//双人对战五子棋import java.awt.*;import java.awt.event.*;import javax.swing.*;class fivechess extends JPanel { // 函数int wh_color, x1, y1, wh_x, wh_y, wh_i, wh_j, wh_arri, wh_stop = 3;// 定义各种整型变量//x1,y1表示坐标wh_x,wh_y圆大小坐标wh_i,wh_j二维数组boolean wh_rf; // 定义布尔型变量,判断玩家String s;int[][] wh_array = new int[20][20]; // 定义二维数组int[] wh_arr = new int[430]; // 定义一维数组public fivechess() { // 鼠标操作for (int i = 0; i < 20; i++) { // 给二维数组赋值为0for (int j = 0; j < 20; j++) {wh_array[i][j] = 0; // 赋值为0}}for (int i = 0; i < 400; i++) { // 给一维数组赋初始值0wh_arr[i] = 0;}addMouseListener(new MouseListener() { // 鼠标监听器public void mouseClicked(MouseEvent e) // 单击鼠标{Graphics g = getGraphics();if (wh_stop == 3) // 当wh_stop==3时运行程序{x1 = e.getX(); // 返回鼠标当前x坐标y1 = e.getY(); // 返回鼠标当前y坐标wh_i = (x1 - 54) / 32; // 计算列值wh_j = (y1 - 34) / 32; // 计算行值wh_arri = 20 * wh_j + wh_i; // 计算二维数组变为一维数组时的对应值if (x1 > 54 && x1 < 694 && y1 > 34 && y1 < 674) // 在棋盘范围内单击鼠标才运行程序{if (wh_array[wh_i][wh_j] == 0) // 当二维数组取值为0时运行程序{wh_rf = !wh_rf; // Boolean值单击后循环变化if (wh_rf == true) // Boolean值为TRUE时{wh_color = 1; // 令wh_color=1s = "黑棋";wh_array[wh_i][wh_j] = 1; // 对应的二维数组值赋为1wh_arr[wh_arri] = 1; // 对应的一维数组赋值为1}if (wh_rf == false) // Boolean值为FALSE时{wh_color = 2; // wh_color为2s = "白棋";wh_array[wh_i][wh_j] = 2; // 对应的二维数组值赋为2wh_arr[wh_arri] = 2; // 对应的一维数组值赋为2}for (int i = 0; i < 20; i++) // 确定鼠标位置的范围{for (int j = 0; j < 20; j++) {if (x1 >= 54 + i * 32&& x1 < 54 + (i + 1) * 32&& y1 >= 34 + j * 32&& y1 < 34 + (j + 1) * 32)// 鼠标在此范围内时{wh_x = 54 + (i) * 32 + 1; // 取这个小方格的左上角x坐标值+1wh_y = 34 + (j) * 32 + 1; // 取这个小方格的左上角y坐标值+1}}}if (wh_color == 1) // 当棋子为黑色时{g.setColor(Color.BLACK); // 设置颜色}if (wh_color == 2) // 如果棋子为白色{g.setColor(Color.WHITE); // 设置颜色}g.fillOval(wh_x, wh_y, 30, 30); // 在这个小方格范围内画圆形}}for (int i = 0; i < 395; i++) // 判断黑白双方谁胜利{g.setColor(Color.RED);if ((wh_arr[i] == 1 && wh_arr[i + 1] == 1&& wh_arr[i + 2] == 1 && wh_arr[i + 3] == 1&& wh_arr[i + 4] == 1 && (i + 4) / 20 == i / 20)|| // 判断横行黑子连续为5个(wh_arr[i] == 1 && wh_arr[i + 20] == 1&& wh_arr[i + 40] == 1&& wh_arr[i + 60] == 1&& wh_arr[i + 80] == 1 && (i + 4) / 20 == i / 20)|| // 判断竖行黑子连续为5个(wh_arr[i] == 1 && wh_arr[i + 19] == 1&& wh_arr[i + 2 * 19] == 1&& wh_arr[i + 3 * 19] == 1&& wh_arr[i + 4 * 19] == 1 && (i - 4) / 20 == i / 20)|| // 判断斜左黑子连续为5个(wh_arr[i] == 1 && wh_arr[i + 21] == 1&& wh_arr[i + 2 * 21] == 1&& wh_arr[i + 3 * 21] == 1 && wh_arr[i + 4 * 21] == 1)) // 判断斜右黑子连续为5个{g.drawString("黑棋胜利", 300, 300); // 显示黑棋胜利wh_stop = 0; // 当胜利时赋值为0,再次运行时将停止}if ((wh_arr[i] == 2 && wh_arr[i + 1] == 2&& // 判断白棋子wh_arr[i + 2] == 2 && wh_arr[i + 3] == 2&& wh_arr[i + 4] == 2 && (i + 4) / 20 == i / 20)|| // 判断横行白子连续为5个(wh_arr[i] == 2 && wh_arr[i + 20] == 2&& wh_arr[i + 40] == 2&& wh_arr[i + 60] == 2&& wh_arr[i + 80] == 2 && (i + 4) / 20 == i / 20)|| // 判断竖行白子连续为5个(wh_arr[i] == 2 && wh_arr[i + 19] == 2&& wh_arr[i + 2 * 19] == 2&& wh_arr[i + 3 * 19] == 2&& wh_arr[i + 4 * 19] == 2 && (i - 4) / 20 == i / 20)|| // 判断斜左白子连续为5个(wh_arr[i] == 2 && wh_arr[i + 21] == 2&& wh_arr[i + 2 * 21] == 2&& wh_arr[i + 3 * 21] == 2 && wh_arr[i + 4 * 21] == 2)) // 判断斜行连续5子{g.drawString("白棋胜利", 300, 300);wh_stop = 0;}}}} // 单击事件结束public void mouseEntered(MouseEvent e) // 鼠标进入组件的事件{}public void mouseExited(MouseEvent e) // 鼠标离开组件的事件{}public void mousePressed(MouseEvent e) // 鼠标按下时的事件{}public void mouseReleased(MouseEvent e) // 鼠标放开时的事件{}}); // 监听器结束addMouseMotionListener(new MouseMotionListener() // 鼠标motion监听{public void mouseMoved(MouseEvent e) // 处理鼠标移动事件{}public void mouseDragged(MouseEvent e) // 处理鼠标拖动事件{}});}protected void paintComponent(Graphics g) // 绘图函数{g.setColor(Color.gray);g.fill3DRect(0, 0, 748, 728, true);g.setColor(Color.BLACK); // 设置颜色for (int i = 0; i < 20; i++) // 循环画棋盘{g.drawLine(70, 50 + i * 32, 678, 50 + i * 32); // 画棋盘的横线g.drawLine(70 + i * 32, 50, 70 + i * 32, 658); // 画棋盘的纵线}g.drawString("五子棋", 300, 30); // 在面板上输出"五子棋"wh_stop = 3; // 刷新后wh_stop由0变为3可以响应buttonfor (int i = 0; i < 20; i++) // 给二维数组赋值为0{for (int j = 0; j < 20; j++) {wh_array[i][j] = 0; // 赋值为0}}for (int i = 0; i < 400; i++) { // 给一维数组赋初始值0 wh_arr[i] = 0;}}public Dimension getPerferredSize() {return new Dimension(748, 728);}}public class draw extends JFrame { // 函数JTextField t;public draw() //{super("五子棋"); // 窗口名Container c = getContentPane(); // 返回当前内容窗值c.setLayout(null);fivechess wh = new fivechess();wh.setBounds(0, 0, 748, 728); // 设置panel大小JButton b = new JButton("重新开始"); // 定义按钮JButton exit = new JButton("退出"); // 定义按钮c.add(exit);c.add(b); // 添加按钮c.add(wh); // 添加panelb.setBounds(70, 20, 100, 20); // 设置按钮大小exit.setBounds(580, 20, 80, 20);b.addActionListener(new ActionListener() // 设置监听{public void actionPerformed(ActionEvent e) {repaint(); // 重画}});exit.addActionListener(new ActionListener() // 设置监听{public void actionPerformed(ActionEvent e) {System.exit(0);}});}public static void main(String args[]) // 主函数{draw app = new draw(); //app.setLocation(300, 0); // 设置窗口位置app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 关闭框架行为属性app.setSize(748, 728); // 设置面板框架frame大小app.setVisible(true); // 设置可见app.setResizable(false);}}四、程序运行的结果分析1.如图二:进入游戏界面2.如图三:落子图三落子3.如图四:结束游戏图四游戏结束五、课程设计总结通过短短的一个学期java的学习,我们从一个对JAVA编程不懂的学生到现在可以试着用JAVA 进行简单程序的设计和编写,也更加了解了面向对象的思想。

java课程设计五子棋

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+五子棋+课程设计报告-(2)

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 CornellJAVA核心技术卷i:基础知识(原书第七版):机械工业出版社[4]丁振凡Java语言实用教程:北京邮电大学出版社[5]http://csd6)课程设计进度安排内容天数地点构思及收集资料 1 图书馆编码与调试 2.5实验室撰写论文1.5图书馆、实验室学生签名:2009年6月15 日课程设计(论文)评审意见(1)完成基本算法(20分):优()、良()、中()、一般()、差(); (2)完成调试(20分):优()、良()、中()、一般()、差();(3)创新设计(20分):优( )、良( )、中()、一般()、差( ); (4)设计分析(20分):优()、良()、中()、一般( )、差();(5)回答问题(20分):优()、良()、中()、一般()、差();(6)格式规范性及考勤是否降等级:是(✓)、否()评阅人:职称:2009年6月21 日目录绪论........................................................................................ 1一、题目内容及要求ﻩ2二、设计思路 (2)三、具体实现 (5)四、测试结果........................................ 错误!未定义书签。

“Java程序设计”——“五子棋”综合实验报告

“Java程序设计”——“五子棋”综合实验报告

“Java程序设计”综合实验报告一、前言1、项目背景通过五子棋这个课程设计。

可以让我们更加熟悉Java程序设计这门课程,加强对Eclipse这个软件的使用,加深对Java语言的掌握,提高编程水平。

同时培养能力,为将来的工作打下坚实的基础。

2、目标和意义目标:锻炼我们的能力,提高组中每一个人对Java语言的认识,培养编程兴趣。

让每一个人都能参与进来,提高团队合作意识。

意义:通过编写综合类的程序,运用已经学过的知识,和自主学习一些新的知识,提高了学习能力,掌握了一些自主学习的方法。

3、开发分工及进度安排二、功能分析1、主要模块本项目主要分为3个大的模块,分别为整体布局;界面绘制;与对战的算法。

由于游戏规则的设置,这里的游戏模式分为人机对战和人人对战。

黑白双方依次落子,由黑子先下,当任意一方在棋盘上形成横向,竖向,斜向连续五个相同颜色的棋子的一方获胜。

主要功能①实现在2种模式下五子棋的游戏。

②实现通过鼠标的点击位置放置棋子,达到下棋的目的。

③实现游戏玩家对游戏模式的自主选择。

④实现对在每种游戏模式下的黑子先手下棋的规定,先达到5子即为胜利。

三、关键功能的设计与实现1、数据结构与算法数据结构:项目中主要数据结构为二维数组。

用于存储棋盘上棋子的信息,和保存棋型表。

主要算法:(一)iswin()函数:用来判断输赢,通过鼠标事件所得到的点或者电脑下的点的坐标,来扫描该点八个方向的相邻的相同棋子数,上下,左右,斜左上下,斜右上下为四组,任意一组等于5即为胜利,由于本程序没有考虑禁手原则,只考虑了民间规则,所以大于5也为胜利。

public int iswin1(int x, int y, int heqi) {int k, s1, s2, s3, s4, s5, s6, s7, s8;s1 = 0;s2 = 0;s3 = 0;s4 = 0;s5 = 0;s6 = 0;s7 = 0;s8 = 0;if (heqi == 256)return -1;for (k = 1; k < 5; k++) {if (y + k < 16 && qipanqizi[x][y + k] == qipanqizi[x][y])s1++;elsebreak;}for (k = 1; k < 5; k++) {if (y - k > -1 && qipanqizi[x][y - k] == qipanqizi[x][y])s2++;elsebreak;}for (k = 1; k < 5; k++) {if (x + k < 16 && y + k < 16&& qipanqizi[x + k][y + k] == qipanqizi[x][y]) s3++;elsebreak;}for (k = 1; k < 5; k++) {if (x - k > -1 && y - k > -1&& qipanqizi[x - k][y - k] == qipanqizi[x][y]) s4++;elsebreak;}for (k = 1; k < 5; k++) {if (x + k < 16 && qipanqizi[x + k][y] ==qipanqizi[x][y])s5++;elsebreak;}for (k = 1; k < 5; k++) {if (x - k > -1 && qipanqizi[x - k][y] ==qipanqizi[x][y])s6++;elsebreak;}for (k = 1; k < 5; k++) {if (x - k > -1 && y + k < 16&& qipanqizi[x - k][y + k] == qipanqizi[x][y]) s7++;elsebreak;}for (k = 1; k < 5; k++) {if (x + k < 16 && y - k > -1&& qipanqizi[x + k][y - k] == qipanqizi[x][y]) s8++;elsebreak;}if (s1 + s2 >= 4 || s3 + s4 >= 4 || s5 + s6 >= 4 || s7 + s8 >= 4) {return 1;} elsereturn 0;}(二)人机对战通过对整个棋盘上每一个点的扫描,获得了电脑和玩家的棋型表,表中数据为该点的权值。

java课程设计五子棋实验报告

java课程设计五子棋实验报告

java课程设计五子棋实验报告Java课程设计五子棋实验报告一、实验目的本次实验主要目的是运用Java编程语言,设计并实现一个简单的五子棋游戏,通过实践掌握Java编程基础知识和面向对象编程思想。

二、实验内容本实验要求设计并实现一个五子棋游戏,主要功能包括:1. 实现双人对战功能,允许两个玩家交替下棋;2. 实现判断胜负功能,当某一方连成五子时,游戏结束,显示胜利者;3. 实现悔棋和重新开始的功能。

三、实验原理1. 界面设计界面设计采用Java Swing框架,主要包括棋盘和控制面板两部分。

棋盘使用JPanel实现,通过绘制线条和圆形实现棋盘和棋子的显示。

控制面板使用JPanel和JButton实现,提供重新开始和悔棋功能。

2. 游戏逻辑游戏逻辑主要包括下棋和判断胜负两个部分。

下棋功能通过记录当前玩家和棋子位置实现,判断胜负则通过遍历棋盘上的所有棋子,判断是否满足连成五子的条件。

3. 实现悔棋和重新开始的功能悔棋功能主要通过记录每一步棋的位置和玩家来实现,重新开始则需要清空棋盘和游戏记录。

四、实验步骤1. 设计并实现界面,包括棋盘和控制面板;2. 实现游戏逻辑,包括下棋和判断胜负;3. 实现悔棋和重新开始的功能;4. 进行代码测试和调试,确保程序能够正常运行。

五、实验结果经过测试,程序能够正常运行,实现了双人对战、判断胜负、悔棋和重新开始的功能。

六、实验总结本次实验通过设计并实现一个简单的五子棋游戏,巩固了Java编程基础知识和面向对象编程思想,同时也学习了Swing框架的使用。

在实现过程中也遇到了一些问题,如棋子位置的计算、胜负判断的实现等,通过查阅资料和调试最终得以解决。

总体来说,本次实验收获颇丰,对Java编程有了更深入的了解和认识。

JAVA五子棋课程设计

JAVA五子棋课程设计
升级
升级内容:软 件升级、硬件
升级
升级注意事项: 备份数据、检 查兼容性、确
保网络畅通
07 总结与展望
项目总结
项目目标:设计并实现一个JAVA五子棋游戏 项目成果:实现了五子棋游戏的基本规则和功能 项目难点:AI算法的设计和实现 项目改进:优化AI算法,提高游戏难度和趣味性 项目展望:未来可以尝试实现更多游戏功能,如多人对战、在线对战等
部署步骤:下载源 代码、编译、打包 、部署到服务器
维护方法:定期备 份数据、更新软件 版本、监控系统运 定期更新系统,确保系统安全 定期检查硬件设备,确保硬件正常运行 定期清理系统垃圾,提高系统运行速度
系统升级
升级目的:提 高系统稳定性、 安全性和性能
升级方式:自 动升级、手动

可扩展性:系统应具有良好 的可扩展性,便于未来功能
扩展和升级
04 系统设计
系统架构
服务器端:负责游戏管理和 数据存储
数据库:存储游戏数据和用 户信息
通信协议:定义客户端和服 务器之间的通信格式和规则
客户端:负责用户界面和游 戏逻辑
安全性:确保数据安全和用 户隐私
界面设计
棋盘设计:黑白棋子,棋盘背景色 游戏界面:开始、结束、重新开始按钮 提示信息:提示玩家下一步操作 音效设计:背景音乐,棋子落下音效
项目不足与改进空间
代码优化:部 分代码存在冗 余,需要进一
步优化
功能完善:需 要增加更多的 功能,如悔棋、
复盘等
用户体验:界 面设计不够友 好,需要进一
步优化
性能提升:运 行速度较慢, 需要优化算法
和代码结构
项目未来展望
增加功能:支持多人在线对 战,提高社交互动性

Java五子棋课程设计报告

Java五子棋课程设计报告

Java五子棋课程设计报告目录第一章概述……………………………………………………………………………………错误~未定义书签。

11.1 课程设计意义1.2 课程设计目的1.3 课程设计要求第二章网络五子棋设计的需求分析和总体设计2.1 需求分析2.1.1 功能需求分析2.1.2 性能需求分析2.1.3 用户界面需求2.2 系统的主要功能2.3 系统包含的类及类之间的关系2.4 Java源文件及其功能2.5 程序总体思路2.6 系统流程图第三章系统详细设计3.1 界面设置3.2 控制按钮3.3 规则3.4 棋盘坐标3.5 双方对弈情况第四章服务器与客户端的设计与实现4.1 服务器和客户端通信机制4.2 多线程机制4.3 传递信息4.4 客户端界面设计4.5 连接服务器4.6 判断输赢算法第五章课程设计总结第三章原理分析3.1 服务器和客户端通信机制P318最下面的文字,p319最下面的文字Socket是面向客户/服务器模型设计的,网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一端称为一个Socket。

Socket通常用来实现客户方和服务方的连接。

客户程序可以向Socket写请求,服务器将处理此请求,然后通过Socket将结果返回给用户。

在java中使用套接字相当简单,Java API为处理套接字的通信提供了一个类.Socket。

使得编写网络应用程序相对容易。

JAVA支持流套接字(stream socket)和数据报套接字(datagram socket)。

流套接字使用TCP(传输控制协议)进行数据传输,而数据报套接字使用UDP(用户数据报协议)。

在Java中Socket可以理解为客户端或者服务器端的一个特殊的对象,这个对象有两个关键的方法,一个是getInputStream方法,另一个是getOutputStream 方法。

getInputStream方法可以得到一个输入流,客户端的Socket对象上的getInputStream方法得到的输入流其实就是从服务器端发回的数据流。

《JAVA程序设计》课程设计-五子棋小游戏

《JAVA程序设计》课程设计-五子棋小游戏

《JAVA程序设计》课程设计-五子棋小游戏《JAVA程序设计》课程设计题目: 五子棋小游戏业: 信息与计算科学专学号: 070930205等姓名:指导教师: 成绩:二00九年十二月九日1.课程设计研究背景及意义五子棋是一种两人对弈的纯策略型棋类游戏,是起源于中国古代的传统黑白棋种之一。

发展于日本,流行于欧美。

容易上手,老少皆宜,而且趣味横生,引人入胜;不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。

然则看似很简单的一个小游戏,却对我们这组刚接触JAVA编程的成员来说却是一个不错的挑战,由于水平不限不能做成和电脑进行对战,也对于和其它电脑联机对战的模式不太清楚,故做成一个自己和自己对战的五子棋来考验我们的JAVA 的技术。

2.课程设计题目描述和要求题目:五子棋小游戏游戏主要界面如下:游戏规则:1,棋子分为黑白两色,采用19×19棋盘。

2,自己和自己对战,白子和黑子交替下,直到白子或黑子一方有五粒子连在一起,最先完成五粒子连在一起的一方为胜利的一方(可以是横、竖、斜、反斜)。

3,允许悔棋,且允许一直悔到棋盘上没有棋子了,悔棋后允许恢复。

当悔棋后下子了,则不允许再恢复了。

4,有棋子的地方不允许再下棋子了5,落子后不能移动或拿掉。

7,胜利后,棋局重新开始。

主要功能:1,鼠标点棋盘上的任意一点,棋子会落入离这点最近的一个交叉点处。

2,白子和黑子交替下。

3,当下到一半时,可以保存进度。

4,关闭再打开后,可以重新读取进度再接着下。

5,允许悔棋,且允许一直悔到棋盘上没有棋子了。

6,悔棋后允许恢复。

当悔棋后下子了,则不允许再恢复了。

7,下棋的过程中,随时可以重新开始。

8,有棋子的地方不允许再下子了。

9,当悔到没有棋子的时候会弹出消息。

10,任意一方胜利后会弹出消息11,恢复的步数超过了悔棋的步数的时候会弹出消息12,当任意一方胜利后,棋局重新开始。

13,设有菜单栏,玩家可以点菜单来完成某种操作。

五子棋实训报告(电子版)范文

五子棋实训报告(电子版)范文

《JA V A程序设计》实训报告课程名称:JA V A程序设计专业:计算机应用技术班级:11计算机应用班小组成员:巨敏石丽涛张娅雯李延尚文学董丁喜周致远指导老师:***目录一.实训目的 (1)二. 实训题目和要求2.1实训题目描述 (1)2.2实训要求 (1)三.实训报告内容3.1五子棋主框架 (1)3.2棋盘、棋子及说明信息 (1)3.3对弈算法相关问题设计 (1)四.实训中的部分代码 (2)五.五子棋源程序代码 (3)六. 总结 (17)一、实训目的本次实训,学生可以将理论知识与具体实践相结合,巩固对JA VA相关方法和概念的理解。

通过实训单机版五子棋游戏的编程,掌握JA V A语言编程的基础知识并能熟练运用,熟悉累声明与对象的使用,运用JA V Aswing编写单机版五子棋游戏,并实现其功能。

通过本次实训,可以开拓思维,增强编程思想,为深入学习JA VA打下良好的基础。

二、实训题目描述和要求2.1实训题目描述实训题目:JA V A五子棋单机版游戏。

描述:通过JA V A的swing组件,实现五子棋简单的双人对弈,并通过内部条件判断实现输赢的双方的下棋过程。

2.2实训要求(1)五子棋游戏的主窗口也就是游戏界面的实现(2)棋子黑白色的设置及判定(3)完成判断某一横行是否练成五子及所有方向是否练成五子的功能(4)几个简单按钮的实现,“重新开始”“悔棋”“退出”按钮(5)菜单栏的实现,“重新开始”“悔棋”“退出”菜单项三、实训报告内容3.1主框架编写一个startCheesJFrame类,主要用来显行主窗体界面,包括工具条面板、菜单栏项。

设置界面关闭事件。

并编写一个内部类MyItemListener来监听按钮和菜单栏的单机事件。

3.2棋盘、棋子(1)编写point类,包括棋子的X/Y索引,颜色。

定义构造函数和相应的get方法。

(2)编写ChessBoard类,设置棋盘背景颜色为橘黄色(3)在主框架类中创建ChessBoard对象,并添加到主框架中(4)编写mousePressed方法来进行绘制棋盘和棋子3.3对弈算法相关问题设计(1)编写mousePressed方法的内容,预定义isBlack表示下的是黑棋还是白棋。

五子棋java课程课程设计

五子棋java课程课程设计

五子棋java课程课程设计一、课程目标知识目标:1. 让学生掌握五子棋游戏的规则,理解其背后的逻辑和策略。

2. 让学生掌握Java编程语言的基本语法,如变量、循环、条件语句等。

3. 让学生了解面向对象编程的基本概念,如类、对象、方法等,并能运用到五子棋游戏的编程中。

技能目标:1. 培养学生运用Java语言编写五子棋游戏的能力,实现人机对战功能。

2. 培养学生分析问题、解决问题的能力,通过编程解决五子棋游戏中的各种问题。

3. 培养学生的团队协作能力,分组完成五子棋游戏的开发。

情感态度价值观目标:1. 培养学生对编程的兴趣和热情,激发学生自主学习编程的动力。

2. 培养学生面对挑战时的积极态度,勇于尝试和克服困难。

3. 培养学生的竞技精神,遵守游戏规则,尊重对手,公平竞争。

课程性质:本课程属于信息技术学科,结合五子棋游戏,让学生在实践中学习Java编程。

学生特点:学生处于初中年级,对编程有一定的基础,好奇心强,喜欢动手实践。

教学要求:结合学生特点,以实践为主,注重培养学生的动手能力和解决问题的能力。

教学过程中,注重引导学生主动探索,激发学生的学习兴趣。

通过分组合作,培养学生的团队协作能力。

在教学评估中,关注学生的知识掌握、技能提升和情感态度价值观的培养。

将课程目标分解为具体的学习成果,为后续教学设计和评估提供依据。

二、教学内容1. 五子棋游戏规则及策略分析- 五子棋基本规则- 常见开局、中局、残局策略2. Java编程基础知识- 数据类型、变量、运算符- 循环结构(for、while)- 分支结构(if、switch)- 数组的使用3. 面向对象编程基本概念- 类的定义与使用- 对象的创建与操作- 方法的定义与调用4. 五子棋游戏编程实现- 游戏界面设计- 棋盘类的设计与实现- 玩家类的设计与实现- 电脑对手的设计与实现- 游戏胜负判断逻辑5. 项目实战:分组完成五子棋游戏- 组内分工合作- 项目进度管理- 代码调试与优化教学内容安排与进度:第一周:五子棋游戏规则及策略分析,Java编程基础知识学习第二周:面向对象编程基本概念学习,五子棋游戏编程实现(1)第三周:五子棋游戏编程实现(2),项目实战分组,组内分工第四周:项目实战,代码编写与调试第五周:项目总结与展示,教学评价教学内容与课本关联性:教学内容与教材中关于Java编程、面向对象编程等内容紧密结合,通过五子棋游戏案例,让学生在实践中掌握编程知识,提高编程能力。

java五子棋项目报告

java五子棋项目报告

《Java语言程序设计》课程设计报告题目:设计者:班级:学号:指导教师:系部:信息管理系专业:计算机应用技术2011年 6 月 25 日目录1、概论..................................... 错误!未定义书签。

2、总体设计 .................................... 错误!未定义书签。

3、详细设计 .................................... 错误!未定义书签。

4、实现........................................ 错误!未定义书签。

5、总结体会 ................................... 错误!未定义书签。

-6、参考文献 .................................... 错误!未定义书签。

7、附录........................................ 错误!未定义书签。

1、概述问题分析主要运用了GUI(用户图形界面)和API(应用程序借口)来实现。

当然,Event 监听器等也是这个程序的重要部分。

程序没有用到图片的引用,棋盘和棋子的设计完全是应用坐标来绘制,再加入按钮、及实现本游戏的用户界面布局。

程序编写的思路来源于老师的视频资料,程序在编写过程中遇到的问题主要集中在前期的棋盘绘制和后期的棋子算法。

功能(1)程序在设计初就定义黑棋先行,白棋随后。

从第一个棋子开始开始相互顺序落子。

(2)通过坐标索引算出最先在棋盘的横向、竖向、斜向形成连续的相同色五棋子的一方为胜利。

(3)为保持界面洁净设为游戏界面设为固定。

(4)在游戏过程中或下完时可选择重新开始。

(5)赢家对话框提示。

(6)游戏实现了基本的单机功能但为实现人机对战和网路对战。

2、总体设计主要包括的类有三个:ChessBoard、Point、StartChessJFrame1、StartChessJFrame类StartChessJFrame类是java版五子棋的主框架,程序的启动类。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

课程设计(论文)任务书软件学院软件工程+电子商务专业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]6)课程设计进度安排内容天数地点构思及收集资料1图书馆编码与调试 2.5实验室撰写论文 1.5图书馆、实验室学生签名:2009年6 月15 日课程设计(论文)评审意见(1)完成基本算法(20分):优()、良()、中()、一般()、差();(2)完成调试(20分):优()、良()、中()、一般()、差();(3)创新设计(20分):优()、良()、中()、一般()、差();(4)设计分析(20分):优()、良()、中()、一般()、差();(5)回答问题(20分):优()、良()、中()、一般()、差();(6)格式规范性及考勤是否降等级:是(✓)、否()评阅人:职称:2009年6月21 日目录绪论 (1)一、题目内容及要求 (2)二、设计思路 (2)三、具体实现 (5)四、测试结果 (55)五、设计体会与小结 (149)六、参考文献 .... .. .. (20)附录 .... .. (20)绪论Java是由美国的sun microsystems 公司发展出来的一套面向对象程序语言,因为它的面向对象,分散运算,跨平台等等特性,又支持多线程。

使得许多用过的人都爱不释手。

Java既是一种程序设计语言,也是一个完整的平台。

作为一种程序语言,它简洁、面向对象、安全、健壮,以及适用于Internet技术;而作为一个平台(JRE,Java Runtime Environment,Java运行环境或者说是Java虚拟机),对于符合Sun公司Java标准的应用程序,都可以在Java平台上正确运行,与程序运行的操作系统无关。

Java发展到今天,已从编程语言发展成为全球第一大通用开发平台。

Java技术已被计算机行业主要公司所采纳。

1999年,Sun公司推出了以Java2平台为核心的J2EE、J2SE和J2ME三大平台。

随着三大平台的迅速推进,全球形成了一股巨大的Java应用浪潮。

这个五子棋游戏正是用这个平台做的,在实践中充分体现出了Java面向对象给我们带来的方便。

多用户聊天程序也让我体会到了Java多线程的强大功能。

一题目内容及要求要求实现一个简单的多用户五子棋胡游戏程序,包括如下两个界面: (1)选择对弈桌及角色(执黑、执白、观看)。

(2)在游戏界面,有开始,退出(游戏未结束、点退出自动判负);发言及显示区;用户列表区;棋盘绘制区。

二设计思路2.1工作原理图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) {//点击点位于X相距20像素的两点间x1+=10;}if(y1%20>10) {//点击点位于y相距20像素的两点间y1+=10;}x1=x1/20*20; //确定棋子可放置的交叉点X位置y1=y1/20*20; //确定棋子可放置的交叉点y位置set_Qizi(x1,y1); //调用函数set_Qizi,放置棋子m*=(-1); //某方开始放置棋子,譬如m为正则黑方下棋}d.按钮的触发事件public void actionPerformed(ActionEvent e) {Graphics g=getGraphics();//在当前面板绘制图像if (e.getSource()==b1) {Game_start();//调用函数,开始游戏}else{Game_re();//调用函数,重新开始}if(e.getSource()==exist){Game_re();//调用函数,重新开始lblWin.setText(Get_qizi_color(color_Qizi)+"输了!");//调用函数Get_qizi_color(color_Qizi),其返回值为“黑子”或“白字”intGame_Start=0; //归0操作,表明游戏尚未开始}2.编写一个功能判断落子的位置及画出相应的黑白棋子public void set_Qizi(int x,int y) //落子{if (intGame_Start==0) //判断游戏是否已开始{return;}if (intGame_Body[x/20][y/20]!=0) {//该交叉点已被占用return;}Graphics g=getGraphics();//在当前面板绘制图像if (color_Qizi==1) //判断棋子的黑白{g.setColor(Color.black); //若棋子为黑,即color_Qizi==1,设置黑色画笔color_Qizi=0; //下一步由白子,故赋值为0}else{g.setColor(Color.white); //棋子为白子,设置画笔为白color_Qizi=1; //下一步为黑子,故赋值为1}g.fillOval(x-10,y-10,20,20); //绘制填充椭圆intGame_Body[x/20][y/20]=color_Qizi+1; //棋盘交叉点已占用,即不为零}3.判断胜负if (Game_win_1(x/20,y/20)) //判断输赢1{lblWin.setText(Get_qizi_color(color_Qizi)+"赢了!");intGame_Start=0;}if (Game_win_2(x/20,y/20)) //判断输赢2{lblWin.setText(Get_qizi_color(color_Qizi)+"赢了!");intGame_Start=0;}if (Game_win_3(x/20,y/20)) //判断输赢3{lblWin.setText(Get_qizi_color(color_Qizi)+"赢了!");intGame_Start=0;}if (Game_win_4(x/20,y/20)) //判断输赢4{lblWin.setText(Get_qizi_color(color_Qizi)+"赢了!");intGame_Start=0;} }4.添加用户聊天功能NetchatClient chat=new NetchatClient();chat.frame();chat.setVisible(true);三具体实现3.1创建棋盘类Public class WcyChess extends Applet implements ActionListener,MouseListener,MouseMotionListener,ItemListener{int color_Qizi=0;//旗子的颜色标识0:白子1:黑子int intGame_Start=0;//游戏开始标志0未开始1游戏中int intGame_Body[][]=new int[16][16]; //设置棋盘棋子状态int m=-1;Button b1=new Button("开始");Button b2=new Button("重置游戏");Label lblWin=new Label(" ");Checkbox ckbHB[]=new Checkbox[3];Button exist = new Button("退出");CheckboxGroup ckgHB=new CheckboxGroup();NetchatClient chat=new NetchatClient();//对话框类实体public void init(){setLayout(null); //暂不设置布局addMouseListener(this); //为当前类设置鼠标监听器add(b1);b1.setBounds(330,50,80,30);b1.addActionListener(this);add(b2);b2.setBounds(330,90,80,30);b2.addActionListener(this);ckbHB[0]=new Checkbox("执白",ckgHB,false);ckbHB[0].setBounds(320,20,60,30);ckbHB[1]=new Checkbox("执黑",ckgHB,false);ckbHB[1].setBounds(380,20,60,30);ckbHB[2]=new Checkbox("观看",ckgHB, false);add(ckbHB[0]);add(ckbHB[1]);add(ckbHB[2]);ckbHB[0].addItemListener(this);ckbHB[1].addItemListener(this);add(lblWin);lblWin.setBounds(330,180,80,30);lblWin.setBackground(Color.red);lblWin.setText("胜利者!");//没有显示?ckbHB[2].setBounds(440, 20,60, 30);add(exist);exist.setBounds(330,130,80,30);exist.addActionListener(this);// add(chat);chat.setBounds(20, 500, 300, 300);chat.frame();chat.setVisible(true);Game_start_csh();setSize(500,600);setVisible(true);}public void itemStateChanged(ItemEvent e) {if (ckbHB[0].getState()) //选择黑子还是白子{color_Qizi=0;}else{color_Qizi=1;}}public void mousePressed(MouseEvent e){}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);}public void actionPerformed(ActionEvent e) {Graphics g=getGraphics();if (e.getSource()==b1) {Game_start();}else {Game_re();}if(e.getSource()==exist){Game_re();lblWin.setText(Get_qizi_color(color_Qizi)+"输了!");intGame_Start=0;}}public void mouseEntered(MouseEvent e){}public void mouseExited(MouseEvent e){}public void mouseReleased(MouseEvent e){}public void mouseDragged(MouseEvent e){}public void mouseMoved(MouseEvent e){}public void paint(Graphics g) {draw_qipan(g);}3.2判断输赢功能实现if (Game_win_1(x/20,y/20)){ //判断输赢1lblWin.setText(Get_qizi_color(color_Qizi)+"赢了!");intGame_Start=0;}if (Game_win_2(x/20,y/20)){//判断输赢2lblWin.setText(Get_qizi_color(color_Qizi)+"赢了!");intGame_Start=0;}if (Game_win_3(x/20,y/20)) //判断输赢3{lblWin.setText(Get_qizi_color(color_Qizi)+"赢了!");intGame_Start=0;}if (Game_win_4(x/20,y/20)) //判断输赢4{lblWin.setText(Get_qizi_color(color_Qizi)+"赢了!");intGame_Start=0;}//判断输赢程序实现在详细过程public boolean Game_win_1(int x,int y){ //横向判断输赢int x1,y1,t=1;x1=x;y1=y;for (int i=1;i<5 ;i++ ) {if (x1>15) {break;}if (intGame_Body[x1+i][y1]==intGame_Body[x][y]) {t+=1;}else{break;}}for (int i=1;i<5 ;i++ ){if (x1<1)break;}if(intGame_Body[x1-i][y1]==intGame_Body[x][y])t+=1;}else{break;}}if (t>4){return true;}else{return false;}}public boolean Game_win_2(int x,int y) { //纵向判断输赢int x1,y1,t=1;x1=x;y1=y;for (int i=1;i<5 ;i++ ){if (x1>15){break;}if (intGame_Body[x1][y1+i]==intGame_Body[x][y]){ t+=1;}else{break;}}for (int i=1;i<5 ;i++ ){if (x1<1){break;}if(intGame_Body[x1][y1-i]==intGame_Body[x][y]){ t+=1;}else{break;}}if (t>4){return true;}else{return false;}}public boolean Game_win_3(int x,int y) //左斜判断输赢{ int x1,y1,t=1;x1=x;y1=y;for (int i=1;i<5 ;i++ ){if (x1>15){break;}if (intGame_Body[x1+i][y1-i]==intGame_Body[x][y]){ t+=1;}else{break;}}for (int i=1;i<5 ;i++ ){if (x1<1){break;}if(intGame_Body[x1-i][y1+i]==intGame_Body[x][y]){ t+=1;}else{break;}}if (t>4){return true;}else{return false;}}public boolean Game_win_4(int x,int y) { //左斜判断输赢int x1,y1,t=1;x1=x;y1=y;for (int i=1;i<5 ;i++ ) {if (x1>15) {break;}if (intGame_Body[x1+i][y1+i]==intGame_Body[x][y]) {t+=1;}else{break;}}for (int i=1;i<5 ;i++ ) {if (x1<1) {break;}if(intGame_Body[x1-i][y1-i]==intGame_Body[x][y]) {t+=1;}else{break; } }if (t>4) {return true;}else{return false;}}3.3实现聊天功能类package NetchatClient;import java.awt.*;import java.awt.event.*;import .*;import java.io.*;import javax.swing.*;public class NetchatClient extends Frame {Frame x=new Frame("liaotianchengxu");TextField tf=new TextField();TextArea ta=new TextArea();Socket s=null;DataOutputStream dos=null;public static void main(String[] args) {new NetchatClient().frame();}public void frame(){System.out.println("frame()");setLocation(20, 400);setSize(300,300);add(tf,BorderLayout.SOUTH);add(ta,BorderLayout.NORTH);pack();setVisible(true);connect();this.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent arg0) { cconnect();System.exit(0);}});addWindowListener(new WindowAdapter()//窗口适配器{public void windowClosing(WindowEvent e){System.exit(0);//程序退出} } );tf.addActionListener(new nclistener());}public void connect() {System.out.println("connnect()..");try {s=new Socket("127.0.0.1",8888);//设置客户端的IP和端口dos=new DataOutputStream(s.getOutputStream());} catch (UnknownHostException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}public void cconnect(){try {dos.close();s.close();} catch (IOException e) {e.printStackTrace();} }public class nclistener implements ActionListener{public void actionPerformed(ActionEvent e) {String st=tf.getText();ta.setText(st);tf.setText("");try {dos.writeUTF(st);dos.flush();} catch (IOException e1) {e1.printStackTrace();} } } }四测试结果4.1 进入游戏的界面分析:游戏开始的界面有三个选择项,用户可以选择相应的角色,选择完毕后点击开始进入游戏。

相关文档
最新文档