閒暇之餘,學習前輩經驗,再利用執行緒和窗體自己做了個貪吃蛇小遊戲。
遊戲帶有加速功能,能顯示遊戲分數。
借鑑的朋友們後期還可以在此基礎上增加其他功能。
下面給大家顯示遊戲**,以及詳細註解
一、bean類
/*** 蛇和食物的構造基礎,
* * @author deng**/
public class node
public node(int nodex, int nodey, int nodedir)
public node()
public void setnodex(int nodex)
public int getnodey()
public void setnodey(int nodey)
public int getnodedir()
public void setnodedir(int nodedir)
二、jplanel類
用來構建遊戲介面
*** 建立乙個繼承jpanel的子類,實現鍵盤監聽和執行緒介面
* * @author deng**/
public class mypanle extends jpanel implements keylistener, runnable
public int getgrade()
//分數屬性
private int grade;
//蛇的初始移動速度,0.1秒移動一次
private int speed=500;
// 蛇頭屬性
private node snakehead = new node(100, 100, first_dir);
// 食物屬性
private node food = new node(20, 60, stop);
// 蛇的身體
vectorsnakebody = new vector();
// 初始化蛇的移動方向
// 開始遊戲標誌
private boolean gamestart = true;
// 設定方向常量
private static final int first_dir = 4;
private static final int turn_up = 1;
private static final int turn_down = 2;
private static final int turn_left = 3;
private static final int turn_right = 4;
private static final int stop = -1;
public mypanle(int x, int y, container c)
// 繪製圖畫
@override
public void paint(graphics g)
// // 繪製列的直線
// for (int col = 20; col <=400; col += 20)
// 繪製蛇頭
g.setcolor(color.blue);
g.filloval(snakehead.getnodex(), snakehead.getnodey(), 20, 20);
// 繪製蛇身
g.setcolor(color.blue);
for (node node : snakebody)
// 繪製食物
g.setcolor(color.red);
g.filloval(food.getnodex(), food.getnodey(), 20, 20);
requestfocusinwindow();
}@override
public void run()
// 判斷是否吃到自己
if(eatself())
//if (judgeeat())
// 蛇開始移動
move();
bodymove();
// 重畫
repaint();
thread.sleep(this.speed);
}catch (interruptedexception e) }}
/** * 蛇頭移動
*/public void move()
}@override
public void keytyped(keyevent e)
/** * 實現按鈕監聽,完成轉向功能
*/@override
public void keypressed(keyevent e)
snakehead.setnodedir(turn_down);
} else if (key == keyevent.vk_up)
snakehead.setnodedir(turn_up);
} else if (key == keyevent.vk_left)
snakehead.setnodedir(turn_left);
} else if (key == keyevent.vk_right)
snakehead.setnodedir(turn_right);}}
@override
public void keyreleased(keyevent e)
/** * 判斷蛇是否超出邊界
* * @return
*/public boolean judgeboder() else if (snakehead.getnodex() == 0 && snakehead.getnodedir() == turn_left) else if (snakehead.getnodey() == 0 && snakehead.getnodedir() == turn_up) else if (snakehead.getnodey() == 480 && snakehead.getnodedir() == turn_down)
return temp;}/*
* 產生食物
*/public void foodcreat()
/** * 食物與蛇碰撞檢測
* * @return 碰撞結果
*/public boolean judgeeat() else
snakebody.add(body);
return true;
}return false;
}/**
* 移動蛇身
*/public void bodymove()
//記錄第乙個蛇身的方向
dir=bodydir;
// 把蛇頭的方向賦值給第乙個蛇身
bodydir = headdir;
//將蛇頭的方向給第乙個身體
body.setnodedir(bodydir);
//把第乙個身體的方向當做蛇頭方向,
headdir=dir;}}
/** * 判斷蛇是不是吃到自己的身體。
* 蛇身體遍歷,蛇頭與任何蛇身碰撞遊戲結束
* @return
*/public boolean eatself()
}return false;
}/**
* 根據分數改變蛇的移動速度
*/public void changespeed()
}三、封裝的jlable,用來顯示成績
public class mylabel extends jlabel
}四、jframe窗體,用來記錄成績,顯示整個遊戲介面
public class begin extends jframe implements runnable
public static void main(string args)
@override
public void run() }}
貪吃蛇遊戲
貪吃蛇遊戲 結構化程式設計 c語言程式設計 重要的的是結構化的程式設計思想 include include include include include include define field width 300 就做20個格仔的 define field height 300 define f...
貪吃蛇遊戲
include include include include include 使用當前時間做種子 enum dir 列舉型別enum dir 圍牆 class fencef 定義物件 畫框框 void fence initfence 顯示框框 void fence outputf int snak...
貪吃蛇遊戲
知識點 物件導向思想,原型新增方法的練習,私有的函式 功能實現 1 搭建頁面 放乙個容器盛放遊戲場景 div map,設定樣式。2 分析物件 遊戲物件 蛇物件 食物物件3 建立食物物件 food 屬性 所在位置 寬高度 顏色 x y width height color 方法 init 隨機建立乙個...