欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

java貪吃蛇代碼加音樂(lè),java貪吃蛇源代碼

哪位能告訴我貪吃蛇游戲的全部代碼?

//package main;

創(chuàng)新互聯(lián)從2013年開(kāi)始,是專(zhuān)業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元瑞金做網(wǎng)站,已為上家服務(wù),為瑞金各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18982081108

import java.awt.Color;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.KeyEvent;

import java.awt.event.KeyListener;

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

import java.io.BufferedReader;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.InputStreamReader;

import javax.swing.ImageIcon;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JMenu;

import javax.swing.JMenuBar;

import javax.swing.JMenuItem;

import javax.swing.JOptionPane;

import javax.swing.JPanel;

public class TanChiShe implements KeyListener,ActionListener{

/**

* @param args

*/

int max = 300;//蛇長(zhǎng)最大值

final int JianJu = 15; //設(shè)定蛇的運(yùn)動(dòng)網(wǎng)格間距(窗口最大32*28格)

byte fangXiang = 4; //控制蛇的運(yùn)動(dòng)方向,初始為右

int time = 500; //蛇的運(yùn)動(dòng)間隔時(shí)間

int jianTime = 2;//吃一個(gè)減少的時(shí)間

int x,y;//蛇的運(yùn)動(dòng)坐標(biāo),按網(wǎng)格來(lái)算

int x2,y2;//暫存蛇頭的坐標(biāo)

int jiFenQi = 0;//積分器

boolean isRuned = false;//沒(méi)運(yùn)行才可設(shè)級(jí)別

boolean out = false;//沒(méi)開(kāi)始運(yùn)行?

boolean run = false;//暫停運(yùn)行

String JiBie = "中級(jí)";

JFrame f = new JFrame("貪吃蛇 V1.0");

JPanel show = new JPanel();

JLabel Message = new JLabel("級(jí)別:中級(jí) 蛇長(zhǎng):5 時(shí)間500ms 分?jǐn)?shù):00");

// JButton play = new JButton("開(kāi)始");

JLabel sheTou;

JLabel shiWu;

JLabel sheWei[] = new JLabel[max];

static int diJi = 4; //第幾個(gè)下標(biāo)的蛇尾要被加上

ImageIcon shang = new ImageIcon("tuPian\\isSheTouUp.png");//產(chǎn)生四個(gè)上下左右的蛇頭圖案

ImageIcon xia = new ImageIcon("tuPian\\isSheTouDown.png");

ImageIcon zhuo = new ImageIcon("tuPian\\isSheTouLeft.png");

ImageIcon you = new ImageIcon("tuPian\\isSheTouRight.png");

JMenuBar JMB = new JMenuBar();

JMenu file = new JMenu("開(kāi)始游戲");

JMenuItem play = new JMenuItem(" 開(kāi)始游戲 ");

JMenuItem pause = new JMenuItem(" 暫停游戲 ");

JMenu hard = new JMenu("游戲難度");

JMenuItem gao = new JMenuItem("高級(jí)");

JMenuItem zhong = new JMenuItem("中級(jí)");

JMenuItem di = new JMenuItem("低級(jí)");

JMenu about = new JMenu(" 關(guān)于 ");

JMenuItem GF = new JMenuItem("※高分榜");

JMenuItem ZZ = new JMenuItem("關(guān)于作者");

JMenuItem YX = new JMenuItem("關(guān)于游戲");

JMenuItem QK = new JMenuItem("清空記錄");

static TanChiShe tcs = new TanChiShe();

public static void main(String[] args) {

// TanChiShe tcs = new TanChiShe();

tcs.f();

}

public void f(){

f.setBounds(250,100,515,530);

f.setLayout(null);

f.setAlwaysOnTop(true);//窗口始終保持最前面

f.setBackground(new Color(0,0,0));

f.setDefaultCloseOperation(0);

f.setResizable(false);

f.setVisible(true);

// f.getContentPane().setBackground(Color.BLACK);

f.addWindowListener(new WindowAdapter(){

public void windowClosing(WindowEvent e){

System.exit(0);//退出程序

}

});

f.setJMenuBar(JMB);

JMB.add(file);

file.add(play);

file.add(pause);

JMB.add(hard);

hard.add(gao);

hard.add(zhong);

hard.add(di);

JMB.add(about);

about.add(GF);

GF.setForeground(Color.blue);

about.add(ZZ);

about.add(YX);

about.add(QK);

QK.setForeground(Color.red);

f.add(show);

show.setBounds(0,f.getHeight()-92,f.getWidth(),35);

// show.setBackground(Color.green);

// f.add(play);

// play.setBounds(240,240,80,25);

play.addActionListener(this);

pause.addActionListener(this);

gao.addActionListener(this);

zhong.addActionListener(this);

di.addActionListener(this);

GF.addActionListener(this);

ZZ.addActionListener(this);

YX.addActionListener(this);

QK.addActionListener(this);

show.add(Message);

Message.setForeground(Color.blue);

f.addKeyListener(this);

// show.addKeyListener(this);

play.addKeyListener(this);

sheChuShi();

}

public void sheChuShi(){//蛇初始化

sheTou = new JLabel(you);//用向右的圖來(lái)初始蛇頭

f.add(sheTou);

sheTou.setBounds(JianJu*0,JianJu*0,JianJu,JianJu);

// System.out.println("ishere");

shiWu = new JLabel("■");

f.add(shiWu);

shiWu.setBounds(10*JianJu,10*JianJu,JianJu,JianJu);

for(int i=0;i=diJi;i++) {

sheWei[i] = new JLabel("■");

f.add(sheWei[i]);

sheWei[i].setBounds(-1*JianJu,0*JianJu,JianJu,JianJu);

}

while(true){

if(out == true){

yunXing();

break;

}

try{

Thread.sleep(200);

}catch(Exception ex){

ex.printStackTrace();

}

}

}

public void sheJiaChang(){//蛇的長(zhǎng)度增加

if(diJi max){

sheWei[++diJi] = new JLabel(new ImageIcon("tuPian\\isSheWei.jpg"));

f.add(sheWei[diJi]);

sheWei[diJi].setBounds(sheWei[diJi-1].getX(),sheWei[diJi-1].getY(),JianJu,JianJu);

// System.out.println("diJi "+diJi);

}

}

public void pengZhuanJianCe(){//檢測(cè)蛇的碰撞情況

if(sheTou.getX()0 || sheTou.getY()0 ||

sheTou.getX()f.getWidth()-15 || sheTou.getY()f.getHeight()-105 ){

gameOver();

// System.out.println("GameOVER");

}

if(sheTou.getX() == shiWu.getX() sheTou.getY() == shiWu.getY()){

out: while(true){

shiWu.setLocation((int)(Math.random()*32)*JianJu,(int)(Math.random()*28)*JianJu);

for(int i=0;i=diJi;i++){

if(shiWu.getX()!= sheWei[i].getX() shiWu.getY()!=sheWei[i].getY()

sheTou.getX()!=shiWu.getX() sheTou.getY()!= shiWu.getY()){//如果食物不在蛇身上則退出循環(huán),產(chǎn)生食物成功

break out;

}

}

}

sheJiaChang();

// System.out.println("吃了一個(gè)");

if(time100 ){

time -= jianTime;

}

else{}

Message.setText("級(jí)別:"+JiBie+" 蛇長(zhǎng):"+(diJi+2)+" 時(shí)間:"+time+"ms 分?jǐn)?shù):"+(jiFenQi+=10)+"");

}

for(int i=0;i=diJi;i++){

if(sheTou.getX() == sheWei[i].getX() sheTou.getY() == sheWei[i].getY()){

gameOver();

// System.out.println("吃到尾巴了");

}

}

}

public void yunXing(){

while(true){

while(run){

if(fangXiang == 1){//上

y-=1;

}

if(fangXiang == 2){//下

y+=1;

}

if(fangXiang == 3){//左

x-=1;

}

if(fangXiang == 4){//右

x+=1;

}

x2 = sheTou.getX();

y2 = sheTou.getY();

sheTou.setLocation(x*JianJu,y*JianJu); //設(shè)置蛇頭的坐標(biāo) 網(wǎng)格數(shù)*間隔

for(int i=diJi;i=0;i--){

if(i==0){

sheWei[i].setLocation(x2,y2);

// System.out.println(i+" "+sheTou.getX()+" "+sheTou.getY());

}

else{

sheWei[i].setLocation(sheWei[i-1].getX(),sheWei[i-1].getY());

// System.out.println(i+" "+sheWei[i].getX()+" "+sheWei[i].getY());

}

}

pengZhuanJianCe();

try{

Thread.sleep(time);

}catch(Exception e){

e.printStackTrace();

}

}

Message.setText("級(jí)別:"+JiBie+" 蛇長(zhǎng):"+(diJi+2)+" 時(shí)間:"+time+"ms 分?jǐn)?shù):"+(jiFenQi+=10)+"");

try{

Thread.sleep(200);

}catch(Exception e){

e.printStackTrace();

}

}

}

public void gameOver(){//游戲結(jié)束時(shí)處理

int in = JOptionPane.showConfirmDialog(f,"游戲已經(jīng)結(jié)束!\n是否要保存分?jǐn)?shù)","提示",JOptionPane.YES_NO_OPTION);

if(in == JOptionPane.YES_OPTION){

// System.out.println("YES");

String s = JOptionPane.showInputDialog(f,"輸入你的名字:");

try{

FileInputStream fis = new FileInputStream("GaoFen.ini");//先把以前的數(shù)據(jù)讀出來(lái)加到寫(xiě)的數(shù)據(jù)前

InputStreamReader isr = new InputStreamReader(fis);

BufferedReader br = new BufferedReader(isr);

String s2,setOut = "";

while((s2=br.readLine())!= null){

setOut =setOut+s2+"\n";

}

FileOutputStream fos = new FileOutputStream("GaoFen.ini");//輸出到文件流

s = setOut+s+":"+jiFenQi+"\n";

fos.write(s.getBytes());

}catch(Exception e){}

}

System.exit(0);

}

public void keyTyped(KeyEvent arg0) {

// TODO 自動(dòng)生成方法存根

}

public void keyPressed(KeyEvent arg0) {

// System.out.println(arg0.getSource());

if(arg0.getKeyCode() == KeyEvent.VK_UP){//按上下時(shí)方向的值相應(yīng)改變

if(fangXiang != 2){

fangXiang = 1;

// sheTou.setIcon(shang);//設(shè)置蛇的方向

}

// System.out.println("UP");

}

if(arg0.getKeyCode() == KeyEvent.VK_DOWN){

if(fangXiang != 1){

fangXiang = 2;

// sheTou.setIcon(xia);

}

// System.out.println("DOWN");

}

if(arg0.getKeyCode() == KeyEvent.VK_LEFT){//按左右時(shí)方向的值相應(yīng)改變

if(fangXiang != 4){

fangXiang = 3;

// sheTou.setIcon(zhuo);

}

// System.out.println("LEFT");

}

if(arg0.getKeyCode() == KeyEvent.VK_RIGHT){

if(fangXiang != 3){

fangXiang = 4;

// sheTou.setIcon(you);

}

// System.out.println("RIGHT");

}

}

public void keyReleased(KeyEvent arg0) {

// TODO 自動(dòng)生成方法存根

}

public void actionPerformed(ActionEvent arg0) {

// TODO 自動(dòng)生成方法存根

JMenuItem JI = (JMenuItem)arg0.getSource();

if(JI == play){

out = true;

run = true;

isRuned = true;

gao.setEnabled(false);

zhong.setEnabled(false);

di.setEnabled(false);

}

if(JI == pause){

run = false;

}

if(isRuned == false){//如果游戲還沒(méi)運(yùn)行,才可以設(shè)置級(jí)別

if(JI == gao){

time = 200;

jianTime = 1;

JiBie = "高級(jí)";

Message.setText("級(jí)別:"+JiBie+" 蛇長(zhǎng):"+(diJi+2)+" 時(shí)間:"+time+"ms 分?jǐn)?shù):"+jiFenQi);

}

if(JI == zhong){

time = 400;

jianTime = 2;

JiBie = "中級(jí)";

Message.setText("級(jí)別:"+JiBie+" 蛇長(zhǎng):"+(diJi+2)+" 時(shí)間:"+time+"ms 分?jǐn)?shù):"+jiFenQi);

}

if(JI == di){

time = 500;

jianTime = 3;

JiBie = "低級(jí)";

Message.setText("級(jí)別:"+JiBie+" 蛇長(zhǎng):"+(diJi+2)+" 時(shí)間:"+time+"ms 分?jǐn)?shù):"+jiFenQi);

}

}

if(JI == GF){

try{

FileInputStream fis = new FileInputStream("GaoFen.ini");

InputStreamReader isr = new InputStreamReader(fis);

BufferedReader br = new BufferedReader(isr);

String s,setOut = "";

while((s=br.readLine())!= null){

setOut =setOut+s+"\n";

}

if(setOut.equals("")){

JOptionPane.showMessageDialog(f,"暫無(wú)保存記錄!","高分榜",JOptionPane.INFORMATION_MESSAGE);

}

else{

JOptionPane.showMessageDialog(f,setOut);

}

}catch(Exception e){

e.printStackTrace();

}

}

if(JI == ZZ){//關(guān)于作者

JOptionPane.showMessageDialog(f,"軟件作者:申志飛\n地址:四川省綿陽(yáng)市\(zhòng)nQQ:898513806\nE-mail:shenzhifeiok@126.com","關(guān)于作者",JOptionPane.INFORMATION_MESSAGE);

}

if(JI == YX){//關(guān)于游戲

JOptionPane.showMessageDialog(f,"貪吃蛇游戲\n游戲版本 V1.0","關(guān)于游戲",JOptionPane.INFORMATION_MESSAGE);

}

if(JI == QK){

try{

int select = JOptionPane.showConfirmDialog(f,"確實(shí)要清空記錄嗎?","清空記錄",JOptionPane.YES_OPTION);

if(select == JOptionPane.YES_OPTION){

String setOut = "";

FileOutputStream fos = new FileOutputStream("GaoFen.ini");//輸出到文件流

fos.write(setOut.getBytes());

}

}catch(Exception ex){}

}

}

}

//是我自己寫(xiě)的,本來(lái)里面有圖片的,但無(wú)法上傳,所以把圖片去掉了,里面的ImageIcon等語(yǔ)句可以去掉。能正常運(yùn)行。

MFC做的貪吃蛇游戲怎么添加背景音樂(lè)??

1、PlaySound或者sndPlaySound

在google中一搜索,會(huì)出來(lái)很多相關(guān)例子。

2、從網(wǎng)上搜索、下載、使用第三方的音樂(lè)播放代碼庫(kù)。

求"貪吃蛇"小游戲JAVA源代碼一份

貪吃蛇

import java.awt.*;

import java.awt.event.*;

public class GreedSnake //主類(lèi)

{

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

new MyWindow();

}

}

class MyPanel extends Panel implements KeyListener,Runnable//自定義面板類(lèi),繼承了鍵盤(pán)和線程接口

{

Button snake[]; //定義蛇按鈕

int shu=0; //蛇的節(jié)數(shù)

int food[]; //食物數(shù)組

boolean result=true; //判定結(jié)果是輸 還是贏

Thread thread; //定義線程

static int weix,weiy; //食物位置

boolean t=true; //判定游戲是否結(jié)束

int fangxiang=0; //蛇移動(dòng)方向

int x=0,y=0; //蛇頭位置

MyPanel()

{

setLayout(null);

snake=new Button[20];

food=new int [20];

thread=new Thread(this);

for(int j=0;j20;j++)

{

food[j]=(int)(Math.random()*99);//定義20個(gè)隨機(jī)食物

}

weix=(int)(food[0]*0.1)*60; //十位*60為橫坐標(biāo)

weiy=(int)(food[0]%10)*40; //個(gè)位*40為縱坐標(biāo)

for(int i=0;i20;i++)

{

snake[i]=new Button();

}

add(snake[0]);

snake[0].setBackground(Color.black);

snake[0].addKeyListener(this); //為蛇頭添加鍵盤(pán)監(jiān)視器

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);//設(shè)置蛇頭位置

if(x==weixy==weiy) //吃到食物

{

shu++;

weix=(int)(food[shu]*0.1)*60;

weiy=(int)(food[shu]%10)*40;

repaint(); //重繪下一個(gè)食物

add(snake[shu]); //增加蛇節(jié)數(shù)和位置

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==weixy==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==weixy==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==weixy==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(num11)//判斷是否咬自己的尾巴

{

if(snake[num1].getBounds().x==snake[0].getBounds().xsnake[num1].getBounds().y==snake[0].getBounds().y)

{

t=false;

result=false;

repaint();

}

num1--;

}

if(x0||x=this.getWidth()||y0||y=this.getHeight())//判斷是否撞墻

{

t=false;

result=false;

repaint();

}

int num=shu;

while(num0) //設(shè)置蛇節(jié)位置

{

snake[num].setBounds(snake[num-1].getBounds());

num--;

}

if(shu==15) //如果蛇節(jié)數(shù)等于15則勝利

{

t=false;

result=true;

repaint();

}

}

}

public void keyPressed(KeyEvent e) //按下鍵盤(pán)方向鍵

{

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==falseresult==false)

g.drawString("GAME OVER!", 250, 200);//輸出游戲失敗

else if(t==falseresult==true)

g.drawString("YOU WIN!", 250, 200);//輸出游戲成功

}

}

class MyWindow extends Frame implements ActionListener//自定義窗口類(lèi)

{

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后請(qǐng)按Tab鍵選定蛇"));

panel.add(btn);

panel.add(new Label("按上下左右鍵控制蛇行動(dòng)"));

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(); //開(kāi)始線程

my.validate();

}

catch(Exception ee){}

}

}

}

我用Java寫(xiě)了個(gè)貪吃蛇的小游戲想在游戲中加入背景音樂(lè)等等各種音效應(yīng)該用什么方法?

背景音樂(lè)最簡(jiǎn)單

首先準(zhǔn)備一個(gè)背景音樂(lè)的音頻文件例如:

audio src="./mp3/xx.mp3" controls="controls" preload id="music" hidden /audio

在打開(kāi)游戲的時(shí)候就用JS觸發(fā),其他音效也是一樣的

先準(zhǔn)備好音頻文件,當(dāng)某個(gè)節(jié)點(diǎn)觸發(fā)后讀取這條對(duì)應(yīng)的音頻文件就可以了!

我想看看你貪吃蛇游戲中如何添加的背景音樂(lè)(代碼)

這個(gè)簡(jiǎn)單啊。開(kāi)一個(gè)線程,然后播放音樂(lè)就是了。至于用什么語(yǔ)言,平臺(tái),不用的語(yǔ)言都大同小異

求一段JAVA編寫(xiě)的貪吃蛇小程序源代碼

用MVC方式實(shí)現(xiàn)的貪吃蛇游戲,共有4個(gè)類(lèi)。運(yùn)行GreedSnake運(yùn)行即可。主要是觀察者模式的使用,我已經(jīng)添加了很多注釋了。

1、

/*

* 程序名稱(chēng):貪食蛇

* 原作者:BigF

* 修改者:algo

* 說(shuō)明:我以前也用C寫(xiě)過(guò)這個(gè)程序,現(xiàn)在看到BigF用Java寫(xiě)的這個(gè),發(fā)現(xiàn)雖然作者自稱(chēng)是Java的初學(xué)者,

* 但是明顯編寫(xiě)程序的素養(yǎng)不錯(cuò),程序結(jié)構(gòu)寫(xiě)得很清晰,有些細(xì)微得地方也寫(xiě)得很簡(jiǎn)潔,一時(shí)興起之

* 下,我認(rèn)真解讀了這個(gè)程序,發(fā)現(xiàn)數(shù)據(jù)和表現(xiàn)分開(kāi)得很好,而我近日正在學(xué)習(xí)MVC設(shè)計(jì)模式,

* 因此嘗試把程序得結(jié)構(gòu)改了一下,用MVC模式來(lái)實(shí)現(xiàn),對(duì)源程序得改動(dòng)不多。

* 我同時(shí)也為程序增加了一些自己理解得注釋?zhuān)M麑?duì)大家閱讀有幫助。

*/

package mvcTest;

/**

* @author WangYu

* @version 1.0

* Description:

* /pre

* Create on :Date :2005-6-13 Time:15:57:16

* LastModified:

* History:

*/

public class GreedSnake {

public static void main(String[] args) {

SnakeModel model = new SnakeModel(20,30);

SnakeControl control = new SnakeControl(model);

SnakeView view = new SnakeView(model,control);

//添加一個(gè)觀察者,讓view成為model的觀察者

model.addObserver(view);

(new Thread(model)).start();

}

}

-------------------------------------------------------------

2、

package mvcTest;

//SnakeControl.java

import java.awt.event.KeyEvent;

import java.awt.event.KeyListener;

/**

* MVC中的Controler,負(fù)責(zé)接收用戶(hù)的操作,并把用戶(hù)操作通知Model

*/

public class SnakeControl implements KeyListener{

SnakeModel model;

public SnakeControl(SnakeModel model){

this.model = model;

}

public void keyPressed(KeyEvent e) {

int keyCode = e.getKeyCode();

if (model.running){ // 運(yùn)行狀態(tài)下,處理的按鍵

switch (keyCode) {

case KeyEvent.VK_UP:

model.changeDirection(SnakeModel.UP);

break;

case KeyEvent.VK_DOWN:

model.changeDirection(SnakeModel.DOWN);

break;

case KeyEvent.VK_LEFT:

model.changeDirection(SnakeModel.LEFT);

break;

case KeyEvent.VK_RIGHT:

model.changeDirection(SnakeModel.RIGHT);

break;

case KeyEvent.VK_ADD:

case KeyEvent.VK_PAGE_UP:

model.speedUp();

break;

case KeyEvent.VK_SUBTRACT:

case KeyEvent.VK_PAGE_DOWN:

model.speedDown();

break;

case KeyEvent.VK_SPACE:

case KeyEvent.VK_P:

model.changePauseState();

break;

default:

}

}

// 任何情況下處理的按鍵,按鍵導(dǎo)致重新啟動(dòng)游戲

if (keyCode == KeyEvent.VK_R ||

keyCode == KeyEvent.VK_S ||

keyCode == KeyEvent.VK_ENTER) {

model.reset();

}

}

public void keyReleased(KeyEvent e) {

}

public void keyTyped(KeyEvent e) {

}

}

-------------------------------------------------------------

3、

/*

*

*/

package mvcTest;

/**

* 游戲的Model類(lèi),負(fù)責(zé)所有游戲相關(guān)數(shù)據(jù)及運(yùn)行

* @author WangYu

* @version 1.0

* Description:

* /pre

* Create on :Date :2005-6-13 Time:15:58:33

* LastModified:

* History:

*/

//SnakeModel.java

import javax.swing.*;

import java.util.Arrays;

import java.util.LinkedList;

import java.util.Observable;

import java.util.Random;

/**

* 游戲的Model類(lèi),負(fù)責(zé)所有游戲相關(guān)數(shù)據(jù)及運(yùn)行

*/

class SnakeModel extends Observable implements Runnable {

boolean[][] matrix; // 指示位置上有沒(méi)蛇體或食物

LinkedList nodeArray = new LinkedList(); // 蛇體

Node food;

int maxX;

int maxY;

int direction = 2; // 蛇運(yùn)行的方向

boolean running = false; // 運(yùn)行狀態(tài)

int timeInterval = 200; // 時(shí)間間隔,毫秒

double speedChangeRate = 0.75; // 每次得速度變化率

boolean paused = false; // 暫停標(biāo)志

int score = 0; // 得分

int countMove = 0; // 吃到食物前移動(dòng)的次數(shù)

// UP and DOWN should be even

// RIGHT and LEFT should be odd

public static final int UP = 2;

public static final int DOWN = 4;

public static final int LEFT = 1;

public static final int RIGHT = 3;

public SnakeModel( int maxX, int maxY) {

this.maxX = maxX;

this.maxY = maxY;

reset();

}

public void reset(){

direction = SnakeModel.UP; // 蛇運(yùn)行的方向

timeInterval = 200; // 時(shí)間間隔,毫秒

paused = false; // 暫停標(biāo)志

score = 0; // 得分

countMove = 0; // 吃到食物前移動(dòng)的次數(shù)

// initial matirx, 全部清0

matrix = new boolean[maxX][];

for (int i = 0; i maxX; ++i) {

matrix[i] = new boolean[maxY];

Arrays.fill(matrix[i], false);

}

// initial the snake

// 初始化蛇體,如果橫向位置超過(guò)20個(gè),長(zhǎng)度為10,否則為橫向位置的一半

int initArrayLength = maxX 20 ? 10 : maxX / 2;

nodeArray.clear();

for (int i = 0; i initArrayLength; ++i) {

int x = maxX / 2 + i;//maxX被初始化為20

int y = maxY / 2; //maxY被初始化為30

//nodeArray[x,y]: [10,15]-[11,15]-[12,15]~~[20,15]

//默認(rèn)的運(yùn)行方向向上,所以游戲一開(kāi)始nodeArray就變?yōu)椋?/p>

// [10,14]-[10,15]-[11,15]-[12,15]~~[19,15]

nodeArray.addLast(new Node(x, y));

matrix[x][y] = true;

}

// 創(chuàng)建食物

food = createFood();

matrix[food.x][food.y] = true;

}

public void changeDirection(int newDirection) {

// 改變的方向不能與原來(lái)方向同向或反向

if (direction % 2 != newDirection % 2) {

direction = newDirection;

}

}

/**

* 運(yùn)行一次

* @return

*/

public boolean moveOn() {

Node n = (Node) nodeArray.getFirst();

int x = n.x;

int y = n.y;

// 根據(jù)方向增減坐標(biāo)值

switch (direction) {

case UP:

y--;

break;

case DOWN:

y++;

break;

case LEFT:

x--;

break;

case RIGHT:

x++;

break;

}

// 如果新坐標(biāo)落在有效范圍內(nèi),則進(jìn)行處理

if ((0 = x x maxX) (0 = y y maxY)) {

if (matrix[x][y]) { // 如果新坐標(biāo)的點(diǎn)上有東西(蛇體或者食物)

if (x == food.x y == food.y) { // 吃到食物,成功

nodeArray.addFirst(food); // 從蛇頭贈(zèng)長(zhǎng)

// 分?jǐn)?shù)規(guī)則,與移動(dòng)改變方向的次數(shù)和速度兩個(gè)元素有關(guān)

int scoreGet = (10000 - 200 * countMove) / timeInterval;

score += scoreGet 0 ? scoreGet : 10;

countMove = 0;

food = createFood(); // 創(chuàng)建新的食物

matrix[food.x][food.y] = true; // 設(shè)置食物所在位置

return true;

} else // 吃到蛇體自身,失敗

return false;

} else { // 如果新坐標(biāo)的點(diǎn)上沒(méi)有東西(蛇體),移動(dòng)蛇體

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; // 觸到邊線,失敗

}

public void run() {

running = true;

while (running) {

try {

Thread.sleep(timeInterval);

} catch (Exception e) {

break;

}

if (!paused) {

if (moveOn()) {

setChanged(); // Model通知View數(shù)據(jù)已經(jīng)更新

notifyObservers();

} else {

JOptionPane.showMessageDialog(null,

"you failed",

"Game Over",

JOptionPane.INFORMATION_MESSAGE);

break;

}

}

}

running = false;

}

private Node createFood() {

int x = 0;

int y = 0;

// 隨機(jī)獲取一個(gè)有效區(qū)域內(nèi)的與蛇體和食物不重疊的位置

do {

Random r = new Random();

x = r.nextInt(maxX);

y = r.nextInt(maxY);

} while (matrix[x][y]);

return new Node(x, y);

}

public void speedUp() {

timeInterval *= speedChangeRate;

}

public void speedDown() {

timeInterval /= speedChangeRate;

}

public void changePauseState() {

paused = !paused;

}

public String toString() {

String result = "";

for (int i = 0; i nodeArray.size(); ++i) {

Node n = (Node) nodeArray.get(i);

result += "[" + n.x + "," + n.y + "]";

}

return result;

}

}

class Node {

int x;

int y;

Node(int x, int y) {

this.x = x;

this.y = y;

}

}

------------------------------------------------------------

4、

package mvcTest;

//SnakeView.java

import javax.swing.*;

import java.awt.*;

import java.util.Iterator;

import java.util.LinkedList;

import java.util.Observable;

import java.util.Observer;

/**

* MVC模式中得Viewer,只負(fù)責(zé)對(duì)數(shù)據(jù)的顯示,而不用理會(huì)游戲的控制邏輯

*/

public class SnakeView implements Observer {

SnakeControl control = null;

SnakeModel model = null;

JFrame mainFrame;

Canvas paintCanvas;

JLabel labelScore;

public static final int canvasWidth = 200;

public static final int canvasHeight = 300;

public static final int nodeWidth = 10;

public static final int nodeHeight = 10;

public SnakeView(SnakeModel model, SnakeControl control) {

this.model = model;

this.control = control;

mainFrame = new JFrame("GreedSnake");

Container cp = mainFrame.getContentPane();

// 創(chuàng)建頂部的分?jǐn)?shù)顯示

labelScore = new JLabel("Score:");

cp.add(labelScore, BorderLayout.NORTH);

// 創(chuàng)建中間的游戲顯示區(qū)域

paintCanvas = new Canvas();

paintCanvas.setSize(canvasWidth + 1, canvasHeight + 1);

paintCanvas.addKeyListener(control);

cp.add(paintCanvas, BorderLayout.CENTER);

// 創(chuàng)建底下的幫助欄

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(control);

mainFrame.pack();

mainFrame.setResizable(false);

mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

mainFrame.setVisible(true);

}

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 = model.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 = model.food;

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) {

repaint();

}

}

希望采納

網(wǎng)站名稱(chēng):java貪吃蛇代碼加音樂(lè),java貪吃蛇源代碼
分享URL:http://chinadenli.net/article35/dsgdppi.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈手機(jī)網(wǎng)站建設(shè)自適應(yīng)網(wǎng)站企業(yè)網(wǎng)站制作動(dòng)態(tài)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)