解决方案 »
- saveOrUpdate方法为什么Insert语句也出了,数据库里就是没有数据那??我也commit了啊!!
- 菜鸟求教,java中获取当前时间转换成UTC毫秒值
- 求一个多条件搜索,拼SQL语句的思路,请各位指教
- 请问Java有什么Jar包专门解析BPEL的?
- Java单例模式(饿汉式)的线程安全问题
- EJB Session not exist at
- Tomcat启动时像疯了一样,不停打印信息,高手进阿
- 有哪位高人熟悉JAVA/CORBA,请指教啊!!!!!
- 这是什么问题?
- 公司只给上csdn等技术网站 其他网站都上不了
- JavaMail用IMAPFolder.getMessageByUID来获取QQ邮箱的邮件时有问题!!!
- hibernate出错.求助.
package game;import java.awt.Color;
import java.awt.FlowLayout;
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.ArrayList;
import java.util.List;
import java.util.Random;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class SnakeFrame extends JFrame {
public SnakeFrame() {
setTitle("贪吃蛇小游戏");
setSize(600,500);
setLocation(300, 100);
panel = new SnakeWin();
panel.setLayout(new FlowLayout(FlowLayout.LEFT));//设置流式布局管理器
startButton = new JButton("开始");
stopButton = new JButton("退出");
panel.add(startButton);
panel.add(stopButton);
startButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
startButton.setEnabled(false);
start = true;
egg = new Egg();
snake = new Snake();
snake.setSx(20);
snake.setSy(10);
list.add(snake);
requestFocus(true);
Thread thread = new Thread(panel);
thread.start();
repaint();
}
});
stopButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
add(panel);
addKeyListener(panel);
}
class SnakeWin extends JPanel implements KeyListener,Runnable{
public void paintComponent(Graphics g){
super.paintComponent(g); //多了个s我艹啊啊啊啊啊啊啊就消除不了了
g.drawRect(10, 40, 550, 400);
if(start){
g.setColor(Color.BLUE);
g.fillRect(10+egg.getEx()*10, 40+egg.getEy()*10, 10, 10);
g.setColor(Color.GREEN);
for(int i=0;i < list.size();i++)
g.fillRect(10+list.get(i).getSx()*10, 40+list.get(i).getSy()*10, 10, 10);
}
}
public void eat(){
if(list.get(0).getSx() == egg.getEx() && list.get(0).getSy() == egg.getEy()){
egg.ex = egg.er.nextInt(55);
egg.ey = egg.er.nextInt(40);
Snake snakeBody = new Snake();
snakeBody.setSx(list.get(list.size()-1).getSx());
snakeBody.setSy(list.get(list.size()-1).getSy());
list.add(snakeBody);
}
}
public void move(int dx,int dy){
if(judgeBound(list.get(0),dx,dy)){
bodyMove();
list.get(0).setSx(list.get(0).getSx()-dx);
list.get(0).setSy(list.get(0).getSy()-dy);
eat();
repaint();
}
else{//死亡方法
}
} public void bodyMove(){
Snake snakeBody = new Snake();
for(int i = 0;i < list.size();i++){
if(i == 1){
// list.set(i, list.get(i-1)); //奇怪了!!!!!!!!!!!!没想明白???????,需要测试!!!!
list.get(i).setSx(list.get(0).getSx());
list.get(i).setSy(list.get(0).getSy());
}else if(i > 1){
snakeBody = list.get(i-1);
list.set(i-1,list.get(i));
list.set(i,snakeBody);
}
}
}
public void up(){
move(0,1);
dir = 1;
}
public void down(){
move(0,-1);
dir = 2;
}
public void left(){
move(1,0);
dir = 3;
}
public void right(){
move(-1,0);
dir = 4;
}
public boolean judgeBound(Snake s,int dx,int dy){
if(s.getSx()-dx > 54 || s.getSy()-dy > 39 || s.getSx()-dx < 0 || s.getSy()-dy < 0)
return false;
for(int i=0;i < list.size();i++){
if(i>1 && list.get(0).getSx() == list.get(i).getSx() && list.get(0).getSy() == list.get(i).getSy()){
return false;
}
}
return true;
}
public void run() {
while(start){
switch (dir) {
case 1:
move(0,1);
break;
case 2:
move(0,-1);
break;
case 3:
move(1,0);
break;
case 4:
move(-1,0);
break;
default:
move(0,1);
break;
}
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
} public void keyPressed(KeyEvent e) {
if(start){
switch (e.getKeyCode()) {
case KeyEvent.VK_UP:
up();
break;
case KeyEvent.VK_DOWN:
down();
break;
case KeyEvent.VK_LEFT:
left();
break;
default:
right();
break;
}
}
} @Override
public void keyReleased(KeyEvent e) {
// TODO 自动生成的方法存根
} @Override
public void keyTyped(KeyEvent e) {
// TODO 自动生成的方法存根
}
}
private int dir = 1;
private List<Snake> list = new ArrayList<Snake>();
Snake snake;
Egg egg;
Random r = new Random();
private JButton startButton;
private JButton stopButton;
private boolean start = false;
private SnakeWin panel;
}
list是snake对象的arraylist集合,snake对象有2个数据域,就是每块蛇身的x坐标和y坐标
list.set(i, list.get(i-1));和
list.get(i).setSx(list.get(0).getSx());
list.get(i).setSy(list.get(0).getSy());
本质上有什么区别?
下面都是拿的list的第一个
代码太长没看 只看了你说的!
代码太长没看 只看了你说的!
我代码还有部分没贴
算了,我再想想