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游戏开发实践:- 游戏项目策划:学习如何撰写游戏设计文档,明确游戏类型、玩法、角色设定等。
java迷宫课程设计报告
java迷宫课程设计报告一、教学目标本课程的教学目标是使学生掌握Java编程基础,能够运用Java语言设计并实现一个迷宫游戏。
具体分为以下三个部分:1.知识目标:学生需要掌握Java语言的基本语法、数据结构、控制流程和面向对象编程思想。
2.技能目标:学生能够运用Java语言独立设计并实现一个迷宫游戏,培养学生的编程能力和问题解决能力。
3.情感态度价值观目标:通过完成迷宫游戏的设计与实现,培养学生对编程的兴趣,增强学生自信心,培养学生的创新精神和团队合作意识。
二、教学内容本课程的教学内容主要包括Java语言的基本语法、数据结构、控制流程和面向对象编程思想。
具体安排如下:1.第一章:Java语言概述,介绍Java语言的发展历程、特点和应用领域。
2.第二章:Java基本语法,包括变量、数据类型、运算符、表达式等。
3.第三章:控制流程,包括条件语句、循环语句等。
4.第四章:数据结构,包括数组、链表、栈和队列等。
5.第五章:面向对象编程,包括类、对象、继承、多态和封装等。
6.第六章:迷宫游戏设计与实现,运用所学知识设计并实现一个迷宫游戏。
三、教学方法为了激发学生的学习兴趣和主动性,本课程将采用多种教学方法,包括:1.讲授法:讲解Java语言的基本语法、数据结构、控制流程和面向对象编程思想。
2.案例分析法:通过分析实际案例,使学生更好地理解和掌握Java编程技巧。
3.实验法:安排适量实验,让学生亲自动手编写代码,培养学生的编程能力和问题解决能力。
4.小组讨论法:学生进行小组讨论,分享学习心得和经验,培养学生的团队合作意识。
四、教学资源为了支持教学内容和教学方法的实施,丰富学生的学习体验,我们将准备以下教学资源:1.教材:《Java编程基础》,作为主要学习资料,为学生提供系统的Java编程知识。
2.参考书:《Java核心技术》,为学生提供更深入的Java编程知识。
3.多媒体资料:制作教学PPT,生动形象地展示Java编程知识点。
java课程设计报告--打字游戏
java课程设计报告一打字游戏Java开发技术课程设计(打字游戏)学院:计算机与信息工程学院学号:*** ***姓名:**时间:2011年12月14日一、程序描述1.1程序设计的目的通过java开发技术课程的学习,我初步了解了如何运用java语言编写程序。
课程结束后,按老师的要求,在查找资料后,我完成了打字练习这个程序。
在这个过程中,主要达到了两个目的,一是检验和巩固专业知识,二是提高综合课堂上掌握的理论知识与处理数据的素质和能力。
通过该程序的编写,可以将我业务相结合,以检验我掌握知识的宽度、深度及对知识的综合运用能力。
1.2 程序设计的要求(1)程序的界面会随机的出现字母和数字,玩家在键盘上理相应的键后,界面上的对应的字符就会消失(2)字符下落的速度可以选择,完成一定量的字符后,显示进入下一关,下一关的速度加快(3)能统计正确与错误的字符数分别是多少(4)程序的主界面是能够给玩家第一感官的部分,主要包括程序图形区域界面、程序的显示更新界面。
1.3程序设计的环境Windows xp 操作系统、Myeclipse 编辑工具、jdkl. 6二、分析与设计2. 1游戏处理流程本次游戏设讣的处理流程如下图所示进入游戏画面单击“开始”按钮,游戏开始,字符开始随机。
根据出现的字符按相应的键,对应一个消失一个(字符)按对一定字符后将提示进入下一关,下一关的速度有所增加。
速度也可单独调节。
没有擅倒相应游戏中途欲中的键,错误的断,稍后继续数字将加一游戏单击“退出”单击“暂停”退出游戏游戏暂停再次单击开始游戏,游戏恢复游戏处理流程图2. 2需求分析2. 2. 1用户的特点打字练习具有很强的实用性,对键盘不熟悉的人均可用之练习。
这种需求同时也要求该程序具有可调节性,用户可以根据自己的水平调节速度,以提高打字水平。
2.2.2功能需求在可使用性方面,要求各个功能实现简单,操作方便,系统处理正确;整个系统恢复性能好,连接速度快,以确保系统可使用性好。
Java课程设计报告-超级马里奥游戏的设计与开发
超级马里奥游戏的设计与开发目录1.课程设计要求.................................................. - 2 -1.1课设题目................................................. - 2 -1.2课设目的................................................. - 2 -1.3开发环境................................................. - 2 -1.4课设内容................................................. - 2 -1.4.1游戏介绍........................................... - 2 -1.4.2开发流程........................................... - 4 -2.设计过程...................................................... - 5 -2.1总体设计................................................. - 5 -2.1.1所用类的设计....................................... - 5 -2.1.2功能设计........................................... - 5 -2.2详细设计................................................. - 5 -2.2.1窗体的设计......................................... - 6 -2.2.2游戏场景的开发..................................... - 6 -2.2.3障碍物的开发....................................... - 6 -2.2.4将障碍物添加到场景中去............................. - 7 -2.2.5马里奥的开发....................................... - 7 -2.2.6将马里奥对象加入到窗体中........................... - 8 -2.2.7将马里奥与障碍物进行设置........................... - 8 -2.2.8敌人的开发......................................... - 9 -2.2.9敌人放到场景中..................................... - 9 -2.2.10其他游戏相关..................................... - 10 -3.具体实现..................................................... - 10 -3.1窗体类.................................................. - 10 -3.2马里奥类................................................ - 11 -3.3场景类.................................................. - 14 -3.4障碍物类................................................ - 15 -3.5敌人类.................................................. - 15 -4.调试过程..................................................... - 17 -4.1系统测试................................................ - 17 -4.2出现的问题和解决的方法.................................. - 19 -5.小结......................................................... - 20 -6.参考资料..................................................... - 20 -1.课程设计要求1.1课设题目超级马里奥游戏的设计与开发1.2课设目的《Java程序设计》课程是网络工程专业的一门专业必修课程,特针课程进行为期两周的实践教学,旨在提升本专业学生对此课程中的理论知识的综合应用能力、提高学生的逻辑思维能力、软件开发能力。
Java课程设计报告蜘蛛纸牌游戏
目录1. 选题目的与系统概述 (2)2. 系统可行性分析与相关技术背景分析 (3)2.1系统可行性分析 (3)2.2相关技术背景分析 (3)3. 系统设计与关键技术 (4)3.1系统设计 (4)3.2关键技术 (5)4.系统测试与操作实施方法 (9)4.1进入游戏运行界面 (9)4.2 游戏的具体的操作过程 (9)4.3进入“帮助”菜单 (10)4.4游戏中的异常处理情况 (11)5.系统设计总结与回顾 (12)6.附录 (13)6.1 AboutDialog.java (13)6.2 PKCard.java (14)6.3 Spider.java (20)6.4 Spider M enuBar.java (29)1.选题目的与系统概述随着经济全球一体化的逐步加剧,人们的生活节奏越来越快。
蜘蛛纸牌游戏的一种,旨在让工作学习之后疲惫的玩家有一个轻愉快的放松方式。
与普通的纸牌相比,降低了一点难度。
游戏简单级别由8组A-K的清一色黑桃牌面组成,取消了红黑相间的游戏规则,更突然出强化了玩家在安排事物方面的能力。
蜘蛛纸牌游戏实现了与Windows系列操作系统中自带的蜘蛛纸牌游戏类似的功能。
该游戏程序中采用Windows系列中游戏的图片,运用Java语言设计了线程、鼠标事件、纸牌的装载、图形界面的构造、组件监听接口的实现、生成蜘蛛纸牌游戏的框架、实现游戏中的方法,是一种休闲益智游戏。
2.系统可行性分析与相关技术背景分析2.1系统可行性分析蜘蛛纸牌游戏规则是:(1)将电脑分发给你的牌按照相同的花色又打至小排列起来,直到桌面上的牌全都消失。
(2)可执行的牌必须为明牌(3)单牌移动规则(4)多拍移动规则游戏分三个等级:(1)简答:单一花色;(2)中级:双花色;(3)四花色。
2.2相关技术背景分析2.2.1蜘蛛纸牌游戏是基于Eclipse平台的Java程序。
Eclipse的背景如下:Eclipse最初是IBM公司的一个软件产品。
java制作游戏的课程设计
java制作游戏的课程设计一、课程目标知识目标:1. 让学生掌握Java语言的基本语法和面向对象编程思想;2. 让学生了解游戏开发的基本流程和关键环节;3. 让学生掌握简单的图形绘制和动画实现方法;4. 让学生理解事件监听和处理机制在游戏中的应用。
技能目标:1. 培养学生运用Java语言编写简单游戏的能力;2. 培养学生独立分析问题和解决问题的能力;3. 培养学生运用所学知识进行创新设计和实践的能力。
情感态度价值观目标:1. 激发学生对编程和游戏开发的兴趣,提高学习积极性;2. 培养学生的团队合作精神和沟通能力,增强协作意识;3. 引导学生关注游戏的社会影响,树立正确的价值观。
课程性质:本课程为选修课,面向有一定Java基础的学生,以实践为主,注重培养学生的编程能力和创新意识。
学生特点:学生具备基本的Java编程知识,对游戏开发有浓厚兴趣,但缺乏实际操作经验。
教学要求:结合学生特点和课程性质,采用案例教学、分组合作、实践操作等方式,使学生在掌握基本知识的基础上,提高实际操作能力和创新能力。
通过分解课程目标,确保学生在课程结束后能够独立完成一个简单游戏的开发。
二、教学内容1. Java基本语法回顾:变量、数据类型、运算符、控制流程(教材第1章)2. 面向对象编程基础:类与对象、继承与多态、接口与实现(教材第2章)3. Java图形用户界面(GUI):Swing组件、事件处理、布局管理器(教材第3章)4. 游戏开发基本概念:游戏循环、游戏状态、资源管理(教材第4章)5. 图形绘制与动画实现:Canvas绘图、双缓冲技术、帧动画(教材第5章)6. 游戏对象与碰撞检测:游戏对象设计、碰撞检测算法(教材第6章)7. 游戏音效与背景音乐:音频播放、音效处理(教材第7章)8. 游戏案例分析与实战:选取合适的小游戏案例,进行讲解和实战操作(教材实例)教学安排与进度:第1周:Java基本语法回顾,面向对象编程基础第2周:Java图形用户界面(GUI)第3周:游戏开发基本概念,图形绘制与动画实现第4周:游戏对象与碰撞检测第5周:游戏音效与背景音乐第6-8周:游戏案例分析与实战,分组合作完成一个简单游戏开发教学内容与教材紧密关联,确保学生在掌握基础知识的同时,能够学以致用,完成游戏开发实践。
java课程设计实验报告
Java课程设计实验报告实验题目:打字游戏小程序专业: 计算机科学与技术系班级: 1202班成员:Java 课程设计(打字游戏小程序)一、课程设计目的经过一学期的java学习,能灵活运用书中和实验中所学习的各类知识和技巧,并且能在程序开发中得以很好的运用和发挥。
在以后的学习和工作中,可以从中获取很好的经验,并且锻炼自己开发程序和创新的意识。
二、课程设计内容1.课程设计简介设计的是一个打字的小游戏,屏幕上不断地有英文字母下落,键盘输入字母,屏幕上与输入的字母形同的就会消失,并计分,如果有没有消去的字母掉到屏幕底,将扣分。
2.设计说明因为要进行键盘操作,所以引用了event包,还要注册事件监听。
字母是随机产生的,又要用Math.random。
注册了线程。
还要对窗口定义坐标,防止字母出现在同一位子。
并且通过一位数组来给随机出现的字母做坐标定义。
主要通过一位数组来控制字母的坐标,并且通过字母坐标的改变来对整个游戏的流程进行控制。
3.设计流程图4.实现功能随机产生字母,运用了键盘操作当按对屏幕中出现的字母时,该字母全部消失,并且在分数上相应的增加或减少。
5.详细设计(源代码)1)CharEntity.javapackage DownCharGame;/*** 下落的字母实体类* @author shenbf**/public class CharEntity {//定义字母的x、yprivate int x;private int y;//字母的值private char ch;//字母下落的"速度"private int speed;//颜色private Color color;//字体private Font font;public void draw(Graphics g){//设置字体g.setFont(font);//设置画笔颜色g.setColor(Color.white);g.fillOval(getX()-9, getY()-24, 30, 30);g.setColor(color);g.drawString(ch+"", x, y);}//下落的方法public void down(){y=y+speed;}//快速生成getters和setters方法:alt+shift+s---->r---->select all---->ok public void setX(int x){this.x=x;}public int getX(){return this.x;}public int getY(){return y;}public void setY(int y){this.y=y;}public char getCh() {return ch;}public void setCh(char ch) {this.ch = ch;}public int getSpeed() {return speed;}public void setSpeed(int speed) {this.speed = speed;}public Color getColor() {return color;}public void setColor(Color color) {this.color = color;}public Font getFont() {return font;}public void setFont(Font font) {this.font = font;}}2)DownCharFrame.javapackage DownCharGame;public class DownCharFrame {public static void main(String[] args){JFrame frame=new JFrame();frame.setTitle("打字母游戏V1.2");frame.setBounds(200,100,640,480);frame.setResizable(false);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);DownCharPanel panel=new DownCharPanel();frame.add(panel);frame.addKeyListener(panel);panel.addKeyListener(panel);panel.startDown();frame.setVisible(true);}}3)DownCharPanel.javapackage DownCharGame;public class DownCharPanel extends JPanel implements KeyListener{C harEntity[] chs=new CharEntity[10];//消除字母4,定义统计的变量//正确率i nt accuracy = 0;//正确数i nt rightNum = 0;//打错的个数i nt errorNum = 0;//遗漏的个数i nt loseNum = 0;//初始总分i nt sum = 1000;p ublic DownCharPanel(){//为数组中的每一个子科目实例化for(int i=0;i<chs.length;i++){CharEntity ce = new CharEntity();int fontSize=(int)(Math.random()*10)+20;ce.setFont(new Font("宋体",Font.BOLD,fontSize));ce.setX((int)(Math.random()*580)+30);ce.setY(0);ce.setSpeed((int)(Math.random()*3)+1);ce.setColor(new Color((int)(Math.random()*256), //[0,255)(int)(Math.random()*256),(int)(Math.random()*256)));ce.setCh((char)(65+(int)(Math.random()*26)));chs[i]=ce;}}p ublic void paint(Graphics g){super.paint(g);//设置背景图Image bgimg;try {bgimg = ImageIO.read(new File("Picture/238.jpg"));g.drawImage(bgimg, 0, 0, null);} catch (IOException e) {e.printStackTrace();}//消除字母5,绘制统计数字g.setFont(new Font("宋体",Font.BOLD,20));g.setColor(Color.yellow);g.drawString("正确数:"+rightNum, 10, 40);g.setColor(Color.red);g.drawString("错误数:"+errorNum, 10, 60);g.setColor(Color.green);g.drawString("遗漏数:"+loseNum, 10, 80);//绘制下落的字母for(int i=0;i<chs.length;i++){chs[i].draw(g);}//显示成绩g.setColor(Color.white);g.drawString("您当前的成绩是:"+sum, 165, 23);//Game Overif(errorNum>50||loseNum>100){g.setColor(Color.red);g.setFont(new Font("宋体",Font.BOLD,100));g.drawString("Game Over!", 50, 250);}}p ublic void startDown(){new Thread(){public void run(){while(!(loseNum>100||errorNum>50)){try {Thread.sleep(40);} catch (InterruptedException e) {e.printStackTrace();}for(int i=0;i<chs.length;i++){if(chs[i].getY()>=480){//消除字母6,遗漏数++loseNum++;sum -= 100;chs[i].setX((int)(Math.random()*580)+30);chs[i].setY(0);chs[i].setColor(new Color((int)(Math.random()*256), (int)(Math.random()*256),(int)(Math.random()*256)));chs[i].setCh((char)(65+(int)(Math.random()*26)));}chs[i].down();}repaint();//}}}.start();}p ublic void keyTyped(KeyEvent e) {}p ublic void keyPressed(KeyEvent e) {}p ublic void keyReleased(KeyEvent e) {//消除字母7,实现具体的方法//7.1获取到键盘按下的字母char key = e.getKeyChar();//和当前按下字母key相同字母(y值最大)对应的下标int maxYindex = -1;//7.2使用按下的字母和chs数组中所有的字母去比较for(int i=0; i<chs.length; i++){if(key==chs[i].getCh()||key==chs[i].getCh()+32){//按下的字母key和下标对应的字母“相同”if(maxYindex==-1){//说明第一次找到maxYindex = i;}else{//说明不是第一次找到if(chs[maxYindex].getY()<chs[i].getY()){maxYindex = i;}}}}//判断正确还是错误if(maxYindex==-1){//一个相同的字母都没有找到errorNum++;sum -= 100;}else{//至少找到一个相同的字母rightNum++;sum += 10;chs[maxYindex].setX((int)(Math.random()*580)+30);chs[maxYindex].setY(0);chs[maxYindex].setCh((char)(65+(int)(Math.random()*26)));}}}三、运行结果截图:四、实验总结:此程序运用了一维数组,且随机性。
JAVA游戏开发课程设计报告1
Java课程设计题目:多线程端口扫描**: ***学号: ************ 班级: 10级专二专业: 应用技术目录1 设计任务与要求 (3)2 系统功能描述 (3)2.1功能概述 (3)2.2本系统要实现的功能 (3)3 系统总体设计 (4)3.1总体分析 (4)3.2界面设置构思图 (4)3.3界面使用设置构思 (4)3.4后台设计构思 (6)4 系统详细设计 (6)4.1界面设计 (6)4.2界面设计图 (6)4.3后台设计 (7)5 实现与测试 (10)5.1运行要求与环境 (10)5.2运行程序流程图 (11)5.3运行界面 (12)6 设计总结 (14)参考文献 (15)附件 (15)多线程端口扫描器1 设计任务与要求加深对《JAVA游戏开发》课程所学知识的理解, 进一步巩固Java语言的语法规则。
分析系统的可行性,让系统有一个明确的方向,使开发更具合理性,并能分析出系统的具体流程, 为后面的开发做好铺垫。
明确本次课程设计所要用到的技术点并到网上搜索以及查阅相关的书籍来搜集资料。
通过编写一个基于Java的应用系统综合实例, 来掌握Java语言编程技巧。
并学会编制结构清晰、风格良好的Java语言程序, 从而具备解决综合性实际问题的能力, 学会使用Java编程工具, 如EditPlus, Eclipse等。
2 系统功能描述2.1 功能概述多线程端口扫描器是实现计算机的端口的扫描, 只要在在前台设置好所要扫描的IP、起始端口、结束端口以及所要用到的线程数, 点击扫描, 就可以扫描到所输入IP地址主机的开放端口, 并显示在主窗体中;点击退出, 则可以退出该程序。
IP设置应为所在主机的IP地址, 起始端口和结束端口应为0~65535之间的一个数, 且起始端口应小于结束端口的大小。
线程数为0~200之间的一个数。
点击开始后就会运行, 直到扫描完毕显示出开放端口, 如果没有开放端口, 则只显示扫描完毕。
java扫雷游戏课程设计报告
Java课程设计报告姓名号学系院级班业专1.设计内容及要求1.1 扫雷游戏的基本要求Windows 2000/XP系统提供的扫雷游戏是一个很有趣的游戏。
本章的课程设计使用Java语言编写一个与其类似的扫雷游戏。
具体要求如下:(1) 扫雷游戏分为初级、中级和高级三个级别,扫雷英雄榜存储每个级别的最好成绩,即挖出全部的地雷且用时最少者。
单击游戏菜单可以选择“初级”、“中级”和“高级”或“查看英雄版”。
(2) 选择级别后将出现相应级别的扫雷区域,这是用户使用鼠标左键单击雷区中任何一个方块便启动计时器。
(3) 用户要揭开某个方块,可单击它。
若所揭方块下有泪,用户便输了这一局,若所揭方块下五雷,则显示一个数字,该数字代表方块的周围的8个方块中共有多少颗雷。
.(4) 如果用户认为某个方块下埋着雷,单击右键可以在方块上标识一个用户认为是雷的图标,即给出一个扫雷标记。
用户每标记出一个扫雷标记(无论用户的标记是否正确),程序将显示的剩余雷数减少一个。
(5) 扫雷胜利后(用时最少者),程序弹出保存成绩的对话框。
(6)用户可以选择标记疑问的方块,用可以勾选游戏菜单下的标记(或者用快捷键alt+G 然后M)即可,此时双击右键并可出现“?”标记。
另有颜色选项,当用户勾选此项时,游戏将以最低图像像素来显示。
(7)如果用户需要即使提示声,并可选中声音选项,此时将听到计时的卡塔声。
当用户点中雷时,将有爆炸声产生,胜利时,将有凯旋的旋律播放,此时企鹅出现欢悦表情。
1.2 需实现的主要功能(1)用户可以自定义级别并且可以任意输入雷数;(2)具有计时功能,即显示用户完成移动盘子所花费的时间;(3)用户可以选择是否有音效;(4)自动保存扫雷英雄榜;2.需求分析2.1 扫雷棋盘的布局设计系统的整体布局为:CardLayout布局, 采用了菜单、按钮、面板…等组件,菜单主要包括开始,选择级别,标记,扫雷英雄榜,退出,按钮的功能是重新开始新的游戏。
- 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独立应用程序来实现