目标:


在一个窗体上随机掉落字母,通过键盘输入,敲对后消除并且累计积分,否则扣除一定积分。


具体内容:


画一个窗体——》产生随机字母——》接受键盘输入——》显示分数


代码:

package chapter01;

import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent; public class MyChar {
public static void main(String[] args) {
Frame w = new Frame() ;
w.setSize(300 , 400) ; MyPanel mp = new MyPanel() ;
w.add(mp) ; Thread t = new Thread(mp) ;
t.start() ; w.addKeyListener(mp) ;
mp.addKeyListener(mp) ; w.show() ;
//响应程序关闭按钮
w.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
} ); }
} class MyPanel extends Panel implements Runnable , KeyListener{
int x[] = new int[10] ;
int y[] = new int[10] ;
char c[] = new char[10] ;
int score = 1000 ;
MyPanel() {
for (int i = 0; i < 10; i++) {
x[i] = (int)(Math.random()*300) ;
y[i] = (int)(Math.random()*300) ;
c[i] = (char)(Math.random()*26+97) ;
}
}
@Override
public void paint(Graphics g){
for(int i = 0 ; i < 10 ; i ++){
g.drawString(new Character(c[i]).toString(), x[i] , y[i]) ;
}
//显示成绩
g.setColor(Color.RED) ;
g.drawString("你的成绩是:"+score, 5, 15) ;
}
@Override
public void run() {
while(true){
for (int i = 0; i < 10; i++) {
y[i] ++ ;
if(y[i]>400){
y[i] = 0 ;
x[i] = (int)(Math.random()*300) ;
c[i] = (char)(Math.random()*26+97) ;
score -= 100 ;
}
}
try{
Thread.sleep(30) ;
}catch(Exception e)
{
e.printStackTrace();
}
repaint() ;
}
}
@Override
public void keyPressed(KeyEvent arg0) {
char keyC = arg0.getKeyChar() ;
int nowY = -1 ;
int nowIndex = -1 ;
for(int i = 0 ; i < 10 ; i ++){
if(keyC==c[i] && y[i]>nowY){ nowY = y[i] ;
nowIndex = i ; }
} if(nowIndex!=-1){
y[nowIndex] = 0 ;
x[nowIndex] = (int)(Math.random()*300) ;
c[nowIndex] = (char)(Math.random()*26+97) ;
score += 10 ;
}else {
score -= 100 ;
} }
@Override
public void keyReleased(KeyEvent arg0) {
// TODO Auto-generated method stub }
@Override
public void keyTyped(KeyEvent arg0) {
// TODO Auto-generated method stub }
} 运行截图:
 

注意事项:

(1)用的是最初的窗体类Frame,因为想比较一下和Jframe的区别,好吧,效果很明显

(2)里面用到了JAVA Frame 响应窗口关闭事件,响应了监听事件。如果是JFrame  只需要加一句话: setDefaultCloseOperation

(3)随机产生字母,考虑到了ASCII(97a-123z),具体方法是(char)(Math.random()*26+27)

(4)画字符的时候用到了drawString方法,但是它的第一个参数是字符串,怎么办呢,之前是用字符数组存储起来的,解决办法是new Character(c[i]).toString()

(5)如果字符落到屏幕下方,需要随机产生字母,并且位置还不能和以前一样,所以加了一个判断if(y[i]>400){y[i]=0;x[i]=(int)(Math.random()*300;)}用来生成随机位置

(6)有一个逻辑上需要考虑的点,那就是输入匹配的字母需要是最靠下的,用到了两个变量nowy和nowIndex,在字符数组中查找时先找到y值最大的数,然后记录下它的下标,再然后是重画


总结:

这是java入门的第一个小程序,关于基础语法和写代码的逻辑都有了更深一层的认识,特别是敲20遍之后,真的是头脑异常兴奋。

记得刚开始接触编程的时候,是c语言入门的,讲课的老师是一位上了年龄的老师,听的第一节课真的是枯燥无味,当时就想,天呐,编程难道就是这样的吗?!

后来又学的C++,讲课的女老师也只是在课堂上堆砌知识点,当时还没有真正入门。

后来有幸在图书馆看到了达内集团王洋老师写的《java就该这样学》,对于他推崇的构建主义学习法甚是震撼,颠覆了之前的学习观念,在跟着他实现一个又一个小的游戏或项目的时候,真心感觉到了编程逻辑之美。

 

打字母的游戏&Java入门的更多相关文章

  1. Java 入门课程视频实战-0基础 上线了,猜拳游戏,ATM实战,欢迎围观

    Java 入门课程视频实战-0基础 已经上传完了.欢迎小伙伴们过来围观 直接进入: http://edu.csdn.net/course/detail/196 课程文件夹例如以下: 1 初识Java  ...

  2. Java入门第一章

    后天就是十一长假了,亲们准备好了去哪儿玩了吗? 今天有点空,就来聊聊Java吧,当然是一些Java入门知识了,网上有很多,这里我只是列举一些我自己学到的,感谢大家关注喵的博客这么久,也为大家带来点新知 ...

  3. 第1章Java入门体验

    第1章Java入门体验 1.java简介和平台应用 Java是sun公司开发出来,现在属于ORACLE公司java分为几个部分:首先是最基础的Java SE部分,这部分是Java的基础知识,主要包括: ...

  4. Java入门(二)——果然断更的都是要受惩罚的。。。

    断更了一个多月,阅读量立马从100+跌落至10-,虽说不是很看重这个,毕竟只是当这个是自己的学习笔记,但有人看,有人评论,有人认同和批评的感觉还是很巴适的,尤其以前有过却又被剥夺的,惨兮兮的. 好好写 ...

  5. Java入门学习知识点汇总

    Java入门重要知识点在这里总结一下,以方便日后复习,这部分内容主要有:变量和常量,常用的运算符,流程控制语句,数组,方法这些内容 一.变量和常量 1.Java关键字 先贴张图: 所有关键字区分大小写 ...

  6. JAVA入门第一季(mooc-笔记)

    笔记相关信息 /** * @subject <学习与创业>作业1 * @author 信管1142班 201411671210 赖俊杰 * @className <JAVA入门第一季 ...

  7. Java入门——(1)Java编程基础

    Java入门--(1)Java编程基础 第二章 Java编程基础   JAVA 代码的基本格式: 修饰符 class 类名{ 程序代码 }   2.1关键字:赋予了特殊含义的单词.   2.2标识符: ...

  8. Java入门篇(六)——类和对象

    写到这里终于写到了入门篇的最后一个知识点了.类和对象是Java中经常被提到的两个词汇,实际上可以将类看作对象的载体,它定义了对象所具有的功能.Java是面向对象的语言,因此掌握类与对象是学习Java语 ...

  9. Java入门1

    一.eclipse的简单使用 1.新建项目 在package explorer的空白处点击右键,新建一个项目(new->Java Project)或者点击菜单栏的File->JavaPro ...

随机推荐

  1. Struts2实现登录权限访问控制

    目录: Ⅰ 条件 Ⅱ 目的 Ⅲ 分析 Ⅳ 实现 Ⅴ 具体代码实现 ------------------------------------------------------------------- ...

  2. Windows API常用函数

    转自:http://www.cnblogs.com/xiashengwang/p/4026259.html .NET中虽然类库很强,但还是有些时候功能有限,掌握常用的api函数, 会给我们解决问题提供 ...

  3. Webdriver如何启动不同浏览器(python)

    WebDriver 支持 Firefox (FirefoxDriver).IE (InternetExplorerDriver).Opera (OperaDriver) 和 Chrome (Chrom ...

  4. java-selenium(二)富文本编辑框的处理

    首先先看一下什么是富文本编辑框 HTML源码 思路:首先先进入到iframe中,再用js写,最后切出iframe 如果想要换行可以在换行的地方加上<br> 如果添加的文本中包含单引号.双引 ...

  5. sql取随机结果集

    应用场景: 某日,接产品姐姐需求,网站搜索页在搜索特定的内容时候,会现实搜索不到结果!如衣服网站,搜索鞋子等.为了不直接呈现一个赤裸裸的无此商品页面,so,需要在搜索商品件数小于3时,在下面随机推荐本 ...

  6. JS杂技之无中间变量的值交换方式

    从http://www.cnblogs.com/liuyitian/p/4081517.html#3074553看到一种无中间变量的值交换方式,具体如下: var a = 1;var b = 2;a ...

  7. Win7旗舰版+IIS7没有错误提示怎么办

    在IIS Manger中将ASP的调试属性修改默认值,启用服务端调试和客户端调试都改为True,重启后生效.

  8. How to use Variables in different component

    1. In Script Task component Set Value: Dts.Variables["ErrorMsg"].Value = string.Format(&qu ...

  9. 关于ionic中几个问题

    第一.每个页面的独立样式style标签不能写在ion-view外面,否则会出现路由问题,建议写在ion-content后面,例如下面的例子中,如果style但在ion-view中的话会出想路由问题,显 ...

  10. 解决ie7下overflow:hidden失效问题

    但父亲元素下面的子节点或者孙子节点有position:relative:或者absolute时,父亲即使设置了overflow:hidden:依然会溢出 解决方法可以: 在父亲元素上加上*positi ...