西南交通大学java课程设计

合集下载

jav课程设计内容

jav课程设计内容

jav课程设计内容一、教学目标本节课的教学目标是让学生掌握Java编程语言的基本语法和编程思想,学会使用Java编写简单的控制台应用程序。

具体分为以下三个部分:1.知识目标:(1)了解Java语言的基本语法和数据类型。

(2)掌握Java程序的结构和编写方法。

(3)理解面向对象编程的基本概念,如类、对象、封装、继承和多态。

2.技能目标:(1)能够使用Java编写简单的控制台应用程序。

(2)学会使用Java编写面向对象的程序,具备初步的编程能力。

3.情感态度价值观目标:培养学生对编程语言的兴趣,激发学生主动学习和探索编程的欲望,培养学生的团队协作精神和自主学习能力。

二、教学内容本节课的教学内容主要包括以下几个部分:1.Java语言的基本语法和数据类型。

2.Java程序的结构和编写方法。

3.面向对象编程的基本概念,如类、对象、封装、继承和多态。

4.编写简单的控制台应用程序,巩固所学知识。

三、教学方法为了更好地实现教学目标,本节课采用以下几种教学方法:1.讲授法:讲解Java语言的基本语法、数据类型和程序结构。

2.案例分析法:通过分析实例,使学生掌握面向对象编程的基本概念。

3.实验法:让学生动手编写控制台应用程序,巩固所学知识。

4.讨论法:鼓励学生积极参与课堂讨论,培养学生的团队协作精神。

四、教学资源为了保证教学效果,本节课准备以下教学资源:1.教材:《Java编程入门》2.参考书:《Java核心技术》3.多媒体资料:PPT课件、教学视频4.实验设备:计算机、网络环境5.在线编程平台:例如LeetCode、牛客网,供学生课后练习和提高编程能力。

五、教学评估为了全面、客观地评估学生的学习成果,本节课采用以下几种评估方式:1.平时表现:观察学生在课堂上的参与程度、提问回答等情况,了解学生的学习态度和基本素养。

2.作业:布置适量作业,要求学生在规定时间内完成,通过作业质量评估学生的掌握程度。

3.考试:安排一次课堂小测,测试学生对Java基本语法和编程思想的掌握情况。

大二java课程设计

大二java课程设计

大二java课程设计一、课程目标知识目标:1. 理解并掌握Java语言面向对象编程的基本概念,包括类、对象、继承、封装和多态。

2. 学会运用Java异常处理机制,提高程序的稳定性和可靠性。

3. 熟悉Java集合框架,能够根据实际需求选择合适的集合类型进行数据存储和处理。

4. 掌握Java多线程编程的基本原理,了解线程的生命周期、同步与通信。

技能目标:1. 能够运用面向对象思想设计并实现小型Java应用程序。

2. 能够运用Java异常处理机制,编写具有良好错误处理能力的程序。

3. 能够运用Java集合框架,实现数据的存储、检索和排序等操作。

4. 能够编写简单的多线程程序,实现并发操作。

情感态度价值观目标:1. 培养学生的编程兴趣,激发他们学习Java的热情。

2. 培养学生的团队合作精神,提高沟通与协作能力。

3. 培养学生勇于面对困难、积极解决问题的态度。

4. 增强学生的责任感和自信心,使他们能够在项目中承担相应的工作。

本课程针对大二学生,课程性质为专业核心课。

结合学生特点,课程目标注重理论与实践相结合,以项目驱动的方式进行教学。

在教学过程中,要求学生积极参与,主动思考,提高实际编程能力。

通过课程学习,使学生能够达到以上所述的具体学习成果,为后续课程和实际工作打下坚实基础。

二、教学内容本课程教学内容主要包括以下几部分:1. 面向对象编程基础:- 类与对象- 继承与多态- 封装与抽象- 接口与实现2. Java异常处理:- 异常的概念与分类- 异常处理机制- 自定义异常- 异常链3. Java集合框架:- 集合框架概述- List、Set、Map接口及其实现类- 集合的迭代与操作- 集合排序与查找4. Java多线程编程:- 线程的创建与启动- 线程的生命周期- 线程同步与通信- 线程池与线程安全教学内容依据教材章节进行安排,具体进度如下:1. 面向对象编程基础(第1-4章)2. Java异常处理(第5章)3. Java集合框架(第6章)4. Java多线程编程(第7章)教学内容注重科学性和系统性,结合课程目标,以实际案例为主线,使学生能够循序渐进地掌握Java编程的核心知识,提高实际编程能力。

java开发技术课课程设计

java开发技术课课程设计

java开发技术课课程设计一、教学目标本节课的教学目标是使学生掌握Java编程的基本语法和结构,培养学生编写简单的Java程序的能力。

具体来说,知识目标包括:了解Java语言的历史和特点;掌握Java的基本数据类型、运算符、控制结构;理解面向对象编程的基本概念,如类、对象、继承、封装和多态。

技能目标要求学生能够使用Java语言编写简单的程序,解决实际问题。

情感态度价值观目标则是培养学生对计算机科学的兴趣,提高他们主动学习和探索问题的意识。

二、教学内容本节课的教学内容主要包括Java语言的基本概念、基本语法和面向对象编程。

具体安排如下:首先,介绍Java语言的历史、特点和应用领域;其次,讲解Java的基本数据类型、运算符和控制结构;然后,介绍面向对象编程的基本概念,如类、对象、继承、封装和多态;最后,通过实例演示和练习,使学生掌握Java编程的基本方法。

三、教学方法为了达到本节课的教学目标,我们将采用多种教学方法,如讲授法、案例分析法和实验法。

首先,通过讲授法向学生介绍Java语言的基本概念和语法;其次,通过案例分析法讲解面向对象编程的原理和应用;最后,通过实验法让学生动手实践,培养他们的编程能力。

在教学过程中,我们将注意调动学生的积极性,鼓励他们提问和讨论,以提高他们的学习兴趣和主动性。

四、教学资源为了支持本节课的教学内容和教学方法,我们将准备以下教学资源:教材《Java编程入门》,供学生学习和参考;多媒体教学课件,用于辅助讲解和展示;在线编程平台,供学生进行实验和练习;实验设备,如计算机、网络等,用于支持实验教学。

这些教学资源将有助于丰富学生的学习体验,提高他们的编程能力。

五、教学评估本节课的教学评估将综合考虑学生的平时表现、作业和考试三个方面的因素。

平时表现主要评估学生在课堂上的参与程度、提问和讨论的积极性;作业则主要评估学生的编程能力和对知识的掌握程度;考试则是对学生综合运用知识解决问题的能力的评估。

jave课程设计

jave课程设计

jave课程设计一、课程目标知识目标:1. 理解Java基本语法和编程结构,掌握变量、数据类型、运算符、控制流程等基本概念。

2. 学会使用面向对象编程思想,理解类与对象的关系,掌握封装、继承、多态等核心概念。

3. 了解Java常用的集合框架,熟练运用数组、列表、映射等数据结构解决问题。

4. 掌握Java异常处理机制,提高程序的健壮性。

技能目标:1. 能够运用所学知识编写简单的Java程序,解决实际问题。

2. 学会使用调试工具,分析并解决程序中的错误。

3. 掌握Java编程规范,编写具有良好可读性的代码。

4. 提高团队协作能力,学会与他人共同完成项目。

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

2. 培养学生的逻辑思维能力,提高分析问题和解决问题的能力。

3. 培养学生良好的编程习惯,注重代码质量。

4. 培养学生的创新意识,鼓励尝试新方法解决问题。

课程性质:本课程为Java编程入门课程,旨在让学生掌握Java基本语法和编程技巧,培养编程兴趣和逻辑思维能力。

学生特点:学生处于初级阶段,对编程有一定兴趣,但基础薄弱,需要从基础开始逐步引导。

教学要求:注重理论与实践相结合,通过案例分析和实际操作,帮助学生掌握Java编程技能。

同时,关注学生的学习进度和个体差异,提供有针对性的指导。

在教学过程中,强调编程规范和团队协作,培养学生的职业素养。

二、教学内容1. Java基本概念与语法- 程序基本结构- 变量、数据类型与运算符- 控制流程(条件语句、循环语句)2. 面向对象编程- 类与对象- 封装、继承、多态- 抽象类与接口3. 常用集合框架- 数组- 列表、映射- 集合操作与遍历4. 异常处理- 异常类型- 异常捕获与处理- 自定义异常5. Java编程规范与调试- 代码规范- 调试方法与技巧- 优化程序性能6. 实践项目- 设计小型程序,解决实际问题- 团队协作完成项目- 代码审查与优化教学内容安排与进度:1. 第1-2周:Java基本概念与语法2. 第3-4周:面向对象编程3. 第5-6周:常用集合框架4. 第7-8周:异常处理5. 第9-10周:Java编程规范与调试6. 第11-12周:实践项目教材章节关联:1. 第一章:Java入门2. 第二章:Java基本语法3. 第三章:面向对象基础4. 第四章:高级面向对象5. 第五章:集合框架6. 第六章:异常处理7. 第七章:Java编程规范与实践教学内容确保科学性和系统性,结合教材章节进行有序安排,以适应学生的认知水平和学习进度。

大学与java有关的课程设计

大学与java有关的课程设计

大学与java有关的课程设计一、课程目标知识目标:1. 理解Java语言的基本语法和程序结构,掌握面向对象编程的基本概念;2. 学会使用Java标准库和常用开发工具,实现简单的程序功能;3. 了解Java在大学课程中的应用场景,如数据结构、算法、网络编程等。

技能目标:1. 能够运用Java编写简单的程序,解决实际问题;2. 掌握基本的调试和排错方法,提高程序的正确性和稳定性;3. 培养良好的编程习惯,编写规范、可读性强的代码。

情感态度价值观目标:1. 培养学生对Java编程的兴趣和热情,激发自主学习动力;2. 增强团队合作意识,学会与他人共同解决问题;3. 了解Java在现代社会中的广泛应用,认识到编程对个人和社会的价值。

课程性质:本课程为实践性较强的学科,旨在帮助学生掌握Java编程基础,培养实际编程能力。

学生特点:大学阶段的学生具备一定的逻辑思维和自主学习能力,对新鲜事物充满好奇。

教学要求:结合学生特点,注重理论与实践相结合,以项目驱动教学,提高学生的实际操作能力和解决问题的能力。

将课程目标分解为具体的学习成果,以便于教学设计和评估。

二、教学内容1. Java基础语法:变量、数据类型、运算符、控制流程(条件语句、循环语句)、数组等基本概念和用法。

参考教材章节:第一章至第三章。

2. 面向对象编程:类与对象、构造方法、封装、继承、多态等核心概念及应用。

参考教材章节:第四章至第六章。

3. Java标准库和常用开发工具:String类、集合框架、输入输出流、异常处理、常用开发工具(如Eclipse、IntelliJ IDEA)的使用。

参考教材章节:第七章至第九章。

4. Java应用实例:数据结构(如链表、树、图)、算法(如排序、查找)、网络编程(如Socket编程)等领域的Java实现。

参考教材章节:第十章至第十二章。

5. 编程实践:结合课程项目,进行实战演练,培养学生实际编程能力和解决问题的能力。

大一java程序设计课程设计

大一java程序设计课程设计

大一java程序设计课程设计一、课程目标知识目标:1. 理解Java程序设计的基本语法、数据类型、运算符和控制结构;2. 掌握面向对象编程的基本概念,如类、对象、继承、多态和封装;3. 学会使用Java标准库和常用开发工具,如Eclipse或IntelliJ IDEA;4. 熟悉Java异常处理、文件操作和简单图形用户界面设计。

技能目标:1. 能运用Java语言编写解决实际问题的程序,如计算器、学生管理系统等;2. 培养良好的编程习惯,如编写规范、注释清晰、代码重构;3. 学会分析问题、设计算法、编写程序、调试和优化代码;4. 提高团队协作能力,通过与同学合作完成项目,锻炼沟通和协作技巧。

情感态度价值观目标:1. 培养学生对编程的兴趣和热情,激发创新意识;2. 树立正确的编程观念,认识到编程对个人和社会的重要性;3. 培养学生的耐心、细心和毅力,面对编程难题时不轻言放弃;4. 鼓励学生分享知识、互相帮助,形成良好的学习氛围。

本课程针对大一学生,结合Java程序设计课程性质,以培养学生实际编程能力为核心,注重理论与实践相结合。

在教学过程中,关注学生的个体差异,鼓励学生积极参与、主动探究,提高学生的编程素养和综合素质。

通过本课程的学习,期望学生能够掌握Java编程的基本知识和技能,为后续专业课程和实际工作打下坚实基础。

二、教学内容1. Java基础语法:变量、数据类型、运算符、控制结构(条件语句、循环语句);2. 面向对象编程:类与对象、构造方法、封装、继承、多态;3. Java标准库:常用类(String、Math、System等)、集合框架(List、Set、Map等);4. 异常处理:try-catch-finally结构、自定义异常;5. 文件操作:文件读写、文件遍历、文件属性操作;6. 图形用户界面设计:Swing组件、事件处理、布局管理器;7. Java编程规范:命名规则、注释规范、代码组织;8. 调试与优化:调试技巧、性能优化、代码重构;9. 实践项目:计算器、学生管理系统、简易游戏等。

java课程设计.

java课程设计.

java 课程设计 .一、教学目标本节课的教学目标是使学生掌握Java编程语言的基本语法和程序设计的基本思想,培养学生编写简单Java程序的能力。

具体来说,知识目标包括:1.理解Java语言的基本语法和数据类型。

2.掌握基本的控制结构和函数。

3.了解面向对象编程的基本概念。

技能目标包括:1.能够使用Java语言编写简单的程序。

2.能够利用面向对象编程思想解决实际问题。

情感态度价值观目标包括:1.培养学生对编程语言的兴趣和好奇心。

2.培养学生解决问题的能力和团队合作精神。

二、教学内容本节课的教学内容主要包括Java语言的基本语法、数据类型、控制结构和函数。

具体安排如下:1.介绍Java语言的基本语法和编程环境。

2.讲解Java的数据类型,包括整数类型、浮点类型、布尔类型等。

3.介绍控制结构,包括条件语句和循环语句。

4.讲解Java的函数,包括函数的定义和调用。

5.引入面向对象编程的基本概念,如类、对象、封装等。

三、教学方法为了激发学生的学习兴趣和主动性,本节课将采用多种教学方法。

具体包括:1.讲授法:教师讲解Java语言的基本语法和编程环境。

2.案例分析法:通过分析具体的Java程序案例,使学生理解数据类型、控制结构和函数的使用。

3.实验法:学生动手编写Java程序,巩固所学知识。

4.讨论法:学生分组讨论面向对象编程的概念,分享学习心得。

四、教学资源为了支持教学内容和教学方法的实施,本节课将准备以下教学资源:1.教材:选用《Java编程思想》作为主要教材,为学生提供系统的学习材料。

2.参考书:提供《Java核心技术》等参考书籍,供学生深入学习。

3.多媒体资料:制作PPT课件,生动展示Java编程的相关概念。

4.实验设备:为学生提供计算机和网络环境,进行Java编程实践。

五、教学评估为了全面、客观地评估学生的学习成果,本节课将采用多种评估方式。

具体包括:1.平时表现:观察学生在课堂上的参与程度、提问回答等情况,了解学生的学习态度和理解程度。

java课程设计doc

java课程设计doc

java课程设计doc一、教学目标本课程旨在通过学习Java编程语言,使学生掌握Java的基本语法、数据结构、控制流程、面向对象编程等核心知识,培养学生具备编程思维和解决问题的能力。

1.理解Java编程语言的基本语法和规则。

2.掌握Java中的基本数据类型和数据结构。

3.熟悉Java的控制流程,包括条件语句、循环语句等。

4.理解面向对象编程的基本概念和原则,掌握类、对象、继承、多态等核心概念。

5.能够使用Java编写简单的程序,解决实际问题。

6.能够阅读和理解Java代码,进行代码的审查和修改。

7.能够使用Java开发工具,如集成开发环境(IDE)进行程序的编写、调试和运行。

情感态度价值观目标:1.培养学生的编程兴趣,激发学生对计算机科学的热爱。

2.培养学生的自主学习能力,提高学生的问题解决能力。

3.培养学生团队合作精神,提高学生的沟通协作能力。

二、教学内容本课程的教学内容主要包括Java编程语言的基本语法、数据结构、控制流程和面向对象编程等。

1.Java基本语法:介绍Java编程语言的基本规则和语法,包括变量、数据类型、运算符、表达式等。

2.数据结构:讲解Java中的基本数据结构,包括字符串、数组、列表、集合等,并介绍如何使用这些数据结构进行编程。

3.控制流程:学习Java中的条件语句、循环语句等控制流程,掌握如何根据条件进行分支和循环操作。

4.面向对象编程:理解面向对象编程的基本概念,学习如何定义类、创建对象、实现接口、继承和多态等。

为了提高学生的学习兴趣和主动性,本课程将采用多种教学方法相结合的方式。

1.讲授法:教师通过讲解和示范,向学生传授Java编程语言的基本概念和语法。

2.讨论法:鼓励学生参与课堂讨论,通过小组合作、问题解答等形式,培养学生的思考和沟通能力。

3.案例分析法:通过分析实际案例,让学生了解Java编程在实际应用中的方法和技巧。

4.实验法:安排实验课程,让学生亲自动手编写代码,培养学生的实践能力和问题解决能力。

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

JAVA综合实验:滑板反射小球游戏专业:电子科学与技术(微电子方向)学号:20132116姓名:李瑞婷2014-2015第二学期源代码:ball.javapackageorg.crazyit.ball;importjava.awt.Image;importjava.io.File;importjavax.imageio.ImageIO;importjava.io.IOException;public class Ball extends BallComponent { // 定义球的竖向速度privateintspeedY = 10;// 定义弹球的横向速度privateintspeedX = 8;// 定义是否在运动privateboolean started = false;// 定义是否结束运动privateboolean stop = false;/*** m 有参数构造器** @parampanelWidth* int 画板宽度* @parampanelHeight* int 画板高度* @param offset* int 位移* @param path* String 图片路径*/public Ball(intpanelWidth, intpanelHeight, int offset, String path)throwsIOException {// 调用父构造器super(panelWidth, panelHeight, path);// 设置y坐标this.setY(panelHeight - super.getImage().getHeight(null) - offset);}/*** 设置横向速度** @param speed* int 速度* @return void*/public void setSpeedX(int speed) {this.speedX = speed;}/*** 设置竖向速度** @param speed* int 速度* @return void*/public void setSpeedY(int speed) { this.speedY = speed;}/*** 设置是否在运动** @param b* boolean* @return void*/public void setStarted(boolean b) { this.started = b;}/*** 设置是否结束运动** @param b* boolean* @return void*/public void setStop(boolean b) { this.stop = b;}/*** 返回横向速度** @return int 速度*/publicintgetSpeedX() {returnthis.speedX;}/*** 返回竖向速度** @return int 速度*/publicintgetSpeedY() {returnthis.speedY;}/*** 是否在运动** @return boolean 是否在运动*/publicbooleanisStarted() {returnthis.started;}/*** 是否已经结束运动** @return boolean 是否已经结束运动*/publicbooleanisStop() {returnthis.stop;}}BallComponentpackage org.crazyit.ball;import java.awt.Image;import java.io.File;import javax.imageio.ImageIO;import java.io.IOException;publicclass BallComponent {// 设置x坐标privateint x = -1;// 设置y坐标privateint y = -1;// 设置图片private Image image = null;// 设置图片速度privateint speed = 5;public BallComponent(String path) throws IOException {super();this.image = ImageIO.read(new File(path));}/*** 构造器** @param panelWidth* int画板宽度* @param panelHeight* int画板高度* @param path* String 图片路径*/public BallComponent(int panelWidth, int panelHeight, String path) throws IOException {super();// 读取图片this.image = ImageIO.read(new File(path));// 设置x坐标this.x = (int) ((panelWidth - image.getWidth(null)) / 2);}/*** 构造器** @param x* int图像的x坐标* @param y* int图像的y坐标* @param path* String 图片路径*/public BallComponent(String path, int x, int y) throws IOException { super();// 读取图片this.image = ImageIO.read(new File(path));this.x = x;this.y = y;}/*** 获取x坐标** @return int x坐标*/publicint getX() {returnthis.x;}/*** 获取y坐标** @return int y坐标*/publicint getY() {returnthis.y;}/*** 获取图片速度** @return int图片速度*/publicint getSpeed() {returnthis.speed;}/*** 设置x坐标** @param x* int x坐标* @return void*/publicvoid setX(int x) {this.x = x;}/*** 设置y坐标** @param y* int y坐标* @return void*/publicvoid setY(int y) {this.y = y;}/*** 返回图片** @return Image 图片*/public Image getImage() {returnthis.image;}}package org.crazyit.ball;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.Timer;import java.awt.Dimension;import java.awt.Image;import java.awt.Graphics;import java.awt.Color;import java.awt.event.KeyAdapter; import java.awt.event.KeyListener; import java.awt.event.KeyEvent; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import java.io.IOException;publicclass BallFrame extends JFrame { // 定义JPanel的宽度privatefinalint BALLPANEL_WIDTH = 307;// 定义JPanel的高度privatefinalint BALLPANEL_HEIGHT = 400;// 定义画板private BallPanel ballPanel = null;// 定义档板// private Image stick = null;// 设置档板x坐标privateint stickX = -1;// 创建一个BallService实例private BallService service = null;// 定义一个timerTimer timer = null;/*** 默认构造器*/public BallFrame() throws IOException {super();// 初始化initialize();}/*** 初始化界面** @return void*/publicvoid initialize() throws IOException {// 设置窗口的标题this.setTitle("弹球");// 设置为不可改变大小this.setResizable(false);// 设置背景为黑色this.setBackground(Color.BLACK);// 获取画板ballPanel = getBallPanel();// 创建BallService实例service = new BallService(this, BALLPANEL_WIDTH, BALLPANEL_HEIGHT);// 定义每0.1秒执行一次监听器ActionListener task = new ActionListener() {publicvoid actionPerformed(ActionEvent e) {// 开始改变位置service.run();// 刷新画板ballPanel.repaint();}};// 如果timer不为空if (timer != null) {// 重新开始timertimer.restart();} else {// 新建一个timertimer = new Timer(100, task);// 开始timertimer.start();}this.add(ballPanel);// 增加事件监听器KeyListener[] klarr = this.getKeyListeners();if (klarr.length == 0) {// 定义键盘监听适配器KeyListenerkeyAdapter = new KeyAdapter() {publicvoid keyPressed(KeyEventke) {// 改变档板的坐标service.setStickPos(ke);}};this.addKeyListener(keyAdapter);}}/*** 获取画板** @return BallPanel返回BallPanle*/public BallPanelgetBallPanel() {if (ballPanel == null) {// 新建一个画板ballPanel = new BallPanel();// 设置画板的大小ballPanel.setPreferredSize(new Dimension(BALLPANEL_WIDTH,BALLPANEL_HEIGHT));}return ballPanel;}// 定义一个JPanel内部类来完成画图功能publicclass BallPanel extends JPanel {/*** 重写void paint( Graphics g )方法** @param g* Graphics* @return void*/publicvoid paint(Graphics g) {// 画图service.draw(g);}}BallGamepackage org.crazyit.ball;import java.io.IOException;import javax.swing.JFrame;publicclass BallGame {/*** 开始游戏** @return void*/publicstaticvoid main(String[] args) throws IOException { BallFrameballFrame = new BallFrame();ballFrame.pack();ballFrame.setVisible(true);ballFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}}BallServicepackage org.crazyit.ball;import java.awt.event.KeyEvent;import java.awt.Image;import java.awt.Graphics;import java.io.IOException;publicclass BallService {// 定义一个Stick(档板)private Stick stick = null;// 定义一个弹球private Ball ball = null;// 定义一个游戏结束图片private BallComponent gameOver = null;// 定义一个赢了游戏的图片private BallComponent won = null;// 定义一个砖块图片数组private Brick[][] bricks = null;privateint width;privateint height;BallFrame ballFrame = null;/*** 私有空构造器*/private BallService() {super();}/**** @param frame* JFrameJFrame实例* @param width* int宽* @param height* int高* @return BallService*/public BallService(BallFrame frame, int width, int height) throws IOException {// 初始化变量this.width = width;this.height = height;this.ballFrame = frame;// 创建一个Stick(档板)实例stick = new Stick(width, height, "img/stick.jpg");// 创建一个弹球的实例ball= new Ball(width, height, stick.getImage().getHeight(null), "img/ball.gif");// 游戏结束图片gameOver = new BallComponent("img/over.gif");// 赢图片won = new BallComponent("img/win.gif");// 砖块图片数组bricks = createBrickArr("img/brick.gif", 11, 6);}/*** run** @return void*/publicvoid run() {// 弹球坐标改变setBallPos();// 道具坐标改改变setMagicPos();}/*** 设置档板图片的位置** @param ke* KeyEvent键盘事件* @return void*/publicvoid setStickPos(KeyEventke) {// 把弹球的运动状态设为trueball.setStarted(true);// 如果是左方向键if (ke.getKeyCode() == KeyEvent.VK_LEFT) {if (stick.getX() - stick.SPEED> 0) {// x坐标向左移动stick.setX(stick.getX() - stick.SPEED);}}// 如果是右方向键if (ke.getKeyCode() == KeyEvent.VK_RIGHT) {if (stick.getX() + stick.SPEED<width - stick.getPreWidth()) {// x坐标向右移动stick.setX(stick.getX() + stick.SPEED);// ballFrame.getBallGame().reStart( ballFrame );}}// 如果是F2键if (ke.getKeyCode() == KeyEvent.VK_F2) {// 初始化ballFrametry {ballFrame.initialize();} catch (IOException e) {System.out.println(e.getMessage());}}}/*** 设置小球图片的位置** @return void*/publicvoid setBallPos() {// 正数的数度int absSpeedX = Math.abs(ball.getSpeedX());int absSpeedY = Math.abs(ball.getSpeedY());// 如果游戏已经开始而且没有结束if (ball.isStarted()) {// 如果小球碰到左边界if (ball.getX() - absSpeedX< 0) {// 重新设置x坐标ball.setX(ball.getImage().getWidth(null));// 把x方向的速度设为反方向ball.setSpeedX(-ball.getSpeedX());}// 如果小球碰到右边界if (ball.getX() + absSpeedX>width- ball.getImage().getWidth(null)) {// 重新设置x坐标ball.setX(width - ball.getImage().getWidth(null) * 2);// 把x方向的速度设为反方向ball.setSpeedX(-ball.getSpeedX());}// 如果小球碰到上边界if (ball.getY() - absSpeedY< 0) {// 重新设置y坐标ball.setY(ball.getImage().getWidth(null));// 把y方向的速度设为反方向ball.setSpeedY(-ball.getSpeedY());}// 如果小球碰到下边界if (ball.getY() + absSpeedY>height- stick.getImage().getHeight(null)) {// 如果小球与档板有碰撞if (isHitStick(ball)) {// 重新设置y坐标ball.setY(height- ball.getImage().getHeight(null) * 2);// 把y方向的速度设为反方向ball.setSpeedY(-ball.getSpeedY());}}// 与砖块碰撞后的运动for (int i = bricks.length - 1; i> -1; i--) {for (int j = bricks[i].length - 1; j > -1; j--) {// 如果小球与砖块有碰撞if (isHitBrick(bricks[i][j])) {if (ball.getSpeedY() > 0) {ball.setSpeedY(-ball.getSpeedY());}}}}// 结束游戏if (ball.getY() >height) {ball.setStop(true);}// 设置x坐标ball.setX(ball.getX() - (int) (Math.random() * 2)- ball.getSpeedX());// 设置y坐标ball.setY(ball.getY() - (int) (Math.random() * 2)- ball.getSpeedY());}}/*** 小球与砖块是否有碰撞** @return boolean*/publicboolean isHitBrick(Brick brick) {if (brick.isDisable()) {returnfalse;}// ball的圆心x坐标double ballX = ball.getX() + ball.getImage().getWidth(null) / 2;// ball的圆心y坐标double ballY = ball.getY() + ball.getImage().getHeight(null) / 2;// brick的中心x坐标double brickX = brick.getX() + brick.getImage().getWidth(null) / 2;// brick的中心y坐标double brickY = brick.getY() + brick.getImage().getHeight(null) / 2;// 两个坐标点的距离double distance = Math.sqrt(Math.pow(ballX - brickX, 2)+ Math.pow(ballY - brickY, 2));// 如果两个图形重叠,返回true;if (distance < (ball.getImage().getWidth(null) +brick.getImage().getWidth(null)) / 2) {// 使brick无效brick.setDisable(true);returntrue;}returnfalse;}/*** BallComponent是否与档板有碰撞** @param image* BallComponent图像* @return boolean*/publicboolean isHitStick(BallComponentbc) {// 获取图片对象Image tempImage = bc.getImage();// 如果与档板有碰撞if (bc.getX() + tempImage.getWidth(null) >stick.getX()&&bc.getX() <stick.getX() + stick.getPreWidth()&&bc.getY() + tempImage.getHeight(null) >stick.getY()) { returntrue;}returnfalse;}/*** 设置道具的位置** @return void*/publicvoid setMagicPos() {for (int i = 0; i<bricks.length; i++) {for (int j = 0; j <bricks[i].length; j++) {// 获取magicMagic magic = bricks[i][j].getMagic();if (magic != null) {// 如果这个brick的状态是无效的if(bricks[i][j].isDisable() &&magic.getY() <height) {// 设置magic的y坐标向下增加magic.setY(magic.getY() + magic.getSpeed());// 设置档板的宽度setStickWidth(magic);}}}}}/*** 设置档板的长度** @param magic* Magic 道具* @return void*/publicvoid setStickWidth(Magic magic) {if (isHitStick(magic)) {// 道具的作用magic.magicDo(stick);}}/*** 判断是否赢了** @return boolean*/publicboolean isWon() {// 如果消了全部砖块,则为赢for (int i = 0; i<bricks.length; i++) {for (int j = 0; j <bricks[i].length; j++) {if (!bricks[i][j].isDisable()) {returnfalse;}}}returntrue;}/*** 创建一个类型为Brick的数组** @param path* String 图像路径* @param xSize* int* @param ySize* int* @return Brick[][]*/public Brick[][] createBrickArr(String path, int xSize, int ySize) throws IOException {// 创建一个Brick[][]Brick[][] bricks = new Brick[xSize][ySize];int x = 0;int y = 0;int random = 0;int imageSize = 28;boolean isDisable = false;// 迭代初始化数组for (int i = 0; i<xSize; i++) {for (int j = 0; j <ySize; j++) {// 创建一个新的砖块random = (int) (Math.random() * 3);x = i * imageSize;y = j * imageSize;// 一定机率没有砖块isDisable = Math.random() > 0.8 ? true :false;if (isDisable) {random = 0;}Brick brick = new Brick(path, random, x, y);brick.setDisable(isDisable);// 设置x坐标brick.setX(x);// 设置y坐标brick.setY(y);bricks[i][j] = brick;}}return bricks;}/*** 画图** @param g* Graphics 用来画图的对象* @return void*/publicvoid draw(Graphics g) {// 如果赢了if (isWon()) {// 绘制赢的图片g.drawImage(won.getImage(), won.getX(), won.getY(), width,height - 10, null);} elseif (ball.isStop()) {// 绘制游戏结束图像g.drawImage(gameOver.getImage(), gameOver.getX(), gameOver.getY(),width, height - 10, null);} else {// 清除原来的图像g.clearRect(0, 0, width, height);// 绘制档板图像g.drawImage(stick.getImage(), stick.getX(), stick.getY(), stick.getPreWidth(), stick.getImage().getHeight(null), null);// 绘制弹球图像g.drawImage(ball.getImage(), ball.getX(), ball.getY(), null);// 迭代绘制砖块图像for (int i = 0; i<bricks.length; i++) {for (int j = 0; j <bricks[i].length; j++) {BallComponent magic = bricks[i][j].getMagic();// 如果这个砖块图像对像是有效的if (!bricks[i][j].isDisable()) {// 里面的数字1为砖块图像间的间隙g.drawImage(bricks[i][j].getImage(),bricks[i][j].getX(), bricks[i][j].getY(),bricks[i][j].getImage().getWidth(null) - 1,bricks[i][j].getImage().getHeight(null) - 1, null);} elseif (magic != null&&magic.getY() <height) {g.drawImage(magic.getImage(), magic.getX(), magic.getY(), null);}}}}}Magicpackage org.crazyit.ball;import java.io.IOException;publicabstractclass Magic extends BallComponent {/*** 提供给子类调用的构造器** @param path* String 文件路径* @param x* int x坐标* @param y* int y坐标*/public Magic(String path, int x, int y) throws IOException { super(path, x, y);}/*** 道具的功能** @param stitck* Stick* @return void*/publicabstractvoid magicDo(Stick stick);}Stickpackage org.crazyit.ball;import java.io.IOException;publicclass Stick extends BallComponent {// 定义档板移动的速度publicstaticfinalint SPEED = 20;// 定义档板初始的长度privateint preWidth = 0;/*** 有参数构造器** @param panelWidth* int画板宽度* @param panelHeight* int画板高度* @param path* String 图片路径*/public Stick(int panelWidth, int panelHeight, String path) throws IOException {// 调用父构造器super(panelWidth, panelHeight, path);// 设置y坐标this.setY(panelHeight - super.getImage().getHeight(null));// 设置原本的长度this.preWidth = super.getImage().getWidth(null);}/*** 获取初始长度** @return int初始长度*/publicint getPreWidth() {returnthis.preWidth;}/*** 设置初始长度** @return void*/publicvoid setPreWidth(int preWidth) {this.preWidth = preWidth;}}运行结果。

相关文档
最新文档