用java编写小游戏(哪些游戏是用Java编写的)
各位老铁们,大家好,今天由我来为大家分享用java编写小游戏,以及哪些游戏是用Java编写的的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!
用JAVA编一个小游戏或者其他程序
贪吃蛇程序:
GreedSnake.java(也是程序入口):
import java.awt.BorderLayout;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Container;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Iterator;
import java.util.LinkedList;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class GreedSnake implements KeyListener{
JFrame mainFrame;
Canvas paintCanvas;
JLabel labelScore;//计分牌
SnakeModel snakeModel= null;//蛇
public static final int canvasWidth= 200;
public static final int canvasHeight= 300;
public static final int nodeWidth= 10;
public static final int nodeHeight= 10;
//----------------------------------------------------------------------
// GreedSnake():初始化游戏界面
//----------------------------------------------------------------------
public GreedSnake(){
//设置界面元素
mainFrame= new JFrame("GreedSnake");
Container cp= mainFrame.getContentPane();
labelScore= new JLabel("Score:");
cp.add(labelScore, BorderLayout.NORTH);
paintCanvas= new Canvas();
paintCanvas.setSize(canvasWidth+ 1, canvasHeight+ 1);
paintCanvas.addKeyListener(this);
cp.add(paintCanvas, BorderLayout.CENTER);
JPanel panelButtom= new JPanel();
panelButtom.setLayout(new BorderLayout());
JLabel labelHelp;//帮助信息
labelHelp= new JLabel("PageUp, PageDown for speed;", JLabel.CENTER);
panelButtom.add(labelHelp, BorderLayout.NORTH);
labelHelp= new JLabel("ENTER or R or S for start;", JLabel.CENTER);
panelButtom.add(labelHelp, BorderLayout.CENTER);
labelHelp= new JLabel("SPACE or P for pause", JLabel.CENTER);
panelButtom.add(labelHelp, BorderLayout.SOUTH);
cp.add(panelButtom, BorderLayout.SOUTH);
mainFrame.addKeyListener(this);
mainFrame.pack();
mainFrame.setResizable(false);
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainFrame.setVisible(true);
begin();
}
//----------------------------------------------------------------------
// keyPressed():按键检测
//----------------------------------------------------------------------
public void keyPressed(KeyEvent e){
int keyCode= e.getKeyCode();
if(snakeModel.running)
switch(keyCode){
case KeyEvent.VK_UP:
snakeModel.changeDirection(SnakeModel.UP);
break;
case KeyEvent.VK_DOWN:
snakeModel.changeDirection(SnakeModel.DOWN);
break;
case KeyEvent.VK_LEFT:
snakeModel.changeDirection(SnakeModel.LEFT);
break;
case KeyEvent.VK_RIGHT:
snakeModel.changeDirection(SnakeModel.RIGHT);
break;
case KeyEvent.VK_ADD:
case KeyEvent.VK_PAGE_UP:
snakeModel.speedUp();//加速
break;
case KeyEvent.VK_SUBTRACT:
case KeyEvent.VK_PAGE_DOWN:
snakeModel.speedDown();//减速
break;
case KeyEvent.VK_SPACE:
case KeyEvent.VK_P:
snakeModel.changePauseState();//暂停或继续
break;
default:
}
//重新开始
if(keyCode== KeyEvent.VK_R|| keyCode== KeyEvent.VK_S
|| keyCode== KeyEvent.VK_ENTER){
snakeModel.running= false;
begin();
}
}
//----------------------------------------------------------------------
// keyReleased():空函数
//----------------------------------------------------------------------
public void keyReleased(KeyEvent e){
}
//----------------------------------------------------------------------
// keyTyped():空函数
//----------------------------------------------------------------------
public void keyTyped(KeyEvent e){
}
//----------------------------------------------------------------------
// repaint():绘制游戏界面(包括蛇和食物)
//----------------------------------------------------------------------
void repaint(){
Graphics g= paintCanvas.getGraphics();
// draw background
g.setColor(Color.WHITE);
g.fillRect(0, 0, canvasWidth, canvasHeight);
// draw the snake
g.setColor(Color.BLACK);
LinkedList na= snakeModel.nodeArray;
Iterator it= na.iterator();
while(it.hasNext()){
Node n=(Node) it.next();
drawNode(g, n);
}
// draw the food
g.setColor(Color.RED);
Node n= snakeModel.food;
drawNode(g, n);
updateScore();
}
//----------------------------------------------------------------------
// drawNode():绘画某一结点(蛇身或食物)
//----------------------------------------------------------------------
private void drawNode(Graphics g, Node n){
g.fillRect(n.x* nodeWidth, n.y* nodeHeight, nodeWidth- 1,
nodeHeight- 1);
}
//----------------------------------------------------------------------
// updateScore():改变计分牌
//----------------------------------------------------------------------
public void updateScore(){
String s="Score:"+ snakeModel.score;
labelScore.setText(s);
}
//----------------------------------------------------------------------
// begin():游戏开始,放置贪吃蛇
//----------------------------------------------------------------------
void begin(){
if(snakeModel== null||!snakeModel.running){
snakeModel= new SnakeModel(this, canvasWidth/ nodeWidth,
this.canvasHeight/ nodeHeight);
(new Thread(snakeModel)).start();
}
}
//----------------------------------------------------------------------
// main():主函数
//----------------------------------------------------------------------
public static void main(String[] args){
GreedSnake gs= new GreedSnake();
}
}
Node.java:
public class Node{
int x;
int y;
Node(int x, int y){
this.x= x;
this.y= y;
}
}
SnakeModel.java:
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Random;
import javax.swing.JOptionPane;
public class SnakeModel implements Runnable{
GreedSnake gs;
boolean[][] matrix;//界面数据保存在数组里
LinkedList nodeArray= new LinkedList();
Node food;
int maxX;//最大宽度
int maxY;//最大长度
int direction= 2;//方向
boolean running= false;
int timeInterval= 200;//间隔时间(速度)
double speedChangeRate= 0.75;//速度改变程度
boolean paused= false;//游戏状态
int score= 0;
int countMove= 0;
// UP和DOWN是偶数,RIGHT和LEFT是奇数
public static final int UP= 2;
public static final int DOWN= 4;
public static final int LEFT= 1;
public static final int RIGHT= 3;
//----------------------------------------------------------------------
// GreedModel():初始化界面
//----------------------------------------------------------------------
public SnakeModel(GreedSnake gs, int maxX, int maxY){
this.gs= gs;
this.maxX= maxX;
this.maxY= maxY;
matrix= new boolean[maxX][];
for(int i= 0; i< maxX;++i){
matrix[i]= new boolean[maxY];
Arrays.fill(matrix[i], false);//没有蛇和食物的地区置false
}
//初始化贪吃蛇
int initArrayLength= maxX> 20? 10: maxX/ 2;
for(int i= 0; i< initArrayLength;++i){
int x= maxX/ 2+ i;
int y= maxY/ 2;
nodeArray.addLast(new Node(x, y));
matrix[x][y]= true;//蛇身处置true
}
food= createFood();
matrix[food.x][food.y]= true;//食物处置true
}
//----------------------------------------------------------------------
// changeDirection():改变运动方向
//----------------------------------------------------------------------
public void changeDirection(int newDirection){
if(direction% 2!= newDirection% 2)//避免冲突
{
direction= newDirection;
}
}
//----------------------------------------------------------------------
// moveOn():贪吃蛇运动函数
//----------------------------------------------------------------------
public boolean moveOn(){
Node n=(Node) nodeArray.getFirst();
int x= n.x;
int y= n.y;
switch(direction){
case UP:
y--;
break;
case DOWN:
y++;
break;
case LEFT:
x--;
break;
case RIGHT:
x++;
break;
}
if((0<= x&& x< maxX)&&(0<= y&& y< maxY)){
if(matrix[x][y])//吃到食物或者撞到身体
{
if(x== food.x&& y== food.y)//吃到食物
{
nodeArray.addFirst(food);//在头部加上一结点
//计分规则与移动长度和速度有关
int scoreGet=(10000- 200* countMove)/ timeInterval;
score+= scoreGet> 0? scoreGet: 10;
countMove= 0;
food= createFood();
matrix[food.x][food.y]= true;
return true;
} else
return false;//撞到身体
} else//什么都没有碰到
{
nodeArray.addFirst(new Node(x, y));//加上头部
matrix[x][y]= true;
n=(Node) nodeArray.removeLast();//去掉尾部
matrix[n.x][n.y]= false;
countMove++;
return true;
}
}
return false;//越界(撞到墙壁)
}
//----------------------------------------------------------------------
// run():贪吃蛇运动线程
//----------------------------------------------------------------------
public void run(){
running= true;
while(running){
try{
Thread.sleep(timeInterval);
} catch(Exception e){
break;
}
if(!paused){
if(moveOn())//未结束
{
gs.repaint();
} else//游戏结束
{
JOptionPane.showMessageDialog(null,"GAME OVER",
"Game Over", JOptionPane.INFORMATION_MESSAGE);
break;
}
}
}
running= false;
}
//----------------------------------------------------------------------
// createFood():生成食物及放置地点
//----------------------------------------------------------------------
private Node createFood(){
int x= 0;
int y= 0;
do{
Random r= new Random();
x= r.nextInt(maxX);
y= r.nextInt(maxY);
} while(matrix[x][y]);
return new Node(x, y);
}
//----------------------------------------------------------------------
// speedUp():加快蛇运动速度
//----------------------------------------------------------------------
public void speedUp(){
timeInterval*= speedChangeRate;
}
//----------------------------------------------------------------------
// speedDown():放慢蛇运动速度
//----------------------------------------------------------------------
public void speedDown(){
timeInterval/= speedChangeRate;
}
//----------------------------------------------------------------------
// changePauseState():改变游戏状态(暂停或继续)
//----------------------------------------------------------------------
public void changePauseState(){
paused=!paused;
}
}
谁会用java编写“贪吃蛇”小游戏
汗要程序怎么这么点分啊哭了
呵呵不过你还是挺幸运给你吧
连连看的代码(基本算法)加了部分注释
import java.awt.*;
import java.awt.event.*;
public class lianliankan implements ActionListener
{
static String s="no";//用来纪录点击按钮的信息
int x0=0,y0=0,x=0,y=0,n1=0,n2=0;//用来纪录按钮的位置信息
Frame f,f1;
Button b1,b2,b3,b4,b5,b6,b7,b8,b9,b10;//用比较笨的方法添加了
Button b11,b12,b13,b14,b15,b16,b17,b18;//30个按钮来实现游戏界面
Button b19,b20,b21,b22,b23,b24,b25;//可以用数组实现,这是本人
Button b26,b27,b28,b29,b30,bc;//学java时,入门的联系,所以
Button b,ba,br,bt1,bt2;//有些东西很业余!!嘻嘻
Panel p1,p2,p3;
TextField t;//用来显示一些随机信息,方法是下面的guli().
Label l;
int d[][]={//用来和界面的按钮建立映射关系
{0,0,0,0,0,0,0},
{0,0,0,0,0,0,0},
{0,0,0,0,0,0,0},
{0,0,0,0,0,0,0},
{0,0,0,0,0,0,0},
{0,0,0,0,0,0,0},
{0,0,0,0,0,0,0},
{0,0,0,0,0,0,0}
};
public static void main(String[] args)
{
lianliankan t=new lianliankan();
t.suiji();
t.go();
}
public void actionPerformed(ActionEvent e)//再来一次按钮的响应事件。
{
int d[][]={
{0,0,0,0,0,0,0},
{0,0,0,0,0,0,0},
{0,0,0,0,0,0,0},
{0,0,0,0,0,0,0},
{0,0,0,0,0,0,0},
{0,0,0,0,0,0,0},
{0,0,0,0,0,0,0},
{0,0,0,0,0,0,0}
};
this.d=d;
suiji();
f.setVisible(false);
f1.setVisible(false);
s="no";
go();
}
public void go()//初始化界面
{
l=new Label("亲爱的玩家,");
f=new Frame("连连看");
t=new TextField();
p2=new Panel();
p1=new Panel();
p3=new Panel();
bc=new Button("退出");
br=new Button("重列");
b=new Button();
b1=new Button(String.valueOf(d[1][1]));
b2=new Button(String.valueOf(d[1][2]));
b3=new Button(String.valueOf(d[1][3]));
b4=new Button(String.valueOf(d[1][4]));
b5=new Button(String.valueOf(d[1][5]));
b6=new Button(String.valueOf(d[2][1]));
b7=new Button(String.valueOf(d[2][2]));
b8=new Button(String.valueOf(d[2][3]));
b9=new Button(String.valueOf(d[2][4]));
b10=new Button(String.valueOf(d[2][5]));
b11=new Button(String.valueOf(d[3][1]));
b12=new Button(String.valueOf(d[3][2]));
b13=new Button(String.valueOf(d[3][3]));
b14=new Button(String.valueOf(d[3][4]));
b15=new Button(String.valueOf(d[3][5]));
b16=new Button(String.valueOf(d[4][1]));
b17=new Button(String.valueOf(d[4][2]));
b18=new Button(String.valueOf(d[4][3]));
b19=new Button(String.valueOf(d[4][4]));
b20=new Button(String.valueOf(d[4][5]));
b21=new Button(String.valueOf(d[5][1]));
b22=new Button(String.valueOf(d[5][2]));
b23=new Button(String.valueOf(d[5][3]));
b24=new Button(String.valueOf(d[5][4]));
b25=new Button(String.valueOf(d[5][5]));
b26=new Button(String.valueOf(d[6][1]));
b27=new Button(String.valueOf(d[6][2]));
b28=new Button(String.valueOf(d[6][3]));
b29=new Button(String.valueOf(d[6][4]));
b30=new Button(String.valueOf(d[6][5]));
p3.setLayout(null);
p1.setSize(250,300);
p2.setSize(100,40);
p3.setSize(300,30);
t.setSize(60,30);
l.setSize(70,30);
p1.setLayout(new GridLayout(6,5));
p1.setBackground(Color.pink);
p1.setLocation(100,100);
p2.setLocation(0,400);
p3.setLocation(50,50);
t.setLocation(230,2);
l.setLocation(150,2);
bc.setLocation(0,40);
br.setLocation(0,100);
f.add(p1);
f.add(p2);
f.add(p3);
p3.add(l);
p3.add(t);
p2.add(bc);
p2.add(br);
p1.add(b1);
p1.add(b2);
p1.add(b3);
p1.add(b4);
p1.add(b5);
p1.add(b6);
p1.add(b7);
p1.add(b8);
p1.add(b9);
p1.add(b10);
p1.add(b11);
p1.add(b12);
p1.add(b13);
p1.add(b14);
p1.add(b15);
p1.add(b16);
p1.add(b17);
p1.add(b18);
p1.add(b19);
p1.add(b20);
p1.add(b21);
p1.add(b22);
p1.add(b23);
p1.add(b24);
p1.add(b25);
p1.add(b26);
p1.add(b27);
p1.add(b28);
p1.add(b29);
p1.add(b30);
f.pack();
f.setBounds(280,100,500,450);
f.setResizable(false);
f.setVisible(true);
bc.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e)
{
ex();
}
});
br.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e)
{
chonglie();
}
});
b1.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e)
{
wei(1,1,b1);
}
});
b2.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e)
{
wei(1,2,b2);
}
});
b3.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e)
{
wei(1,3,b3);
}
});
b4.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e)
{
wei(1,4,b4);
}
});
b5.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e)
{
wei(1,5,b5);
}
});
b6.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e)
{
wei(2,1,b6);
}
});
b7.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e)
{
wei(2,2,b7);
}
});
b8.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e)
{
wei(2,3,b8);
}
});
b9.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e)
{
wei(2,4,b9);
}
});
b10.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e)
{
wei(2,5,b10);
}
});
b11.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e)
{
wei(3,1,b11);
}
});
b12.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e)
{
wei(3,2,b12);
}
});
b13.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e)
{
wei(3,3,b13);
}
});
b14.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e)
{
wei(3,4,b14);
}
});
b15.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e)
{
wei(3,5,b15);
}
});
b16.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e)
{
wei(4,1,b16);
}
});
b17.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e)
{
wei(4,2,b17);
}
});
b18.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e)
{
wei(4,3,b18);
}
});
b19.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e)
{
wei(4,4,b19);
}
});
b20.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e)
{
wei(4,5,b20);
}
});
b21.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e)
{
wei(5,1,b21);
}
});
b22.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e)
{
wei(5,2,b22);
}
});
b23.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e)
{
wei(5,3,b23);
}
});
b24.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e)
{
wei(5,4,b24);
}
});
b25.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e)
{
wei(5,5,b25);
}
});
b26.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e)
{
wei(6,1,b26);
}
});
b27.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e)
{
wei(6,2,b27);
}
});
b28.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e)
{
wei(6,3,b28);
}
});
b29.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e)
{
wei(6,4,b29);
}
});
b30.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e)
{
wei(6,5,b30);
}
});
}
public void ex()//退出界面,可用diolog来实现有模式的类型,更加符合
{
f1=new Frame("游戏作业");
f1.setLayout(new GridLayout(1,1));
bt1=new Button("确定退出");
bt2=new Button("再来一局");
f1.add(bt1);
f1.add(bt2);
f1.pack();
f1.setBounds(400,250,90,60);
f1.setResizable(false);
f1.show();
f1.setVisible(true);
bt1.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e)
{
System.exit(0);
}
});
bt2.addActionListener(this);
}
public void suiji()//产生随机数,来填充游戏界面对应的数组的各个位置
{
int m,n,k=0,k1,k2,k3;
for(m=1;m<=15;m++)
{
k1=(int)(Math.random()*25+1);
for(n=1;n<=2;n++)
{
k2=(int)(Math.random()*6+1);
k3=(int)(Math.random()*5+1);
while(d[k2][k3]!=0&& k!=30)
{
k2=(int)(Math.random()*6+1);
k3=(int)(Math.random()*5+1);
}
this.d[k2][k3]=k1;
k++;
}
}
}
public void guli()//随机信息
{
int l=0;
t.setText("");
l=(int)(Math.random()*10);
System.out.println(l);
switch(l)
{
case 1:
t.setText("好!加油!");
break;
case 3:
t.setText("你真棒!");
break;
case 5:
t.setText("加快速度!");
break;
case 6:
t.setText("不错啊!");
break;
case 8:
t.setText("加油吧!");
break;
case 9:
t.setText("够聪明!");
break;
default:
break;
}
}
public void chonglie()//重列方法
{
int save[],i,j,n=0,k2,k3,k;
int d[][]={
{0,0,0,0,0,0,0},
{0,0,0,0,0,0,0},
{0,0,0,0,0,0,0},
{0,0,0,0,0,0,0},
{0,0,0,0,0,0,0},
{0,0,0,0,0,0,0},
{0,0,0,0,0,0,0},
{0,0,0,0,0,0,0}
};
save=new int[30];
for(n=0;n<30;n++)
save[n]=0;//定义一个数组来保存当前的每个按钮位置上的信息
n=0;
for(i=0;i<=6;i++)
for(j=0;j<=5;j++)
{
if(this.d[i][j]!=0)
{
save[n]=this.d[i][j];
n++;
}
}
n=n-1;
this.d=d;
while(n>=0)//产生随机位置,放置按钮
{
k2=(int)(Math.random()*6+1);
k3=(int)(Math.random()*5+1);
while(d[k2][k3]!=0)
{
k2=(int)(Math.random()*6+1);
k3=(int)(Math.random()*5+1);
}
this.d[k2][k3]=save[n];
n--;
}
f.setVisible(false);
s="no";//这里一定要将按钮点击信息归为初始
go();
ling();
}
public void ling()//将数组中为零的成员对应的按钮消去
{//用按钮类型的数组实现会简化得多,
if(d[1][1]==0)
b1.setVisible(false);
if(d[1][2]==0)
b2.setVisible(false);
if(d[1][3]==0)
b3.setVisible(false);
if(d[1][4]==0)
b4.setVisible(false);
if(d[1][5]==0)
b5.setVisible(false);
if(d[2][1]==0)
b6.setVisible(false);
if(d[2][2]==0)
b7.setVisible(false);
if(d[2][3]==0)
b8.setVisible(false);
if(d[2][4]==0)
b9.setVisible(false);
if(d[2][5]==0)
b10.setVisible(false);
if(d[3][1]==0)
b11.setVisible(false);
if(d[3][2]==0)
b12.setVisible(false);
if(d[3][3]==0)
b13.setVisible(false);
if(d[3][4]==0)
b14.setVisible(false);
if(d[3][5]==0)
b15.setVisible(false);
if(d[4][1]==0)
b16.setVisible(false);
if(d[4][2]==0)
b17.setVisible(false);
if(d[4][3]==0)
b18.setVisible(false);
if(d[4][4]==0)
b19.setVisible(false);
if(d[4][5]==0)
b20.setVisible(false);
if(d[5][1]==0)
b21.setVisible(false);
if(d[5][2]==0)
b22.setVisible(false);
if(d[5][3]==0)
b23.setVisible(false);
if(d[5][4]==0)
b24.setVisible(false);
if(d[5][5]==0)
b25.setVisible(false);
if(d[6][1]==0)
b26.setVisible(false);
if(d[6][2]==0)
b27.setVisible(false);
if(d[6][3]==0)
b28.setVisible(false);
if(d[6][4]==0)
b29.setVisible(false);
if(d[6][5]==0)
b30.setVisible(false);
}
public void wei(int w1,int w2,Button bz)//判断并纪录每次点击按钮的信息
{//当两次的按钮相同才能消去
if((s.trim()).equals("no"))
{
s=b1.getLabel();
x0=w1;
y0=w2;
n1=d[x0][y0];
b=bz;
x=w1;
y=w2;
n2=d[x][y];
ba=bz;
}
else
{
x0=x;
y0=y;
n1=d[x0][y0];
b=ba;
x=w1;
y=w2;
n2=d[x][y];
ba=bz;
if(n1==n2&& ba!=b)
{
xiao();
}
}
}
public void xiao()//这里是整个游戏最重要的部分,就是判断两个按钮在信息
{//相同的情况下能不能消去。仔细分析,不一条条注释
int i=0, j=0,n=0,k=0;
if((x0==x&&(y0==y+1||y0==y-1))||((x0==x+1||x0==x-1)&&(y0==y)))//相邻的情况
{
ba.setVisible(false);
b.setVisible(false);
guli();
s="no";
d[x0][y0]=0;
d[x][y]=0;
}
else
{
for(j=0;j<7;j++)//两个按钮按行分析,看能否消去
{
if(d[x0][j]==0)
{
if(y>j)
{
for(i=y-1;i>=j;i--)
{
if(d[x][i]!=0)
{
k=0;
break;
}
else
{
k=1;
}
}
if(k==1)
{
if(y0>j)
{
for(i=y0-1;i>=j;i--)
{
if(d[x0][i]!=0)
{
k=0;
break;
}
else
{
k=2;
}
}
}
if(y0<j)
{
for(i=y0+1;i<=j;i++)
{
if(d[x0][i]!=0)
{
k=0;
break;
}
else
{
k=2;
}
}
}
}
}
if(y<j)
{
for(i=y+1;i<=j;i++)
{
if(d[x][i]!=0)
{
k=0;
break;
}
else
{
k=1;
}
}
if(k==1)
{
if(y0>j)
{
for(i=y0-1;i>=j;i--)
{
if(d[x0][i]!=0)
{
k=0;
break;
}
else
{
k=2;
}
}
}
if(y0<j)
{
for(i=y0+1;i<=j;i++)
{
if(d[x0][i]!=0)
{
k=0;
break;
}
else
{
k=2;
}
}
}
}
}
if(y==j)
{
if(y0>j)
{
for(i=y0-1;i>=j;i--)
{
if(d[x0][i]!=0)
{
k=0;
break;
}
else
{
k=2;
}
}
}
if(y0<j)
{
for(i=y0+1;i<=j;i++)
{
if(d[x0][i]!=0)
{
k=0;
break;
}
else
{
k=2;
}
}
}
}
}
if(k==2)
{ if(x0==x)
{
b.setVisible(false);
ba.setVisible(false);
guli();
s="no";
k=0;
d[x0][y0]=0;
d[x][y]=0;
}
if(x0<x)
{
for(n=x0;n<=x-1;n++)
{
if(d[n][j]!=0)
{
k=0;
break;
}
if(d[n][j]==0&& n==x-1)
{
b.setVisible(false);
ba.setVisible(false);
guli();
s="no";
k=0;
d[x0][y0]=0;
d[x][y]=0;
}
}
}
if(x0>x)
{
for(n=x0;n>=x+1;n--)
{
if(d[n][j]!=0)
{
k=0;
break;
}
if(d[n][j]==0&& n==x+1)
{
b.setVisible(false);
ba.setVisible(false);
guli();
s="no";
k=0;
d[x0][y0]=0;
d[x][y]=0;
}
}
}
}
}
for(i=0;i<8;i++)//按列分析,看能不能消去
{
if(d[i][y0]==0)
{
if(x>i)
{
for(j=x-1;j>=i;j--)
{
if(d[j][y]!=0)
{
k=0;
break;
}
else
{
k=1;
}
}
if(k==1)
{
if(x0>i)
{
for(j=x0-1;j>=i;j--)
{
if(d[j][y0]!=0)
{
k=0;
break;
}
else
{
k=2;
}
}
}
if(x0<i)
{
for(j=x0+1;j<=i;j++)
{
if(d[j][y0]!=0)
{
k=0;
break;
}
else
{
k=2;
}
}
}
}
}
if(x<i)
{
for(j=x+1;j<=i;j++)
{
if(d[j][y]!=0)
{
k=0;
break;
}
else
{
k=1;
}
}
if(k==1)
{
if(x0>i)
{
for(j=x0-1;j>=i;j--)
{
if(d[j][y0]!=0)
{
k=0;
break;
}
else
{
k=2;
}
}
}
if(x0<i)
{
for(j=x0+1;j<=i;j++)
{
if(d[j][y0]!=0)
{
k=0;
break;
}
else
{
k=2;
}
}
}
}
}
if(x==i)
{
if(x0>i)
{
for(j=x0-1;j>=i;j--)
{
if(d[j][y0]!=0)
{
k=0;
break;
}
else
{
k=2;
}
}
}
if(x0<i)
{
for(j=x0+1;j<=i;j++)
{
if(d[j][y0]!=0)
{
k=0;
break;
}
else
{
k=2;
}
}
}
}
}
if(k==2)
{
if(y0==y)
{
b.setVisible(false);
ba.setVisible(false);
guli();
s="no";
k=0;
d[x0][y0]=0;
d[x][y]=0;
}
if(y0<y)
{
for(n=y0;n<=y-1;n++)
{
if(d[i][n]!=0)
{
k=0;
break;
}
if(d[i][n]==0&& n==y-1)
{
b.setVisible(false);
ba.setVisible(false);
guli();
s="no";
k=0;
d[x0][y0]=0;
d[x][y]=0;
}
}
}
if(y0>y)
{
for(n=y0;n>=y+1;n--)
{
if(d[i][n]!=0)
{
k=0;
break;
}
if(d[i][n]==0&& n==y+1)
{
b.setVisible(false);
ba.setVisible(false);
guli();
s="no";
k=0;
d[x0][y0]=0;
d[x][y]=0;
}
}
}
}
}
}
}
}
急求用JAVA编写的图形化界面拼图小游戏代码!
个人见解,总体需要两个二维数组(一个存储正确图片排列 Array1 String[][],一个随机生成图片排列Array2 String[][]),一个一维数组来存储图片的名称Array3 String[],。
(1)如何实现图片移动
使用带图片的按钮(button=new button(getImage(Array[2][4]))),然后通过单击事件来更改按钮的图片来源。把被点击的按钮的图片路径更新到空白按钮,并且把被点击的按钮图片更新的成空白。其实就是变换两个的二维数组成员的值。更新Array2中的值,然后重绘按钮
如 Array[2][3]=“3.image”
Array[2][4]=“”
图片3.image右移
Array[2][3]=“”
Array[2][4]=“3.image”
(2)如何判断被单击的网格与空白的网格是否相邻
后台使用一个二维数组Array2来做映射。通过二维数组的下标来判断,如Array[2][3]可以知道Array[2][4]是它右边的那个。
(3)如何实现图片的随机摆放
比如有9个图片,你可以命名1-9,然后初始化一个长度为9的一维String数组Array3来存储图片的名称,
使用随机函数给二维数组Array2赋值,如Array2[2][3]=Array3[random()],这里要判断这个图片是否已被使用过,可以通过遍历Array2来确定当前Array3这个值是否已经在Array2中了
最后通过Array1和Array2来比较,用户的拼图是否正确。
语言组织能力有限。讲不太清楚。
END,本文到此结束,如果可以帮助到大家,还望关注本站哦!