java 打字母游戏_打字母的游戏&Java入门

目标:

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

具体内容:

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

代码:

packagechapter01;import java.awt.*;importjava.awt.event.KeyEvent;importjava.awt.event.KeyListener;importjava.awt.event.WindowAdapter;importjava.awt.event.WindowEvent;public classMyChar {public static voidmain(String[] args) {

Frame w= newFrame() ;

w.setSize(300 , 400) ;

MyPanel mp= newMyPanel() ;

w.add(mp) ;

Thread t= newThread(mp) ;

t.start() ;

w.addKeyListener(mp) ;

mp.addKeyListener(mp) ;

w.show() ;//响应程序关闭按钮

w.addWindowListener(newWindowAdapter() {

@Overridepublic voidwindowClosing(WindowEvent e)

{

System.exit(0);

}

} );

}

}class MyPanel extends Panel implementsRunnable , 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) ;

}

}

@Overridepublic voidpaint(Graphics g){for(int i = 0 ; i < 10 ; i ++){

g.drawString(newCharacter(c[i]).toString(), x[i] , y[i]) ;

}//显示成绩

g.setColor(Color.RED) ;

g.drawString("你的成绩是:"+score, 5, 15) ;

}

@Overridepublic voidrun() {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() ;

}

}

@Overridepublic voidkeyPressed(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;

}

}

@Overridepublic voidkeyReleased(KeyEvent arg0) {//TODO Auto-generated method stub

}

@Overridepublic voidkeyTyped(KeyEvent arg0) {//TODO Auto-generated method stub

}

}

运行截图:

731ae8f47cfecbc358cae806680dfecd.png

注意事项:

(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就该这样学》,对于他推崇的构建主义学习法甚是震撼,颠覆了之前的学习观念,在跟着他实现一个又一个小的游戏或项目的时候,真心感觉到了编程逻辑之美。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值