java贪吃蛇(java贪吃蛇课程设计报告)

更新时间:2023-03-01 08:43:34 阅读: 评论:0

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

本文发布于:2023-02-28 19:44:00,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/zhishi/a/167763141469551.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:java贪吃蛇(java贪吃蛇课程设计报告).doc

本文 PDF 下载地址:java贪吃蛇(java贪吃蛇课程设计报告).pdf

标签:贪吃蛇   课程设计   报告   java
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 实用文体写作网旗下知识大全大全栏目是一个全百科类宝库! 优秀范文|法律文书|专利查询|