私はテトリスのゲームのコードを書いています。私は作品の動きに問題があります。私はそれらを右、左下に移動させ、回転させましたが、その部分が一番下に達すると、それらを止めさせずに上に新しい断片を描くことができませんでした。javaでテトリスピースを止めるには?
抽象シェイプ(Shape)クラスを拡張する各シェイプのシェイプクラスで、私はここでも変わっています。図形を描画する
public class TShape extends Shape{
public TShape(int x, int y, int w, int h) {
super(x, y, w, h);
}
public void draw(Graphics g){
if (TetrisFrame.turn ==0){
g.setColor(Color.LIGHT_GRAY);
g.fillRect(x, y, w, h);
g.setColor(Color.BLACK);
g.drawRect(x, y, w, h);
g.setColor(Color.LIGHT_GRAY);
g.fillRect(x+w, y, w, h);
g.setColor(Color.BLACK);
g.drawRect(x+w, y, w, h);
g.setColor(Color.LIGHT_GRAY);
g.fillRect(x+2*w, y, w, h);
g.setColor(Color.BLACK);
g.drawRect(x+2*w, y, w, h);
g.setColor(Color.LIGHT_GRAY);
g.fillRect(x+w, y+h, w, h);
g.setColor(Color.BLACK);
g.drawRect(x+w, y+h, w, h);
}
if(TetrisFrame.turn ==1){
g.setColor(Color.LIGHT_GRAY);
g.fillRect(x-w, y, w, h);
g.setColor(Color.BLACK);
g.drawRect(x-w, y, w, h);
g.setColor(Color.LIGHT_GRAY);
g.fillRect(x-w, y+h, w, h);
g.setColor(Color.BLACK);
g.drawRect(x-w, y+h, w, h);
g.setColor(Color.LIGHT_GRAY);
g.fillRect(x-2*w, y+h, w, h);
g.setColor(Color.BLACK);
g.drawRect(x-2*w, y+h, w, h);
g.setColor(Color.LIGHT_GRAY);
g.fillRect(x-w, y+2*h, w, h);
g.setColor(Color.BLACK);
g.drawRect(x-w, y+2*h, w, h);
}
if (TetrisFrame.turn ==2){
g.setColor(Color.LIGHT_GRAY);
g.fillRect(x-2*w, y-h, w, h);
g.setColor(Color.BLACK);
g.drawRect(x-2*w, y-h, w, h);
g.setColor(Color.LIGHT_GRAY);
g.fillRect(x-3*w, y, w, h);
g.setColor(Color.BLACK);
g.drawRect(x-3*w, y, w, h);
g.setColor(Color.LIGHT_GRAY);
g.fillRect(x-2*w, y, w, h);
g.setColor(Color.BLACK);
g.drawRect(x-2*w, y, w, h);
g.setColor(Color.LIGHT_GRAY);
g.fillRect(x-w, y, w, h);
g.setColor(Color.BLACK);
g.drawRect(x-w, y, w, h);
}
if (TetrisFrame.turn ==3){
g.setColor(Color.LIGHT_GRAY);
g.fillRect(x-w, y-3*h, w, h);
g.setColor(Color.BLACK);
g.drawRect(x-w, y-3*h, w, h);
g.setColor(Color.LIGHT_GRAY);
g.fillRect(x-w, y-2*h, w, h);
g.setColor(Color.BLACK);
g.drawRect(x-w, y-2*h, w, h);
g.setColor(Color.LIGHT_GRAY);
g.fillRect(x-w, y-h, w, h);
g.setColor(Color.BLACK);
g.drawRect(x-w, y-h, w, h);
g.setColor(Color.LIGHT_GRAY);
g.fillRect(x, y-2*h, w, h);
g.setColor(Color.BLACK);
g.drawRect(x, y-2*h, w, h);
}
}
}
ドローパネル:
public class DrawPanel extends JPanel{
int x = 150;
int y =0;
int h=30;
int w=30;
Shape s;
public DrawPanel(){
s = new TShape(x,y,w,h);
}
public void paintComponent(Graphics g){
super.paintComponent(g);
s.draw(g);
}
マイテトリスフレームとハンドラ:
public class TetrisFrame extends JFrame{
DrawPanel dp;
static int turn;
public TetrisFrame(){
dp= new DrawPanel();
dp.setBorder(new LineBorder(new Color(0, 0, 0), 3));
MyHandler mhd = new MyHandler();
this.addKeyListener(mhd);
getContentPane().add(dp);
}
class MyHandler implements KeyListener{
@Override
public void keyPressed(KeyEvent e) {
//left:37, right:39, up:38 down:40
int code = e.getKeyCode();
if(code == 37){
dp.s.x -=30;
}
if(code == 38){
turn++;
if (turn ==4)
turn =0;
}
if(code == 39){
dp.s.x +=30;
}
if(code == 40){
dp.s.y +=30;
if(dp.s.y == 17*30){
JOptionPane.showMessageDialog(null, "fvgbhn");
}
}
}
@Override
public void keyReleased(KeyEvent arg0) {
// TODO Auto-generated method stub
dp.repaint();
}
@Override
public void keyTyped(KeyEvent arg0) {
// TODO Auto-generated method stub
}
}
}
が、私はそれを動作させるために何をすべきでしょうか?
どこ圏がダウンして行かせるロジックがありますか?あなたは、あなたのテトロミノを落とすエンジンクラスを必要とします。これは、コリソンをチェックする別のクラスを呼び出し、一度それが別のブロックと衝突すると、停止して別のクラスを生成します。いくつかの種類のテトロミノがあり、描画クラスはそれを使ってすべてのテトロミノを描画します。私はこのアーキテクチャを使用していないでしょう。ブロックが画面の中央で消え始めるのは難しいでしょう。しかし、あなたが楽しんでいる限り: – Asoub