贪吃蛇完整代码,为什么别人的代码,我抄下来就出错,请高手们以及资深人士指点迷津指点一下

屌丝Java 2018-02-17 08:51:20
出错图片

附上完整代码
package snake;
import javax.swing.JFrame;
public class Snake{
public static void main(String[] args){
JFrame frame = new JFrame();//创建一个游戏界面的框架
frame.setBounds(10, 10, 900, 720);//设置框架的大小
frame.setResizable(false);//设置框架大小为不能改变
//点击关闭按钮,关闭游戏界面
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
SnakePanel panel = new SnakePanel();//添加画布
frame.add(panel);//添加画布
frame.setVisible(true);//允许显示游戏界面
}
}

package snake;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Random;

import javax.swing.ImageIcon;
import javax.swing.JPanel;
import javax.swing.Timer;

public class SnakePanel extends JPanel implements KeyListener,ActionListener{
//定义七个图片变量,代表七张图片
ImageIcon up = new ImageIcon("D:\JAVA编程素材\贪吃蛇\蛇头上.png");
ImageIcon down = new ImageIcon("D:\JAVA编程素材\贪吃蛇\蛇头下.png");
ImageIcon left = new ImageIcon("D:\JAVA编程素材\贪吃蛇\蛇头左.png");
ImageIcon right = new ImageIcon("D:\JAVA编程素材\贪吃蛇\蛇头右.png");
ImageIcon body = new ImageIcon("D:\JAVA编程素材\贪吃蛇\蛇身.png");
ImageIcon food = new ImageIcon("D:\JAVA编程素材\贪吃蛇\食物.png");
ImageIcon title = new ImageIcon("D:\JAVA编程素材\贪吃蛇\游戏界面主题.png");

//蛇的每一部分
int[] snakex = new int[750];
int[] snakey = new int[750];
//随机生成食物
Random random = new Random();
//此处的数据可以根据自己的游戏界面大小来确定
int foodx = random.nextInt(34)*25+25;
int foody = random.nextInt(24)*25+75;
//设置游戏的默认属性
int len = 3;
int score = 0;
String direction = "R";//U上 D下 L左 R右

boolean isStarted = false;//判断游戏是否开始
boolean isFailed = false;//判断游戏是否结束
Timer timer = new Timer(100, this);//每100毫秒调用一次ActionPerformed

public SnakePanel(){
this.setFocusable(true);//获取焦点
this.addKeyListener(this);//监听键盘事件
setup();
timer.start();
}
public void paint(Graphics g){//画笔
this.setBackground(Color.BLACK);//设置画布背景颜色
title.paintIcon(this, g, 25, 11);//放置主题图片
g.fillRect(25, 75, 850, 650);//用画笔设置游戏方框

//画蛇头(注意判断蛇头的方向)
if(direction.equals("R")){
right.paintIcon(this, g, snakex[0], snakey[0]);
} else if(direction.equals("L")){
left.paintIcon(this, g, snakex[0], snakey[0]);
} else if(direction.equals("U")){
up.paintIcon(this, g, snakex[0], snakey[0]);
} else if(direction.equals("D")){
down.paintIcon(this, g, snakex[0], snakey[0]);
}

//画蛇的身体
for(int i=1;i<len;i++){
body.paintIcon(this, g, snakex[i], snakey[i]);
}

//判断如果游戏没开始显示。。。
if(!isStarted){
g.setColor(Color.WHITE);
g.setFont(new Font("arial",Font.BOLD,30));
g.drawString("Press Space to start / pause", 200, 300);
}

//判断如果游戏结束显示。。。
if(!isFailed){
g.setColor(Color.WHITE);
g.setFont(new Font("arial",Font.BOLD,30));
g.drawString("Game Over!Press space to restart", 200, 300);
}

food.paintIcon(this, g, foodx, foody);//显示食物

//设置分数和蛇的长度
g.setColor(Color.WHITE);
g.setFont(new Font("arial",Font.PLAIN,15));
g.drawString("Score:"+score, 650, 37);
g.drawString("Len:"+len, 650, 57);
}
public void setup(){//游戏初始化
isStarted = false;
isFailed = false;
len = 3;
score = 0;
snakex[0] = 100;snakex[1] = 75;snakex[2] = 50;
snakey[0] = 100;snakey[1] = 100;snakey[2] = 100;
}
@Override
public void keyPressed(KeyEvent e){
//实现键盘响应
int KeyCode = e.getKeyCode();
if(KeyCode == KeyEvent.VK_SPACE){//敲击空格消除提示信息
if(isFailed){
isStarted = false;//可以将这两行放入 setup 中
isFailed = false;
setup();
} else{
isStarted = !isStarted;
}
} else if(KeyCode == KeyEvent.VK_UP && direction != "D"){
direction = "U";
}else if(KeyCode == KeyEvent.VK_DOWN && direction != "U"){
direction = "D";
}else if(KeyCode == KeyEvent.VK_RIGHT && direction != "L"){
direction = "R";
}else if(KeyCode == KeyEvent.VK_LEFT && direction != "R"){
direction = "L";
}
}
@Override
public void actionPerformed(ActionEvent e){
timer.start();//定义一个闹钟
//移动数据
if(isStarted && !isFailed){
//移动头
for(int i=len;i>0;i--){
snakex[i] = snakex[i-1];
snakey[i] = snakey[i-1];
}
//移动头
if(direction.equals("R")){
snakex[0] = snakex[0] + 25;
if(snakex[0]>850) snakex[0] = 25;
} else if(direction.equals("L")){
snakex[0] = snakex[0] - 25;
if(snakex[0]<25) snakex[0] = 850;
} else if(direction.equals("U")){
snakey[0] = snakey[0] - 25;
if(snakex[0]<75) snakex[0] = 650;
} else if(direction.equals("D")){
snakey[0] = snakey[0] + 25;
if(snakex[0]>650) snakex[0] = 75;
}
if(snakex[0]==foodx && snakey[0]==foody){//吃食物
len ++;
score ++;
foodx = random.nextInt(34)*25 + 25;
foody = random.nextInt(24)*25 + 75;
}
for(int i=1;i<len;i++){
if(snakex[0]==snakex[i] && snakey[0]==snakey[i]){
isFailed = true;
}
}
}
//重画机制
repaint();
}
@Override
public void keyTyped(KeyEvent e){}

@Override
public void keyReleased(KeyEvent e){}
}

别人发布的时候确有图片能运行,但是我抄下来的时候却有这些错误,还无法运行,因为我是刚自学几个月的小白所以无法自行解决问题,希望高手们,资深人士帮忙解决一下。
...全文
1244 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
janury 2018-02-20
  • 打赏
  • 举报
回复
图片路径最好不要用中文,还有最好用相对路径,笑嘻嘻。
mxinux 2018-02-19
  • 打赏
  • 举报
回复
把单反斜杠(\)全部换成双反斜杠(\\)试一下
屌丝Java 2018-02-18
  • 打赏
  • 举报
回复
是斜杠的问题,运行了,可是蛇头回转,就是蛇不会走路,怎么实现,知识不够,看了韩顺平韩老师的坦克大战,看到第二版本,到第三版本就觉得自己力不从心。刚自学了两三个月
huody1990 2018-02-17
  • 打赏
  • 举报
回复
把单反斜杠(\)全部换成双反斜杠(\\)试一下

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧