📄 贪吃蛇.txt
字号:
g.fill3DRect(user2.posx+1,user2.posy+1,18,18,true);
g.setColor(Color.red);
if ((user2.runFlag == false)&(user2.gameFlag == true)) g.drawString("PAUSE...",user2.panelx+130,user2.panely+130);
if (user2.gameFlag == false) g.drawString("Game Over!",user2.panelx+130,user2.panely+130);
//////////////////////draw user1/////////////////////////////////
//显示图像
for (int i = 0; i < user1.Baby.size(); i++) {
//得到图像位置
int x = (int)((Point)user1.Baby.get(i)).getX();
int y = (int)((Point)user1.Baby.get(i)).getY();
//g.drawRect(x+1,y +1,18,18);
g.setColor((Color)user1.BabyColor.get(i));
g.fill3DRect(x+1,y+1,18,18,true);
}
g.setColor(Color.green);
g.fill3DRect(user1.posx+1,user1.posy+1,18,18,true);
g.setColor(Color.black);
if ((user1.runFlag == false)&(user1.gameFlag == true)) g.drawString("PAUSE...",user1.panelx+130,user1.panely+130);
if (user1.gameFlag == false) g.drawString("Game Over!",user1.panelx+130,user1.panely+130);
}
}
class User {
//public int goOne;
public int startx,starty,panelx,panely;
public int key_up,key_down,key_left,key_right,key_pause,key_reset;
//public Thread thread;
public ArrayList Baby,BabyDir,BabyRectangle,BabyColor;
public ArrayList Change,ChangeDir,ChangeCurrent,ChangeTotal;
public int pic_choose_snake = 2,pic_choose_food = 5;
public int imageWidth,imageHeight;
public int x ,y,posx,posy,newx,newy,currentx,currenty,steps,sleepTime;
public Point pt ,ptadd ,ptlast,ptemp;
public int dircount = 4,babyCount,turnCount;
public Random random,random_color;
public boolean eated,runFlag,gameFlag,drawFlag_snake,drawFlag_food,borderFlag,isSuspend;
public Rectangle headRect,foodRect,rect1,rect2,rectTemp;
public Color[] color = {Color.red,Color.green,new Color(3,45,209),new Color(223,100,26),new Color(200,46,13),new Color(190,23,200),new Color(224,171,12),new Color(120,33,180),new Color(69,41,52)};
public int color_choose = 0;
public User(int key_up,int key_down,int key_left,int key_right,int key_pause,int key_reset,int startx,int starty,int panelx,int panely) {
this.key_up = key_up;
this.key_down = key_down;
this.key_left = key_left;
this.key_right = key_right;
this.key_pause = key_pause;
this.key_reset = key_reset;
this.startx = startx;
this.starty = starty;
this.panelx = panelx;
this.panely = panely;
isSuspend = false;
sleepTime = 5;
babyCount = 6;
turnCount = 0;
imageWidth = 20;
steps = (babyCount - 1) * imageWidth + 1;
random = new Random(400);
random_color = new Random(100);
//pup = new Point(100,100);
Change = new ArrayList();
ChangeDir = new ArrayList();
ChangeCurrent = new ArrayList();
ChangeTotal = new ArrayList();
Baby = new ArrayList();
BabyDir = new ArrayList();
BabyRectangle = new ArrayList();
BabyColor = new ArrayList();
eated = true;
runFlag = true;
gameFlag = true;
drawFlag_snake = true;
drawFlag_food = true;
borderFlag = true;
Toolkit kit = Toolkit.getDefaultToolkit();
for (int i = 0;i < 6;i++) {
color_choose = random_color.nextInt(9);
pt = new Point(startx,starty);
startx = startx+imageWidth;
add(pt,3);
BabyColor.add(color[color_choose]);
BabyRectangle.add(pt);
}
}
public void add(Point pt,int dir) {
Baby.add(pt);
BabyDir.add(new Integer(dir));
ptlast = pt;
}
public void addNode() {
int size = Baby.size();
int x = (int)((Point)Baby.get(size - 1)).getX();
int y = (int)((Point)Baby.get(size - 1)).getY();
int newDir = Integer.parseInt((BabyDir.get(size - 1).toString()));
switch (newDir) {
case 0:
y = y + imageWidth;
break;
case 1:
x = x - imageWidth;
break;
case 2:
y = y - imageWidth;
break;
case 3:
x = x + imageWidth;
break;
}
Point newPoint = new Point(x,y);
BabyRectangle.add(newPoint);
add(newPoint,newDir);
color_choose = random_color.nextInt(9);
BabyColor.add(color[color_choose]);
ptlast = newPoint;
babyCount++;
steps = (babyCount - 1) * imageWidth + 1;
if (!ChangeTotal.isEmpty()) {
for(int k = 0;k < ChangeTotal.size();k++) {
int tempadd = Integer.parseInt(ChangeTotal.get(k).toString()) + imageWidth;
ChangeTotal.set(k,new Integer(tempadd));
}}}
public void checkGame() {
if ((((Point)Baby.get(0)).getX() > panelx+300)
|| (((Point)Baby.get(0)).getY() > panely+300)
|| (((Point)Baby.get(0)).getX() < panelx+10)
|| (((Point)Baby.get(0)).getY() < panely+10))
gameFlag = false;
int rectTempx = (int)((Point)BabyRectangle.get(0)).getX();
int rectTempy = (int)((Point)BabyRectangle.get(0)).getY();
rect1 = new Rectangle(rectTempx,rectTempy,imageWidth - 5,imageWidth - 5);
for (int rectNum = 3;rectNum < BabyRectangle.size();rectNum++) {
int rectTempxx = (int)((Point)BabyRectangle.get(rectNum)).getX();
int rectTempyy = (int)((Point)BabyRectangle.get(rectNum)).getY();
rect2 = new Rectangle(rectTempxx,rectTempyy,imageWidth - 5,imageWidth - 5);
if (rect1.intersects(rect2)) {
gameFlag = false;
return;
}}}
public void cut() {
ChangeCurrent.remove(0);
ChangeTotal.remove(0);
Change.remove(0);
ChangeDir.remove(0);
}
public void checkEat() {
eated = false;
if (headRect.intersects(foodRect)) {
eated = true;
}
}
public void checkDir () {
for (int j = 0; j < Change.size(); j++) {
for (int i = 1;i < Baby.size(); i++) {
if (Baby.get(i).equals((Point)(Change.get(j)))) {
BabyDir.set(i,ChangeDir.get(j));
}
}
}
}
public void food () {
if (eated == true) {
posx = panelx+20 + random.nextInt(260);
posy = panely+20 + random.nextInt(260);
foodRect = new Rectangle(posx,posy,15,15);
}
}
public void addChangeCurrent() {
for (int i = 0;i < ChangeCurrent.size();i++) {
int ttt = Integer.parseInt((ChangeCurrent.get(i).toString())) + 1;
ChangeCurrent.set(i,new Integer(ttt));
}
}
public void checkAddChangeCurrent() {
if (!ChangeCurrent.isEmpty()) {
if (!ChangeTotal.isEmpty()) {
int tempCurrent = Integer.parseInt(ChangeCurrent.get(0).toString());
int tempTotal = Integer.parseInt(ChangeTotal.get(0).toString());
if (tempCurrent == tempTotal)
cut();
else if (tempCurrent > tempTotal) {
System.out.println("Error");
runFlag = false;
}
}
}
}
public void go() {
//System.out.println("go");
steps = (babyCount - 1) * imageWidth + 1;
newx = (int)((Point)Baby.get(0)).getX();
newy = (int)((Point)Baby.get(0)).getY();
headRect = new Rectangle(newx,newy,15,15);
for (int i = 0;i < Baby.size(); i++) {
switch (Integer.parseInt((BabyDir.get(i).toString()))) {
case 0://向上
newx = (int)((Point)Baby.get(i)).getX();
newy = (int)((Point)Baby.get(i)).getY() - 1;
ptadd = new Point(newx,newy);
Baby.set(i,ptadd);
BabyRectangle.set(i,ptadd);
break;
case 1://向右
newx = (int)((Point)Baby.get(i)).getX() + 1;
newy = (int)((Point)Baby.get(i)).getY();
ptadd = new Point(newx,newy);
Baby.set(i,ptadd);
BabyRectangle.set(i,ptadd);
break;
case 2://向下
newx = (int)((Point)Baby.get(i)).getX();
newy = (int)((Point)Baby.get(i)).getY() + 1;
ptadd = new Point(newx,newy);
Baby.set(i,ptadd);
BabyRectangle.set(i,ptadd);
break;
case 3://向左
newx = (int)((Point)Baby.get(i)).getX() - 1;
newy = (int)((Point)Baby.get(i)).getY();
ptadd = new Point(newx,newy);
Baby.set(i,ptadd);
BabyRectangle.set(i,ptadd);
break;
}
}
}
void doMessage(int message)
{
{
if (message == key_up) {
if (Integer.parseInt((BabyDir.get(0).toString())) != 0) {
if (Integer.parseInt((BabyDir.get(0).toString())) != 2) {
BabyDir.set(0,new Integer(0));
ptemp = (Point)Baby.get(0);
Change.add(ptemp);
ChangeDir.add(new Integer(0));
ChangeCurrent.add(new Integer(0));
ChangeTotal.add(new Integer(steps));
System.out.println("up");
}}}
else
if (message == key_right) {
if (Integer.parseInt((BabyDir.get(0).toString())) != 1) {
if (Integer.parseInt((BabyDir.get(0).toString())) != 3) {
BabyDir.set(0,new Integer(1));
ptemp = (Point)Baby.get(0);
Change.add(ptemp);
ChangeDir.add(new Integer(1));
ChangeCurrent.add(new Integer(0));
ChangeTotal.add(new Integer(steps));
System.out.println("right");
}}}
else
if (message == key_down) {
if (Integer.parseInt((BabyDir.get(0).toString())) != 2) {
if (Integer.parseInt((BabyDir.get(0).toString())) != 0) {
BabyDir.set(0,new Integer(2));
ptemp = (Point)Baby.get(0);
Change.add(ptemp);
ChangeDir.add(new Integer(2));
ChangeCurrent.add(new Integer(0));
ChangeTotal.add(new Integer(steps));
System.out.println("down");
}}}
else
if (message == key_left) {
if (Integer.parseInt((BabyDir.get(0).toString())) != 3) {
if (Integer.parseInt((BabyDir.get(0).toString())) != 1) {
BabyDir.set(0,new Integer(3));
ptemp = (Point)Baby.get(0);
Change.add(ptemp);
ChangeDir.add(new Integer(3));
ChangeCurrent.add(new Integer(0));
ChangeTotal.add(new Integer(steps));
System.out.println("left");
}}}
/*else if (ke.getKeyChar() == ke.VK_1) {
if (sleepTime > 1) sleepTime--;
}
else if (ke.getKeyChar() == ke.VK_2) sleepTime++;
*/
else
if (message == key_pause) {
if (runFlag ) {
runFlag = !runFlag;
}
else {
runFlag = !runFlag;
}
}
else
if (message == key_reset) newGame();
}
}
public void goOne() {
if (runFlag == true) {
if (gameFlag == true) {
food();
checkGame();
checkDir();
go();
addChangeCurrent();
checkAddChangeCurrent();
checkEat();
if (eated == true) addNode();
}
}
}
public void newGame() {
sleepTime = 5;
x = startx;
y = starty;
babyCount = 6;
while (!Baby.isEmpty()) Baby.remove(0);
while (!BabyDir.isEmpty()) BabyDir.remove(0);
while (!BabyRectangle.isEmpty()) BabyRectangle.remove(0);
while (!Change.isEmpty()) Change.remove(0);
while (!ChangeDir.isEmpty()) ChangeDir.remove(0);
while (!ChangeCurrent.isEmpty()) ChangeCurrent.remove(0);
while (!ChangeTotal.isEmpty()) ChangeTotal.remove(0);
for (int j = 0;j < 6;j++) {
pt = new Point(x,y);
x = x+imageWidth;
add(pt,3);
BabyRectangle.add(pt);
eated = true;
gameFlag = true;
runFlag = true;
}
}
}
class AboutDialog extends JPanel {
private int WIDTH = 310,HEIGHT = 200;
//public BabyPanel babyPanel;
public JLabel jl_auther,jl_date,jl_company,jl_qq,jl_email;
public JButton jb_ok;
private JDialog dialog;
public JPanel jp1,jp2;
public Border border;
public AboutDialog() {
//this.babyPanel = babypanel;
setSize(WIDTH,HEIGHT);
setLayout(new BorderLayout());
jp1 = new JPanel();
jp2 = new JPanel();
jp1.setLayout(new GridLayout(5,1,10,10));
border = BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(),"Info");
jp1.setBorder(border);
jl_auther = new JLabel("Auther: 张恩来");
jl_date = new JLabel("Date: 2004-11-3");
jl_company = new JLabel("Company: 山东济南中创软件");
jl_qq = new JLabel("QQ: 36798636");
jl_email = new JLabel("E-Mail: zhang_elai@cvicse.com");
jb_ok = new JButton("OK");
jb_ok.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
setRunFlag(true);
dialog.setVisible(false);
}
});
jp1.add(jl_auther);
jp1.add(jl_date);
jp1.add(jl_company);
jp1.add(jl_qq);
jp1.add(jl_email);
jp2.add(jb_ok);
add(jp1,BorderLayout.NORTH);
add(jp2,BorderLayout.SOUTH);
}
public void setRunFlag(boolean flag) {
//babyPanel.user2.runFlag = flag;
}
public void showDialog(Component parent,String title) {
JFrame owner = null;
if (parent instanceof JFrame)
owner = (JFrame) parent;
if (dialog == null || dialog.getOwner() != owner) {
owner = null;
dialog = new JDialog(owner,false);
dialog.getContentPane().add(this);
dialog.pack();
}
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
dialog.setLocation((int)(screenSize.getWidth()/2 - WIDTH/2),(int)(screenSize.getHeight()/2 - HEIGHT/2));
dialog.setTitle(title);
dialog.show();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -