首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2ME开发 >

你能看懂吗?解决方法

2012-01-22 
你能看懂吗?import java.awt.Colorimport java.awt.Graphicsimport java.awt.Graphics2Dimport java.aw

你能看懂吗?
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Random;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;


public class GameFrame extends JFrame implements KeyListener {
private final int DEFAULT_WIDTH=500;
private final int DEFAULT_HEIGHT=700;
Random ran=new Random();
//方块形状
private int Fstate=ran.nextInt(7);
//方块状态
private int Sstate=ran.nextInt(4);
private int X=130;
private int left=130;
private int top=0;
private int[][][] shapes;
private int[]s;
private int[][]sh;
Shapes shape=new Shapes();
private JButton btnStart ,btnPause;
private boolean flag=false;
private GamePanel panel;
private int[][]map=new int[60][30];
private int tx=13;
private int ty=3;
public GameFrame()
{

shapes=shape.getShapes();
s=shapes[Fstate][Sstate];
sh=getS(s);
panel=new GamePanel();
panel.setLayout(null);
setTitle("Tetris game");
setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT);
btnStart=new JButton("开始游戏");

btnStart.addKeyListener(new KeyAdapter()
{
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode()==KeyEvent.VK_ENTER)
{
flag=true;
btnStart.requestFocus(false);
panel.requestFocus();
}
 
}
});
btnStart.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent arg0) {
flag=true;
btnStart.requestFocus(false);
panel.requestFocus();
}
});
btnStart.setBounds(350, 350, 100, 30);

btnPause=new JButton("暂停");
  btnPause.addActionListener(new ActionListener()
  {
 

@Override
public void actionPerformed(ActionEvent arg0) {
flag=false;
panel.requestFocus();
}
});
  btnPause.setBounds(350, 400, 100, 30);
  panel.add(btnPause);
this.setLocationRelativeTo(null);
this.add(panel);

this.addKeyListener(this);
panel.addKeyListener(GameFrame.this);
GameThread gth=new GameThread();
Thread th=new Thread(gth);
th.start();

panel.add(btnStart);
}
public int[][] getS(int[]a)
{

int[][]sa=new int[4][4];
int n=0;
for(int i=0;i<4;i++)
{
for(int j=0;j<4;j++)
{
sa[i][j]=a[n];
n++;
}

}

return sa;
}
private class GamePanel extends JPanel
{
  public void paintComponent(Graphics g)
  {
  Graphics2D g2d=(Graphics2D)g;
  g2d.setColor(Color.black);
  g2d.fill3DRect(20, 20, 300, 600, true);
  g2d.drawRect(350, 40, 80, 80);
 
  for(int j=0;j<sh.length;j++)
  {
for(int i=0;i<sh.length;i++)
{


if(sh[j][i]==1)
{
 
g2d.setColor(Color.RED);
g2d.fill3DRect(left+20+10*i, top+20+10*j, 10, 10, true);

}

}
  }
  for(int i=0;i<60;i++)
  {
  for(int j=0;j<30;j++)
  {
  if(map[i][j]==1)
  {
  g2d.setColor(Color.RED);
g2d.fill3DRect(left+20+10*i, top+20+10*j, 10, 10, true);
  }
 
 
  }
  }
 
  }
}
//判断是否出界
public int isOut(int x,int y)
{
int[] aa=shapes[x][y];
int[][]b=getS(aa);
for(int j=0;j<b.length;j++)
{
  for(int i=0;i<b.length;i++)
  {
 

  if(b[j][i]==1)
  {

 
  if((left+20+10*i)<20||(left+30+10*i)>300)


  {
  return 1;
  }
  if(top>620)
  {
  return 2;
  }
 
  }

  }
}
return 0;
}
//向左移动方法
public void left()
{
left-=10;
tx-=1;
if(isOut(Fstate,Sstate)==1)
{
left+=10;
tx+=1;
}
}
//向右移动方法
public void right()
{
left+=10;
tx+=1;
if(isOut(Fstate,Sstate)==1)
{
left-=10;
tx-=1;
}
}
public void setmap()
{

}
//向下移动方法
public void down()
{
top+=10;
int y=ty+1;
int x=tx;
  for(int i=0;i<4;i++)
  {
  for(int j=0;j<4;j++)
  {
  if(sh[i][j]==1&&top+i*10==590)
  {
  for(int m=i;m>=0;m--)
  {
  for(int n=j;n>=0;n--)
  {
 
  System.out.println(ty);
  System.out.println(tx);
  if(sh[i][j]==1)
  {
  map[ty][tx+m-1]=1;
  }
 
  }
  ty--;
  }
  }
  }
  }
  ty=y;
  tx=x;
  for(int i=3;i>=0;i--)
  {
  for(int j=3;j>=0;j--)
  {
  System.out.println(ty);
  if(sh[i][j]==1&&map[ty][tx+j-1]==1)
  {
  for(int m=i;m>=0;m--)
  {
  for(int n=j;n>=0;n--)
  {
  if(sh[i][j]==1)
  {
  map[ty][tx+m-1]=1;
  }
 
  }
  ty--;
  }
  }
  }
  ty--;
  }
  ty=y;

 
 
 
 
}
class GameThread implements Runnable
{

@Override
public void run() {

while(true)
{

shapes=shape.getShapes();
s=shapes[Fstate][Sstate];

sh=getS(s);


if(flag)

{

down();
}
try {
Thread.sleep(50);
} catch (InterruptedException e) {

e.printStackTrace();
}
repaint();
}
}

}
public static void main(String[] args) {
GameFrame frame=new GameFrame();
frame.setVisible(true);
frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);

 }

@Override
public void keyPressed(KeyEvent e) {

if(e.getKeyCode()==KeyEvent.VK_UP)
{

//改变图形状态
if(Sstate<3)
{

Sstate++;

}
else
{

Sstate=0;

}

}
if(e.getKeyCode()==KeyEvent.VK_DOWN)
{
top+=20;
}
if(e.getKeyCode()==KeyEvent.VK_RIGHT)
{


right();
}
if(e.getKeyCode()==KeyEvent.VK_LEFT)
{
left();
}
}
@Override
public void keyReleased(KeyEvent arg0) {}
@Override
public void keyTyped(KeyEvent arg0) {}
   
}


我相信鉴于代码的凌乱程度,能看懂就是个奇迹。但更我相信,在这个世界是不乏创造奇迹的人的,所以我就把这些代码放到了这里 来等待一个奇迹。我知道,也许我该推到,重做的,但我总觉得半途而废总是不好的,而且我相信成功的道路不止一条,就算为走了很多弯路,起码还可以让我知道,哦 原来还可以这样。
我想完成一个俄罗斯方块游戏 现在为就想实现把落下的方块存放到map中 也就是整个游戏区,但是怎么也弄不出来,在向下的方法中总是提示数组越界。
下面是为图形类
import java.util.Random;


public class Shapes {
int[]a=new int[3];
// private int allshaps[][][];
  Random ran=new Random();
private int Fstate=ran.nextInt(7);
private int Sstate=ran.nextInt(4);
public int [][][] getShapes()
{

int[][] map = new int[30][60];
int allshaps[][][]=new int[][][]{
  // i
  { { 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0 },
  { 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0 } },
  // s
  { { 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },


  { 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 },
  { 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 } },
  // z
  { { 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 },
  { 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 } },
  // j
  { { 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0 },
  { 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 },
  { 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
  // o
  { { 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
  // l
  { { 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0 },
  { 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
  // t
  { { 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 },
  { 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0 } } };
 
return allshaps;


}
// public void drawShaps(int f,int s)
// {
//
// }

}

[解决办法]
瞟了一眼 应该是俄罗斯方块 ?
[解决办法]
我觉得也是俄罗斯方块
[解决办法]
额也觉得是。。。
[解决办法]
什么情况?就 问是不是俄罗斯方块?
[解决办法]
调试运行一下就知道了。
[解决办法]
这个代码你什么地方看不懂?首先map的数组需要一个墙,墙在数组上需要在倒数第二列赋值,还需要在倒数第二行赋值,你应该是没有赋值围墙,你应该在向右移动到最右端的时候也会出现数组越界异常

热点排行