Java图形界面实战案例——实现打字母游戏

这篇博客介绍了一个使用Java编写的动态打字母游戏,游戏中字母随机出现在屏幕上,玩家需通过键盘输入匹配字母以得分,不匹配则扣分。游戏包含了随机生成字母、更新屏幕、处理用户输入等功能,对提升编程和反应速度有帮助。
摘要由CSDN通过智能技术生成

实现打字母的游戏

 这次这个案例可以说是头几次所讲的内容的一个技术汇总,主要是 运用了几大块的知识。我们先来定义一下案例的背景:在一个300*400的窗体上,有10个随机产生的字母下落,在键盘上敲击字母,若是敲对了就消掉,初始化的成绩为1000分,每次敲对一个字母就加上10分,如果在字母落到了屏幕的下方还没有敲对的话则判定为失败,就扣除100分。
我们还是老样子,先来进行步骤的划分
1.做满天星
2.把星星改成随机的10个字母
3.让字母落下,如果字母落出了屏幕就生成新的字母,并从屏幕的上方重新出现
4.接收键盘输入并消除匹配的字母
5.实现积分程序
6.暂时先不说吧,先把第六步完成了,自然而然就能看到这一步需要什么了
## **1.做满天星** ##
现在做的星星,有些条件有所改变,需要一个300*400的窗体,需要10颗星星,现在大家先自己写一遍代码,随后再看看我的代码
   import java.awt.*;
public class MyChar {
   

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        Frame w = new Frame();
        w.setSize(300, 400);

        MyPanel mp = new MyPanel();
        w.add(mp);

        w.show();
    }

}
class MyPanel extends Panel
{
   
    public void paint(Graphics g)
    {
        for(int i=0;i<10;i++)
        {
            g.drawString("*", (int)(Math.random()*300), (int)(Math.random()*300));
        }
    }
} 
这里有几个地方需要注意一下,窗体的背景不再是黑色的,那么字体的颜色也不用再设置成白色的了,黑色的部分可能是个意外,为什么在纵坐标上我们不乘上400?这个问题肯定很多人都会想到,这里我来告诉各位,你想想我们的最终目的是让字母下落,等着用户看到键盘上对应的键,如果乘上400,就有可能有些字母一出来就在屏幕的最下方,这貌似并不符合我们设计的游戏的逻辑。事实上,我们前面的经验表明,如果乘上400,有些字母一出现可能会因为数值太大而看不见。

2.把星星改成随机的10个字母

第二步是生成10个随机字母,我们索性将这些在这一步将坐标放到数组变量里,以便准备给下落动作使用。
问题是,随机的字母如何产生?我们从未讲过数据类型,我认为一上来就介绍8中基本数据类型毫无意义,如果没有用到就会很快的忘记,回顾一下我们已经使用的数据类型都有什么。毫无疑问,第一个想到的就是int,整数类型(简称整型),这是目前为止我们使用最多的数据类型,既然有整型那么就一定有小数型,在很多语言里都有两张表达小护士的数据类型,一个float,另一个是double。看到单词我们就能知道个大概,double是两个的意思,这是由计算机的特点决定的,double用的两倍的空间来存储数据,所以可以想象的到double可以表示更多的数字,具体到小数来看,结果就是更加的精确,但是也就更加的浪费资源。事实上,整型也有short和long之分,这个也很好理解,从字面上去解释,short就是短的意思,对应的就是短整型,long是长的意思,对应的就是长整型,两者的区别就是表示的整型数据的长度不同,short int所表示的数据范围是   —32768to+32767。long int 表示的是-2,147,483,648 to 2,147,483,647 这样一来就很直观了嘛,long所表示的范围比short大的多得多
言归正传,另外,我们还用到了boolean类型,你说我没讲到boolean,其实我们在if或者循环里用做条件的表达式结果,boolean简单,里面就两个可能的值:true or false。
还有一个是byte类型,因为计算机是用0和1最为基本的运算单位的,但是表达的东西太少了,所以人们将0和1组成一个组来存放稍大一点的数,8个二进制数组合起来就是一个byte,这成为编程中最常用的基本数值单位。
介绍到我们关注的一个数据类型,即char。char是字符类型,就是放字符的,字符用单引号引起来,比如'a',这个我们没有用过,之前用双引号"*"不算,因为这是字符串String,这个String不放在数据类型里讨论。String是对象不是基本数据类型,这句话意味着这里讨论的数据类型不是对象,你可能觉得不是就不是呗,可是从学术的角度或者一直面向对象的程序员看来,就难以适应了,有人抨击Java不是纯粹的面向对象语言,指的就是8中基本数据类型不是对象,从程序员的角度来看,不是对象意味着点点不会出现方法。有的时候这是个问题,为什么Java的设计者不能再纯粹一点呢?这是有原因的,设计者们看的很深很远,从效率的角度考虑,基本数据类型的操作比对象更有效率,不过为了照顾面向对象程序员,Java提供了基本数据类型的封装类,帮助我们在需要的时候将这个数变成对象。
为什么要搞这么多的数据类型呢?一是为了更好的使用内存,声明变量的时候如果指定了这个变量是boolean类型的,程序就不用为这个变量准备int类型那么大的空间了;而是不同数据类型之间的运算规则又是不同的,我们来看下面两个程序的运算结果。
public class MyTest {
    public static void main(String[]args){
        
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值