Java课程设计打字游戏
java猜字小游戏课程设计
java猜字小游戏课程设计一、教学目标本课程旨在通过Java猜字小游戏的设计与实现,让学生掌握Java编程的基本语法、流程控制语句、数据结构等基础知识,培养学生运用Java语言解决实际问题的能力。
同时,通过小组合作、讨论交流的方式,培养学生的团队协作意识和沟通能力。
1.掌握Java基本语法和编程规范。
2.理解流程控制语句(if、for、while等)的使用。
3.熟悉字符串操作、数组和列表等数据结构。
4.了解常用的Java类库和API。
5.能够运用Java语言编写简单的猜字游戏。
6.掌握调试和运行Java程序的基本方法。
7.具备查找和使用Java相关资料的能力。
情感态度价值观目标:1.培养学生的编程兴趣,提高自主学习能力。
2.增强学生团队协作、沟通交流的能力。
3.培养学生勇于面对挑战、解决问题的精神。
二、教学内容本课程的教学内容主要包括Java基本语法、流程控制语句、数据结构、字符串操作等知识。
教学过程中,将结合具体的猜字游戏案例,让学生动手实践,巩固所学知识。
1.Java基本语法和编程规范。
2.流程控制语句(if、for、while等)的使用。
3.字符串操作、数组和列表等数据结构。
4.常用的Java类库和API。
5.猜字游戏的设计与实现。
三、教学方法本课程采用讲授法、案例分析法、实验法等多种教学方法,旨在激发学生的学习兴趣,提高学生的主动性和团队协作能力。
1.讲授法:用于讲解Java基本语法、流程控制语句等理论知识。
2.案例分析法:通过分析具体的猜字游戏案例,让学生理解并掌握Java编程技巧。
3.实验法:让学生动手编写和调试Java程序,培养实际操作能力。
四、教学资源本课程所需教学资源包括教材、多媒体资料、实验设备等。
1.教材:选用权威、实用的Java编程教材,为学生提供理论知识的学习资料。
2.多媒体资料:制作精美的PPT、教学视频等,辅助学生理解和掌握知识。
3.实验设备:为学生提供充足的计算机设备,进行编程实践。
Java的打字小游戏
}
public static void main(String[] args) {
new WordGame(); //调用窗口类的构造器
}
}
//画出当前得分
g.setColor(Color.WHITE) ;
g.setFont(new Font("",Font.ITALIC,16));
g.drawString("SCORE:" + score, 10, 20);
}
public WP() {
super();
this.setOpaque(false); //设置面板为透明的
* 5--通过线程让字母沿着y轴方向下落(按照自己速度)
* 6--当我们所按下的键与屏幕上的字符的对应的键值相同时,让屏幕上的该字符消失(另外实现加分)
* 7--如果屏幕上的字符下落的y坐标超出屏幕的高度,就让该字符消失(另外实现减分)
*/
public class WordGame extends JFrame implements Serializable {
this.getW(); //调用创建一个字符对象的方法
timer.schedule(new TimerTask() { //设置执行计划匿名内部类的方式
@Override
public void run() {
w.setWy(w.getWy()+w.getWspeed()); //字符按照自己的速度下落
if(w2!=null){ //判断拿到的字符对象是否为空防止出现空指针
if((e.getKeyChar()+"").equals(words[w2.getWindex()])){ //判断所按键的字符是否与显示的字符相同
用Java制作一个简单的打字游戏
用Java制作一个简单的打字游戏Java是一种功能强大的编程语言,可以用来开发各种类型的应用程序,包括游戏。
在本篇文章中,我将向您介绍如何使用Java制作一个简单的打字游戏。
首先,我们需要设置游戏的基本框架。
创建一个Java类,命名为TypingGame。
在TypingGame类中,我们将使用Java Swing库来创建游戏窗口和图形界面。
import javax.swing.*;import java.awt.*;import java.awt.event.*;public class TypingGame extends JFrame {private JLabel titleLabel;private JLabel wordLabel;private JTextField inputField;private JButton startButton;private JButton resetButton;private JLabel scoreLabel;private int score;public TypingGame() {initComponents();}private void initComponents() {setTitle("打字游戏");setDefaultCloseOperation(EXIT_ON_CLOSE);setLayout(new FlowLayout());titleLabel = new JLabel("欢迎来到打字游戏!");add(titleLabel);wordLabel = new JLabel();wordLabel.setFont(new Font("Arial", Font.BOLD, 24)); add(wordLabel);inputField = new JTextField(10);add(inputField);startButton = new JButton("开始");startButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) {startGame();}});add(startButton);resetButton = new JButton("重置");resetButton.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent evt) {resetGame();}});add(resetButton);scoreLabel = new JLabel("得分: 0");add(scoreLabel);pack();}private void startGame() {String[] words = {"Java", "编程", "游戏", "挑战", "乐趣"}; int randomIndex = (int) (Math.random() * words.length); String randomWord = words[randomIndex];wordLabel.setText(randomWord);inputField.requestFocus();inputField.setText("");inputField.addKeyListener(new KeyAdapter() {public void keyTyped(KeyEvent evt) {char typedChar = evt.getKeyChar();if (typedChar == randomWord.charAt(0)) {score++;scoreLabel.setText("得分: " + score);randomIndex = (int) (Math.random() * words.length); randomWord = words[randomIndex];wordLabel.setText(randomWord);inputField.setText("");inputField.requestFocus();}}});}private void resetGame() {score = 0;scoreLabel.setText("得分: " + score);}public static void main(String[] args) {SwingUtilities.invokeLater(new Runnable() {public void run() {new TypingGame().setVisible(true);}});}}上述代码展示了一个简单的打字游戏的实现。
java打字小游戏源码_java实现快速打字游戏
java打字⼩游戏源码_java实现快速打字游戏本⽂实例为⼤家分享了java实现打字游戏的具体代码,供⼤家参考,具体内容如下import java.util.Random;import java.util.Scanner;public class Game {public Game(Player player) {}public Game() {}public String printStr(Player player) {StringBuffer a=new StringBuffer();for(int i=0;iint num=(int)(Math.random()*(7));switch(num) {case 1:a.append(">");break;case 2:a.append("break;case 3:a.append("+");break;case 4:a.append("-");break;case 5:a.append("*");break;case 6:a.append("/");break;case 0:break;}}String str=a.toString();System.out.println(str);return str;}public void printResult(Player player) {String num1=this.printStr(player);Scanner input=new Scanner(System.in);player.setStartTime();String num2=input.next();long currentTime=System.currentTimeMillis();player.setElapsedTime(currentTime,player.getStartTime());if (num1.equals(num2)) {if ((currentTime-player.getStartTime())/1000>LevelParam.levels[player.getLevelNo()-1].getTimeLimit()) {System.out.println("你输⼊太慢了,输⼊超时,退出。
java课程设计字母打字游戏
java课程设计字母打字游戏一、教学目标本节课的教学目标是让学生掌握Java编程的基本语法和流程控制,能够使用Java编写简单的字母打字游戏。
具体来说,知识目标包括:1.理解Java的基本数据类型和变量。
2.掌握Java的运算符和表达式。
3.熟悉Java的流程控制语句,包括条件语句和循环语句。
技能目标包括:1.能够使用Java编写简单的程序,实现基本的输入输出。
2.能够使用Java的流程控制语句,实现程序的逻辑控制。
3.能够独立完成字母打字游戏的编写和调试。
情感态度价值观目标包括:1.培养学生对编程的兴趣和热情,提高学生的问题解决能力。
2.培养学生团队合作的精神,鼓励学生在课堂上积极互动和交流。
3.培养学生对编程的持续学习和探索的态度,激发学生的创新意识。
二、教学内容本节课的教学内容主要包括Java的基本语法和流程控制。
具体安排如下:1.介绍Java的基本数据类型和变量,包括整数类型、浮点类型、字符类型和布尔类型。
2.讲解Java的运算符和表达式,包括算术运算符、比较运算符、逻辑运算符和赋值运算符。
3.学习Java的流程控制语句,包括条件语句(if-else)和循环语句(for、while、do-while)。
4.通过案例分析和实践,让学生掌握条件语句和循环语句的使用,编写简单的字母打字游戏。
三、教学方法为了激发学生的学习兴趣和主动性,本节课将采用多种教学方法相结合的方式。
具体方法如下:1.讲授法:教师讲解Java的基本语法和流程控制,为学生提供系统的知识框架。
2.案例分析法:通过分析具体的字母打字游戏案例,让学生理解和掌握Java编程的方法。
3.实验法:学生动手实践,编写和调试字母打字游戏,培养学生的实际编程能力。
4.小组讨论法:学生分组合作,互相交流和讨论,培养学生的团队合作精神和问题解决能力。
四、教学资源为了支持教学内容和教学方法的实施,本节课将利用多种教学资源。
具体资源如下:1.教材:《Java编程入门》教材,为学生提供基础知识的学习材料。
java打字训练测试软件课程设计
java打字训练测试软件课程设计一、课程目标知识目标:1. 理解Java编程语言的基本语法和结构;2. 掌握使用Java编写简单程序的能力;3. 学习编写打字训练测试软件的相关类和接口;4. 了解软件开发的流程和规范。
技能目标:1. 能够运用所学知识独立设计并编写打字训练测试软件;2. 培养良好的编程习惯,编写结构清晰、可读性强的代码;3. 提高问题分析能力和逻辑思维能力;4. 学会使用调试工具进行程序调试,找出并修复错误。
情感态度价值观目标:1. 培养对编程的兴趣和热情,激发主动学习的动力;2. 树立团队协作意识,学会与他人共同解决问题;3. 培养严谨、踏实的学术态度,勇于面对编程中的挑战;4. 增强自信心,相信自己具备解决复杂问题的能力。
本课程针对高年级学生,结合学科特点和学生实际情况,将知识目标、技能目标和情感态度价值观目标分解为具体的学习成果。
教学过程中,注重理论与实践相结合,培养学生实际编程能力,提高他们对编程的兴趣和热情。
通过本课程的学习,使学生能够独立完成打字训练测试软件的设计与开发,为后续学习奠定基础。
二、教学内容1. Java基本语法:变量、数据类型、运算符、控制语句(条件语句、循环语句);2. 面向对象编程:类与对象、构造方法、封装、继承、多态;3. 常用类和接口:String类、Scanner类、ArrayList集合;4. 异常处理:异常的概念、try-catch语句、throws关键字;5. 文件操作:文件的读取与写入、文件的随机访问;6. 图形用户界面(GUI):Swing图形用户界面编程、事件处理;7. 打字训练测试软件设计:需求分析、功能设计、界面设计、编码实现、测试与调试。
教学内容按照教学大纲安排,结合课本章节进行组织,确保科学性和系统性。
具体安排如下:1. 前四章为基础知识,为学生编写打字训练测试软件提供必要的语法支持;2. 第五、六章为进阶知识,使学生掌握异常处理和文件操作,为软件设计提供保障;3. 第七章为实际应用,通过学习GUI编程,让学生能够独立设计并实现打字训练测试软件;4. 整个教学内容以实际项目为导向,将理论知识与实际操作相结合,提高学生的编程实践能力。
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毕业课程设计打字游戏
中南大学Java课程设计报告题目打字游戏学生姓名窦立阳指导教师陈丽萍学院信息科学与工程学院专业班级计科1204完成时间 2015年1月15日目录第一章实验要求 (3)第二章总体设计2.1 界面设计 (4)2.2 运行流程 (4)2.3 逻辑设计 (4)2.4 积分设计 (4)第三章详细设计3.1 主面板 (5)3.1.1 两个按键 (5)3.1.2 相关全局变量 (5)3.1.3 全局变量说明 (5)3.1.4 相关全局函数 (7)3.2 字符下落模块 (7)3.2.1WordLabel (7)3.2.2WordFallControl (8)3.2.3WordFallLabel (8)3.3 速度控制模块 (8)3.4 按键模块设计 (8)3.5 键盘监听事件 (9)3.6 积分模块设计 (9)3.7 事件模块设计 (10)第四章调试分析4.1 第一次调4.2 第二次调试 (11)4.3 第三次调试 (12)第五章运行结果 (13)第六章课程设计总结 (17)第七章参考文献 (19)第八章附录:带注释的源代码8.1Wordfall (20)8.1.1 WordFallControl 类 (20)8.1.2 WordLabel 类 (22)8.1.3 WordFallLabel 类 (23)8.2 ScoreLabel 类 (24)8.3 StartButton 类 (25)8.4 TimeLabel8.5 AAAAA类:程序的主函数入口 (28)8.6 Maintain 类 (30)第一章实验要求【问题描述】设计实现一个打字游戏,界面参见图2-2,具备如下功能:●点击“开始”按钮,产生随机字符从屏幕上方下落;●点击键盘上按钮,如果正确,当前的字符消失,产生新的按钮从上方继续落下。
●提供速度调整和积分功能。
图2-2 打字游戏界面第二章总体设计2.1 界面设计根据实验要求中的图2-2,在主面板中,1.1.1 有一个模块控制各个字符的生成并且控制他们的自动下落,并在正确触发时,字符不可见;1.1.2有一个模块用于设置下落速度;1.1.3有两个按键,分别为“开始”和“结束”,用于字符下落的开始和结束;1.1.4整个面板处于键盘事件监听中,所以还有一个模块负责监听键盘事件;1.1.5相应的,根据要求,会有一个模块用于将键盘事件和下落的字符进行操作,并且计算出积分。
打豆豆游戏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打小字母游戏课程设计
java打小字母游戏课程设计一、课程目标知识目标:1. 理解Java基本语法,掌握字符串和字符操作;2. 学会使用循环和条件语句进行逻辑判断和流程控制;3. 掌握随机数的生成和运用。
技能目标:1. 能够编写简单的Java程序,实现小字母游戏功能;2. 学会运用所学知识解决实际问题,提高编程实践能力;3. 培养良好的编程习惯,如代码规范、注释清晰。
情感态度价值观目标:1. 培养学生对编程的兴趣,激发学习热情;2. 培养学生的团队合作精神,提高沟通能力;3. 培养学生的创新意识和问题解决能力。
课程性质:本课程为实践性较强的编程课程,旨在让学生通过实际操作,掌握Java编程的基本知识,培养编程思维。
学生特点:学生处于初中或高中年级,对计算机编程有一定兴趣,具备基本的计算机操作能力。
教学要求:结合课本知识,注重实践操作,关注个体差异,提高学生的编程能力和逻辑思维能力。
通过本课程的学习,使学生能够独立完成小字母游戏的设计与实现,达到课程目标所分解的具体学习成果。
1. Java基本语法:变量定义、数据类型、运算符、表达式;2. 字符串和字符操作:字符串连接、截取、转换,字符与ASCII码互转;3. 循环和条件语句:for循环、while循环、if条件语句、switch语句;4. 随机数生成:Math类中random方法的使用,随机数在游戏中的应用;5. 小字母游戏功能实现:游戏规则介绍,编写代码实现游戏逻辑;6. 编程规范与注释:代码书写规范,合理使用注释提高代码可读性;7. 团队合作与沟通:分组讨论,共同完成游戏设计,提高团队协作能力。
教学内容安排和进度:1. 第1课时:Java基本语法及变量定义;2. 第2课时:字符串和字符操作;3. 第3课时:循环和条件语句;4. 第4课时:随机数生成;5. 第5课时:小字母游戏功能分析与设计;6. 第6课时:编写代码实现小字母游戏;7. 第7课时:编程规范与注释,团队合作与沟通。
Java打字训练课程设计
提高打字速度:通过训练提 高打字速度,为未来的学习 和工作打下基础
提高打字效率:通过训练提 高打字效率,为未来的学习
和工作打下基础
感谢您的观看
汇报人:
打字技巧和训练方法
手指位置:熟悉键盘上的字母位置,提高打字速度 盲打训练:通过练习盲打,提高打字速度和准确性 打字速度训练:通过打字游戏或软件,提高打字速度和准确性 打字技巧:掌握正确的打字姿势和手指动作,提高打字速度和准确性
Java编程练习题
● 基础语法练习:变量、数据类型、运算符、条件语句等 ● 面向对象编程练习:类、对象、继承、多态等 ● 集合框架练习:List、Set、Map等 ● 异常处理练习:try-catch-finally、throw、throws等 ● 输入输出流练习:FileInputStream、FileOutputStream、BufferedReader、
Java打字训练课程 设计
,a click to unlimited possibilities
汇报人:
目录 /目录
01
点击此处添加 目录标题
02
课程目标
03
课程内容
04
课程安排
05
课程收益
01 添加章节标题
02 课程目标
掌握Java编程基础
理解Java语言基础语法和数据 类型
掌握Java控制流语句和循环结 构
课程形式:在线 教学、视频教学、 互动练习、作业 布置
学习资源推荐
推荐书籍:《Java编程思想》、《Java核心技术》、《Java编程入门经典》等 推荐网站:Stack Overflow、GitHub、CSDN等 推荐视频教程:Coursera、Udemy、慕课网等 推荐练习平台:LeetCode、Codeforces、HackerRank等
JAVA程序设计“打字程序”
3.1 系统设计目标
从磁盘添加现有的文本文件显示在程序界面上方。在打字开始前,可以设置测试时间, 方便快捷地结束测试。显示测试结果。结果主要包括:打字速度和错误率。在录入过程中, 显示当前速度和剩余时间。为了时实提醒用户打字速度和打字时间必需可以时实提示打字速 度和剩余时间(剩余时间是设置的测试时间减掉已使用的时间)。使用菜单栏。要求菜单栏 可以从“文件——>打开”添加文件,可以从“文件——>退出”退出程序,可以从“帮助 ——>关于”了解程序信息。多情况结束测试。1、当测试结束时,结束测试。2、当点击“结 束测试”按钮结束测试。3、当文章录入完成结束测试。文字录入是学习计算机非常重要的 一部分。在手写录入技术和语音识别技术还不完善的同时大部分人还在使用键盘作为文字录 入的工具。所以我编了这样一个小程序,同时也是我的面向对象程序设计的课程设计。
本程序使用的开发工具是 java1.6,它目前是比较流行的 java 语言开发工具,在执行 效率方面表现良好,在跨平台方面更是强项。因此用户可以放心使用。
1.2 设计目的及意义
随着科学技术的不断提高,计算机科学目渐成熟,计算机怩深入到工作和生活的各个角 落,文字录入是学习计算机非常重要的一部分。在手写录入技术和语音识别技术还不完善的 同时大部分人还在使用键盘作为文字录入的工具。所以我编了这样一个小程序,同时也是我 的面向对象程序设计的课程设计。希望能对电脑初学都和想提高打字速度的朋友们有所帮 助。
成绩
徐州工程学院
综合训练报告
课 程 名 称 面向对象程序设计综合设计
专
业 计算机科学与技术(单)
班
级
09 计单
学生姓名
黄晨
学
号
2009*****44
java打字母游戏课程设计
java打字母游戏课程设计一、课程目标知识目标:1. 理解Java基本语法,掌握面向对象编程的基本概念;2. 学会使用Java编写简单的打字母游戏,理解游戏设计的基本流程;3. 掌握字符数组的使用,了解字符串处理的基本方法。
技能目标:1. 能够独立编写打字母游戏的代码,实现游戏的基本功能;2. 培养学生运用所学知识解决实际问题的能力,提高编程实践技能;3. 提高学生的逻辑思维能力,培养良好的编程习惯。
情感态度价值观目标:1. 激发学生对编程的兴趣,培养学习Java的热情;2. 培养学生的团队协作意识,提高沟通与交流能力;3. 引导学生树立正确的价值观,认识到编程在现实生活中的应用价值。
课程性质:本课程为实践性课程,注重培养学生的动手能力和编程思维。
学生特点:学生在本年级已具备一定的Java基础,有一定的编程能力,但实践经验和逻辑思维能力有待提高。
教学要求:结合学生特点,课程设计要注重实用性,从实际案例出发,引导学生通过动手实践,提高编程技能。
同时,注重培养学生的逻辑思维能力和团队协作精神,使学生在学习过程中获得成就感,激发学习兴趣。
通过分解课程目标为具体学习成果,为后续教学设计和评估提供依据。
二、教学内容1. Java基本语法复习:包括变量声明、数据类型、运算符、控制结构等;教材章节:第一章至第三章。
2. 面向对象编程基础:类与对象、构造方法、继承与多态;教材章节:第四章至第六章。
3. 字符串与字符数组:字符串处理方法、字符数组的使用;教材章节:第七章。
4. 打字母游戏设计:a. 游戏规则与需求分析:介绍游戏规则,引导学生进行需求分析;b. 游戏界面设计:布局、用户交互界面;c. 游戏逻辑实现:随机生成字母、用户输入、判断得分与游戏结束条件;d. 游戏优化:异常处理、代码优化。
5. 编程实践:根据教学进度,安排学生进行打字母游戏的编写实践。
教学安排与进度:第一课时:Java基本语法复习;第二课时:面向对象编程基础;第三课时:字符串与字符数组;第四课时:打字母游戏设计(a、b);第五课时:打字母游戏设计(c、d);第六课时:编程实践与成果展示。
java课程设计打字小程序
java课程设计打字小程序一、教学目标本章节的教学目标为:知识目标:使学生掌握Java编程语言的基本语法和结构;理解面向对象编程的基本概念和方法。
技能目标:培养学生具备基本的Java程序设计能力,能够独立完成简单的Java程序;培养学生运用Java语言解决实际问题的能力。
情感态度价值观目标:培养学生对计算机科学的兴趣和热情,提高学生自主学习和探究的精神;培养学生良好的团队合作意识和沟通能力。
二、教学内容本章节的教学内容为:第1节:Java语言简介学习Java语言的发展历史、特点和应用领域;了解Java语言的基本语法和结构。
第2节:Java基本数据类型和运算符学习Java语言的基本数据类型、运算符和表达式;掌握Java语言的数据类型转换和运算符优先级。
第3节:控制语句学习Java语言的条件语句、循环语句和分支语句;掌握条件语句和循环语句的使用方法和注意事项。
第4节:面向对象编程基础学习面向对象编程的基本概念和方法;了解类、对象、封装、继承和多态等概念。
第5节:Java数组和字符串学习Java语言的数组和字符串类型;掌握数组的创建、使用和遍历,字符串的连接、转换和操作。
第6节:Java异常处理学习Java语言的异常处理机制;掌握try-catch-finally语句的使用和异常类的定义。
三、教学方法本章节的教学方法为:采用讲授法,讲解Java语言的基本语法和结构;采用案例分析法,分析实际编程问题,引导学生运用Java语言解决问题;采用实验法,让学生动手编写Java程序,巩固所学知识。
四、教学资源本章节的教学资源包括:教材:《Java编程思想》或《Java核心技术》;参考书:《Java编程指南》或《Java实战手册》;多媒体资料:教学PPT、视频教程;实验设备:计算机、网络环境。
五、教学评估本章节的教学评估方式包括:1.平时表现:评估学生在课堂上的参与程度、提问和回答问题的表现,以及课堂作业的完成情况。
JAVA打字游戏
import java.awt.*;import java.awt.event.*;import java.util.*;import javax.swing.*;public class MyPanel extends JFrame{public int FPS;public Thread newthread;public static boolean swit;MouseListener ml=new C();KeyListener kl=new D();JPopupMenu jmp;JMenuItem jmi;letter myletter;Random r;int isTypedSum;int isOmittedSum;int isWrongTypedSum;int width,height;float percent;Toolkit KT;public static void main(String args[]){new MyPanel();}public MyPanel(){KT=this.getToolkit();width=KT.getScreenSize().width;height=KT.getScreenSize().height;this.setSize(new Dimension(width,height));this.setContentPane(new A());this.show();FPS=100;isTypedSum=isOmittedSum=isWrongTypedSum=0; percent=0f;r=new Random();}class A extends JPanel implements Runnable{public A(){this.setBackground(Color.pink); addComponents();sta();}public void sta(){newthread=new Thread(this);newthread.start();myletter=new letter(MyPanel.this);myletter.randomLetters();}public void run(){while(newthread!=null){this.repaint();try{Thread.sleep(FPS);}catch(InterruptedException e){System.out.println(e.toString());}}}public void addComponents(){MyPanel.this.addKeyListener(kl);jmp=new JPopupMenu();jmi=new JMenuItem("开始游戏");jmi.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){isTypedSum=isOmittedSum=isWrongTypedSum=0; swit=true;sta();}});jmp.add(jmi);jmi=new JMenuItem("结束游戏");jmi.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){stop();swit=false;}});jmp.add(jmi);jmp.addSeparator();jmi=new JMenuItem("增加字母数字"); jmi.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {if(myletter.exist_letter_num==9);elsemyletter.exist_letter_num++;myletter.randomLetters();}});jmp.add(jmi);jmi=new JMenuItem("加快下落速度"); jmi.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {for(int i=0;i<myletter.exist_letter_num;i++) myletter.speed[i]++;}});jmp.add(jmi);jmp.addSeparator();jmi=new JMenuItem("减少字母数字"); jmi.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {if(myletter.exist_letter_num==1);elsemyletter.exist_letter_num--;myletter.randomLetters();}});jmp.add(jmi);jmi=new JMenuItem("减缓下落速度"); jmi.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e)for(int i=0;i<myletter.exist_letter_num;i++){if(myletter.speed[i]>1)myletter.speed[i]--;}}});jmp.add(jmi);MyPanel.this.addMouseListener(ml);}public void paintComponent(Graphics g){super.paintComponent(g);int sum;int showPercent=0;if(swit){myletter.paintLetters(g);sum=isTypedSum+isWrongTypedSum+isOmittedSum;if(sum==0) { percent=0f; showPercent=0;}else{percent=(float)isTypedSum/sum;showPercent=(int)(percent*100);}g.drawString("击中"+isTypedSum+" 错击"+isWrongTypedSum+" 漏掉"+isOmittedSum+" 正确率"+showPercent+"%",200,200);}else{g.drawString("击中"+isTypedSum+" 错击"+isWrongTypedSum+" 漏掉"+isOmittedSum+" 正确率"+showPercent+"%",200,200);}}}class C extends MouseAdapter{public void mousePressed(MouseEvent e){showPopup(e);}public void mouseReleased(MouseEvent e)showPopup(e);}public void showPopup(MouseEvent e){if(e.isPopupTrigger())jmp.show(e.getComponent(),e.getX(),e.getY()); }}class D extends KeyAdapter{public void keyPressed(KeyEvent e){char key=e.getKeyChar();if(isTyped(key)){}else{}}public boolean isTyped(char key){for(int i=0;i<myletter.exist_letter_num;i++) {if((char)(key-32)==[i].charAt(0)) {isTypedSum++;myletter.reStart(i);return true;}}isWrongTypedSum++;return false;}}public void stop(){newthread=null;}}class letter{MyPanel game;final int Max;boolean let[];int X[];int Y[];int speed[];int exist_letter_num;int XY[];int ini;StringBuffer c[];String cc[];Random ran=new Random();Color mycolor[]={Color.red,Color.green};int aa[];public letter(MyPanel game){Max=9; //将字母最多设置为9个。
java开发实例制作打字游戏
打字游戏制作一个纯代码游戏没有一张图片,如果你愿意可以自己添加图片,本游戏是学习java的时候自己做的打字游戏为了提高打字速度,也为巩固所学知识,现将源码上传供大家学习参考,本人也是新手,有许多不足之处望见谅。
源码如下package Dzgame;/** @author tx*/import java.awt.Color;import java.awt.Container;import java.awt.Font;import java.awt.Graphics;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;import java.util.Arrays;import java.util.Timer;import java.util.TimerTask;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.JTextField;/**** @author Administrator**/public class GameTest extends JPanel implements KeyListener { public static boolean kg;/** 声明一个文本框用于输入和显示字母*/public static JTextField tx;/*** zm类的一个数组,长度为零**/public static ZM[] zm = {};public GameTest(){this.addKeyListener(this);}/*** 子弹数组,长度为零**/public static Bullet[] bullets = {};public void paint(Graphics g) {super.paint(g);paintzm(g);paintb(g);}/** 绘出随机的字母图象*/public void paintzm(Graphics g) {super.paint(g);g.setColor(Color.PINK );g.setFont(new Font(Font.SANS_SERIF, Font.BOLD, 45)); for (int i = 0; i < zm.length; i++) {ZM z1 = zm[i];g.drawString(z1.str, z1.x, z1.y);}}public void paintb(Graphics g) {g.setFont(new Font(Font.SANS_SERIF, Font.BOLD, 25)); for (int i = 0; i < bullets.length; i++) {Bullet z1 = bullets[i];g.drawString(z1.str, z1.x, z1.y);}}int k = 0;/** 该方法用于不停的加入随机字母*/public void tjzm() {k++;if (k % 15 == 0) {zm = Arrays.copyOf(zm, zm.length + 1);zm[zm.length - 1] = new ZM();zm[zm.length - 1].getx();zm[zm.length - 1].gety();zm[zm.length - 1].gets();}}/*** 该方法用于移动已经生成的字母;* */public void movezm(Object obj) {if (obj instanceof ZM[]) {for (int i = 0; i < zm.length; i++) {zm[i].y += 3;}} else if (obj instanceof Bullet[]) {if (bullets.length > 0) {for (int i = 0; i < bullets.length; i++) { bullets[i].y += -8;}}}}/** 该方法用于移除已经越界的字母*/ public void remp(Object obj) {if (obj instanceof ZM[]) {ZM z = new ZM();ZM z1 = new ZM();for (int i = 0; i < zm.length; i++) { if (zm[i].y > 400) {z = zm[i];zm[i] = zm[zm.length - 1];zm[zm.length - 1] = z;zm = Arrays.copyOf(zm, zm.length - 1); }}}if (obj instanceof Bullet[]) {Bullet z = new Bullet();for (int j = 0; j < bullets.length; j++) {if (bullets[j].y < -10) {z = bullets[j];bullets[j] = bullets[bullets.length -1];bullets[bullets.length - 1] = z;bullets = Arrays.copyOf(bullets,bullets.length - 1);}}}}public void fs(String s,int n) {bullets = Arrays.copyOf(bullets, bullets.length + 1);bullets[bullets.length - 1] = new Bullet(); bullets[bullets.length - 1].str = s;bullets[bullets.length - 1].x = n;bullets[bullets.length - 1].y = 340;}public boolean jc( Bullet bt){boolean fj = false;ZM z=new ZM();for(int i=0;i<zm.length ;i++){if(zm[i].hitby(bt)){fj=true;z=zm[i];zm[i] = zm[zm.length - 1];zm[zm.length - 1] = z;zm = Arrays.copyOf(zm, zm.length - 1);}else{fj=false;}}return fj;}public void pzjc(){Bullet z=new Bullet();for(int i=0;i<bullets.length ;i++){if(jc(bullets[i])){z = bullets[i];bullets[i] = bullets[bullets.length - 1];bullets[bullets.length - 1] = z;bullets = Arrays.copyOf(bullets, bullets.length - 1); }}}/** 运行主程序,由定时器负责定时绘图并刷新屏幕*/public void zmAction() {Timer timer = new Timer();timer.schedule(new TimerTask() {public void run() {tjzm();movezm(zm);remp(zm);movezm(bullets);remp(bullets);pzjc();repaint();}}, 10, 83);}public static void main(String[] args) {JFrame jf = new JFrame("打字游戏");jf.setBounds(40, 150, 400, 580);jf.setVisible(true);jf.setLayout(null);jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);GameTest test = new GameTest();test.setLocation(0, 0);test.setBounds(0, 0, 400, 400);jf.add(test);tx=new JTextField();tx.setBackground(Color.ORANGE);tx.setBounds(50, 450, 250, 30);tx.setFocusable(false);jf.add(tx);test.zmAction();test.requestFocus();}public void keyTyped(KeyEvent e) {}public static String[]sz=new String[1]; public static String str;public char z;public void dd(){if(kg==true){for(int i=0;i<zm.length ;i++){if(zm[i].str==sz[0]){}}}}public void keyPressed(KeyEvent e) { int k = e.getKeyCode();z = e.getKeyChar();str=""+z;tx.setText(str);for(int i=0;i<zm.length;i++){if(zm[i].str.equals (str)){fs(str,zm[i].x) ; }}if (k==KeyEvent.VK_SPACE) {kg=true;}}public void keyReleased(KeyEvent e) {kg=false;}}///////////////////////////////////////////////////////////////。
java打字游戏
import java.awt.Button;import java.awt.Color;import java.awt.Frame;import java.awt.GridLayout;import bel;import java.awt.Panel;import java.awt.TextField;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;import java.awt.event.WindowEvent;import java.awt.event.WindowListener;public class Data extends Frame{private static final long serialVersionUID = 1L;Label label1,label2,label3,label4;TextField text1,text2,text3,text4,text5;Button button1,button2,button3;Panel p1,p2,p3;int s=0;public Data(){super("打字游戏");this.setSize(250, 200); //设置组件尺寸this.setLocationRelativeTo(null);this.setBackground(Color.lightGray);label1=new Label("qsaasjhshsdfje");label2=new Label("显示处");label3=new Label("数据处");label4=new Label("打字处");text1=new TextField(15);text2=new TextField(15);text2.addKeyListener(new Redkey());text3=new TextField(2);text4=new TextField(2);text5=new TextField(5);button1=new Button("正确个数");button1.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){String s1=text1.getText();String s2=label1.getText();int len1=s1.length();int len2=s2.length();for(int i=0;i<len1;i++){if(s1.substring(i, i+1).equals(s2.substring(i, i+1)))//原来的==改为equalss++;}text3.setText(""+s);}});button2=new Button("错误个数");button3=new Button("错误率");p1=new Panel();p2 = new Panel();p3=new Panel();p2.setLayout(new GridLayout(2,2));p1.add(label2);p1.add(text1);p2.setLayout(new GridLayout(2,2));p2.add(label3);p2.add(label1);p2.add(label4);p2.add(text2);p3.setLayout(new GridLayout(2,3));p3.add(text3);p3.add(text4);p3.add(text5);p3.add(button1);p3.add(button2);p3.add(button3);this.add(p1,"North");this.add(p2,"Center");this.add(p3,"South");this.setVisible(true);this.addWindowListener(new MyWinClose());}public static void main(String[] args) {new Data();}class MyWinClose implements WindowListener{public void windowClosing(WindowEvent ev){System.exit(0);}public void windowOpened(WindowEvent ev){}public void windowActivated(WindowEvent ev){}public void windowDeactivated(WindowEvent ev){}public void windowClosed(WindowEvent ev){}public void windowIconified(WindowEvent ev){}public void windowDeiconified(WindowEvent ev){}}class Redkey implements KeyListener{@Overridepublic void keyPressed(KeyEvent arg0) {}@Overridepublic void keyReleased(KeyEvent arg0) {}@Overridepublic void keyTyped(KeyEvent arg0) {text1.setText(""+text2.getText()+arg0.getKeyChar());}}}。
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 drawGraphics g{//设置字体g.setFontfont;//设置画笔颜色g.setColorColor.white;g.fillOvalgetX-9, getY-24, 30, 30;g.setColorcolor;g.drawStringch+"", x, y;}//下落的方法public void down{y=y+speed;}//快速生成getters和setters方法:alt+shift+s---->r---->select all---->ok public void setXint x{this.x=x;}public int getX{return this.x;}public int getY{return y;}public void setYint y{this.y=y;}public char getCh {return ch;}public void setChchar ch {this.ch = ch;}public int getSpeed {return speed;}public void setSpeedint speed {this.speed = speed;}public Color getColor {return color;}public void setColorColor color {this.color = color;}public Font getFont {return font;}public void setFontFont font {this.font = font;}}2)DownCharFrame.javapackage DownCharGame;public class DownCharFrame {public static void mainString args{JFrame frame=new JFrame;frame.setTitle"打字母游戏V1.2";frame.setBounds200,100,640,480;frame.setResizablefalse;frame.setDefaultCloseOperationJFrame.EXIT_ON_CLOSE;DownCharPanel panel=new DownCharPanel;frame.addpanel;frame.addKeyListenerpanel;panel.addKeyListenerpanel;panel.startDown;frame.setVisibletrue;}}3DownCharPanel.javapackage DownCharGame;public class DownCharPanel extends JPanel implements KeyListener{C harEntity chs=new CharEntity10;//消除字母4,定义统计的变量//正确率i nt accuracy = 0;//正确数i nt rightNum = 0;//打错的个数i nt errorNum = 0;//遗漏的个数i nt loseNum = 0;//初始总分i nt sum = 1000;p ublic DownCharPanel{//为数组中的每一个子科目实例化forint i=0;i<chs.length;i++{CharEntity ce = new CharEntity;int fontSize=intMath.random10+20;ce.setFontnew Font"宋体",Font.BOLD,fontSize;ce.setXintMath.random580+30;ce.setY0;ce.setSpeedintMath.random3+1;ce.setColornew ColorintMath.random256, //0,255intMath.random256,intMath.random256;ce.setChchar65+intMath.random26;chsi=ce;}}p ublic void paintGraphics g{super.paintg;//设置背景图Image bgimg;try {bgimg = ImageIO.readnew File"Picture/238.jpg";g.drawImagebgimg, 0, 0, null;} catch IOException e {e.printStackTrace;}//消除字母5,绘制统计数字g.setFontnew Font"宋体",Font.BOLD,20;g.setColorColor.yellow;g.drawString"正确数:"+rightNum, 10, 40;g.setColorColor.red;g.drawString"错误数:"+errorNum, 10, 60;g.setColorColor.green;g.drawString"遗漏数:"+loseNum, 10, 80;//绘制下落的字母forint i=0;i<chs.length;i++{chsi.drawg;}//显示成绩g.setColorColor.white;g.drawString"您当前的成绩是:"+sum, 165, 23;//Game OveriferrorNum>50||loseNum>100{g.setColorColor.red;g.setFontnew Font"宋体",Font.BOLD,100;g.drawString"Game Over", 50, 250;}}p ublic void startDown{new Thread{public void run{whileloseNum>100||errorNum>50{try {Thread.sleep40;} catch InterruptedException e {e.printStackTrace;}forint i=0;i<chs.length;i++{ifchsi.getY>=480{//消除字母6,遗漏数++loseNum++;sum -= 100;chsi.setXintMath.random580+30;chsi.setY0;chsi.setColornew ColorintMath.random256,intMath.random256,intMath.random256;chsi.setChchar65+intMath.random26;}chsi.down;}repaint;//}}}.start;}p ublic void keyTypedKeyEvent e {}p ublic void keyPressedKeyEvent e {}p ublic void keyReleasedKeyEvent e {//消除字母7,实现具体的方法//7.1获取到键盘按下的字母char key = e.getKeyChar;//和当前按下字母key相同字母y值最大对应的下标int maxYindex = -1;//7.2使用按下的字母和chs数组中所有的字母去比较forint i=0; i<chs.length; i++{ifkey==chsi.getCh||key==chsi.getCh+32{//按下的字母key和下标对应的字母“相同”ifmaxYindex==-1{//说明第一次找到maxYindex = i;}else{//说明不是第一次找到ifchsmaxYindex.getY<chsi.getY{maxYindex = i;}}}}//判断正确还是错误ifmaxYindex==-1{//一个相同的字母都没有找到errorNum++;sum -= 100;}else{//至少找到一个相同的字母rightNum++;sum += 10;chsmaxYindex.setXintMath.random580+30;chsmaxYindex.setY0;chsmaxYindex.setChchar65+intMath.random26;}}}三、运行结果截图:四、实验总结:此程序运用了一维数组,且随机性;并且把键盘事件与电脑随机的功能相联系;有它的可取之处,值得我们学习;但也有不足之处,该程序不能自动结束;这点还有待完善;该程序比较基础;可以让自己先打好深刻了解理论基础;通过这次的课程设计,给自己增加了很多有用的经验,希望在以后的基础上可以接触些更有深度和技巧型的程序;让自己能更好的运用java的功能;。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
中南大学Java课程设计报告题目打字游戏学生姓名窦立阳指导教师陈丽萍学院信息科学与工程学院专业班级计科1204完成时间 2015年1月15日目录第二章总体设计界面设计 (4)运行流程 (4)逻辑设计 (4)积分设计 (4)第三章详细设计主面板 (5)两个按键 (5)相关全局变量 (5)全局变量说明 (5)相关全局函数 (7)字符下落模块 (7)WordLabel (7)WordFallControl (8)WordFallLabel (8)速度控制模块 (8)按键模块设计 (8)键盘监听事件 (9)积分模块设计 (9)事件模块设计 (10)第四章调试分析第一次调试 (11)第二次调试 (11)第三次调试 (12)第五章运行结果 (13)第六章课程设计总结 (17)第七章参考文献 (19)第八章附录:带注释的源代码Wordfall (20)WordFallControl类 (20)WordLabel类 (22)WordFallLabel类 (23)ScoreLabel类 (24)StartButton类 (25)TimeLabel类 (26)AAAAA类:程序的主函数入口 (28)Maintain类 (30)第一章实验要求【问题描述】设计实现一个打字游戏,界面参见图2-2,具备如下功能:●点击“开始”按钮,产生随机字符从屏幕上方下落;●点击键盘上按钮,如果正确,当前的字符消失,产生新的按钮从上方继续落下。
●提供速度调整和积分功能。
图2-2 打字游戏界面第二章总体设计界面设计根据实验要求中的图2-2,在主面板中,有一个模块控制各个字符的生成并且控制他们的自动下落,并在正确触发时,字符不可见;“开始”和“结束”,用于字符下落的开始和结束;运行流程程序启动,程序等待按键“开始”的事件的触发;当“开始”键触发后,负责字符下落的模块,将持续产生字符,并使其下落;键盘开始被监听,从键盘的按键触发,向程序返回值;积分模块开始工作,将字符下落模块的字符和键盘事件返回的值进行比较,得出积分,并且将积分值显示在面板上;如果点击“停止”按键,所有模块停止工作,等待程序关闭,或者等待“开始”逻辑设计字符不断产生并且下降,需要一个线程控制产生字符,然后还应该有一个线程对面一个字符,控制其下落。
键盘被按下后,立刻会有值返回到程序中,积分模块会每隔一段时间将,键盘事件返回的值,和当前需要按下的值进行比较。
积分说明当开始产生字符后,会有很多字符都是可输入的,但是当前可输入的字符只有一个,所以可以考虑设计一个链表,没当产生一个字符,便将该字符存入链表中,并且有一个指针永远指向当前需要输入的值。
由于界面大小有限,当字符持续下落超过界面大小时,不能够通过玩家来猜测,已经不见的当前需要输入字符,所以当界面上字符超过十个时,便认为该玩家反应时间过长,判定其为错误,并且将当前需要输入的字符设置为下一个。
并且从游戏角度考虑,当这种情况出现3次后,便可以判定本轮游戏结束。
第三章详细设计主面板public class GameFrame extends JFrame主面板中主要涉及的是两个按键,各个组件在面板上的布置,以及其他的全局变量的设置。
= new JButton()= new JButton()ScoreLabel scoreLabelKeyEventPanel keyEventPanelWordFallLabel wordFallLabelJSlider slider相关的全局变量boolean START_FLAG = false;ArrayList<Integer> CODE_LIST = newArrayList<Integer>();ArrayList<WordLabel> wordLabels = newArrayList<WordLabel>();int CHAR_VALUE = 0;int KEY_VALUE = 0;int POINTER = 0;int MAXFALSE = 3;int SUCCESSTIME = 0;int TRYTIME = 3;int SPEED = 1400;public static void init(){();();CHAR_VALUE = 0;KEY_VALUE = 0;POINTER = 0;MAXFALSE = 3;SUCCESSTIME = 0;TRYTIME = 3;}START_FLAG:由于在程序启动时,各个组件就已经开始工作,用START_FLAG使他们通过if语句,不做任何动作,当START_FLAG == true时,便可以开始进行游戏,避免了反复启动线程可能会造成意外情况的麻烦。
CODE_LIST:在游戏线程启动后,会产生很多的字符,这些字符若存放在局部空间内,很有可能会出现其他组件需要调用该值并且需要通过一系列传值过程才能实现,将这些值放在一个公共空间内的列表中,虽然会出现安全上面的问题,但是无疑为程序的实现减少了很多的工作,宽且这也只是一个游戏,在安全上的问题可以忽略。
wordLabels:这个全局变量的设置,主要是为了实现下落字符的消失。
产生的字符会放在label 中,通过控制label的行为来控制字符的行为。
将每一个WordLabel实例放在该列表中,可以通过在其他空间的控制来实现自己的想法。
CHAR_VALUE:里面存放的是产生的字符的值,每一个字符都可以通过ASCII码转变为一个整数类型的值,通过比较整数值来确定是否匹配。
KEY_VALUE:存放了最近一次从键盘内获得的值,由于可能出现连续出现相同字符的情况,KEY_VALUE里的值必须定时清空,考虑之后,与每次在每次比较完之后进行清空操作比较合适。
POINTER:在CODE_LIST中会有很多数,但是当前正确的值,只有一个,那就是POINTER 指向的位置,通过判断KEY_VALUE和CHAR_VALUE的值,对POINTER进行操作,具体操作会在ScoreLabel中说明。
MAXFALSE,TRYTIME:最大失误次数,当超过这个次数时,当局游戏就会结束。
SUCCESSTIME:本轮当前成功次数,统计成功次数用来积分。
SPEED:控制字符下落速度,这个值会与难度条上的值具有映射关系。
public static void init();在新的一轮游戏开始前,全局变量中的值任然是上一轮的数据,需要对其中的数据进行初始化,设置为公共方法便于调用,其中的操作都是必须的操作,无多余也无漏缺。
字符下落模块public class WordLabel extends JLabel{}:这个类主要负责创建一个下落的字符。
由于共有26个字母和10个数字会在游戏中被记为字符,通过随机函数(int)()*35) 产生36个随机数,根据ASCII码的规则,字符0-9对应的职位48-57,根据产生的值加上48,便可以得到字符0-9,同理字符A-Z对应的值为65-90,根据产生的值,由于是从10开始,所以加上55,就可以得到对应的字母字符,每产生一个字符,便将该字符添加到CODE_LIST中,以作他用。
public class WordFallControl extends Thread{}:在WordLabel被实例化后,需要有个方法控制其下落,由于会产生喝多字符,对众多字符进行统一管理,并且还要考虑到字符在其他情况下的动作,太过复杂,所以在这个组件中,只考虑字符的下落,每个字符交由一个控制对象控制。
每过毫秒的时间,WordLabel 的位置便会下移一个单位,这个单位设置为50 。
交由线程使其实现持续下降。
public class WordFallLabel extends JLabel implements unnable{}: 将前两个组件进行组合便是这个类的作用,只要这个实例运行正常,那么出现问题就不会是该模块的问题,除非是出现对字符的艺术化或是下落的幅度的改变这一类的需求。
下落速度模块JSlider自带的方法个头getValue()可以获得滑块的值,向滑块添加监听事件——addChangeListener(),在滑块移动时,可以将改变之后的值映射到上,以控制速度的变化。
滑块只能在一轮游戏开始前滑动,从程序实现角度考虑的理由是,当移动滑块时,整个面板的焦点便会由按键转移到滑块上来,这是键盘事件监听的对象也会转移到这个滑块部件上来,这时候有两种方法:一是在游戏中不允许移动滑块,二是在滑块中添加键盘监听事件。
相比较之下第一种简单而且符合大多数人的操作习惯,完全可以施行。
按键模块设计同上一小节所说的焦点的转移问题,将“开始”和“结束”设计为一个键,使整个面板的焦点可以在游戏开始到游戏结束都一直在同一个部件上,而且实现也很简单,只要持续监听START_FLAG的值,分辨当前的游戏状态,就能确定是该显示“开始”或是”结束“了。
键盘监听设计键盘事件不是要向text area 之类的部件中输入字符,而是向KEY_VALUE赋值,重写KeyListener类,使键盘按下事件的响应设置为KEY_VALUE = ()。
积分模块设计public class ScoreLabel extends JLabel implements Runnable该模块涉及到的变量有KEY_VALUE,CHAR_VALUE,CODE_LIST,POINTER,SUCCESSTIME,TRYTIME。
此时键盘事件监听中,只要有按键被按下,就会给KEY_VALUE赋一个值,POINTER指向一个位置,将(POINTER)的值与KEY_VALUE比较如果相等,则POINTER的值加一,指向列表中的下一个值(如果列表中还有的话),SUCCESSTIME加一;如果不相等,考虑这个值存在时间是否太长了,每个值都只有10个单位周期的生命这个可以通过列表的长度判断出来,每个单位周期,都会向列表中添加一个新的字符,当()-POINTER > 9时,POINTER自加一,指向下一个,TRYTIME减一,否则不进行任何操作。
时间模块设计这部分主要是为了熟悉一边线程的用法public class TimeLabel extends JLabel implements Runnable{/****/private static final long serialVersionUID = 1L;private Date date = new Date();private SimpleDateFormat sdFormat= new SimpleDateFormat("yyyy 年MM月dd日 hh:mm:ss");public TimeLabel(){new Thread(this).start();}@Overridepublic void run() {hm:第四章附录:带注释的源代码本章附上整个课程设计的游戏源代码,以及相关测试代码。