ボールドテキストjava初心者です。
テトリスを作っているんですが、このコードでブロックが外壁まで落ちてきたときに外壁と同じ色になってしまいます。外壁の色を赤、落ちてくるブロックをランダムな色として設定し、ブロックが落ちたときに外壁の色と同化せず落ちてきた色のままつみあげるにはどうしたらいいのでしょうか?
かなり悩んでいます。
lang
1コード 2``` 3import java.applet.Applet; 4import java.awt.Color; 5import java.awt.Graphics; 6import java.awt.Point; 7import java.awt.event.KeyEvent; 8import java.awt.event.KeyListener; 9import java.util.Random; 10 11 12public class Tetris extends Applet implements KeyListener{ 13 public static final int HEIGHT=23;//縦 14 15 public static final int WIDTH=14;//横 16 17 public static final int SIZE =30;//ブロックの大きさ 18 19 private int [][]field=new int[WIDTH][HEIGHT]; 20 21 public static final Color[] COLSELECT={Color.pink,Color.black,Color.green,Color.yellow,Color.gray,Color.MAGENTA,Color.orange};//色の選択 22 23 public static final int BLANK=0; 24 public static final int WALL=1; 25 26 Point Point = new Point(5,0);//初期配置座標 27 28 Random rnd = new Random(); 29 int select =rnd.nextInt(7); 30 Color nextColor=COLSELECT[select]; 31 /** 32 * 初期化処理 33 */ 34 @Override 35 public void init(){ 36 addKeyListener(this); 37 for(int y=0;y<HEIGHT;y++) { 38 for(int x=0;x<WIDTH; x++) { 39 field[x][y]=BLANK; 40 } 41 } 42 for (int x=0;x<WIDTH;x++) { 43 field[x][HEIGHT-1]=WALL; 44 } 45 for(int y=0;y<HEIGHT;y++) { 46 field[0][y]=WALL; 47 field[WIDTH-1][y]=WALL; 48 } 49 } 50 /** 51 * @param e KeyEventオブジェクト 52 */ 53 @Override 54 public void keyPressed(KeyEvent e){ 55 int key = e.getKeyCode();//キーの情報を取得 56 if (key==KeyEvent.VK_LEFT){// 方向キー左が押されたとき 57 if(field[Point.x-1][Point.y]==BLANK){ 58 Point.x--; 59 repaint(); 60 } 61 62 }else if (key==KeyEvent.VK_RIGHT){// 方向キー右が押されたとき 63 if(field[Point.x+1][Point.y]==BLANK){ 64 Point.x++ ; 65 repaint(); 66 } 67 }else if (key==KeyEvent.VK_DOWN){// 方向キー下が押されたとき 68 if(field[Point.x][Point.y+1]==BLANK){ 69 Point.y++ ; 70 repaint(); 71 }else{ 72 field[Point.x][Point.y]=WALL; 73 Block(); 74 Point = new Point(5,0);// ブロック初期座標 75 repaint(); 76 } 77 } 78 } 79 @Override 80 public void keyReleased(KeyEvent e){ 81 } 82 83 @Override 84 public void keyTyped(KeyEvent e){ 85 } 86 /** 87 *@param g Graphicsオブジェクト 88 */ 89 @Override 90 public void paint(Graphics g){ 91 if(field[Point.x][Point.y]==BLANK){ 92 g.setColor(nextColor); 93 g.fillRect(Point.x*SIZE,Point.y*SIZE,SIZE,SIZE); 94 } 95 // 外壁 96 for(int i = 0;i <WIDTH;i++){ 97 for(int j = 0;j <HEIGHT;j++){ 98 if(field[i][j]!=BLANK){ 99 g.setColor(COLSELECT[field[i][j]]); 100 //g.setColor(Color.red); 101 g.fillRect(i*SIZE,j*SIZE,SIZE,SIZE); 102 } 103 } 104 } 105 g.setColor(Color.black); 106 for(int i=0;i<=HEIGHT;i++){ 107 g.drawLine(0,i*SIZE,WIDTH*SIZE,i*SIZE); 108 } 109 for(int j=0;j<=WIDTH;j++){ 110 g.drawLine(j*SIZE,0,j*SIZE,HEIGHT*SIZE); 111 } 112 } 113 public void Block(){ 114 Random rnd = new Random(); 115 int select =rnd.nextInt(7); 116 nextColor=COLSELECT[select]; 117 COLSELECT[field[Point.x][Point.y]]=COLSELECT[select]; 118 } 119 120}

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2014/12/18 05:20