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打字母遊戲
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.