黑馬學習---------------------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;
 
}


//遊戲頁面效果:實現功能—不重疊,鍵盤輸入一個字母,屏幕上一個相對應的字母消去。

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