黑马学习---------------------android打字母游戏

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;
 
}


//游戏页面效果:实现功能—不重叠,键盘输入一个字母,屏幕上一个相对应的字母消去。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章