java貪吃蛇國內現狀怎么樣
java貪吃蛇國內現狀是熱度慢慢淡下去了。貪吃蛇大作戰就做到了,表現異常亮眼,曾經登上免費榜第一的位置。《貪吃蛇大作戰》的流行,以及《球球大作戰》的持續火爆,最核心的原因是,在手機上找到了一種適合實時多人對戰的玩法,也和大環境下新生代玩家越來越注重游戲本身的樂趣有關。在PC端上我們可以玩LOL、DotA、穿越火線這樣的實時對戰游戲,我們享受與人斗的樂趣,將我們的榮譽融入其中。而在手機上能夠給予相似感受的游戲一直并沒有出現,而恰恰這種類型的游戲填補了這方面的空白。
java貪吃蛇小游戲為什么運行不了游戲
Java貪吃蛇,粘貼應該就能運行,不過要java環境就是了。
做這個項目的時候天天掛著瀏覽器,查了不少資料,甚至直接cv工程師上線,下面是一個比我做得好的,我也是一大半都從那抄來,不過,說全抄不會真信吧,如果真新,那就是我的注釋不夠詳細了。。。
怎么包裝貪吃蛇項目
思路:
首先你要有一條貪吃蛇,哎,就是玩兒。
1.先用Java敲一個貪吃蛇小游戲的程序。
2.把Java程序打包成jar文件包,把jar包打包成exe應用程序
知道思路以后,接下來按照我的詳細步驟走,能少踩坑,別問我怎么知道的!!!
一、Java“敲一個”貪吃蛇小游戲
廢話不多說,本篇主要講從java項目到exe應用程序,Java項目的代碼在我上傳的資源當中——代碼-greedy snack.zip
二、將項目打成jar包
如何打包成jar包?
1.手動打可直接執行的jar包(本次不使用)2. 使用intellij idea工具打可直接執行的jar包
1) 打開項目
2)點擊 File — 選擇 Project Structure,找到“Artifacts” 點擊 “+” 選擇“JAR” —“Empty”。
3) Name欄可以填入自定義的名字,Output ditectory選擇jar包生成目標目錄,Available Elements里雙擊需要添加到jar包的文件,即可添加到左邊的jar包目錄,如圖:
4)點擊Create Manifest,選擇放置MANIFEST.MF的文件路徑,直接默認項目根目錄就行,點擊OK。
5) 點擊Main Class后面選擇按鈕, 彈出框中選擇需要運行程序入口main函數,點擊OK,點擊OK。
6) 點擊菜單中“Build” -> "Build Artifacts", 雙擊彈出框中待生成jar包下面的build即可,如下圖
7)至此使用Intellij idea生成可直接執行jar包就完成了。
8)查看生成的jar包,并運行jar包。命令行運行jar包
java -jar xxx.jar
復制代碼
三、打包成為exe應用程序
這里首先你要有:
上面生成的jar包 greedy snack.jar
工具:exe4j,一個將jar轉換成exe的工具 鏈接:http://pan.baidu.com/s/1FlgsxJZ5… 提取碼:ijdv
1)安裝exe4j,打開安裝好的exe4j,進行注冊
注冊碼:L-g782dn2d-1f1yqxx1rv1sqd
2) 點擊 Next, 選擇JAVA轉EXE
3) Next,填入自定義的名字和生成目標文件目錄
4) 繼續Next,選擇啟動模式、設置程序名稱和程序圖標
5) 下方有個選項,需要設置打包后的程序兼容32和64位系統。
勾選,然后Next。
6)然后Next,直到出現如下界面,開始選擇jar包以及配置
在VM參數配置的地方加上:-Dfile.encoding=utf-8
添加jar包
設置啟動類
Next 配置JRE
Next 選擇 Client VM
7)Next 直到如下圖界面
桌面多了一個貪吃蛇小游戲3.0.exe文件,至此我們就成功的做出了一個Java貪吃蛇小游戲的exe應用程序
貪吃蛇 java代碼
自己寫著玩的,很簡單,你試一試哦...
主要用了javax.swing.Timer這個類:
import java.awt.*;
import javax.swing.*;
@SuppressWarnings("rial")
public class MainClass extends JFrame {
ControlSnake control;
Toolkit kit;
Dimension dimen;
public static void main(String[] args) {
new MainClass("my snake");
}
public MainClass(String s) {
super(s);
control = new ControlSnake();
control.tFocusable(true);
kit = Toolkit.getDefaultToolkit();
dimen = kit.getScreenSize();
add(control);
tLayout(new BorderLayout());
tLocation(dimen.width / 3, dimen.height / 3);// dimen.width/3,dimen.height/3
tSize(FWIDTH, FHEIGHT);
tDefaultCloOperation(JFrame.EXIT_ON_CLOSE);
tResizable(fal);
tVisible(true);
}
public static final int FWIDTH = 315;
public static final int FHEIGHT = 380;
}
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.Timer;
import java.util.Random;
@SuppressWarnings("rial")
public class ControlSnake extends JPanel implements ActionListener {
Random rand;
ArrayList<Point> list, listBody;
String str, str1;
static boolean key;
int x, y, dx, dy, fx, fy, flag;
int snakeBody;
int speed;
public ControlSnake() {
snakeBody = 1;
str = "上下左右方向鍵控制 P鍵暫停...";
str1 = "現在的長度為:" + snakeBody;
key = true;
flag = 1;
speed = 700;
rand = new Random();
list = new ArrayList<Point>();
listBody = new ArrayList<Point>();
x = 5;
y = 5;
list.add(new Point(x, y));
listBody.add(list.get(0));
dx = 10;
dy = 0;
fx = rand.nextInt(30) * 10 + 5;// 2
fy = rand.nextInt(30) * 10 + 5;// 2
tBackground(Color.WHITE);
tSize(new Dimension(318, 380));
final Timer time = new Timer(speed, this);
time.start();
addKeyListener(new KeyAdapter() {
public void keyPresd(KeyEvent e) {
if (e.getKeyCode() == 37) {
dx = -10;
dy = 0;
} el if (e.getKeyCode() == 38) {
dx = 0;
dy = -10;
} el if (e.getKeyCode() == 39) {
dx = 10;
dy = 0;
} el if (e.getKeyCode() == 40) {
dx = 0;
dy = 10;
} el if (e.getKeyCode() == 80) {
if (flag % 2 == 1) {
time.stop();
}
if (flag % 2 == 0) {
time.start();
}
flag++;
}
}
});
}
public void paint(Graphics g) {
g.tColor(Color.WHITE);
g.fillRect(0, 0, 400, 400);
g.tColor(Color.DARK_GRAY);
g.drawLine(3, 3, 305, 3);
g.drawLine(3, 3, 3, 305);
g.drawLine(305, 3, 305, 305);
g.drawLine(3, 305, 305, 305);
g.tColor(Color.PINK);
for (int i = 0; i < listBody.size(); i++) {
g.fillRect(listBody.get(i).x, listBody.get(i).y, 9, 9);
}
g.fillRect(x, y, 9, 9);
g.tColor(Color.ORANGE);
g.fillRect(fx, fy, 9, 9);
g.tColor(Color.DARK_GRAY);
str1 = "現在的長度為:" + snakeBody;
g.drawString(str, 10, 320);
g.drawString(str1, 10, 335);
}
public void actionPerformed(ActionEvent e) {
x += dx;
y += dy;
if (makeOut() == fal) {
JOptionPane.showMessageDialog(null, "重新開始......");
speed = 700;
snakeBody = 1;
x = 5;
y = 5;
list.clear();
list.add(new Point(x, y));
listBody.clear();
listBody.add(list.get(0));
dx = 10;
dy = 0;
}
addPoint(x, y);
if (x == fx && y == fy) {
speed = (int) (speed * 0.8);//速度增加參數
if (speed < 200) {
speed = 100;
}
fx = rand.nextInt(30) * 10 + 5;// 2
fy = rand.nextInt(30) * 10 + 5;// 2
snakeBody++;// 2
} // 2
repaint();
}
public void addPoint(int xx, int yy) {
// 動態的記錄最新發生的50步以內的移動過的坐標
// 并畫出最新的snakeBody
if (list.size() < 100) {//蛇身長度最長為100
list.add(new Point(xx, yy));
} el {
list.remove(0);
list.add(new Point(xx, yy));
}
if (snakeBody == 1) {
listBody.remove(0);
listBody.add(0, list.get(list.size() - 1));
} el {
listBody.clear();
if (list.size() < snakeBody) {
for (int i = list.size() - 1; i > 0; i--) {
listBody.add(list.get(i));
}
} el {
for (int i = list.size() - 1; listBody.size() < snakeBody; i--) {
listBody.add(list.get(i));
}
}
}
}
public boolean makeOut() {
if ((x < 3 || y < 3) || (x > 305 || y > 305)) {
return fal;
}
for (int i = 0; i < listBody.size() - 1; i++) {
for (int j = i + 1; j < listBody.size(); j++) {
if (listBody.get(i).equals(listBody.get(j))) {
return fal;
}
}
}
return true;
}
}
求java貪吃蛇的編程,并有注釋
J2ME貪吃蛇源代碼——200行左右,包含詳細注釋 package snake;import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;public class SnakeMIDlet extends MIDlet {
SnakeCanvas displayable = new SnakeCanvas();
public SnakeMIDlet() {
Display.getDisplay(this).tCurrent(displayable);
}public void startApp() {}public void pauApp() {}public void destroyApp(boolean unconditional) {}}//文件名:SnakeCanvas.javapackage snake;import java.util.*;
import javax.microedition.lcdui.*;/**
* 貪吃蛇游戲
*/
public class SnakeCanvas extends Canvas implements Runnable{
/**存儲貪吃蛇節點坐標,其中第二維下標為0的代表x坐標,第二維下標是1的代表y坐標*/
int[][] snake = new int[200][2];
/**已經使用的節點數量*/
int snakeNum;
/**貪吃蛇運動方向,0代表向上,1代表向下,2代表向左,3代表向右*/
int direction;
/*移動方向*/
/**向上*/
private final int DIRECTION_UP = 0;
/**向下*/
private final int DIRECTION_DOWN = 1;
/**向左*/
private final int DIRECTION_LEFT = 2;
/**向右*/
private final int DIRECTION_RIGHT = 3;/**游戲區域寬度*/
int width;
/**游戲區域高度*/
int height;/**蛇身單元寬度*/
private final byte SNAKEWIDTH = 4;/**是否處于暫停狀態,true代表暫停*/
boolean isPaud = fal;
/**是否處于運行狀態,true代表運行*/
boolean isRun = true;/**時間間隔*/
private final int SLEEP_TIME = 300;
/**食物的X坐標*/
int foodX;
/**食物的Y坐標*/
int foodY;
/**食物的閃爍控制*/
boolean b = true;
/**Random對象*/
Random random = new Random();
public SnakeCanvas() {
//初始化
init();
width = this.getWidth();
height = this.getHeight();
//啟動線程
new Thread(this).start();
}/**
* 初始化開始數據
*/
private void init(){
//初始化節點數量
snakeNum = 7;
//初始化節點數據
for(int i = 0;i < snakeNum;i++){
snake[i][0] = 100 - SNAKEWIDTH * i;
snake[i][1] = 40;
}
//初始化移動方向
direction = DIRECTION_RIGHT;
//初始化食物坐標
foodX = 100;
foodY = 100;
}protected void paint(Graphics g) {
//清屏
g.tColor(0xffffff);
g.fillRect(0,0,width,height);
g.tColor(0);//繪制蛇身
for(int i = 0;i < snakeNum;i++){
g.fillRect(snake[i][0],snake[i][1],SNAKEWIDTH,SNAKEWIDTH);
}
//繪制食物
if(b){
g.fillRect(foodX,foodY,SNAKEWIDTH,SNAKEWIDTH);
}
}private void move(int direction){
//蛇身移動
for(int i = snakeNum - 1;i > 0;i--){
snake[i][0] = snake[i - 1][0];
snake[i][1] = snake[i - 1][1];
}//第一個單元格移動
switch(direction){
ca DIRECTION_UP:
snake[0][1] = snake[0][1] - SNAKEWIDTH;
break;
ca DIRECTION_DOWN:
snake[0][1] = snake[0][1] + SNAKEWIDTH;
break;
ca DIRECTION_LEFT:
snake[0][0] = snake[0][0] - SNAKEWIDTH;
break;
ca DIRECTION_RIGHT:
snake[0][0] = snake[0][0] + SNAKEWIDTH;
break;
}
}
/**
* 吃掉食物,自身增長
*/
private void eatFood(){
//判別蛇頭是否和食物重疊
if(snake[0][0] == foodX && snake[0][1] == foodY){
snakeNum++;
generateFood();
}
}
/**
* 產生食物
* 說明:食物的坐標必須位于屏幕內,且不能和蛇身重合
*/
private void generateFood(){
while(true){
foodX = Math.abs(random.nextInt() % (width - SNAKEWIDTH + 1))
/ SNAKEWIDTH * SNAKEWIDTH;
foodY = Math.abs(random.nextInt() % (height - SNAKEWIDTH + 1))
/ SNAKEWIDTH * SNAKEWIDTH;
boolean b = true;
for(int i = 0;i < snakeNum;i++){
if(foodX == snake[i][0] && snake[i][1] == foodY){
b = fal;
break;
}
}
if(b){
break;
}
}
}
/**
* 判斷游戲是否結束
* 結束條件:
* 1、蛇頭超出邊界
* 2、蛇頭碰到自身
*/
private boolean isGameOver(){
//邊界判別
if(snake[0][0] < 0 || snake[0][0] > (width - SNAKEWIDTH) ||
snake[0][1] < 0 || snake[0][1] > (height - SNAKEWIDTH)){
return true;
}
//碰到自身
for(int i = 4;i < snakeNum;i++){
if(snake[0][0] == snake[i][0]
&& snake[0][1] == snake[i][1]){
return true;
}
}
return fal;
}/**
* 事件處理
*/
public void keyPresd(int keyCode){
int action = this.getGameAction(keyCode);
//改變方向
switch(action){
ca UP:
if(direction != DIRECTION_DOWN){
direction = DIRECTION_UP;
}
break;
ca DOWN:
if(direction != DIRECTION_UP){
direction = DIRECTION_DOWN;
}
break;
ca LEFT:
if(direction != DIRECTION_RIGHT){
direction = DIRECTION_LEFT;
}
break;
ca RIGHT:
if(direction != DIRECTION_LEFT){
direction = DIRECTION_RIGHT;
}
break;
ca FIRE:
//暫停和繼續
isPaud = !isPaud;
break;
}
}/**
* 線程方法
* 使用精確延時
*/
public void run(){
try{
while (isRun) {
//開始時間
long start = System.currentTimeMillis();
if(!isPaud){
//吃食物
eatFood();
//移動
move(direction);
//結束游戲
if(isGameOver()){
break;
}
//控制閃爍
b = !b;
}
//重新繪制
repaint();
long end = System.currentTimeMillis();
//延時
if(end - start < SLEEP_TIME){
Thread.sleep(SLEEP_TIME - (end - start));
}
}
}catch(Exception e){}
}
}