貪吃蛇小遊戲js代碼解析,js貪吃蛇源代碼

本文目錄一覽:

java貪吃蛇代碼注釋求解

import java.awt.Color;

import java.awt.Graphics;

import java.awt.Graphics2D;

import java.awt.Rectangle;

import java.awt.event.KeyAdapter;

import java.awt.event.KeyEvent;

import java.awt.image.BufferedImage;

import java.util.ArrayList;

import java.util.List;

import javax.swing.JFrame;

public class InterFace extends JFrame {

/**

* WIDTH:寬

* HEIGHT:高

* SLEEPTIME:可以看作蛇運動的速度

* L = 1,R = 2, U = 3, D = 4 左右上下代碼

*/

public static final int WIDTH = 800, HEIGHT = 600, SLEEPTIME = 200, L = 1,R = 2, U = 3, D = 4;

BufferedImage offersetImage= new BufferedImage(WIDTH, HEIGHT,BufferedImage.TYPE_3BYTE_BGR);;

Rectangle rect = new Rectangle(20, 40, 15 * 50, 15 * 35);

Snake snake;

Node node;

public InterFace() {

//創建”蛇”對象

snake = new Snake(this);

//創建”食物”對象

createNode();

this.setBounds(100, 100, WIDTH, HEIGHT);

//添加鍵盤監聽器

this.addKeyListener(new KeyAdapter() {

public void keyPressed(KeyEvent arg0) {

System.out.println(arg0.getKeyCode());

switch (arg0.getKeyCode()) {

//映射上下左右4個鍵位

case KeyEvent.VK_LEFT:

snake.dir = L;

break;

case KeyEvent.VK_RIGHT:

snake.dir = R;

break;

case KeyEvent.VK_UP:

snake.dir = U;

break;

case KeyEvent.VK_DOWN:

snake.dir = D;

}

}

});

this.setTitle(“貪吃蛇 0.1 By : Easy”);

this.setDefaultCloseOperation(EXIT_ON_CLOSE);

this.setVisible(true);

//啟動線程,開始執行

new Thread(new ThreadUpadte()).start();

}

public void paint(Graphics g) {

Graphics2D g2d = (Graphics2D) offersetImage.getGraphics();

g2d.setColor(Color.white);

g2d.fillRect(0, 0, WIDTH, HEIGHT);

g2d.setColor(Color.black);

g2d.drawRect(rect.x, rect.y, rect.width, rect.height);

//如果蛇碰撞(吃)到食物,則創建新食物

if (snake.hit(node)) {

createNode();

}

snake.draw(g2d);

node.draw(g2d);

g.drawImage(offersetImage, 0, 0, null);

}

class ThreadUpadte implements Runnable {

public void run() {

//無限重繪畫面

while (true) {

try {

Thread.sleep(SLEEPTIME);

repaint(); //

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

}

/**

* 創建食物

*/

public void createNode() {

//隨機食物的出現位置

int x = (int) (Math.random() * 650) + 50,y = (int) (Math.random() * 500) + 50;

Color color = Color.blue;

node = new Node(x, y, color);

}

public static void main(String args[]) {

new InterFace();

}

}

/**

* 節點類(包括食物和蛇的身軀組成節點)

*/

class Node {

int x, y, width = 15, height = 15;

Color color;

public Node(int x, int y, Color color) {

this(x, y);

this.color = color;

}

public Node(int x, int y) {

this.x = x;

this.y = y;

this.color = color.black;

}

public void draw(Graphics2D g2d) {

g2d.setColor(color);

g2d.drawRect(x, y, width, height);

}

public Rectangle getRect() {

return new Rectangle(x, y, width, height);

}

}

/**

* 蛇

*/

class Snake {

public ListNode nodes = new ArrayListNode();

InterFace interFace;

int dir=InterFace.R;

public Snake(InterFace interFace) {

this.interFace = interFace;

nodes.add(new Node(20 + 150, 40 + 150));

addNode();

}

/**

* 是否碰撞到食物

* @return true 是 false 否

*/

public boolean hit(Node node) {

//遍歷整個蛇體是否與食物碰撞

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

if (nodes.get(i).getRect().intersects(node.getRect())) {

addNode();

return true;

}

}

return false;

}

public void draw(Graphics2D g2d) {

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

nodes.get(i).draw(g2d);

}

move();

}

public void move() {

nodes.remove((nodes.size() – 1));

addNode();

}

public synchronized void addNode() {

Node nodeTempNode = nodes.get(0);

//如果方向

switch (dir) {

case InterFace.L:

//判斷是否會撞牆

if (nodeTempNode.x = 20) {

nodeTempNode = new Node(20 + 15 * 50, nodeTempNode.y);

}

nodes.add(0, new Node(nodeTempNode.x – nodeTempNode.width,

nodeTempNode.y));

break;

case InterFace.R:

//判斷是否會撞牆

if (nodeTempNode.x = 20 + 15 * 50 – nodeTempNode.width) {

nodeTempNode = new Node(20 – nodeTempNode.width, nodeTempNode.y);

}

nodes.add(0, new Node(nodeTempNode.x + nodeTempNode.width,

nodeTempNode.y));

break;

case InterFace.U:

//判斷是否會撞牆

if (nodeTempNode.y = 40) {

nodeTempNode = new Node(nodeTempNode.x, 40 + 15 * 35);

}

nodes.add(0, new Node(nodeTempNode.x, nodeTempNode.y – nodeTempNode.height));

break;

case InterFace.D:

//判斷是否會撞牆

if (nodeTempNode.y = 40 + 15 * 35 – nodeTempNode.height) {

nodeTempNode = new Node(nodeTempNode.x,40 – nodeTempNode.height);

}

nodes.add(0, new Node(nodeTempNode.x, nodeTempNode.y + nodeTempNode.height));

break;

}

}

}

貪吃蛇代碼

#define N 200

#include graphics.h

#include stdlib.h

#include dos.h

#define LEFT 0x4b00

#define RIGHT 0x4d00

#define DOWN 0x5000

#define UP 0x4800

#define ESC 0x011b

int i,key;

int score=0;/*得分*/

int gamespeed=50000;/*遊戲速度自己調整*/

struct Food

{

int x;/*食物的橫坐標*/

int y;/*食物的縱坐標*/

int yes;/*判斷是否要出現食物的變量*/

}food;/*食物的結構體*/

struct Snake

{

int x[N]; /*蛇可出現的最大節數*/

int y[N];

int node;/*蛇的節數*/

int direction;/*蛇移動方向*/

int life;/* 蛇的生命,0活着,1死亡*/

}snake;

void Init(void);/*圖形驅動*/

void Close(void);/*圖形結束*/

void DrawK(void);/*開始畫面*/

void GameOver(void);/*結束遊戲*/

void GamePlay(void);/*玩遊戲具體過程*/

void PrScore(void);/*輸出成績*/

/*主函數*/

void main(void)

{

Init();/*圖形驅動*/

DrawK();/*開始畫面*/

GamePlay();/*玩遊戲具體過程*/

Close();/*圖形結束*/

}

/*圖形驅動*/

void Init(void)

{

int gd=DETECT,gm;

initgraph(gd,gm,”c:\\tc”);

cleardevice();

}

/*開始畫面,左上角坐標為(50,40),右下角坐標為(610,460)的圍牆*/

void DrawK(void)

{

/*setbkcolor(LIGHTGREEN);*/

setcolor(11);

setlinestyle(SOLID_LINE,0,THICK_WIDTH);/*設置線型*/

for(i=50;i=600;i+=10)/*畫圍牆*/

{

rectangle(i,40,i+10,49); /*上邊*/

rectangle(i,451,i+10,460);/*下邊*/

}

for(i=40;i=450;i+=10)

{

rectangle(50,i,59,i+10); /*左邊*/

rectangle(601,i,610,i+10);/*右邊*/

}

}

/*玩遊戲具體過程*/

void GamePlay(void)

{

randomize();/*隨機數發生器*/

food.yes=1;/*1表示需要出現新食物,0表示已經存在食物*/

snake.life=0;/*活着*/

snake.direction=1;/*方向往右*/

snake.x[0]=100;snake.y[0]=100;/*蛇頭*/

snake.x[1]=110;snake.y[1]=100;

snake.node=2;/*節數*/

PrScore();/*輸出得分*/

while(1)/*可以重複玩遊戲,壓ESC鍵結束*/

{

while(!kbhit())/*在沒有按鍵的情況下,蛇自己移動身體*/

{

if(food.yes==1)/*需要出現新食物*/

{

food.x=rand()%400+60;

food.y=rand()%350+60;

while(food.x%10!=0)/*食物隨機出現後必須讓食物能夠在整格內,這樣才可以讓蛇吃到*/

food.x++;

while(food.y%10!=0)

food.y++;

food.yes=0;/*畫面上有食物了*/

}

if(food.yes==0)/*畫面上有食物了就要顯示*/

{

setcolor(GREEN);

rectangle(food.x,food.y,food.x+10,food.y-10);

}

for(i=snake.node-1;i0;i–)/*蛇的每個環節往前移動,也就是貪吃蛇的關鍵算法*/

{

snake.x[i]=snake.x[i-1];

snake.y[i]=snake.y[i-1];

}

/*1,2,3,4表示右,左,上,下四個方向,通過這個判斷來移動蛇頭*/

switch(snake.direction)

{

case 1:snake.x[0]+=10;break;

case 2: snake.x[0]-=10;break;

case 3: snake.y[0]-=10;break;

case 4: snake.y[0]+=10;break;

}

for(i=3;isnake.node;i++)/*從蛇的第四節開始判斷是否撞到自己了,因為蛇頭為兩節,第三節不可能拐過來*/

{

if(snake.x[i]==snake.x[0]snake.y[i]==snake.y[0])

{

GameOver();/*顯示失敗*/

snake.life=1;

break;

}

}

if(snake.x[0]55||snake.x[0]595||snake.y[0]55||

snake.y[0]455)/*蛇是否撞到牆壁*/

{

GameOver();/*本次遊戲結束*/

snake.life=1; /*蛇死*/

}

if(snake.life==1)/*以上兩種判斷以後,如果蛇死就跳出內循環,重新開始*/

break;

if(snake.x[0]==food.xsnake.y[0]==food.y)/*吃到食物以後*/

{

setcolor(0);/*把畫面上的食物東西去掉*/

rectangle(food.x,food.y,food.x+10,food.y-10);

snake.x[snake.node]=-20;snake.y[snake.node]=-20;

/*新的一節先放在看不見的位置,下次循環就取前一節的位置*/

snake.node++;/*蛇的身體長一節*/

food.yes=1;/*畫面上需要出現新的食物*/

score+=10;

PrScore();/*輸出新得分*/

}

setcolor(4);/*畫出蛇*/

for(i=0;isnake.node;i++)

rectangle(snake.x[i],snake.y[i],snake.x[i]+10,

snake.y[i]-10);

delay(gamespeed);

setcolor(0);/*用黑色去除蛇的的最後一節*/

rectangle(snake.x[snake.node-1],snake.y[snake.node-1],

snake.x[snake.node-1]+10,snake.y[snake.node-1]-10);

} /*endwhile(!kbhit)*/

if(snake.life==1)/*如果蛇死就跳出循環*/

break;

key=bioskey(0);/*接收按鍵*/

if(key==ESC)/*按ESC鍵退出*/

break;

else

if(key==UPsnake.direction!=4)

/*判斷是否往相反的方向移動*/

snake.direction=3;

else

if(key==RIGHTsnake.direction!=2)

snake.direction=1;

else

if(key==LEFTsnake.direction!=1)

snake.direction=2;

else

if(key==DOWNsnake.direction!=3)

snake.direction=4;

}/*endwhile(1)*/

}

/*遊戲結束*/

void GameOver(void)

{

cleardevice();

PrScore();

setcolor(RED);

settextstyle(0,0,4);

outtextxy(200,200,”GAME OVER”);

getch();

}

/*輸出成績*/

void PrScore(void)

{

char str[10];

setfillstyle(SOLID_FILL,YELLOW);

bar(50,15,220,35);

setcolor(6);

settextstyle(0,0,2);

sprintf(str,”score:%d”,score);

outtextxy(55,20,str);

}

/*圖形結束*/

void Close(void)

{

getch();

closegraph();

}

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

//package main;

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;//蛇長最大值

final int JianJu = 15; //設定蛇的運動網格間距(窗口最大32*28格)

byte fangXiang = 4; //控制蛇的運動方向,初始為右

int time = 500; //蛇的運動間隔時間

int jianTime = 2;//吃一個減少的時間

int x,y;//蛇的運動坐標,按網格來算

int x2,y2;//暫存蛇頭的坐標

int jiFenQi = 0;//積分器

boolean isRuned = false;//沒運行才可設級別

boolean out = false;//沒開始運行?

boolean run = false;//暫停運行

String JiBie = “中級”;

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

JPanel show = new JPanel();

JLabel Message = new JLabel(“級別:中級 蛇長:5 時間500ms 分數:00”);

// JButton play = new JButton(“開始”);

JLabel sheTou;

JLabel shiWu;

JLabel sheWei[] = new JLabel[max];

static int diJi = 4; //第幾個下標的蛇尾要被加上

ImageIcon shang = new ImageIcon(“tuPian\\isSheTouUp.png”);//產生四個上下左右的蛇頭圖案

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(“開始遊戲”);

JMenuItem play = new JMenuItem(” 開始遊戲 “);

JMenuItem pause = new JMenuItem(” 暫停遊戲 “);

JMenu hard = new JMenu(“遊戲難度”);

JMenuItem gao = new JMenuItem(“高級”);

JMenuItem zhong = new JMenuItem(“中級”);

JMenuItem di = new JMenuItem(“低級”);

JMenu about = new JMenu(” 關於 “);

JMenuItem GF = new JMenuItem(“※高分榜”);

JMenuItem ZZ = new JMenuItem(“關於作者”);

JMenuItem YX = new JMenuItem(“關於遊戲”);

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);//用向右的圖來初始蛇頭

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(){//蛇的長度增加

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(){//檢測蛇的碰撞情況

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()){//如果食物不在蛇身上則退出循環,產生食物成功

break out;

}

}

}

sheJiaChang();

// System.out.println(“吃了一個”);

if(time100 ){

time -= jianTime;

}

else{}

Message.setText(“級別:”+JiBie+” 蛇長:”+(diJi+2)+” 時間:”+time+”ms 分數:”+(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); //設置蛇頭的坐標 網格數*間隔

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(“級別:”+JiBie+” 蛇長:”+(diJi+2)+” 時間:”+time+”ms 分數:”+(jiFenQi+=10)+””);

try{

Thread.sleep(200);

}catch(Exception e){

e.printStackTrace();

}

}

}

public void gameOver(){//遊戲結束時處理

int in = JOptionPane.showConfirmDialog(f,”遊戲已經結束!\n是否要保存分數”,”提示”,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”);//先把以前的數據讀出來加到寫的數據前

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 自動生成方法存根

}

public void keyPressed(KeyEvent arg0) {

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

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

if(fangXiang != 2){

fangXiang = 1;

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

}

// 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){//按左右時方向的值相應改變

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 自動生成方法存根

}

public void actionPerformed(ActionEvent arg0) {

// TODO 自動生成方法存根

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){//如果遊戲還沒運行,才可以設置級別

if(JI == gao){

time = 200;

jianTime = 1;

JiBie = “高級”;

Message.setText(“級別:”+JiBie+” 蛇長:”+(diJi+2)+” 時間:”+time+”ms 分數:”+jiFenQi);

}

if(JI == zhong){

time = 400;

jianTime = 2;

JiBie = “中級”;

Message.setText(“級別:”+JiBie+” 蛇長:”+(diJi+2)+” 時間:”+time+”ms 分數:”+jiFenQi);

}

if(JI == di){

time = 500;

jianTime = 3;

JiBie = “低級”;

Message.setText(“級別:”+JiBie+” 蛇長:”+(diJi+2)+” 時間:”+time+”ms 分數:”+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,”暫無保存記錄!”,”高分榜”,JOptionPane.INFORMATION_MESSAGE);

}

else{

JOptionPane.showMessageDialog(f,setOut);

}

}catch(Exception e){

e.printStackTrace();

}

}

if(JI == ZZ){//關於作者

JOptionPane.showMessageDialog(f,”軟件作者:申志飛\n地址:四川省綿陽市\nQQ:898513806\nE-mail:shenzhifeiok@126.com”,”關於作者”,JOptionPane.INFORMATION_MESSAGE);

}

if(JI == YX){//關於遊戲

JOptionPane.showMessageDialog(f,”貪吃蛇遊戲\n遊戲版本 V1.0″,”關於遊戲”,JOptionPane.INFORMATION_MESSAGE);

}

if(JI == QK){

try{

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

if(select == JOptionPane.YES_OPTION){

String setOut = “”;

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

fos.write(setOut.getBytes());

}

}catch(Exception ex){}

}

}

}

//是我自己寫的,本來裏面有圖片的,但無法上傳,所以把圖片去掉了,裏面的ImageIcon等語句可以去掉。能正常運行。

課程設計:使用JavaScript製作一個網頁上的貪吃蛇遊戲

html

head

title貪吃蛇 Snake v2.4/title

style

body{

font-size:9pt;

}

table{

border-collapse: collapse;

border:solid #333 1px;

}

td{

height: 10px;

width: 10px;

font-size: 0px;

}

.filled{

background-color:blue;

}

/style

/head

script

function $(id){return document.getElementById(id);}

/**************************************************************

* javascript貪吃蛇 v2.4 br /

* author: sunxing007 05/14/2009br /

* 轉載請註明來自 謝謝!br /

* v2.4修正了蛇身顏色可以隨着蛇前進而移動

**************************************************************/

//貪吃蛇類

var Snake = {

tbl: null,

/**

* body: 蛇身,數組放蛇的每一節,

* 數據結構{x:x0, y:y0, color:color0},

* x,y表示坐標,color表示顏色

**/

body: [],

//當前移動的方向,取值0,1,2,3, 分別表示向上,右,下,左, 按鍵盤方向鍵可以改變它

direction: 0,

//定時器

timer: null,

//速度

speed: 250,

//是否已經暫停

paused: true,

//行數

rowCount: 30,

//列數

colCount: 30,

//初始化

init: function(){

var colors = [‘red’,’orange’,’yellow’,’green’,’blue’,’purple’,’#ccc’];

this.tbl = $(“main”);

var x = 0;

var y = 0;

var colorIndex = 0;

//產生初始移動方向

this.direction = Math.floor(Math.random()*4);

//構造table

for(var row=0;rowthis.rowCount;row++){

var tr=this.tbl.insertRow(-1);

for(var col=0;colthis.colCount;col++) {

var td=tr.insertCell(-1);

}

}

//產生20個鬆散節點

for(var i=0; i10; i++){

x = Math.floor(Math.random()*this.colCount);

y = Math.floor(Math.random()*this.rowCount);

colorIndex = Math.floor(Math.random()*7);

if(!this.isCellFilled(x,y)){

this.tbl.rows[y].cells[x].style.backgroundColor = colors[colorIndex];

}

}

//產生蛇頭

while(true){

x = Math.floor(Math.random()*this.colCount);

y = Math.floor(Math.random()*this.rowCount);

if(!this.isCellFilled(x,y)){

this.tbl.rows[y].cells[x].style.backgroundColor = “black”;

this.body.push({x:x,y:y,color:’black’});

break;

}

}

this.paused = true;

//添加鍵盤事件

document.onkeydown= function(e){

if (!e)e=window.event;

switch(e.keyCode | e.which | e.charCode){

case 13: {

if(Snake.paused){

Snake.move();

Snake.paused = false;

}

else{

//如果沒有暫停,則停止移動

Snake.pause();

Snake.paused = true;

}

break;

}

case 37:{//left

//阻止蛇倒退走

if(Snake.direction==1){

break;

}

Snake.direction = 3;

break;

}

case 38:{//up

//快捷鍵在這裡起作用

if(event.ctrlKey){

Snake.speedUp(-20);

break;

}

if(Snake.direction==2){//阻止蛇倒退走

break;

}

Snake.direction = 0;

break;

}

case 39:{//right

if(Snake.direction==3){//阻止蛇倒退走

break;

}

Snake.direction = 1;

break;

}

case 40:{//down

if(event.ctrlKey){

Snake.speedUp(20);

break;

}

if(Snake.direction==0){//阻止蛇倒退走

break;

}

Snake.direction = 2;

break;

}

}

}

},

//移動

move: function(){

this.timer = setInterval(function(){

Snake.erase();

Snake.moveOneStep();

Snake.paint();

}, this.speed);

},

//移動一節身體

moveOneStep: function(){

if(this.checkNextStep()==-1){

clearInterval(this.timer);

alert(“Game over!\nPress Restart to continue.”);

return;

}

if(this.checkNextStep()==1){

var _point = this.getNextPos();

var _x = _point.x;

var _y = _point.y;

var _color = this.getColor(_x,_y);

this.body.unshift({x:_x,y:_y,color:_color});

//因為吃了一個食物,所以再產生一個食物

this.generateDood();

return;

}

//window.status = this.toString();

var point = this.getNextPos();

//保留第一節的顏色

var color = this.body[0].color;

//顏色向前移動

for(var i=0; ithis.body.length-1; i++){

this.body[i].color = this.body[i+1].color;

}

//蛇尾減一節, 蛇尾加一節,呈現蛇前進的效果

this.body.pop();

this.body.unshift({x:point.x,y:point.y,color:color});

//window.status = this.toString();

},

//探尋下一步將走到什麼地方

pause: function(){

clearInterval(Snake.timer);

this.paint();

},

getNextPos: function(){

var x = this.body[0].x;

var y = this.body[0].y;

var color = this.body[0].color;

//向上

if(this.direction==0){

y–;

}

//向右

else if(this.direction==1){

x++;

}

//向下

else if(this.direction==2){

y++;

}

//向左

else{

x–;

}

//返回一個坐標

return {x:x,y:y};

},

//檢查將要移動到的下一步是什麼

checkNextStep: function(){

var point = this.getNextPos();

var x = point.x;

var y = point.y;

if(x0||x=this.colCount||y0||y=this.rowCount){

return -1;//觸邊界,遊戲結束

}

for(var i=0; ithis.body.length; i++){

if(this.body[i].x==xthis.body[i].y==y){

return -1;//碰到自己的身體,遊戲結束

}

}

if(this.isCellFilled(x,y)){

return 1;//有東西

}

return 0;//空地

},

//擦除蛇身

erase: function(){

for(var i=0; ithis.body.length; i++){

this.eraseDot(this.body[i].x, this.body[i].y);

}

},

//繪製蛇身

paint: function(){

for(var i=0; ithis.body.length; i++){

this.paintDot(this.body[i].x, this.body[i].y,this.body[i].color);

}

},

//擦除一節

eraseDot: function(x,y){

this.tbl.rows[y].cells[x].style.backgroundColor = “”;

},

paintDot: function(x,y,color){

this.tbl.rows[y].cells[x].style.backgroundColor = color;

},

//得到一個坐標上的顏色

getColor: function(x,y){

return this.tbl.rows[y].cells[x].style.backgroundColor;

},

//用於調試

toString: function(){

var str = “”;

for(var i=0; ithis.body.length; i++){

str += “x:” + this.body[i].x + ” y:” + this.body[i].y + ” color:” + this.body[i].color + ” – “;

}

return str;

},

//檢查一個坐標點有沒有被填充

isCellFilled: function(x,y){

if(this.tbl.rows[y].cells[x].style.backgroundColor == “”){

return false;

}

return true;

},

//重新開始

restart: function(){

if(this.timer){

clearInterval(this.timer);

}

for(var i=0; ithis.rowCount;i++){

this.tbl.deleteRow(0);

}

this.body = [];

this.init();

this.speed = 250;

},

//加速

speedUp: function(time){

if(!this.paused){

if(this.speed+time10||this.speed+time2000){

return;

}

this.speed +=time;

this.pause();

this.move();

}

},

//產生食物。

generateDood: function(){

var colors = [‘red’,’orange’,’yellow’,’green’,’blue’,’purple’,’#ccc’];

var x = Math.floor(Math.random()*this.colCount);

var y = Math.floor(Math.random()*this.rowCount);

var colorIndex = Math.floor(Math.random()*7);

if(!this.isCellFilled(x,y)){

this.tbl.rows[y].cells[x].style.backgroundColor = colors[colorIndex];

}

}

};

/script

body onload=”Snake.init();”

/*************************************************************br /

* javascript貪吃蛇 v2.4br /

* author: sunxing007 05/14/2009br /

* 轉載請註明來自 a href=””;/a 謝謝!br /

**************************************************************/br /

table id=”main” border=”1″ cellspacing=”0″ cellpadding=”0″/table

input type=”button” id=”btn” value=”開始/暫停” /點左邊按鈕或按Enter開始/暫停遊戲br /

input type=”button” id=”reset” value=”重新開始” /br /

input type=”button” id=”upSpeed” value=”加速” /點左邊按鈕或按Ctrl + ↑加速br /

input type=”button” id=”downSpeed” value=”減速” /點左邊按鈕或按Ctrl + ↓減速

script

$(‘btn’).onclick = function(){

if(Snake.paused){

Snake.move();

Snake.paused = false;

}

else{

Snake.pause();

Snake.paused = true;

}

};

$(“reset”).onclick = function(){

Snake.restart();

this.blur();

};

$(“upSpeed”).onclick = function(){

Snake.speedUp(-20);

};

$(“downSpeed”).onclick = function(){

Snake.speedUp(20);

};

/script

/body

/html

原創文章,作者:PJBK,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/142239.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
PJBK的頭像PJBK
上一篇 2024-10-10 09:25
下一篇 2024-10-10 09:25

相關推薦

  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python字符串寬度不限制怎麼打代碼

    本文將為大家詳細介紹Python字符串寬度不限制時如何打代碼的幾個方面。 一、保持代碼風格的統一 在Python字符串寬度不限制的情況下,我們可以寫出很長很長的一行代碼。但是,為了…

    編程 2025-04-29
  • Python基礎代碼用法介紹

    本文將從多個方面對Python基礎代碼進行解析和詳細闡述,力求讓讀者深刻理解Python基礎代碼。通過本文的學習,相信大家對Python的學習和應用會更加輕鬆和高效。 一、變量和數…

    編程 2025-04-29
  • g3log源代碼學習

    g3log是一個高性能C++日誌庫,其代碼十分精簡和可讀性強,本文將從3個方面詳細介紹g3log源代碼學習。 一、g3log源代碼整體架構 g3log的整體架構十分清晰,其中有3個…

    編程 2025-04-29
  • Python滿天星代碼:讓編程變得更加簡單

    本文將從多個方面詳細闡述Python滿天星代碼,為大家介紹它的優點以及如何在編程中使用。無論是剛剛接觸編程還是資深程序員,都能從中獲得一定的收穫。 一、簡介 Python滿天星代碼…

    編程 2025-04-29
  • 倉庫管理系統代碼設計Python

    這篇文章將詳細探討如何設計一個基於Python的倉庫管理系統。 一、基本需求 在着手設計之前,我們首先需要確定倉庫管理系統的基本需求。 我們可以將需求分為以下幾個方面: 1、庫存管…

    編程 2025-04-29
  • 寫代碼新手教程

    本文將從語言選擇、學習方法、編碼規範以及常見問題解答等多個方面,為編程新手提供實用、簡明的教程。 一、語言選擇 作為編程新手,選擇一門編程語言是很關鍵的一步。以下是幾個有代表性的編…

    編程 2025-04-29
  • Python實現簡易心形代碼

    在這個文章中,我們將會介紹如何用Python語言編寫一個非常簡單的代碼來生成一個心形圖案。我們將會從安裝Python開始介紹,逐步深入了解如何實現這一任務。 一、安裝Python …

    編程 2025-04-29
  • 怎麼寫不影響Python運行的長段代碼

    在Python編程的過程中,我們不可避免地需要編寫一些長段代碼,包括函數、類、複雜的控制語句等等。在編寫這些代碼時,我們需要考慮代碼可讀性、易用性以及對Python運行性能的影響。…

    編程 2025-04-29
  • Python海龜代碼簡單畫圖

    本文將介紹如何使用Python的海龜庫進行簡單畫圖,並提供相關示例代碼。 一、基礎用法 使用Python的海龜庫,我們可以控制一個小海龜在窗口中移動,並利用它的「畫筆」在窗口中繪製…

    編程 2025-04-29

發表回復

登錄後才能評論