import android.app.Activity;
import android.os.Bundle;
public class Day5exercise2Activity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
MyView view = new MyView(this);
this.setContentView(view);
view.setFocusable(true);
view.requestFocus(); //设置view获得焦点
new Thread(view).start();
}
}
//MyView窗体类
import java.util.Random;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.KeyEvent;
import android.view.View;
public class MyView extends View implements Runnable {
MyChar[] chars;
Paint paint;
int wide = 300;
int height = 450;
public MyView (Context context){
super(context);
install();
}
//初始化方法
private void install() {
chars = new MyChar[200];
for (int i = 0; i < chars.length; i++) {
chars[i] = newMyChar();
}
//初始化 画笔
paint = new Paint();
paint.setColor(Color.WHITE);
paint.setTextSize(18); //设置字母长与宽的大小为18
}
//产生一个新的MyChar
private MyChar newMyChar() {
Random random = new Random();
MyChar c = new MyChar();
c.x = random.nextFloat()*wide;
c.y = -random.nextFloat()*height;
int number =(char)( random.nextInt(26)+97);
c.c =(char)number;
for (int j = 0; j < chars.length; j++) {
if (chars[j]!=null) {
boolean b = check(c,chars[j]); //让这个新的MyChar与前面已经生成好的MyChar比对,
if(!b){
c=this.newMyChar(); //如果比对结果返回false,说明这2个字符有重叠的部分,那就再执行newMyChar()方法,这就是递归,直到返回的结果为true,2个字母没有重合的部分,
//这时,才把这个MyView对象引用赋值为c,让return c ,这c就是与前面生产的所有的MyChar字母都没有重合的部分了.
}
}
}
return c;
}
//对比2个字母,判断是否有重合(重叠)部分,如果没有,返回true,否则返回false.
private boolean check(MyChar char1, MyChar char2) {
if (char1.x +18<char2.x || char1.x>char2.x+18) { //字母大小,在前面设置长与宽的值都是18
return true;
}
else if (char1.y+18<char2.y || char1.y>char2.y+18) {
return true;
}else {
return false;
}
}
//开始画画
public void onDraw(Canvas canvas){
for (int i = 0; i < chars.length; i++) {
if (chars[i].show) {
canvas.drawText(chars[i].c+"",chars[i].x, chars[i].y, paint);
}
}
}
//用户键盘事件
public boolean onKeyDown(int keyCode,KeyEvent event){
char userChar = Character.toLowerCase((char)event.getUnicodeChar());
for (int i = 0; i < chars.length; i++) {
if (chars[i].show && chars[i].c ==userChar) {
chars[i].show =false;
break;
}
}
return true;
}
//第二条线程
public void run(){
while(true){
for (int i = 0; i < chars.length; i++) {
chars[i].y++;
}
this.postInvalidate();
try{
Thread.currentThread().sleep(1000/30);
}catch(Exception e){}
}
}
}
//MyChar 字母类
public class MyChar {
public char c;
public float x;
public float y;
public boolean show = true;
}
//游戏页面效果:实现功能—不重叠,键盘输入一个字母,屏幕上一个相对应的字母消去。
黑马学习---------------------android打字母游戏
最新推荐文章于 2024-08-21 12:13:31 发布