实现打字母的游戏
这次这个案例能够说是头几次所讲的内容的一个技术汇总,主要是 运用了几大块的知识。我们先来定义一下案例的背景:在一个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){
char a='1';
char b='2';
System.out.println(a+b);
}
}
执行一下你会发现得到了一个意想不到的数字99,再看看以下这段类似的代码
public class MyTest {
public static void main(String[]args){
char a=1;
char b=2;
System.out.println(a+b);
}
}
这段代码我想就算不同意也能够猜出结果是3了,为什么会有这种差异,留给各位以后去探索吧
既然有不同的数据