已阅读5页,还剩26页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
工作原理图2.2功能的规划1.建立一个棋盘类,绘制棋盘的样式,在棋盘面板上添加各种按钮及相应胡触发事件。同时注意面板的设计,使面板设计的尽量胡的合理美观。a.棋盘的绘制public void draw_qipan(Graphics G) /画棋盘 15*15G.setColor(Color.lightGray);G.fill3DRect(10,10,300,300,true);G.setColor(Color.black);for(int i=1;i16;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 Checkbox3;Button exist = new Button(退出); public void init()ckbHB0=new Checkbox(执白,ckgHB,false);ckbHB1=new Checkbox(执黑,ckgHB,false);ckbHB2=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()300 | e.getY()300) return;if (x1%2010) x1+=10;if(y1%2010) 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();elseGame_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_Bodyx/20y/20!=0) return;Graphics g=getGraphics();if (color_Qizi=1)/判断黑子还是白子g.setColor(Color.black);color_Qizi=0;elseg.setColor(Color.white);color_Qizi=1;g.fillOval(x-10,y-10,20,20);intGame_Bodyx/20y/20=color_Qizi+1;3.判断胜负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) /判断输赢3lblWin.setText(Get_qizi_color(color_Qizi)+赢了!);intGame_Start=0;if (Game_win_4(x/20,y/20) /判断输赢4lblWin.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,ItemListenerint color_Qizi=0;/旗子的颜色标识 0:白子 1:黑子int intGame_Start=0;/游戏开始标志 0未开始 1游戏中int intGame_Body=new int1616; /设置棋盘棋子状态int m=-1;Button b1=new Button(开始);Button b2=new Button(重置游戏);Label lblWin=new Label( );Checkbox ckbHB=new Checkbox3;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);ckbHB0=new Checkbox(执白,ckgHB,false);ckbHB0.setBounds(320,20,60,30);ckbHB1=new Checkbox(执黑,ckgHB,false);ckbHB1.setBounds(380,20,60,30);ckbHB2=new Checkbox(观看,ckgHB, false);add(ckbHB0);add(ckbHB1);add(ckbHB2);ckbHB0.addItemListener(this);ckbHB1.addItemListener(this);add(lblWin);lblWin.setBounds(330,180,80,30);lblWin.setBackground(Color.red);lblWin.setText(胜利者!);/没有显示?ckbHB2.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 (ckbHB0.getState() /选择黑子还是白子color_Qizi=0;elsecolor_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()300 | e.getY()300) return;if (x1%2010) x1+=10;if(y1%2010) 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();elseGame_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) /判断输赢3lblWin.setText(Get_qizi_color(color_Qizi)+赢了!);intGame_Start=0;if (Game_win_4(x/20,y/20) /判断输赢4lblWin.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;i15) break;if (intGame_Bodyx1+iy1=intGame_Bodyxy) t+=1;elsebreak;for (int i=1;i5 ;i+ )if (x14)return true;elsereturn false;public boolean Game_win_2(int x,int y) /纵向判断输赢int x1,y1,t=1;x1=x;y1=y;for (int i=1;i15)break;if (intGame_Bodyx1y1+i=intGame_Bodyxy)t+=1;elsebreak;for (int i=1;i5 ;i+ )if (x14)return true;elsereturn false;public boolean Game_win_3(int x,int y) /左斜判断输赢int x1,y1,t=1;x1=x;y1=y;for (int i=1;i15)break;if (intGame_Bodyx1+iy1-i=intGame_Bodyxy)t+=1;elsebreak;for (int i=1;i5 ;i+ )if (x14)return true;elsereturn false;public boolean Game_win_4(int x,int y) /左斜判断输赢 int x1,y1,t=1;x1=x;y1=y;for (int i=1;i15)break;if (intGame_Bodyx1+iy1+i=intGame_Bodyxy)t+=1;elsebreak;for (int i=1;i5 ;i+ ) if (x14) return true;elsereturn 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(,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 进入游戏的界面分析:游戏开始的界面有三个选择项,用户可以选择相应的角色,选择完毕后点击开始进入游戏。用户也可以在下面的聊天框中进行聊天。4.2选择角色,点击开始,开始下棋分析:首先达到五个棋子连在一块的赢了,并在红色区域显示谁赢了!4.3下完后点击重新开始分析:下完一盘后游戏停止,点击重新开始,界面回到初始界面,选择角色继续游戏.4.4游戏过程中退出,自动判输 分析:在下棋的过程当中谁中途退出,即点击退出,系统自动判断谁输4.5改进想法这个系统基本上实现了要求但是在有些方面还不够完善。1.观看角色点击后不会出发什么事件,虽然观看者并不需要做什么但是点击之后并没有发生任何反应总感觉缺点什么。想加个什么功能,但是又不知道加什么才不至于画蛇添足。2.问题比较大的可能是聊天功能了,本来聊天面板应该和棋盘面板在同一个面板上面,但是聊天功能的程序是写在了另一个类里,并且那个类是继承了Frame类的,是一个Application程序,而棋盘是一个Applet程序,所以当我添加这个类到Applet面板上并不能显示 ,所以我就打包那个NetchatClient 类,在棋盘类中加载这个类,并调用该类的方法才实现了聊天功能。3.聊天功能本身也还不够完善,因为每次发送聊天的内容后都会覆盖掉原来的内容,这使得用户不能很直观的看到聊天的内容。但是在修改的过程中出现了许多的问题,所以也就将就者先用了。五 设计体会与小结 这个课设题对我来说有一定的挑战性,因为我自己也不知道自己到底学到了一个什么样的境界。但可以肯定,这个课设题的要求绝对在我的能力范围以上。之所以选择这个题目是想逼着自己去查更多的资料,学到更多的东西。结果也确实是这样的,我在这次课设中学到了不少东西,也理解了许多原来不理解的东西。尽管这个系统做的并不是那么的完善。对于Java中的引用,初始化类等,开始我并不是非常的理解,知道就这么做就能实现相应的功能了,并没有很深刻的去理解它为什么要这么做。但是真正的要用Java去做一个东西不理解它是不行的,而且其间这课设涉及到了Java 中的绝大多数的知识点,如Java图形用户界面设计、Java的异常处理机制、Java中的多线程程序设计、Java输入输出流,要应用这些东西更要求我去好好理解Java的这些规则。好在有一定的C+基础Java 与C+语法类似,并把C+中一些较低级和较难以理解的功能都去掉了,如多继承、指针等,同时Java增强了部分功能。所以理解起来也比较容易。但是理解了Java的规则要把这个课设做好也不是那么容易,最难的部分是如何实现各个功能的划分和类的通讯问题。我在这方面就遇到了不少的问题。总结这次课设,我还是收获不少。虽然界面也不是很美观,有点功能间的连接做的也不是特别的好,但是我能认识到自己的不足,并且在跟同学的交流中也学到了一些他们的设计思路,也知道今后要加强哪些方面的知识。六 参考文献1. 吴其庆编著.Java程序设计实例教程.北京:冶金工业出版社2. 柳西玲.许斌编著.Java语言应用开发基础.北京:清华大学出版社 3. (美)CayS.Horsttmann Gary Cornell JAVA核心技术卷i:基础知识(原书第七版): 机械工业出版社4丁振凡 Java 语言实用教程 :北京邮电大学出版社5.附录 (源代码)1.WcyChess.java/* 实现一个简单的多用户五子棋的游戏程序,包括如下两个界面(1)选择对弈桌及角色(执黑、执白、观看)。(2)在游戏界面,有开始,退出(游戏未结束、点退出自动判负);发言及显示区;用户列表区;棋盘绘制区。 */import .*;import java.io.*;import java.applet.*;import java.awt.*;import java.awt.event.*;import java.applet.Applet;import java.awt.Color;import NetchatClient.*;public class WcyChess extends Applet implements ActionListener,MouseListener,MouseMotionListener,ItemListenerint color_Qizi=0;/旗子的颜色标识 0:白子 1:黑子int intGame_Start=0;/游戏开始标志 0未开始 1游戏中int intGame_Body=new int1616; /设置棋盘棋子状态int m=-1;Button b1=new Button(开始);Button b2=new Button(重置游戏);Label lblWin=new Label( );Checkbox ckbHB=new Checkbox3;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);ckbHB0=new Checkbox(执白,ckgHB,false);ckbHB0.setBounds(320,20,60,30);ckbHB1=new Checkbox(执黑,ckgHB,false);ckbHB1.setBounds(380,20,60,30);ckbHB2=new Checkbox(观看,ckgHB, false);add(ckbHB0);add(ckbHB1);add(ckbHB2);ckbHB0.addItemListener(this);ckbHB1.addItemListener(this);add(lblWin);lblWin.setBounds(330,180,80,30);lblWin.setBackground(Color.red);lblWin.setText(胜利者!);/没有显示?ckbHB2.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 (ckbHB0.getState() /选择黑子还是白子color_Qizi=0;elsecolor_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()300 | e.getY()300)return;if (x1%2010)x1+=10;if(y1%2010)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();elseGame_re();if(e.getSource()=exist)Game_re();/color_Qizi=m;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);public void set_Qizi(int x,int y) /落子if (intGame_Start=0) /判断游戏未开始return;if (intGame_Bodyx/20y/20!=0)return;Graphics g=getGraphics();if (color_Qizi=1)/判断黑子还是白子g.setColor(Color.black);color_Qizi=0;elseg.setColor(Color.white);color_Qizi=1;g.fillOval(x-10,y-10,20,20);intGame_Bodyx/20y/20=color_Qizi+1;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) /判断输赢3lblWin.setText(Get_qizi_color(color_Qizi)+赢了!);intGame_Start=0;if (Game_win_4(x/20,y/20) /判断输赢4lblWin.setText(Get_qizi_color(color_Qizi)+赢了!);intGame_Start=0;public String Get_qizi_color(int x)if (x=0)return 黑子;elsereturn 白子;public void draw_qipan(Graphics G) /画棋盘 15*15G.setColor(Color.lightGray);G.fill3DRect(10,10,300,300,true);G.setColor(Color.black);for(int i=1;i16;i+)G.drawLine(20,20*i,300,20*i);G.drawLine(20*i,20,20*i,300);public void Game_start() /游戏开始intGame_Start=1;Game_btn_enable(false);b2.setEnabled(true);public void Game_start_csh() /游戏开始初始化intGame_Start=0;Game_btn_enable(true);b2.setEnabled(false);ckbHB0.setState(true);for (int i=0;i16 ;i+ )for (int j=0;j16 ;j+ )intGame_Bodyij=0;lblWin.setText();public void Game_re() /重新开始游戏repaint();Game_start_csh();public void Game_btn_enable(boolean e) /设置组件状态b1.setEnabled(e);b2.setEnabled(e);ckbHB0.setEnabled(e);ckbHB1.setEnabled(e);public boolean Game_win_1(int x,int y) /横向判断输赢int x1,y1,t=1;x1=x;y1=y;for (int i=1;i15)break;if (intGame_Bodyx1+iy1=intGame_Bodyxy)t+=1;elsebreak;for (int i=1;i5 ;i+ )if (x14)return true;elsereturn false;public boolean Game_win_2(int x,int y) /纵向判断输赢int x1,y1,t=1;x1=x;y1=y;for (int i=1;i15)break;if (intGame_Bodyx1y1+i=intGame_Bodyxy)t+=1;elsebreak;for (int i=1;i5 ;i+ )if (x14)return true;elsereturn false;public boolean Game_win_3(int x,int y) /左斜判断输赢 int x1,y1,t=1;x1=x;y1=y;for (int i=1;i15)break;if (intGame_Bodyx1+iy1-i=intGame_Bodyxy)t+=1;elsebreak;for (int i=1;i5 ;i+ )if (x14)return true;elsereturn false;public boolean Game_win_4(int x,int y) /左斜判断输赢 int x1,y1,t=1;x1=x;y1=y;for (int i=1;i15)break;if (intGame_Bodyx1+iy1+i=intGame_Bodyxy)t+=1;elsebreak;for (int i=1;i5 ;i+ )if (x14)return true;elsereturn false;2. NetchatC
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 轧饲料机市场需求与消费特点分析
- 2024年度影视制作团队聘用合同
- 电器接线盒市场需求与消费特点分析
- 动物驱逐剂市场发展现状调查及供需格局分析预测报告
- 2024年度定点物业管理服务合同:大安农场学校
- 2024年度淋浴房项目风险管理合同
- 2024年度000吨冷冻食品物流运输合同
- 2024年度工厂搬迁搬运服务合同
- 2024年度物联网应用开发与设备采购合同
- 2024届备战高考数学易错题《函数及其应用、指对幂函数》含答案解析
- 农村民兵连指导员述职报告范本
- 2024年下半年教师资格考试初中体育与健康学科知识与教学能力测试试卷与参考答案
- 体育场馆建筑行业未来发展趋势预测
- 人教版数学五年级上册-《分段计费问题》说课稿
- 大国兵器智慧树知到期末考试答案章节答案2024年中北大学
- 大学生国家安全教育智慧树知到期末考试答案章节答案2024年
- 【新课标】Unit 3 My weekend plan 单元整体教学设计(5个课时 表格式)
- 妇科副高专题报告范文
- JGJ64-2017饮食建筑设计标准(首发)
- 历年全国高中数学联赛试题及答案
- 矿山安全培训操作规程
评论
0/150
提交评论