當前位置:編程學習大全網 - 編程語言 - java貪吃蛇是怎麽做出來的

java貪吃蛇是怎麽做出來的

/**

* MVC模式中得Viewer,只負責對數據的顯示,而不用理會遊戲的控制邏輯

*/

class SnakeView implements Observer {

SnakeControl control = null; //實例話壹個SnakeControl對象是control ..SnakeControl在jdk中不存在可能是第3方的或者是自己編寫的壹個類吧

SnakeModel model = null;//如上

JFrame mainFrame; //創建壹個面板類jframe

Canvas paintCanvas;

/**

*Canvas 組件表示屏幕上壹個空白矩形區域,應用程序可以在該區域內繪圖,或者可以從該區域捕獲用戶的輸入事件。

*應用程序必須為 Canvas 類創建子類,以獲得有用的功能(如創建自定義組件)。必須重寫 paint 方法,以便在 canvas 上執行自定義圖形。

*/

JLabel labelScore;//....不說了吧..

public static final int canvasWidth = 200; //常量寬度200

public static final int canvasHeight = 300;//常量高300

public static final int nodeWidth = 10;//常量寬度10

public static final int nodeHeight = 10;//常量高度10

public SnakeView(SnakeModel model, SnakeControl control) {

this.model = model;

this.control = control;

mainFrame = new JFrame("GreedSnake");//創建jframe 標題是GreedSnake

Container cp = mainFrame.getContentPane(); //得到jfram的容器

labelScore = new JLabel("Score:"); //創建jlabel 標簽內容是"Score:"

cp.add(labelScore, BorderLayout.NORTH);/將jlabel添加到jfram的容器中去

paintCanvas = new Canvas(); //創建新繪圖區

paintCanvas.setSize(canvasWidth + 1, canvasHeight + 1); //設置繪圖區大小

paintCanvas.addKeyListener(control);//添加鍵盤監聽器control

cp.add(paintCanvas, BorderLayout.CENTER);//將繪圖區添加到jfram容器中去.布局是BorderLayout的CENTER位置.就是東西南北中的中間

JPanel panelButtom = new JPanel();//創建壹個panel

panelButtom.setLayout(new BorderLayout());//設置布局是BorderLayout

JLabel labelHelp;//標簽的創建和添加開始了.......new了3遍就是實例化了3個都加到了panle的中間 ,標簽的內容都是""中間的

labelHelp = new JLabel("PageUp, PageDown for speed;", JLabel.CENTER);

panelButtom.add(labelHelp, BorderLayout.NORTH);

labelHelp = new JLabel("ENTER or R or S for start;", JLabel.CENTER);

panelButtom.add(labelHelp, BorderLayout.CENTER);

labelHelp = new JLabel("SPACE or P for pause", JLabel.CENTER);

panelButtom.add(labelHelp, BorderLayout.SOUTH);

cp.add(panelButtom, BorderLayout.SOUTH);//把這個panel添加到jframe的容器裏面去

mainFrame.addKeyListener(control);//為jframe添加鍵盤監聽器

mainFrame.pack();//調整此窗口的大小,以適合其子組件的首選大小和布局。如果該窗口和/或其所有者仍不可顯示,則兩者在計算首選大小之前變得可顯示。在計算首選大小之後,將會驗證該 Window。

mainFrame.setResizable(false);//設置此 frame 是否可由用戶調整大小。false就是不能

mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//點擊又上角的就是關閉

mainFrame.setVisible(true);//設置jfram為能看到

}

void repaint() {

Graphics g = paintCanvas.getGraphics();//Graphics詳細看jdk文檔..我就知道是壹個所有圖形上下文的抽象基類..這裏應該是那個畫圖面板

g.setColor(Color.WHITE);//設置這個顏色

g.fillRect(0, 0, canvasWidth, canvasHeight);//畫壹個矩形在x,y處畫壹個寬是200,高是300的矩形,

g.setColor(Color.BLACK);//顏色是黑的

LinkedList na = model.nodeArray;//LinkedList 類 List 接口的鏈接列表實現就是壹個集合對象了,因為不知道SnakeModel具體是壹個什麽類這裏就當作這個類能得到壹個集合

Iterator it = na.iterator();//得到叠代器去叠代這個集合

while (it.hasNext()) {//開始用while叠代

Node n = (Node) it.next();//得到壹個集合中元素.是壹個Node....這裏的Node不知道是什麽對象..有待於研究

drawNode(g, n);//調用另外方法

}

g.setColor(Color.RED);//設置顏色是紅的

Node n = model.food;//得到壹個新node..看來Node這裏應該是壹個坐標..這裏的坐標就是蛇吃的那個東西

drawNode(g, n);//畫這個東西..

updateScore();//調用..

}

private void drawNode(Graphics g, Node n) {//這是壹個畫方的方法..動態改變方型的位置

g.fillRect(n.x * nodeWidth,

n.y * nodeHeight,

nodeWidth - 1,

nodeHeight - 1);

}

public void updateScore() {//這是更新標簽的壹個方法

String s = "Score: " + model.score;

labelScore.setText(s);

}

public void update(Observable o, Object arg) {//這個就是Observer監聽類必須實現的方法..這裏是去調用repaint()方法..repaint方法就是不斷去改變畫圖版裏面的內容的

repaint();

}

}

參考資料:

以下是貪吃蛇java程序壹部分,我需要下面程序代碼的詳細註解...

  • 上一篇:40萬預算,買國產寶馬X3還是買寶馬5系,誰的性價比更高?
  • 下一篇:中小學推廣編程教育是否正當?
  • copyright 2024編程學習大全網