本文目錄一覽:
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