java貪吃蛇
㈠ 用java寫的貪吃蛇的程序!~
傳智播客
www.itcast.cn
網站上面有個比較完整的貪吃蛇游戲教程,可以看看
㈡ 求Java貪吃蛇代碼
貪吃蛇
import java.awt.*;
import java.awt.event.*;
public class GreedSnake //主類
{
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
new MyWindow();
}
}
class MyPanel extends Panel implements KeyListener,Runnable//自定義面板類,繼承了鍵盤和線程介面
{
Button snake[]; //定義蛇按鈕
int shu=0; //蛇的節數
int food[]; //食物數組
boolean result=true; //判定結果是輸 還是贏
Thread thread; //定義線程
static int weix,weiy; //食物位置
boolean t=true; //判定游戲是否結束
int fangxiang=0; //蛇移動方向
int x=0,y=0; //蛇頭位置
MyPanel()
{
setLayout(null);
snake=new Button[20];
food=new int [20];
thread=new Thread(this);
for(int j=0;j<20;j++)
{
food[j]=(int)(Math.random()*99);//定義20個隨機食物
}
weix=(int)(food[0]*0.1)*60; //十位*60為橫坐標
weiy=(int)(food[0]%10)*40; //個位*40為縱坐標
for(int i=0;i<20;i++)
{
snake[i]=new Button();
}
add(snake[0]);
snake[0].setBackground(Color.black);
snake[0].addKeyListener(this); //為蛇頭添加鍵盤監視器
snake[0].setBounds(0,0,10,10);
setBackground(Color.cyan);
}
public void run() //接收線程
{
while(t)
{
if(fangxiang==0)//向右
{
try
{
x+=10;
snake[0].setLocation(x, y);//設置蛇頭位置
if(x==weix&&y==weiy) //吃到食物
{
shu++;
weix=(int)(food[shu]*0.1)*60;
weiy=(int)(food[shu]%10)*40;
repaint(); //重繪下一個食物
add(snake[shu]); //增加蛇節數和位置
snake[shu].setBounds(snake[shu-1].getBounds());
}
thread.sleep(100); //睡眠100ms
}
catch(Exception e){}
}
else if(fangxiang==1)//向左
{
try
{
x-=10;
snake[0].setLocation(x, y);
if(x==weix&&y==weiy)
{
shu++;
weix=(int)(food[shu]*0.1)*60;
weiy=(int)(food[shu]%10)*40;
repaint();
add(snake[shu]);
snake[shu].setBounds(snake[shu-1].getBounds());
}
thread.sleep(100);
}
catch(Exception e){}
}
else if(fangxiang==2)//向上
{
try
{
y-=10;
snake[0].setLocation(x, y);
if(x==weix&&y==weiy)
{
shu++;
weix=(int)(food[shu]*0.1)*60;
weiy=(int)(food[shu]%10)*40;
repaint();
add(snake[shu]);
snake[shu].setBounds(snake[shu-1].getBounds());
}
thread.sleep(100);
}
catch(Exception e){}
}
else if(fangxiang==3)//向下
{
try
{
y+=10;
snake[0].setLocation(x, y);
if(x==weix&&y==weiy)
{
shu++;
weix=(int)(food[shu]*0.1)*60;
weiy=(int)(food[shu]%10)*40;
repaint();
add(snake[shu]);
snake[shu].setBounds(snake[shu-1].getBounds());
}
thread.sleep(100);
}
catch(Exception e){}
}
int num1=shu;
while(num1>1)//判斷是否咬自己的尾巴
{
if(snake[num1].getBounds().x==snake[0].getBounds().x&&snake[num1].getBounds().y==snake[0].getBounds().y)
{
t=false;
result=false;
repaint();
}
num1--;
}
if(x<0||x>=this.getWidth()||y<0||y>=this.getHeight())//判斷是否撞牆
{
t=false;
result=false;
repaint();
}
int num=shu;
while(num>0) //設置蛇節位置
{
snake[num].setBounds(snake[num-1].getBounds());
num--;
}
if(shu==15) //如果蛇節數等於15則勝利
{
t=false;
result=true;
repaint();
}
}
}
public void keyPressed(KeyEvent e) //按下鍵盤方向鍵
{
if(e.getKeyCode()==KeyEvent.VK_RIGHT)//右鍵
{
if(fangxiang!=1)//如果先前方向不為左
fangxiang=0;
}
else if(e.getKeyCode()==KeyEvent.VK_LEFT)
{ if(fangxiang!=0)
fangxiang=1;
}
else if(e.getKeyCode()==KeyEvent.VK_UP)
{ if(fangxiang!=3)
fangxiang=2;
}
else if(e.getKeyCode()==KeyEvent.VK_DOWN)
{ if(fangxiang!=2)
fangxiang=3;
}
}
public void keyTyped(KeyEvent e)
{
}
public void keyReleased(KeyEvent e)
{
}
public void paint(Graphics g) //在面板上繪圖
{
int x1=this.getWidth()-1;
int y1=this.getHeight()-1;
g.setColor(Color.red);
g.fillOval(weix, weiy, 10, 10);//食物
g.drawRect(0, 0, x1, y1); //牆
if(t==false&&result==false)
g.drawString("GAME OVER!", 250, 200);//輸出遊戲失敗
else if(t==false&&result==true)
g.drawString("YOU WIN!", 250, 200);//輸出遊戲成功
}
}
class MyWindow extends Frame implements ActionListener//自定義窗口類
{
MyPanel my;
Button btn;
Panel panel;
MyWindow()
{
super("GreedSnake");
my=new MyPanel();
btn=new Button("begin");
panel=new Panel();
btn.addActionListener(this);
panel.add(new Label("begin後請按Tab鍵選定蛇"));
panel.add(btn);
panel.add(new Label("按上下左右鍵控制蛇行動"));
add(panel,BorderLayout.NORTH);
add(my,BorderLayout.CENTER);
setBounds(100,100,610,500);
setVisible(true);
validate();
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
}
public void actionPerformed(ActionEvent e)//按下begin按鈕
{
if(e.getSource()==btn)
{
try
{
my.thread.start(); //開始線程
my.validate();
}
catch(Exception ee){}
}
}
}
希望對你能有所幫助。
㈢ java貪吃蛇原理
用一個數組將蛇頭的行徑記錄下來,然後第二段的下一個方格設置為蛇頭走過的方格,這樣子蛇走過的路徑都是前一段走過的,最後將跟著蛇頭走了,比如
蛇身的路徑
for(int i=snakeLength-1;i>0;i--){
rows[i]=rows[i-1];//依次將蛇前面一段走過行的路段賦值給蛇的下一段
cols[i]=cols[i-1];//依次將蛇前面一段走過列的路段賦值給蛇的下一段
}
for(int i=1;i<snakeLength;i++){
gamePanel[rows[i]][cols[i]].setBackground(Color.red);//將整個面板上蛇身走過的行和列設置為不同的顏色,當然可以用圖片來設置
}
蛇頭走過的行和列(rows[0],cols[i])要根據不同的方向加減1來將面板設置成不同的顏色
如gamePanel[rows[i]-1][cols[i]+1].setBackground(Color.red)
㈣ java如何寫貪吃蛇游戲界面
這是一個最基本的界面,下面又不會的地方去查API
import java.awt.*;
import javax.swing.*;
public class View {
JFrame frame;
Container c;
JLabel backgound;
JButton start;
JLabel help;
public void first(){
frame=new JFrame("我的貪吃蛇");
c=frame.getContentPane();
c.setLayout(null);
Font f1=new Font("楷體",Font.BOLD,50);
backgound=new JLabel();
backgound.setBounds(0,0,800,600);
c.add(backgound);
backgound.setLayout(null);
start=new JButton();
start.setBounds(300,70,200,58);
start.setCursor(new Cursor(Cursor.HAND_CURSOR));
start.setBorder(null);
start.setContentAreaFilled(false);
backgound.add(start);
help = new JLabel();
help.setText("游戲幫助");
help.setBounds(180,230,500,50);
help.setForeground(Color.black);
help.setFont(f1);
backgound.add(help);
frame.setSize(800,600);
frame.setResizable(false);
frame.setVisible(true);
}
㈤ 求貪吃蛇Java代碼
#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
#include<conio.h>
#include<time.h>
#define Map_long 20
#define Map_high 15
typedef struct snake{
int goods_class;
int direction;
}SNAKE;
/*-------------------------------------------------------*/
/* 全局變數聲明區 */
/* 二維結構體數組里goods_class的值,0代表活動區域(空格),
* 1代表■(地圖磚頭),2代表★(食物),3代表●(蛇頭)
* 3之後的數字代表◎(蛇身),3+蛇長度-1表示◎(蛇尾)*/
/*direction表示蛇移動的方向,↑8,↓2,←4,→6*/
SNAKE Snake[Map_high][Map_long] = { { 0 } };
unsigned die = 0; //1表示游戲結束
unsigned snake_move = 0; //移動成功,用來跳出三重循環
unsigned eat_food = 0; //1表示碰到食物,2表示用來跳出循環
unsigned snake_long = 3; //記錄蛇的長度
void Move(int ch); //蛇移動的函數
void HideCursor(); //隱藏游標函數
int main(void)
{
system("mode con:cols=43 lines=20"); //將控制台設置成長41,高18
HideCursor();
/*定義局部變數區域*/
unsigned i, j;
unsigned food = 0; //食物存在的標志,1代表食物存在
unsigned food_x, food_y; //產生食物的臨時坐標
unsigned score = 0; //統計分數
char ch = '\0'; //用來獲取↑↓←→
/*播種子*/
srand((unsigned)time(NULL));
/*初始化地圖*/
for (i = 0; i < Map_long; i++)
{
Snake[0][i].goods_class = 1;
Snake[Map_high - 1][i].goods_class = 1;
}
for (i = 0; i < Map_high; i++)
{
Snake[i][0].goods_class = 1;
Snake[i][Map_long - 1].goods_class = 1;
}
/*初始化蛇的位置*/
for (i = 0; i < snake_long; i++)
Snake[Map_high / 2][Map_long / 2 + i].goods_class = snake_long + i;
while (1)
{
while (!_kbhit())
{
switch (ch)
{
case 72:Move(8); break;
case 75:Move(4); break;
case 77:Move(6); break;
case 80:Move(2); break;
default:break;
}
if (eat_food == 2) //2表示吃到食物,開始重置狀態
{
food = 0; //食物沒有了
eat_food = 0; //重新判定是否吃到食物
snake_long++; //蛇的長度加1
score++; //增加分數
}
/*產生食物*/
do{
if (food == 1)
break;
food_x = rand() % Map_long;
food_y = rand() % Map_high;
if (Snake[food_y][food_x].goods_class == 0)
{
Snake[food_y][food_x].goods_class = 2;
food++;
break;
}
} while (1);
printf("Grade:%u\n", score);
for (i = 0; i < Map_high; i++)
{
if (die == 1)
break;
for (j = 0; j < Map_long; j++)
{
switch (Snake[i][j].goods_class)
{
case 0:printf(" "); break;
case 1:printf("■"); break;
case 2:printf("★"); break;
case 3:printf("●"); break;
default:printf("◎"); break;
}
}
putchar('\n');
}
printf("Up↑ Down↓ Left← Right→ Other Pause.");
Sleep(50);
system("cls");
if (die == 1)
break;
}
if (die == 1)
break;
do{
ch = _getch();
} while (ch != -32 && ch != 80 && ch != 72 && ch != 77 && ch != 75);
ch = _getch();
}
system("cls");
printf("Game Over,your grade is %u.\n", score);
getchar();
return 0;
}
void Move(int ch)
{
int i, j, n;
int direction; //臨時存儲方向
for (n = 0; n < snake_long; n++)
for (i = 0; i < Map_high; i++)
{
if (snake_move == 1)
{
snake_move = 0;
break;
}
if (eat_food == 2)
break;
for (j = 0; j < Map_long; j++)
if (Snake[i][j].goods_class == 3 + n)
{
/*第一次獲取按鍵,初始化蛇的運動狀態*/
if (Snake[i][j].goods_class == 3 && Snake[i][j].direction == 0)
{
Snake[i][j].direction = ch;
Snake[i][j + 1].direction = 4;
Snake[i][j + 2].direction = 4;
}
else if (Snake[i][j].goods_class == 3) //重置蛇頭的方向
Snake[i][j].direction = ch;
/*進行移動前,先判斷蛇頭是否碰到死亡因子*/
if (Snake[i][j].goods_class == 3)
{
if (Snake[i][j].direction == 8 && Snake[i - 1][j].goods_class != 0 && Snake[i - 1][j].goods_class != 2)
die++;
else if (Snake[i][j].direction == 2 && Snake[i + 1][j].goods_class != 0 && Snake[i + 1][j].goods_class != 2)
die++;
else if (Snake[i][j].direction == 4 && Snake[i][j - 1].goods_class != 0 && Snake[i][j - 1].goods_class != 2)
die++;
else if (Snake[i][j].direction == 6 && Snake[i][j + 1].goods_class != 0 && Snake[i][j + 1].goods_class != 2)
die++;
}
/*進行移動前,先判斷蛇頭是否碰到食物*/
if (Snake[i][j].goods_class == 3)
{
if (Snake[i][j].direction == 8 && Snake[i - 1][j].goods_class == 2)
eat_food++;
else if (Snake[i][j].direction == 2 && Snake[i + 1][j].goods_class == 2)
eat_food++;
else if (Snake[i][j].direction == 4 && Snake[i][j - 1].goods_class == 2)
eat_food++;
else if (Snake[i][j].direction == 6 && Snake[i][j + 1].goods_class == 2)
eat_food++;
}
if (die == 1)
break;
/*蛇尾的移動*/
if (Snake[i][j].goods_class == 3 + snake_long - 1)
{
if (eat_food == 1) //吃到食物就更新蛇尾
{
if (Snake[i][j].direction == 8)
{
direction = Snake[i - 1][j].direction;
Snake[i - 1][j] = Snake[i][j];
Snake[i - 1][j].direction = direction;
Snake[i][j].goods_class = 3 + snake_long;
}
else if (Snake[i][j].direction == 2)
{
direction = Snake[i + 1][j].direction;
Snake[i + 1][j] = Snake[i][j];
Snake[i + 1][j].direction = direction;
Snake[i][j].goods_class = 3 + snake_long;
}
else if (Snake[i][j].direction == 4)
{
direction = Snake[i][j - 1].direction;
Snake[i][j - 1] = Snake[i][j];
Snake[i][j - 1].direction = direction;
Snake[i][j].goods_class = 3 + snake_long;
}
else if (Snake[i][j].direction == 6)
{
direction = Snake[i][j + 1].direction;
Snake[i][j + 1] = Snake[i][j];
Snake[i][j + 1].direction = direction;
Snake[i][j].goods_class = 3 + snake_long;
}
snake_move++;
eat_food++;
break;
}
else{
if (Snake[i][j].direction == 8)
{
Snake[i][j].direction = Snake[i - 1][j].direction;
Snake[i - 1][j] = Snake[i][j];
Snake[i][j].goods_class = 0;
}
else if (Snake[i][j].direction == 2)
{
㈥ 用Java編的貪吃蛇游戲怎麼運行
開始--運行---cmd---進入到代碼的文件夾里---javac 類名.Java---java 類名
這樣就可以了
㈦ 如何用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程序一部分,我需要下面程序代碼的詳細註解...
㈨ 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();
}
}