JAVA開發坦克大戰小遊戲個人實戰筆記

2020-10-26 11:00:37

1、認識frame類
a、這是一個視窗類
b、常用方法
setSize();## 標題//設定大小
setVisible();//顯示視窗
setTitle();//設定標題
setResizable();//設定是否能改變視窗大小
addWIndowListener //建立視窗監聽器`

package tank;

import java.awt.Frame;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class mainActivity {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Frame f=new Frame();     //呼叫jar包awt下的Frame視窗類進行範例化
		f.setVisible(true);     //呼叫顯示視窗的方法,設定視窗可見引數為true
		f.setSize(1000,800);		//設定視窗大小,括號內為視窗大小引數,單位為畫素
		f.setResizable(false);  //設定是否能改變視窗大小,是為true,否為false
		f.setTitle("坦克世界");	//設定標題 
		f.addWindowListener(new WindowAdapter() {//使用匿名內部類建立視窗監聽器

			@Override
			public void windowClosing(WindowEvent e) {//被監聽者
				// TODO Auto-generated method stub
				System.exit(0);//系統退出
			}	
		});
	}
}

這樣就可以點選自己建立好的視窗的「❌」號關閉這個視窗了。

其實還可以重新建立一個class檔案命名為tankfram ,使其繼承自Frame,在tankframe類中還應該建立一個無參的構造方法在這個無參的構造方法中寫入屬性設定

**package tank;

import java.awt.Frame;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class tankfram extends Frame {
	public tankfram() {
		setVisible(true);     //呼叫顯示視窗的方法,設定視窗可見引數為true
		setSize(800,600);		//設定視窗大小,括號內為視窗大小引數,單位為畫素
		setResizable(false);  //設定是否能改變視窗大小,是為true,否為false
		setTitle("̹坦克世界");	//設定標題 
		addWindowListener(new WindowAdapter() {//使用匿名內部類建立視窗監聽器
			@Override
			public void windowClosing(WindowEvent e) {//被監聽者
				// TODO Auto-generated method stub
				System.exit(0);//系統退出
			}
		});	
	}
}

接著在mainActivity中呼叫這個無參的構造方法即可

2、重寫paint方法,使用Graphics畫筆工具畫一個矩形
這個畫筆工具其實就是一個Frame類中的方法,我們需要早tankframelei中重寫這個方法

@Override
	public void paint(Graphics g) {//Graphics 可以理解為畫筆
		g.fillRect(200, 200, 50, 50);//使用畫筆在視窗的橫向距離200畫素點,縱向距離200200畫素點的地方建立一個長50畫素寬50畫素的矩形

	}

在這個方法中x軸也就是橫向是標題列從左至右依次增大,y軸也就是縱向是標題列從上往下依次增大
3、讓我們畫出的矩形動起來
要讓我們畫出的矩形動起來一般我們需要設定一個執行緒,但是考慮到我是一個初學者,我準備使用一個迴圈來完成它。
首先,需要介紹一個監聽器,這個監聽器是KeyAdapter,這個監聽器中有兩個方法,一個是keyPressed,這個方法是監聽鍵盤的按下活動的,另一個是keyReleased方法,這個方法是監聽鍵盤擡起活動的

	class mykeyListener extends KeyAdapter{

		@Override
		public void keyPressed(KeyEvent e) {     //鍵盤按下
			// TODO Auto-generated method stub
		}

		@Override
		public void keyReleased(KeyEvent e) {	//鍵盤擡起
			// TODO Auto-generated method stub
		}
}

這兩個方法都是從鍵盤介面卡類KeyAdapter重寫的,我們可以在這個兩個衝寫的方法中寫入我們所需要實現的內容。

要想讓我們畫出的圖形動起來直接在tankfram類中定義兩個變數,讓著兩個變數替換掉paint放發中的引數,然後在鍵盤監聽這個類中重新定義方塊的座標並寵幸顯示方塊即可,說到這裡系統又一個放是是專門用來完成介面重新整理的一個方法那就是repaint()。

但是呢,我們又不可能以值收在電腦旁按鍵盤,這時候我想到了用迴圈來做這個功能。

將mykeyListener中的功能給註釋掉,(注意:不要直接刪除,後面可能會用到),然後在paint方法中寫入 x=+10,接著會帶mainAvcivity類中寫入一個while死迴圈,這時編輯器會提示報異常,我們直接將這個異常用throw語句丟擲即可,在這個迴圈中寫入更新介面的方repaint()方法,這樣我們方塊就動起來了

public static void main(String[] args) throws InterruptedException {
		// TODO Auto-generated method stub   
		tankfram tf=new tankfram();//對tankfram進行範例化
		while(true) {
			Thread.sleep(100);
			tf.repaint();
		}
	}
public void paint(Graphics g) {//Graphics 可以理解為畫筆
		g.fillRect(x, y, 50, 50);//使用畫筆在視窗的橫向距離200畫素點,縱向距離200畫素點的地方建立一個長50畫素寬50畫素的矩形
		x+=10;
}