亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? snake.java

?? 貪吃蛇*要點分析: *1)數據結構:matrix[][]用來存儲地圖上面的信息
?? JAVA
字號:
/**************************************************************************

*要點分析:
*1)主要部分已經集成為一個對象SnakeModel,利用鍵盤控制實現操作。
*************************************************************************/
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
//=============================================
//Main Class
//=============================================
public class GreedSnake implements KeyListener
{
JFrame mainFrame;
Canvas paintCanvas;
JLabel labelScore;//計分牌
SnakeModel snakeModel=null;// 蛇
public static final int canvasWidth=200;
public static final int canvasHeight=300;
public static final int nodeWidth=10;
public static final int nodeHeight=10;
//----------------------------------------------------------------------
//GreedSnake():初始化游戲界面
//----------------------------------------------------------------------
public GreedSnake()
{
//設置界面元素
mainFrame=new JFrame('GreedSnake');
Container cp=mainFrame.getContentPane();
labelScore=new JLabel('Score:');
cp.add(labelScore,BorderLayout.NORTH);
paintCanvas=new Canvas();
paintCanvas.setSize(canvasWidth+1,canvasHeight+1);
paintCanvas.addKeyListener(this);
cp.add(paintCanvas,BorderLayout.CENTER);
JPanel panelButtom=new JPanel();
panelButtom.setLayout(new BorderLayout());
JLabel labelHelp;// 幫助信息
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);
mainFrame.addKeyListener(this);
mainFrame.pack();
mainFrame.setResizable(false);
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainFrame.setVisible(true);
begin();
}
//----------------------------------------------------------------------
//keyPressed():按鍵檢測
//----------------------------------------------------------------------
public void keyPressed(KeyEvent e)
{
int keyCode=e.getKeyCode();
if(snakeModel.running) switch(keyCode)
{
case KeyEvent.VK_UP:
snakeModel.changeDirection(SnakeModel.UP);
break;
case KeyEvent.VK_DOWN:
snakeModel.changeDirection(SnakeModel.DOWN);
break;
case KeyEvent.VK_LEFT:
snakeModel.changeDirection(SnakeModel.LEFT);
break;
case KeyEvent.VK_RIGHT:
snakeModel.changeDirection(SnakeModel.RIGHT);
break;
case KeyEvent.VK_ADD:
case KeyEvent.VK_PAGE_UP:
snakeModel.speedUp();// 加速
break;
case KeyEvent.VK_SUBTRACT:
case KeyEvent.VK_PAGE_DOWN:
snakeModel.speedDown();// 減速
break;
case KeyEvent.VK_SPACE:
case KeyEvent.VK_P:
snakeModel.changePauseState();// 暫停或繼續
break;
default:
}
//重新開始
if(keyCode==KeyEvent.VK_R || keyCode==KeyEvent.VK_S
|| keyCode==KeyEvent.VK_ENTER)
{
snakeModel.running=false;
begin();
}
}
//----------------------------------------------------------------------
//keyReleased():空函數
//----------------------------------------------------------------------
public void keyReleased(KeyEvent e)
{
}
//----------------------------------------------------------------------
//keyTyped():空函數
//----------------------------------------------------------------------
public void keyTyped(KeyEvent e)
{
}
//----------------------------------------------------------------------
//repaint():繪制游戲界面(包括蛇和食物)
//----------------------------------------------------------------------
void repaint()
{
Graphics g=paintCanvas.getGraphics();
//draw background
g.setColor(Color.WHITE);
g.fillRect(0,0,canvasWidth,canvasHeight);
//draw the snake
g.setColor(Color.BLACK);
LinkedList na=snakeModel.nodeArray;
Iterator it=na.iterator();
while(it.hasNext())
{
Node n=(Node)it.next();
drawNode(g,n);
}
// draw the food
g.setColor(Color.RED);
Node n=snakeModel.food;
drawNode(g,n);
updateScore();
}
//----------------------------------------------------------------------
//drawNode():繪畫某一結點(蛇身或食物)
//----------------------------------------------------------------------
private void drawNode(Graphics g,Node n)
{
g.fillRect(n.x*nodeWidth,n.y*nodeHeight,nodeWidth-1,nodeHeight-1);
}
//----------------------------------------------------------------------
//updateScore():改變計分牌
//----------------------------------------------------------------------
public void updateScore()
{
String s='Score: '+snakeModel.score;
labelScore.setText(s);
}
//----------------------------------------------------------------------
//begin():游戲開始,放置貪吃蛇
//----------------------------------------------------------------------
void begin()
{
if(snakeModel==null||!snakeModel.running)
{
snakeModel=new SnakeModel(this,canvasWidth/nodeWidth,
this.canvasHeight/nodeHeight);
(new Thread(snakeModel)).start();
}
}
//----------------------------------------------------------------------
//main():主函數
//----------------------------------------------------------------------
public static void main(String[] args)
{
GreedSnake gs=new GreedSnake();
}
}
/**************************************************************************
*要點分析:
*1)數據結構:matrix[][]用來存儲地圖上面的信息,如果什么也沒有設置為false,
* 如果有食物或蛇,設置為true;nodeArray,一個LinkedList,用來保存蛇的每
* 一節;food用來保存食物的位置;而Node類是保存每個位置的信息。
*2)重要函數:
* changeDirection(int newDirection) ,用來改變蛇前進的方向,而且只是
* 保存頭部的前進方向,因為其他的前進方向已經用位置來指明了。 其中newDirection
* 必須和原來的direction不是相反方向,所以相反方向的值用了同樣的奇偶性。在測試
* 的時候使用了direction%2!=newDirection%2 進行判斷。
* moveOn(),用來更新蛇的位置,對于當前方向,把頭部位置進行相應改變。如果越界,
* 結束;否則,檢測是否遇到食物(加頭部)或身體(結束);如果什么都沒有,加上頭部,
* 去掉尾部。由于用了LinkedList數據結構,省去了相當多的麻煩。
*************************************************************************/
import java.util.*;
import javax.swing.*;
//----------------------------------------------------------------------
//Node:結點類
//----------------------------------------------------------------------
class Node
{
int x;
int y;
Node(int x,int y)
{
this.x=x;
this.y=y;
}
}
//----------------------------------------------------------------------
//SnakeModel:貪吃蛇模型
//----------------------------------------------------------------------
class SnakeModel implements Runnable
{
GreedSnake gs;
boolean[][] matrix;// 界面數據保存在數組里
LinkedList nodeArray=new LinkedList();
Node food;
int maxX;//最大寬度
int maxY;//最大長度
int direction=2;//方向
boolean running=false;
int timeInterval=200;// 間隔時間(速度)
double speedChangeRate=0.75;// 速度改變程度
boolean paused=false;// 游戲狀態
int score=0;
int countMove=0;
// UP和DOWN是偶數,RIGHT和LEFT是奇數
public static final int UP=2;
public static final int DOWN=4;
public static final int LEFT=1;
public static final int RIGHT=3;
//----------------------------------------------------------------------
//GreedModel():初始化界面
//----------------------------------------------------------------------
public SnakeModel(GreedSnake gs,int maxX,int maxY)
{
this.gs=gs;
this.maxX=maxX;
this.maxY=maxY;
matrix=new boolean[maxX][];
for(int i=0;i<maxX;++i)
{
matrix[i]=new boolean[maxY];
Arrays.fill(matrix[i],false);// 沒有蛇和食物的地區置false
}
//初始化貪吃蛇
int initArrayLength=maxX>20 ? 10 : maxX/2;
for(int i=0;i<initArrayLength;++i)
{
int x=maxX/2+i;
int y=maxY/2;
nodeArray.addLast(new Node(x,y));
matrix[x][y]=true;// 蛇身處置true
}
food=createFood();
matrix[food.x][food.y]=true;// 食物處置true
}
//----------------------------------------------------------------------
//changeDirection():改變運動方向
//----------------------------------------------------------------------
public void changeDirection(int newDirection)
{
if(direction%2!=newDirection%2)// 避免沖突
{
direction=newDirection;
}
}
//----------------------------------------------------------------------
//moveOn():貪吃蛇運動函數
//----------------------------------------------------------------------
public boolean moveOn()
{
Node n=(Node)nodeArray.getFirst();
int x=n.x;
int y=n.y;
switch(direction)
{
case UP:
y--;
break;
case DOWN:
y++;
break;
case LEFT:
x--;
break;
case RIGHT:
x++;
break;
}
if((0<=x&&x<maxX)&&(0<=y&&y<maxY))
{
if(matrix[x][y])// 吃到食物或者撞到身體
{
if(x==food.x&&y==food.y)// 吃到食物
{
nodeArray.addFirst(food);// 在頭部加上一結點
//計分規則與移動長度和速度有關
int scoreGet=(10000-200*countMove)/timeInterval;
score+=scoreGet>0 ? scoreGet : 10;
countMove=0;
food=createFood();
matrix[food.x][food.y]=true;
return true;
}
else return false;// 撞到身體
}
else//什么都沒有碰到
{
nodeArray.addFirst(new Node(x,y));// 加上頭部
matrix[x][y]=true;
n=(Node)nodeArray.removeLast();// 去掉尾部
matrix[n.x][n.y]=false;
countMove++;
return true;
}
}
return false;//越界(撞到墻壁)
}
//----------------------------------------------------------------------
//run():貪吃蛇運動線程
//----------------------------------------------------------------------
public void run()
{
running=true;
while(running)
{
try
{
Thread.sleep(timeInterval);
}catch(Exception e)
{
break;
}
if(!paused)
{
if(moveOn())// 未結束
{
gs.repaint();
}
else//游戲結束
{
JOptionPane.showMessageDialog(null,'GAME OVER',
'Game Over',JOptionPane.INFORMATION_MESSAGE);
break;
}
}
}
running=false;
}
//----------------------------------------------------------------------
//createFood():生成食物及放置地點
//----------------------------------------------------------------------
private Node createFood()
{
int x=0;
int y=0;
do
{
Random r=new Random();
x=r.nextInt(maxX);
y=r.nextInt(maxY);
}while(matrix[x][y]);
return new Node(x,y);
}
//----------------------------------------------------------------------
//speedUp():加快蛇運動速度
//----------------------------------------------------------------------
public void speedUp()
{
timeInterval*=speedChangeRate;
}
//----------------------------------------------------------------------
//speedDown():放慢蛇運動速度
//----------------------------------------------------------------------
public void speedDown()
{
timeInterval/=speedChangeRate;
}
//----------------------------------------------------------------------
//changePauseState(): 改變游戲狀態(暫停或繼續)
//----------------------------------------------------------------------
public void changePauseState()
{
paused=!paused;
}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩专区中文字幕一区二区| 欧美日韩综合一区| 欧美在线视频日韩| 久久久美女艺术照精彩视频福利播放| 亚洲色图制服诱惑| 国产福利电影一区二区三区| 欧美日韩亚洲综合在线| 中文字幕欧美一| 国产一区二区视频在线| 91精品国产高清一区二区三区蜜臀 | 精品久久久久久最新网址| 亚洲免费电影在线| 成人黄色大片在线观看| 国产三级精品三级在线专区| 日本中文字幕不卡| 欧美视频在线一区| 亚洲精品一二三| 不卡av电影在线播放| 久久精品在这里| 韩国视频一区二区| 欧美电视剧在线看免费| 日本不卡在线视频| 337p亚洲精品色噜噜狠狠| 亚洲影视资源网| 色琪琪一区二区三区亚洲区| 国产精品久久久久久久久久免费看 | 成人免费一区二区三区视频| 国产成人精品综合在线观看 | 日本精品一区二区三区高清 | 欧美视频日韩视频在线观看| 国产精品第四页| 成人的网站免费观看| 中文字幕va一区二区三区| 不卡的av在线| 亚洲乱码国产乱码精品精的特点| 99久久精品国产一区| 中文字幕一区二区三区不卡在线 | 69av一区二区三区| 免费高清在线一区| 欧美成人一级视频| 国产精品白丝jk黑袜喷水| 国产欧美精品国产国产专区| 国产一区二区三区在线看麻豆| 久久嫩草精品久久久精品一| 国产白丝精品91爽爽久久| 国产精品高潮呻吟| 欧美日韩在线一区二区| 日本aⅴ亚洲精品中文乱码| 日韩免费在线观看| 国产成人精品综合在线观看| 亚洲久本草在线中文字幕| 884aa四虎影成人精品一区| 蜜臀精品一区二区三区在线观看 | 高潮精品一区videoshd| 中文字幕一区二区三区在线观看 | 欧美久久高跟鞋激| 国产一区二区美女诱惑| 亚洲欧洲韩国日本视频| 欧美丝袜丝交足nylons| 精品一区二区三区欧美| 欧美国产精品一区二区| 欧美色图第一页| 韩国v欧美v亚洲v日本v| 亚洲日本一区二区| 欧美剧在线免费观看网站| 激情综合色综合久久| 亚洲免费av高清| 欧美大片拔萝卜| 99久久99精品久久久久久| 性感美女极品91精品| 国产校园另类小说区| 在线免费精品视频| 国产米奇在线777精品观看| 一区二区欧美国产| 精品99久久久久久| 在线观看国产一区二区| 国产又粗又猛又爽又黄91精品| 中文字幕佐山爱一区二区免费| 91精品国产综合久久精品app| 成人激情黄色小说| 麻豆精品视频在线| 亚洲永久免费av| 国产精品视频在线看| 精品免费日韩av| 欧美日免费三级在线| 97国产一区二区| 国产精品白丝jk白祙喷水网站| 亚洲h动漫在线| 亚洲欧美二区三区| 日本一区二区综合亚洲| 日韩一二在线观看| 欧美日韩一区小说| 一本到三区不卡视频| 国产91精品露脸国语对白| 蜜桃视频一区二区三区| 午夜激情综合网| 夜夜揉揉日日人人青青一国产精品 | 亚洲欧美日韩人成在线播放| 精品99一区二区| 制服丝袜亚洲网站| 欧美人伦禁忌dvd放荡欲情| 色婷婷综合久久久| 色婷婷久久99综合精品jk白丝| 国产成人精品亚洲午夜麻豆| 美女视频网站黄色亚洲| 日韩vs国产vs欧美| 日韩av一区二区在线影视| 香港成人在线视频| 婷婷综合另类小说色区| 亚洲伊人色欲综合网| 一区二区三区国产精华| 亚洲精品中文在线观看| 亚洲欧美一区二区不卡| 亚洲裸体xxx| 一区二区三区蜜桃| 亚洲精品第1页| 亚洲一区中文在线| 天堂av在线一区| 麻豆精品视频在线观看视频| 久久精品72免费观看| 久久99精品国产.久久久久| 国内精品久久久久影院色| 久久99精品视频| 国产精品一区二区久激情瑜伽| 激情国产一区二区| 国产精品乡下勾搭老头1| 成人一级视频在线观看| 91网站最新网址| 欧美性受极品xxxx喷水| 欧美精品日日鲁夜夜添| 日韩一区二区免费在线电影| 精品久久一区二区| 国产精品乱码妇女bbbb| 亚洲色图制服诱惑 | 亚洲成年人网站在线观看| 午夜天堂影视香蕉久久| 久久99精品国产| 成人av动漫网站| 欧美伦理视频网站| 久久精品视频免费| 亚洲男人电影天堂| 另类人妖一区二区av| 国产91精品入口| 欧美偷拍一区二区| 欧美大黄免费观看| 亚洲婷婷综合色高清在线| 婷婷开心激情综合| 国产成人亚洲精品狼色在线| 欧美专区日韩专区| 久久久亚洲高清| 亚洲国产欧美另类丝袜| 国产在线国偷精品产拍免费yy| 99在线精品一区二区三区| 欧美精品第1页| 国产精品麻豆网站| 久久国产精品一区二区| 91在线免费视频观看| 欧美一级二级三级蜜桃| 亚洲天堂2014| 国产精品一区二区黑丝| 欧美性猛交xxxx乱大交退制版| 欧美tk—视频vk| 亚洲成人一区二区| 成人av在线影院| 欧美va亚洲va| 性欧美疯狂xxxxbbbb| 成人动漫一区二区在线| 欧美大胆一级视频| 五月激情综合色| 91网站在线播放| 欧美国产精品中文字幕| 美腿丝袜亚洲综合| 欧美日韩一区二区三区高清| 国产精品美女久久久久高潮| 久久成人久久鬼色| 欧美在线观看一区| 亚洲欧美日韩精品久久久久| 国产一区二区伦理片| 日韩欧美国产综合| 亚洲1区2区3区视频| 色八戒一区二区三区| 中文字幕乱码久久午夜不卡| 久久99热国产| 欧美肥妇bbw| 午夜一区二区三区视频| 91亚洲男人天堂| 1024成人网色www| 成人午夜电影网站| 国产日产欧美一区二区三区 | 亚洲资源在线观看| 日本韩国欧美国产| 亚洲伦理在线免费看| 色哟哟一区二区三区| 日韩一区在线免费观看| 成人av在线一区二区三区| 国产精品美女久久久久av爽李琼| 国产69精品一区二区亚洲孕妇| 久久影院视频免费| 成人午夜电影久久影院| 国产精品久久久久久福利一牛影视 |