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课程设计报告(小游戏)1

JAVA课程设计报告(小游戏)第一章总体设计1.1本系统的主要功能记忆测试游戏1.2系统包含的类及类之间的关系本系统共包括7个java源文件。
如图1-1所示。
图1-1 类之间的关系2.2 java源文件及其功能1.MemoryGame.java该文件负责创建记忆测试系统的主窗口,该类含有main方法,记忆测试系统从该类开始运行;2.MemoryTestArea.java该文件所包含的MemoryTestArea类是主类MemoryGame窗口的一个JPanel容器,所创建的对象成为测试区,这个测试区被添加到MemoryGame窗口的中心;3.Block.java该文件所包含的Block类是JButton的子类,负责为MemoryTestArea 类中的ArrayList数组表提供Block对象;4.Record.java该文件所包含的Record类是javax.swing包中JDialog对话框的子类,当用户成功单击出相应级别所要求的图标相同的方块后,Record创建的对象负责保存用户的名字和成绩到相应的级别文件中;5.ShowRecordDialog.java该文件所包含的ShowRecordDialog类是javax.swing包中JDialog 对话框的子类,当用户单击查看排行榜时,ShowRecordDialog创建的对象负责显示用户的成绩;6.People.java该文件所包含的People对象封装用户的名字和成绩,以便ShowRecordDialog 对象可以按成绩的高低排列用户。
第二章详细设计2.1主类MemoryGame.java(1)成员变量见表2-1表2-1 主要成员变量(属性)成员变量描述变量类型名称菜单条JMenuBar bar 字符串数组Sring imagename 测试区对象MemoryArea memoryarea 菜单JMenu menuGrade(2)方法见表2-2表2-2 主要方法成员变量描述功能备注MemoryGame() 完成窗口初始化构造函数actionPerformed(实现接口中的方法ActionEvent)Main(String[]) 软件运行的入口(3)源代码见文件×××.java2.2类×××××(1)成员变量见表2-3表2-3 主要成员变量成员变量描述变量类型名称测试区的行列数int Row,col用户的用时int usedtime 提供存储成绩的界面Record record(2)方法见表2-4表2-4 主要方法方法名功能备注MemoryTestArea() 创建memoryGame对象构造函数run() 显示图标1200毫秒2.3类Block(1)成员变量见表2-3表2-3 主要成员变量成员变量描述变量类型名称openStateIcon是方块上的图标ImageIcon openStateIcon (2)方法见表2-4表2-4 主要方法方法名功能备注setOpenStateIcon( ImageIcon)Block 对象调用setOpenStateIcon(ImageIcon)方法可也设置它上面的图标getOpenStateIcon()Block 对象调用getOpenStateIcon()方法可以获得它上面的图标2.4类ShowRecordDialog(1)成员变量见表2-3表2-3 主要成员变量成员变量描述变量类型名称gradeFile是对话框要读取的文件,该文件存储读取的成绩File gradeFile Clear是注册ActionEvent JButton clear事件的按钮showArea文本区显示对话从gradeFile文本中读出的成绩JTextArea showArea(2)方法见表2-4表2-4 主要方法方法名功能备注ShowRecorDialog()ShowRecorDialog()是构造方法,负责创建shoeDialog对象setGradeFile(File)ShowRecorDialog类创建的ShowRecorDialog对话框是主类MemoryGame窗口中的一个成员2.5 People类(1)成员变量见表2-3表2-3 主要成员变量成员变量描述变量类型名称用户的名字String name用户的用时int time(2)方法见表2-4表2-4 主要方法方法名功能备注getTime()返回timegetName()返回namecompareTo(Object)确定People对象的大小关系2.6 Record类(1)成员变量见表2-3表2-3 主要成员变量成员变量描述变量类型名称用户的用时int time 用来输入名字的文本框JTextField yourName保存成绩的按钮对象JButton enter 放弃保存成绩的按钮对象JButton cancel 级别文件File gradeFile(2)方法见表2-4表2-4 主要方法方法名功能备注Record()负责创建record对象的构造方法setGradeFile (File)Record类创建的Record对话框是测试区MemoryTextArea 中的一个成员。
小游戏Java课程设计报告书-V1

小游戏Java课程设计报告书-V1本篇文章主要介绍小游戏Java课程设计报告书的相关内容。
1. 引言本次小游戏Java课程设计的目的是提高学生对Java语言的掌握能力和实际开发能力。
该小游戏为一款基于Java语言的桌面游戏。
2. 开发环境本次小游戏的开发环境采用Eclipse编译器,并使用Java语言作为主要开发语言。
游戏使用了Swing界面库和各种Java类库来实现不同的功能。
3. 游戏功能分析游戏的主要功能分为三个部分:游戏界面、游戏规则和游戏控制。
3.1 游戏界面游戏的界面主要由几个部分组成:标题栏、游戏画面和控制按钮。
其中,游戏画面包括了地图、玩家、敌人以及游戏元素等。
控制按钮用来控制玩家移动或者其他相关操作。
3.2 游戏规则游戏的规则很简单,玩家需要通过操作控制按钮,使得玩家在地图上移动,同时避免敌人的攻击,并到达游戏终点。
3.3 游戏控制游戏的控制主要包括以下几个方面:1. 玩家移动控制;2. 敌人移动控制;3. 游戏胜负判断;4. 游戏关卡和等级控制。
4. 实现方法和关键技术本次小游戏的实现主要涉及以下几个技术和方法:1. Java GUI编程;2. Java面向对象编程;3. Java事件处理;4. 游戏逻辑设计。
5. 结论通过对小游戏Java课程设计的开发实现,学生对Java编程技术进一步深入学习和掌握,同时提高了学生的合作开发与沟通协作能力。
本次小游戏的开发实践活动是一次有效的教学方法,为以后的Java学习和实践工作奠定了坚实的基础。
打豆豆游戏java课程设计

打豆豆游戏 java课程设计一、课程目标知识目标:1. 让学生掌握Java基础语法,包括变量、数据类型、运算符、控制结构等。
2. 帮助学生理解面向对象编程思想,熟练运用类和对象。
3. 使学生掌握Java图形用户界面(GUI)编程,能使用Swing组件开发打豆豆游戏界面。
技能目标:1. 培养学生运用Java编程解决问题的能力,能独立设计、编写和调试打豆豆游戏代码。
2. 提高学生分析问题的能力,使他们能够根据游戏需求进行模块划分和功能实现。
3. 培养学生的团队协作能力,通过小组合作完成游戏开发。
情感态度价值观目标:1. 培养学生对编程的兴趣,激发他们主动探索新技术的热情。
2. 培养学生克服困难的勇气和信心,使他们勇于面对和解决问题。
3. 培养学生的创新精神,鼓励他们发挥想象力和创造力,设计和实现个性化的打豆豆游戏。
课程性质:本课程为实践性较强的Java课程设计,旨在让学生通过动手实践,掌握Java编程的基本知识和技能。
学生特点:学生已具备一定的Java基础,具有较强的学习能力和动手能力,但对实际项目的开发经验不足。
教学要求:注重理论与实践相结合,充分调动学生的积极性,引导他们主动探究和解决问题。
将课程目标分解为具体的学习成果,以便在教学设计和评估中予以体现。
二、教学内容1. Java基础语法复习:变量、数据类型、运算符、控制结构(条件语句、循环语句)。
2. 面向对象编程:类与对象、封装、继承、多态。
3. Java图形用户界面(GUI)编程:- Swing组件:JFrame、JButton、JPanel等。
- 事件处理:动作事件、鼠标事件、键盘事件。
4. 游戏设计:- 游戏需求分析:功能模块划分、界面设计。
- 游戏逻辑实现:豆豆移动、得分计算、游戏结束判定。
- 游戏界面绘制:使用Swing组件搭建游戏界面。
5. 项目实践:- 分组讨论:小组成员共同分析游戏需求,进行任务分配。
- 代码编写:根据分工,完成各自模块的代码编写。
java课程设计报告2048

java课程设计报告2048一、教学目标本课程旨在通过2048游戏的项目实践,让学生掌握Java编程的基本概念和方法。
知识目标包括理解Java的基本语法、数据结构、控制流程和类与对象的概念。
技能目标则是培养学生运用Java编程解决实际问题的能力,以及良好的编程习惯和团队协作能力。
情感态度价值观目标则是激发学生对计算机科学的兴趣,培养他们勇于探索和创新的科学精神。
二、教学内容教学内容以《Java编程思想》教材为基础,涵盖Java基本语法、数据类型、控制结构、面向对象编程、异常处理等核心知识点。
课程将从简单的Java程序设计开始,逐步深入到复杂的数据结构和算法,最后通过实现2048游戏,让学生运用所学知识解决实际问题。
三、教学方法本课程采用讲授法、案例分析法和实验法相结合的教学方法。
讲授法用于讲解Java的基本语法和概念,案例分析法用于分析实际编程问题,实验法用于让学生动手实践,巩固所学知识。
通过多样化的教学方法,激发学生的学习兴趣,提高他们的主动性和创新能力。
四、教学资源教学资源包括《Java编程思想》教材、相关参考书籍、网络资源以及实验设备。
教材为学生提供系统的学习材料,参考书籍用于拓展知识视野,网络资源提供丰富的学习资料和实践案例。
实验设备则为学生提供动手实践的机会,让他们在实践中加深对Java编程的理解。
五、教学评估本课程的评估方式包括平时表现、作业、考试和项目实践四个方面。
平时表现主要评估学生的课堂参与度和团队协作能力,作业则评估学生对知识点的理解和应用能力,考试则评估学生的知识掌握程度,项目实践则评估学生的实际编程能力和解决问题的能力。
评估方式将尽量客观、公正,全面反映学生的学习成果。
六、教学安排本课程的教学安排将紧凑合理,确保在有限的时间内完成教学任务。
课程将按照教材的章节顺序进行,每个章节都将有足够的时间进行讲解和实践。
同时,教学安排还会考虑学生的实际情况和需要,如学生的作息时间、兴趣爱好等,尽量使教学安排符合学生的需求。
java课程设计报告(完整版)

目录1、摘要2、概要设计3、详细设计4、测试分析5、总结6、参考文献【前言】Java不依赖平台的特点使得它受到广泛的关注,Java已成为网络时代最重要的语言之一。
Java语言不仅是一门正在被广泛使用的编程语言,而且已成为软件设计开发者应当掌握的一门基础语言。
目前,很多新的技术领域都涉及Java语言,国内外许多大学已将Java语言列入了本科教学计划,掌握Java已经成为共识。
本次课程设计就是利用java语言来编写简单的计算器,能进行加、减、乘、除四则运算,下面给出了该设计的理论分析和具体步骤。
一、摘要本计算器可以进行简单的四则运算(加、减、乘、除),但仅限于十进制下。
“Backspace”按钮表示退格,“CE”按钮表示清除当前文本框内的数据,“C”按钮表示清除文本框内数据,同时var、answer清零。
该程序可在JCreator环境下直接运行。
二、概要设计1、自定义说明(1)类名:Calculator作用:主类继承的父类:JFrame类实现的接口:ActionListener类public class Calculator extends JFrame implements ActionListener{private static String[] btnTexts = {"0","1","2","3","4","5","6","7","8","9","+","-","*","/",".","+/-"}; //定义数组bstTexts来存放计算器上的各个按钮Button button[] = new Button[16];Button BkButton,CeButton,CButton,EqButton;boolean clickable; //控制当前能否按键double vard, answerd; //用来保存double型数据的中间值(vard)和最后结果(answerd)short key = -1, prekey = -1; //key用来保存当前进行何种运算,prekey用来保存前次进行何种运算DecimalFormat df; //设置数据输出精度private JTextField displayField = new JTextField(" "); //计算结果显示区public Calculator(){………}public void actionPerformed(ActionEvent event){………}}(2)方法名:Calculator作用:设置窗体布局public Calculator(){//Frame frame = new Frame("Calculator");super("Calculator"); //显示主窗口标题“Calculator”df = new DecimalFormat("0.00000000"); //设置数据输出精度(对于double型值)BkButton = new Button("Backspace");BkButton.setForeground(Color.red);CeButton = new Button("CE");tForeground(Color.red);CButton = new Button("C");CButton.setForeground(Color.red);EqButton = new Button("=");EqButton.setForeground(Color.red); //将“Backspace”、“CE”、”C”、“=”显示为红色BkButton.addActionListener(this);nListener(this);CButton.addActionListener(this);EqButton.addActionListener(this);displayField.setHorizontalAlignment(JTextField.RIGHT); //将计算结果显示在displayField的右面JPanel p1 = new JPanel(new FlowLayout()); //以FlowLayout布局p1 p1.add(BkButton);p1.add(CeButton);p1.add(CButton);p1.add(EqButton); //设置四个按钮:"Backspace","CE","C","="JPanel p2 = new JPanel(new GridLayout(2,1)); //以GridLayout布局p2 p2.add(displayField);p2.add(p1); //加入显示结果的JTextField和p1JPanel p3 = new JPanel(new GridLayout(4,4)); //以GridLayout布局p3 for(int i = 0;i < btnTexts.length;i++){button[i] = new Button(btnTexts[i]); //将数组btnTexts[]的值赋给数组button[] button[i].setForeground(Color.blue); //组件button的前景色显示蓝色p3.add(button[i]);button[i].addActionListener(this);}Container cp = this.getContentPane(); //采用默认的BorderLayout布局cpcp.add(p2,BorderLayout.NORTH);R);}(3)方法名:actionPerformed作用:设置各个按钮的行为public void actionPerformed(ActionEvent event){boolean sign = false; //判断是否是double型数参与运算,是为true,不是为falseObject temp = event.getSource();try{for (int i = 0; i <= 9; i++) //如果按下数据按钮,将按下的按钮代表的数据插入的当前文本框字符串之后displayField.setText(displayField.getText() + Integer.toString(i));//按下'.'按钮时,判断当前文本框内字符串中含不含'.',如果已含,则不允许再插入'.'if (temp == button[14] && clickable == true){……….}if ( (temp == button[10] || temp == button[11] || temp == button[12] || temp == button[13]) && clickable == true){//'+'操作if (temp == button[10]){…………}//'-'操作if (temp == button[11]){…………}//'*'操作if (temp == button[12]){…………}//'/'操作if (temp == button[13]){…………}//'='操作if (temp == EqButton && clickable == true){…………}//按下'+/-'按钮时处理{…………}//按下'Backspace'键,利用循环将当前字符串中的最后一个字母删除if (temp == BkButton && clickable == true){…………}//按下'CE'按钮,将当前文本框内数据清除if (temp == CeButton){………}//按下'C'按钮,文本框内数据清除,同时var,answer清0if (temp == CButton){………}}//输入中如果有操作非法,比如按下两次'+',捕获异常catch (Exception e){displayField.setText("操作非法");clickable = false;}2、界面设计下图为该程序运行时的界面截图:三、详细设计以下为该程序的主要代码:import javax.swing.*;import java.awt.*;import javax.swing.event.*;import java.awt.event.*;imalFormat;public class Calculator extends JFrame implements ActionListener{private static String[] btnTexts ={"0","1","2","3","4","5","6","7","8","9","+","-","*","/",".","+/-"};Button button[] = new Button[16];Button BkButton,CeButton,CButton,EqButton;boolean clickable; //控制当前能否按键double vard, answerd; //用来保存double型数据的中间值(vard)和最后结果(answerd)short key = -1, prekey = -1; //key用来保存当前进行何种运算,prekey用来保存前次进行何种运算DecimalFormat df; //设置数据输出精度private JTextField displayField = new JTextField(" ");//计算结果显示区public Calculator(){super("Calculator"); //显示主窗口标题“Calculator”df = new DecimalFormat("0.00000000"); //设置数据输出精度(对于double型值)BkButton = new Button("Backspace");BkButton.setForeground(Color.red);CeButton = new Button("CE");CeButton.setForeground(Color.red);CButton = new Button("C");CButton.setForeground(Color.red);EqButton = new Button("=");EqButton.setForeground(Color.red); //将“Backspace”、“CE”、”C”、“=”显示为红色BkButton.addActionListener(this);CeButton.addActionListener(this);CButton.addActionListener(this);EqButton.addActionListener(this);displayField.setHorizontalAlignment(JTextField.RIGHT); //将计算结果显示在displayField的右面JPanel p1 = new JPanel(new FlowLayout()); //以FlowLayout布局p1 p1.add(BkButton);p1.add(CeButton);p1.add(CButton);p1.add(EqButton); //设置三个按钮:"Backspace","CE","C","="JPanel p2 = new JPanel(new GridLayout(2,1)); //以GridLayout布局p2 p2.add(displayField);p2.add(p1); //加入显示结果的JTextField和p1JPanel p3 = new JPanel(new GridLayout(4,4)); //以GridLayout布局p3 for(int i = 0;i < btnTexts.length;i++){button[i] = new Button(btnTexts[i]); //将数组btnTexts[]的值赋给数组button[] button[i].setForeground(Color.blue); //组件button的前景色示蓝色p3.add(button[i]);button[i].addActionListener(this);}Container cp = this.getContentPane(); //采用默认的BorderLayout布局cpcp.add(p2,BorderLayout.NORTH);cp.add(p3,BorderLayout.CENTER);}//设置各个按钮行为public void actionPerformed(ActionEvent event){boolean sign = false; //判断是否是double型数参与运算,是为true,不是为falseObject temp = event.getSource();try{for (int i = 0; i <= 9; i++) //如果按下数据按钮,将按下的按钮代表的数据插入的当前文本框字符串之后if (temp == button[i] && clickable == true)displayField.setText(displayField.getText() + Integer.toString(i));//按下'.'按钮时,判断当前文本框内字符串中含不含'.',如果已含,则不允许再插入'.'if (temp == button[14] && clickable == true){boolean isDot = false;if (displayField.getText().length() == 0)isDot = true;for (int i = 0; i < displayField.getText().length(); i++)if ('.' == displayField.getText().charAt(i)){isDot = true;break;}if (isDot == false)displayField.setText(displayField.getText() + ".");}if ( (temp == button[10] || temp == button[11] || temp == button[12] || temp == button[13]) && clickable == true){//'+'操作if (temp == button[10]){switch (prekey){case 0:answerd += Double.parseDouble(displayField.getText());break;case 1:answerd -= Double.parseDouble(displayField.getText());break;case 2:answerd *= Double.parseDouble(displayField.getText());break;case 3:if (Double.parseDouble(displayField.getText()) == 0){displayField.setText("除数不能为零");clickable = false;}elseanswerd /= Double.parseDouble(displayField.getText());break;default:le(displayField.getText());}displayField.setText("");prekey = key = 0;}//'-'操作if (temp == button[11]){switch (prekey){case 0:answerd += Double.parseDouble(displayField.getText());break;case 1:answerd -= Double.parseDouble(displayField.getText());break;case 2:answerd *= Double.parseDouble(displayField.getText());break;case 3:if (Double.parseDouble(displayField.getText()) == 0){displayField.setText("除数不能为零");clickable = false;}elseanswerd /= Double.parseDouble(displayField.getText());break;default:answerd = Double.parseDouble(displayField.getText());}displayField.setText("");prekey = key = 1;}//'*'操作if (temp == button[12]){switch (prekey){case 0:answerd += Double.parseDouble(displayField.getText());break;case 1:answerd -= Double.parseDouble(displayField.getText());break;case 2:answerd *= Double.parseDouble(displayField.getText());break;case 3:if (Double.parseDouble(displayField.getText()) == 0){displayField.setText("除数不能为零");clickable = false;}elseanswerd /= Double.parseDouble(displayField.getText());break;default:answerd = Double.parseDouble(displayField.getText());}displayField.setText("");prekey = key = 2;}//'/'操作if (temp == button[13]){switch (prekey){case 0:answerd += Double.parseDouble(displayField.getText());break;case 1:answerd -= Double.parseDouble(displayField.getText());break;case 2:answerd *= Double.parseDouble(displayField.getText());break;case 3:if (Double.parseDouble(displayField.getText()) == 0){displayField.setText("除数不能为零");clickable = false;}elseanswerd /= Double.parseDouble(displayField.getText());break;default:answerd = Double.parseDouble(displayField.getText());}displayField.setText("");prekey = key = 3;}}//'='操作if (temp == EqButton && clickable == true){//如果连续按'=',则进行连续运算if (prekey == 5){if (key == 0){answerd += vard;displayField.setText(df.format(answerd));}if (key == 1){answerd -= vard;displayField.setText(df.format(answerd));}if (key == 2){answerd *= vard;displayField.setText(df.format(answerd));}if (key == 3){if (Double.parseDouble(displayField.getText()) == 0){displayField.setText("除数不能为零");clickable = false;}else{answerd /= vard;displayField.setText(df.format(answerd));}}}else{vard = Double.parseDouble(displayField.getText());if (key == 0){prekey = -1;answerd += Double.parseDouble(displayField.getText());displayField.setText(df.format(answerd));}if (key == 1){prekey = -1;answerd -= Double.parseDouble(displayField.getText());displayField.setText(df.format(answerd));}if (key == 2){prekey = -1;answerd *= Double.parseDouble(displayField.getText());displayField.setText(df.format(answerd));}if (key == 3){prekey = -1;if (Double.parseDouble(displayField.getText()) == 0){displayField.setText("除数不能为零");clickable = false;}else{answerd /= Double.parseDouble(displayField.getText());displayField.setText(df.format(answerd));}}prekey = 5;}//按下'+/-'按钮时处理if (temp == button[15] && clickable == true){boolean isNumber = true;String s = displayField.getText();for (int i = 0; i < s.length(); i++)if (! (s.charAt(i) >= '0' && s.charAt(i) <= '9' || s.charAt(i) == '.' || s.charAt(i) == '-')){isNumber = false;break;}if (isNumber == true){//如果当前字符串首字母有'-'号,代表现在是个负数,再按下时,则将首符号去掉if (s.charAt(0) == '-'){displayField.setText("");for (int i = 1; i < s.length(); i++){char a = s.charAt(i);displayField.setText(displayField.getText() + a);}}//如果当前字符串第一个字符不是符号,则添加一个符号在首字母处elsedisplayField.setText('-' + s);}}//按下'Backspace'键,利用循环将当前字符串中的最后一个字母删除if (temp == BkButton && clickable == true)String s = displayField.getText();displayField.setText("");for (int i = 0; i < s.length() - 1; i++){char a = s.charAt(i);displayField.setText(displayField.getText() + a);}}//按下'CE'按钮,将当前文本框内数据清除if (temp == CeButton){displayField.setText("");clickable = true;}//按下'C'按钮,文本框内数据清除,同时var,answer清0if (temp == CButton){vard = answerd = 0;displayField.setText("");clickable = true;}}//输入中如果有操作非法,比如按下两次'+',捕获异常catch (Exception e){displayField.setText("操作非法");clickable = false;}}public static void main(String args[]){Calculator calculator = new Calculator();calculator.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);calculator.setSize(300,200);calculator.setVisible(true);}}四、测试分析(1)程序运行情况该程序正常的响应按钮事件,能进行简单的加、减、乘、除四则运算,在输入之前须先进行清零处理,然后再输入数值进行运算。
java课程设计报告(完整版)

目录1、摘要2、概要设计3、详细设计4、测试分析5、总结6、参考文献【前言】Java不依赖平台的特点使得它受到广泛的关注,Java已成为网络时代最重要的语言之一。
Java语言不仅是一门正在被广泛使用的编程语言,而且已成为软件设计开发者应当掌握的一门基础语言。
目前,很多新的技术领域都涉及Java语言,国内外许多大学已将Java语言列入了本科教学计划,掌握Java已经成为共识。
本次课程设计就是利用java语言来编写简单的计算器,能进行加、减、乘、除四则运算,下面给出了该设计的理论分析和具体步骤。
一、摘要本计算器可以进行简单的四则运算(加、减、乘、除),但仅限于十进制下。
“Backspace”按钮表示退格,“CE”按钮表示清除当前文本框内的数据,“C”按钮表示清除文本框内数据,同时var、answer清零。
该程序可在JCreator环境下直接运行。
二、概要设计1、自定义说明(1)类名:Calculator作用:主类继承的父类:JFrame类实现的接口:ActionListener类public class Calculator extends JFrame implements ActionListener{private static String[] btnTexts = {"0","1","2","3","4","5","6","7","8","9","+","-","*","/",".","+/-"}; //定义数组bstTexts来存放计算器上的各个按钮Button button[] = new Button[16];Button BkButton,CeButton,CButton,EqButton;boolean clickable; //控制当前能否按键double vard, answerd; //用来保存double型数据的中间值(vard)和最后结果(answerd)short key = -1, prekey = -1; //key用来保存当前进行何种运算,prekey用来保存前次进行何种运算DecimalFormat df; //设置数据输出精度private JTextField displayField = new JTextField(" "); //计算结果显示区public Calculator(){………}public void actionPerformed(ActionEvent event){………}}(2)方法名:Calculator作用:设置窗体布局public Calculator(){//Frame frame = new Frame("Calculator");super("Calculator"); //显示主窗口标题“Calculator”df = new DecimalFormat("0.00000000"); //设置数据输出精度(对于double型值)BkButton = new Button("Backspace");BkButton.setForeground(Color.red);CeButton = new Button("CE");CeButton.setForeground(Color.red);CButton = new Button("C");CButton.setForeground(Color.red);EqButton = new Button("=");EqButton.setForeground(Color.red); //将“Backspace”、“CE”、”C”、“=”显示为红色BkButton.addActionListener(this);CeButton.addActionListener(this);CButton.addActionListener(this);EqButton.addActionListener(this);displayField.setHorizontalAlignment(JTextField.RIGHT); //将计算结果显示在displayField的右面JPanel p1 = new JPanel(new FlowLayout()); //以FlowLayout布局p1 p1.add(BkButton);p1.add(CeButton);p1.add(CButton);p1.add(EqButton); //设置四个按钮:"Backspace","CE","C","="JPanel p2 = new JPanel(new GridLayout(2,1)); //以GridLayout布局p2 p2.add(displayField);p2.add(p1); //加入显示结果的JTextField和p1JPanel p3 = new JPanel(new GridLayout(4,4)); //以GridLayout布局p3 for(int i = 0;i < btnTexts.length;i++){button[i] = new Button(btnTexts[i]); //将数组btnTexts[]的值赋给数组button[] button[i].setForeground(Color.blue); //组件button的前景色显示蓝色p3.add(button[i]);button[i].addActionListener(this);}Container cp = this.getContentPane(); //采用默认的BorderLayout布局cpcp.add(p2,BorderLayout.NORTH);cp.add(p3,BorderLayout.CENTER);}(3)方法名:actionPerformed作用:设置各个按钮的行为public void actionPerformed(ActionEvent event){boolean sign = false; //判断是否是double型数参与运算,是为true,不是为falseObject temp = event.getSource();try{for (int i = 0; i <= 9; i++) //如果按下数据按钮,将按下的按钮代表的数据插入的当前文本框字符串之后displayField.setText(displayField.getText() + Integer.toString(i));//按下'.'按钮时,判断当前文本框内字符串中含不含'.',如果已含,则不允许再插入'.'if (temp == button[14] && clickable == true){……….}if ( (temp == button[10] || temp == button[11] || temp == button[12] || temp == button[13]) && clickable == true){//'+'操作if (temp == button[10]){…………}//'-'操作if (temp == button[11]){…………}//'*'操作if (temp == button[12]){…………}//'/'操作if (temp == button[13]){…………}//'='操作if (temp == EqButton && clickable == true){…………}//按下'+/-'按钮时处理{…………}//按下'Backspace'键,利用循环将当前字符串中的最后一个字母删除if (temp == BkButton && clickable == true){…………}//按下'CE'按钮,将当前文本框内数据清除if (temp == CeButton){………}//按下'C'按钮,文本框内数据清除,同时var,answer清0if (temp == CButton){………}}//输入中如果有操作非法,比如按下两次'+',捕获异常catch (Exception e){displayField.setText("操作非法");clickable = false;}2、界面设计下图为该程序运行时的界面截图:三、详细设计以下为该程序的主要代码:import javax.swing.*;import java.awt.*;import javax.swing.event.*;import java.awt.event.*;import java.text.DecimalFormat;public class Calculator extends JFrame implements ActionListener{private static String[] btnTexts ={"0","1","2","3","4","5","6","7","8","9","+","-","*","/",".","+/-"};Button button[] = new Button[16];Button BkButton,CeButton,CButton,EqButton;boolean clickable; //控制当前能否按键double vard, answerd; //用来保存double型数据的中间值(vard)和最后结果(answerd)short key = -1, prekey = -1; //key用来保存当前进行何种运算,prekey用来保存前次进行何种运算DecimalFormat df; //设置数据输出精度private JTextField displayField = new JTextField(" ");//计算结果显示区public Calculator(){super("Calculator"); //显示主窗口标题“Calculator”df = new DecimalFormat("0.00000000"); //设置数据输出精度(对于double型值)BkButton = new Button("Backspace");BkButton.setForeground(Color.red);CeButton = new Button("CE");CeButton.setForeground(Color.red);CButton = new Button("C");CButton.setForeground(Color.red);EqButton = new Button("=");EqButton.setForeground(Color.red); //将“Backspace”、“CE”、”C”、“=”显示为红色BkButton.addActionListener(this);CeButton.addActionListener(this);CButton.addActionListener(this);EqButton.addActionListener(this);displayField.setHorizontalAlignment(JTextField.RIGHT); //将计算结果显示在displayField的右面JPanel p1 = new JPanel(new FlowLayout()); //以FlowLayout布局p1 p1.add(BkButton);p1.add(CeButton);p1.add(CButton);p1.add(EqButton); //设置三个按钮:"Backspace","CE","C","="JPanel p2 = new JPanel(new GridLayout(2,1)); //以GridLayout布局p2 p2.add(displayField);p2.add(p1); //加入显示结果的JTextField和p1JPanel p3 = new JPanel(new GridLayout(4,4)); //以GridLayout布局p3 for(int i = 0;i < btnTexts.length;i++){button[i] = new Button(btnTexts[i]); //将数组btnTexts[]的值赋给数组button[] button[i].setForeground(Color.blue); //组件button的前景色示蓝色p3.add(button[i]);button[i].addActionListener(this);}Container cp = this.getContentPane(); //采用默认的BorderLayout布局cpcp.add(p2,BorderLayout.NORTH);cp.add(p3,BorderLayout.CENTER);}//设置各个按钮行为public void actionPerformed(ActionEvent event){boolean sign = false; //判断是否是double型数参与运算,是为true,不是为falseObject temp = event.getSource();try{for (int i = 0; i <= 9; i++) //如果按下数据按钮,将按下的按钮代表的数据插入的当前文本框字符串之后if (temp == button[i] && clickable == true)displayField.setText(displayField.getText() + Integer.toString(i));//按下'.'按钮时,判断当前文本框内字符串中含不含'.',如果已含,则不允许再插入'.'if (temp == button[14] && clickable == true){boolean isDot = false;if (displayField.getText().length() == 0)isDot = true;for (int i = 0; i < displayField.getText().length(); i++)if ('.' == displayField.getText().charAt(i)){isDot = true;break;}if (isDot == false)displayField.setText(displayField.getText() + ".");}if ( (temp == button[10] || temp == button[11] || temp == button[12] || temp == button[13]) && clickable == true){//'+'操作if (temp == button[10]){switch (prekey){case 0:answerd += Double.parseDouble(displayField.getText());break;case 1:answerd -= Double.parseDouble(displayField.getText());break;case 2:answerd *= Double.parseDouble(displayField.getText());break;case 3:if (Double.parseDouble(displayField.getText()) == 0){displayField.setText("除数不能为零");clickable = false;}elseanswerd /= Double.parseDouble(displayField.getText());break;default:}displayField.setText("");prekey = key = 0;}//'-'操作if (temp == button[11]){switch (prekey){case 0:answerd += Double.parseDouble(displayField.getText());break;case 1:answerd -= Double.parseDouble(displayField.getText());break;case 2:answerd *= Double.parseDouble(displayField.getText());break;case 3:if (Double.parseDouble(displayField.getText()) == 0){displayField.setText("除数不能为零");clickable = false;}elseanswerd /= Double.parseDouble(displayField.getText());break;default:answerd = Double.parseDouble(displayField.getText());}displayField.setText("");prekey = key = 1;}//'*'操作if (temp == button[12]){switch (prekey){case 0:break;case 1:answerd -= Double.parseDouble(displayField.getText());break;case 2:answerd *= Double.parseDouble(displayField.getText());break;case 3:if (Double.parseDouble(displayField.getText()) == 0){displayField.setText("除数不能为零");clickable = false;}elseanswerd /= Double.parseDouble(displayField.getText());break;default:answerd = Double.parseDouble(displayField.getText());}displayField.setText("");prekey = key = 2;}//'/'操作if (temp == button[13]){switch (prekey){case 0:answerd += Double.parseDouble(displayField.getText());break;case 1:answerd -= Double.parseDouble(displayField.getText());break;case 2:answerd *= Double.parseDouble(displayField.getText());break;case 3:if (Double.parseDouble(displayField.getText()) == 0){displayField.setText("除数不能为零");clickable = false;}elseanswerd /= Double.parseDouble(displayField.getText());break;default:answerd = Double.parseDouble(displayField.getText());}displayField.setText("");prekey = key = 3;}}//'='操作if (temp == EqButton && clickable == true){//如果连续按'=',则进行连续运算if (prekey == 5){if (key == 0){answerd += vard;displayField.setText(df.format(answerd));}if (key == 1){answerd -= vard;displayField.setText(df.format(answerd));}if (key == 2){answerd *= vard;displayField.setText(df.format(answerd));}if (key == 3){if (Double.parseDouble(displayField.getText()) == 0){displayField.setText("除数不能为零");clickable = false;}else{answerd /= vard;displayField.setText(df.format(answerd));}}}else{vard = Double.parseDouble(displayField.getText());if (key == 0){prekey = -1;answerd += Double.parseDouble(displayField.getText());displayField.setText(df.format(answerd));}if (key == 1){prekey = -1;answerd -= Double.parseDouble(displayField.getText());displayField.setText(df.format(answerd));}if (key == 2){prekey = -1;answerd *= Double.parseDouble(displayField.getText());displayField.setText(df.format(answerd));}if (key == 3){prekey = -1;if (Double.parseDouble(displayField.getText()) == 0){displayField.setText("除数不能为零");clickable = false;}else{answerd /= Double.parseDouble(displayField.getText());displayField.setText(df.format(answerd));}}prekey = 5;}//按下'+/-'按钮时处理if (temp == button[15] && clickable == true){boolean isNumber = true;String s = displayField.getText();for (int i = 0; i < s.length(); i++)if (! (s.charAt(i) >= '0' && s.charAt(i) <= '9' || s.charAt(i) == '.' || s.charAt(i) == '-')){isNumber = false;break;}if (isNumber == true){//如果当前字符串首字母有'-'号,代表现在是个负数,再按下时,则将首符号去掉if (s.charAt(0) == '-'){displayField.setText("");for (int i = 1; i < s.length(); i++){char a = s.charAt(i);displayField.setText(displayField.getText() + a);}}//如果当前字符串第一个字符不是符号,则添加一个符号在首字母处elsedisplayField.setText('-' + s);}}//按下'Backspace'键,利用循环将当前字符串中的最后一个字母删除if (temp == BkButton && clickable == true)String s = displayField.getText();displayField.setText("");for (int i = 0; i < s.length() - 1; i++){char a = s.charAt(i);displayField.setText(displayField.getText() + a);}}//按下'CE'按钮,将当前文本框内数据清除if (temp == CeButton){displayField.setText("");clickable = true;}//按下'C'按钮,文本框内数据清除,同时var,answer清0if (temp == CButton){vard = answerd = 0;displayField.setText("");clickable = true;}}//输入中如果有操作非法,比如按下两次'+',捕获异常catch (Exception e){displayField.setText("操作非法");clickable = false;}}public static void main(String args[]){Calculator calculator = new Calculator();calculator.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);calculator.setSize(300,200);calculator.setVisible(true);}}四、测试分析(1)程序运行情况该程序正常的响应按钮事件,能进行简单的加、减、乘、除四则运算,在输入之前须先进行清零处理,然后再输入数值进行运算。
java游戏课程设计报告

java游戏课程设计报告一、课程目标知识目标:1. 让学生掌握Java语言的基本语法和程序结构,理解面向对象编程的核心概念;2. 使学生了解游戏开发的基本流程,掌握游戏设计的基本框架;3. 帮助学生掌握Java游戏编程中常用的数据结构和算法。
技能目标:1. 培养学生运用Java语言进行游戏开发的能力,能够独立设计和编写简单的Java游戏;2. 提高学生分析问题和解决问题的能力,能够在游戏开发过程中灵活运用所学知识;3. 培养学生的团队协作能力,学会与他人合作共同完成游戏项目。
情感态度价值观目标:1. 激发学生对编程和游戏开发的兴趣,培养其探索精神和创新意识;2. 培养学生积极向上的学习态度,养成自主学习、合作学习的良好习惯;3. 引导学生正确对待游戏,认识到游戏在娱乐和学习中的积极作用,树立正确的价值观。
课程性质:本课程为选修课程,适用于对Java编程和游戏开发感兴趣的学生。
学生特点:学生具备一定的Java编程基础,对游戏开发有浓厚的兴趣,具有较强的动手能力和创新意识。
教学要求:结合学生特点和课程性质,注重实践操作,以项目为导向,培养学生的实际动手能力和团队协作能力。
在教学过程中,关注学生的个体差异,提供个性化的指导和帮助,确保课程目标的实现。
通过本课程的学习,使学生能够掌握Java游戏编程的基本技能,为后续深入学习奠定基础。
二、教学内容1. Java基本语法和程序结构复习:包括变量、数据类型、运算符、控制结构等,涉及教材第一章至第三章内容。
2. 面向对象编程基础:类与对象、构造方法、继承与多态、接口与实现,涉及教材第四章至第六章内容。
- 游戏设计基本框架:游戏循环、游戏状态、场景切换等。
3. Java游戏编程常用数据结构和算法:数组、链表、堆栈、队列、排序和搜索算法等,涉及教材第七章至第八章内容。
4. Java游戏开发实践:- 游戏项目策划:学习如何撰写游戏设计文档,明确游戏类型、玩法、角色设定等。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3.2 系统设计 3.2.1 系统总体设计
系统功能分析 本系统要用到以下的Java编程技术实现的功能: ① 网络功能:这一程序将由一个服务器程序和一个客户端程序构 成。客户端用来猜测随机字母和随机数的大小。服务器用来产生随机字 母和随机数,来确定是否猜中。 ②多线程功能:当客户端要求与服务器端建立连接时,服务器端就 将用到多线程功能,为每一个建立起来的连接创建一个线程。
7 附录 (1)基本类的程序代码: ① Server类的代码:
import .*; import java.io.*; import java.util.*; import ng.String.*; // 服务器类 public class Server{ // 存储套接字 static DatagramSocket serv; // 存储端口号 static int port; // 存放接收到的数据包中的信息 static byte[] info = new byte[1000]; // 存储接收到的数据包 static DatagramPacket rec = new DatagramPacket(info, info.length); // 存储要发送的数据包 static DatagramPacket snd; // 存储要发送或提取出的信息 static String msg; // 主方法 public static void main(String[] args) { System.out.println("网络益智游戏——服务器"); try { // 将第1个参数转化为端口号 port = (int)Float.parseFloat(args[0]); // 创建套接字
图5 服务器运行界面
在另一台客户端的计算机上打开另一个DOS窗口,输入命令: javac Client.java 进行编译 然后输入命令:java Client 192.168.0.72 6666 运行第客户端程序,Client执行后,windows窗口会显示如图6所 示:
图6 客户端程序的运行界面
4 系统测试和使用说明 4.1 系统测试
使用JDK运行程序时,将server子目录和 client子目录下分别放在两
台计算机上。分别用来做服务器和客户端。 在服务器端的计算机上打开一个DOS窗口,使用命令:Javac Server .java 用来编译服务器上的源代码。 使用命令: java Server 6666 运行服务器程序Server,启动服务器 端,DOS窗口显示:网络益智游戏——服务器,如图5所示:
4
7
5.1 遇到的问题和解决方法 5.2 心得体会 9 6 参考文献 9 7 附录 10
8
网络益智游戏
1 实践过程概述
此次软件技术专业JAVA游戏开发课程设计于2009年6月在实验楼三 楼机房进行,持续时间为两周。本次课程设计主要是利用所学的面向对 象程序设计语言——JAVA来编写程序,实现特定功能,以加深对JAVA 的理解。
《 JAVA 游戏开发 》 课程设计报告 题 目 网络益智游戏
姓 学 专 班
名: 号: 业: 级:
云红卫 081012130 软件技术 软件082
计算机科学与技术系
2009年6月
目 录
1 实践过程概述 4 2 课程设计题目描述 4
3 系统需求分析与设计 3.1 系统需求分析 4 3.2 系统设计 4 4 系统测试和使用说明 4.1 系统测试 7 4.2 系统使用说明ava游戏编程导学.北京:清华大学出版社,2004 [2] 飞思科技产品研发中心.精通Java.北京:电子工业出版社,2004 [3] 朱福喜等.Java项目设计与开发范例.电子工业出版社,2005 [4] Robert C.Martin 著,黄晓春译.UML FOR JAVA PROGRAMMERS.清华 大学出版社,2004
成一个随机字母,并输出。游戏者有10次试猜机会,每次接收到包含试 猜答案的数据包后,都先把试猜答案输出,再调用judge()方法判断答案 的匹配情况。如果答案完全匹配,返回答案正确的提示信息,否则继续 进行游戏。如果超过10次未猜对,也结束游戏,并向客户端返回正确答 案。 judge()方法是判断试猜答案与正确答案匹配情况的方法,组合答案 匹配情况的信息,存储到字符串msg中,并封装到数据包发送给客户 端。如果答案完全匹配,则返回1,否则返回0。 getZimu()方法是用来生成随机数序列的,它创建了一个Random类 对象,并调用它的nextInt()方法来生成随机数。每次生成的随机数,都 要与已生成随机数比较,如果有重复,则重新生成,直到不与已生成的 随机数重复。 guessPro()方法是用来进行猜大小游戏的,它创建了一个Random类 对象,并调用它的nextInt()方法来生成一个0~100之间的随机数,存放 到num变量中,并输出。游戏者有10次试猜机会,每次接收到包含试猜 答案的数据包后,都先把试猜答案输出,再将其转化为int型数与num比 较大小,根据大小情况向客户端返回相应提示信息,同时也在服务器端 输出。如果答案完全匹配,返回答案正确的提示信息,否则继续进行游 戏。如果超过10次未猜对,也结束游戏,并向客户端返回正确答案。 Client类 Client类其中定义了10个成员变量和4个成员方法。serv变量用于存 储套接字,port变量存储端口号,info数组存放接收到的数据包中的信 息,rec变量存储接收到的数据包,snd变量存储要发送的数据包,msg 变量存储要发送或提取出的信息,localHost变量存储本地主机的IP地 址,host变量存储服务器的IP地址,IP变量是服务器IP地址的字符串形 式,IPAddr数组是服务器IP地址的字节数组形式。main()方法是主方 法,用于创建套接字,选择游戏,控制程序的终止;playGuessZimu()方
2 课程设计题目描述
我们设计的网络益智游戏:是一台计算机做服务器产生一个随机数 和随机字母,另一台计算机做客户端来猜。
3 系统需求分析与设计 3.1 系统需求分析
随着现在生活节奏的不断加快,现在许多的人们在工作之余,需要 通过一些益智小游戏,来调节一下自己的情绪,释放一下自己的疲劳。 而网络益智游戏正好符合人们的要求,它不需要你过多的去思考答案, 只是轻松一下紧张的神经,放松一下心情,就像开心农场一样,在人们 的工作之余调节一下。
的,程序中要捕获异常,就要用到多种捕获异常类,这些类是在J2SE编 程环境下自动引入的ng包类的异常类。
5.2 心得体会
在这次的面向对象程序设计中,我主要运用了JAVA语言的多线 程、异常处理、网络传输等,综合运用了JAVA语言。我深刻感受到了 面向对象语言中类库的强大功能,掌握了运用JAVA中的类实现某些基 本功能,并学会了自己查询使用类的方法,为以后的面向对象语言的自 学奠定了基础。这次设计中,再一次让我感受到了网络通信中服务器和 客户相互通信的特点,同时也加深了对网络通信知识的理解。 通过这次为时二周的课程设计,我学到了很多的东西,下面就这在 这次课程设计中的心得体会总结如下: 在这次的面向对象程序设计中,主要是运用JAVA语言来编写,并 可运用其他的技术。在我的系统中,还采用了多线程、异常处理、网络 传输等技术,而这些知识都是我们没有学过的,这就要求我们去查阅相 关书籍。正因为这样,才锻炼了我的自学能力,为以后的学习打下了基 础。 这次设计中,我深刻感受到了面向对象语言中类库的强大功能,掌 握了运用JAVA中的类实现某些基本功能,并学会了自己查询使用类的 方法,为以后的面向对象语言的自学奠定了基础。同时,我也感受到了 网络通信中服务器和客户相互通信的特点,加深了对网络通信知识的理 解,拓宽了我的知识面。 通过二周的努力,这次课程设计圆满的结束了,在这个过程中,我 学到了很多的知识,同时也非常感谢杭志老师帮助与指导。在以后的学 习中,我会更加努力的学好专业知识,并将所学知识用于实践当中去, 以便牢固掌握知识。
法是进行猜字母游戏的方法;playGuessPro()方法是进行猜大小游戏的 方法;toIPAddr()方法用于将字符串形式的IP地址转换为字节数组形 式。 在main()方法中,首先调用toIPAddr()方法,将存储服务器IP地址第 1个参数,转存到字节数组中,再把第2个参数转化为端口后,据此创建 一个套接字和存储服务器地址的InetAddress类对象host。然后调用 InetAddress类对象的getLocalHost()方法,获得本机IP地址,并传送给服 务器,告知服务器要加入游戏。然后,接收服务器发来的数据包,根据 其中的提示信息,选择游戏或退出程序。如果输入的是“quit”指令,则 终止程序,关闭套接字;如果输入的是1,选择玩猜字母游戏,调用 playGuessZimu()方法;如果输入的是2, playGuessPro()方法。 playGuessZimu()方法负责猜字母游戏的发送和接收,每次试猜,它 都完成以下过程:将键盘键入的数据封装到数据包,发送给服务器,再 接收服务器的回复。提取其中的匹配情况信息,并输出,再把存储试猜 次数的cnt变量加1。如果完全匹配,输出答案正确的提示信息,终止游 戏,否则继续游戏。如果已经试猜10次,将服务器返回的正确答案输 出,再终止游戏。 playGuessPro()方法负责猜大小游戏的发送和接收,其运行与处理 过程与playGuessZimu()方法类似。 toIPAddr()方法将一个存储IP地址的字符串转化为字节数组。它从 字符串的尾部开始向前搜索,在遇到“.”号前所搜索到的数字都是属于IP 地址的某一段,将它累加到变量t中。直到遇到“.”号,将t清零后重新开 始累加。 选择玩猜大小游戏,调用
4.2 系统使用说明
由于字母和数字都是随机产生的,我们猜测字母的时候只能依靠我 们子的运气去随机猜测,猜数字大小的时候,我们可以根据服务器给我 们发过来的信息,来猜测。
5 课程设计总结 5.1 遇到的问题和解决方法
在用JAVA编写程序时,我遇到了很多困难,如怎样用Socket类实 现客户端和服务器端的通信,怎样来把字符串转换为一个个的字符。通 过查阅相关书籍以及在网上搜索资料,我们了解到要使用类中的 MessageListenning来负责侦听客户端的消息,使用Thread类创建线程接 收客户端发出的消息,使用MulticastSendingThreas类向客户端广播消 息。在本系统中,我们用到了前者。设计是以Java独立应用程序来实现