java俄罗斯方块代码_java俄罗斯方块游戏代码

1 packagecom;2

3 importjava.awt.Color;4 importjava.awt.Graphics;5 importjava.awt.event.KeyEvent;6 importjava.awt.event.KeyListener;7 importjava.util.Random;8

9 importjavax.swing.JFrame;10 importjavax.swing.JPanel;11

12 public class Eluos extendsJFrame{13

14

15 privateEluo_panel jPanel;16

17 private int this_width=500,this_height=500;18 publicEluos(){19

20 this.setSize(this_width, this_height);21

22 jPanel=newEluo_panel();23 this.add(jPanel);24

25

26 this.setDefaultCloseOperation(EXIT_ON_CLOSE);27 this.setVisible(true);28

29 this.addKeyListener(newKeyListener() {30

31 @Override32 public voidkeyTyped(KeyEvent e) {33 }34

35 @Override36 public voidkeyReleased(KeyEvent e) {37 System.out.println("type");38 switch(e.getKeyCode()) {39 caseKeyEvent.VK_LEFT:40

41 Eluos.this.jPanel.moveOther(Eluo_panel.MOVE_RIGHT, Eluos.this.jPanel.curt_xingzhuang);42 break;43 caseKeyEvent.VK_RIGHT:44

45 Eluos.this.jPanel.moveOther(Eluo_panel.MOVE_LEFT, Eluos.this.jPanel.curt_xingzhuang);46 break;47

48

49

50 caseKeyEvent.VK_UP:51 System.out.println(Eluos.this.jPanel.curt_xingzhuang);52 Eluos.this.jPanel.curt_xingzhuang=

53 Eluos.this.jPanel.bianXing(Eluos.this.jPanel.fangkuai.d, Eluos.this.jPanel.curt_xingzhuang);54

55 break;56 }57

58 }59

60 @Override61 public voidkeyPressed(KeyEvent e) {62

63

64

65 }66 });67

68 }69

70 public static voidmain(String[] args) {71

72 newEluos();73

74 }75

76 }77

78 class Eluo_panel extends JPanel implementsRunnable{79

80 Fangkuai fangkuai;81

82

83

84 int huatu[][]=new int[20][20];85 long now_time=0;86 Random random=newRandom();87 Color color=new Color(0);88 static final int MOVE_LEFT=1;89 static final int MOVE_RIGHT=2;90

91 boolean game_over=false;92 intcurt_xingzhuang[][];93 publicEluo_panel(){94

95 fangkuai=createNewFangkui();96

97 Thread thread=new Thread(this);98 thread.start();99

100

101 }102 @Override103 public voidpaint(Graphics g) {104 super.paint(g);105

106 drawBack(g);107 drawFangkui(g,curt_xingzhuang);108 moveDown(curt_xingzhuang);109 }110

111 /**

112 * 画背景113 *@paramg114 */

115 voiddrawBack(Graphics g){116

117

118 for (int i = 0; i < huatu.length; i++) {119 for (int j = 0; j < huatu[i].length; j++) {120 if(huatu[i][j]!=0)121 g.fillRect(j*20, i*20, Fangkuai.width-1,Fangkuai.height-1);122 }123 }124 }125

126 /**

127 * 画一个方块128 *@paramg129 *@paramcurt_xing130 */

131 void drawFangkui(Graphics g,intcurt_xing[][]){132

133

134 if(fangkuai==null)135 {136 fangkuai=createNewFangkui();137

138 }139

140 if(curt_xing!=null){141 int y=0;boolean b=false;142 for (int i = 0; i < curt_xing.length; i++) {143 for (int j = 0; j < curt_xing[i].length; j++) {144 if(curt_xing[i][j]!=0)145 {146

147 g.setColor(fangkuai.getColor());148 g.fillRect((fangkuai.run_x+j)*Fangkuai.width, (fangkuai.run_y+y)*Fangkuai.height,149 Fangkuai.width-1, Fangkuai.height-1);150 b=true;151

152 }153

154 }155 if(b)156 y++;157

158

159 }160

161 }162 }163 /**

164 * 创建一个方块165 *@return

166 */

167 privateFangkuai createNewFangkui(){168

169 int index=0;170 Random random=newRandom();171 Fangkuai fangkuai=newFangkuai();172 Color color=new Color(random.nextInt(255),173 random.nextInt(255),random.nextInt(255));174

175 index=random.nextInt(4);176 fangkuai.setColor(color);177 curt_xingzhuang=Fangkuai.xingzhuangs[index];178

179 returnfangkuai;180 }181

182 /**

183 * 判断是否能够向下移动184 *@paramxingzhuang185 *@return

186 */

187 boolean isCan_down(intxingzhuang[][]){188

189

190 int y=0;boolean b=false;191 for (int i = 0; i < xingzhuang.length; i++) {192 for (int j = 0; j < xingzhuang[i].length; j++) {193 if(xingzhuang[i][j]!=0)194 {195 b=true;196 if(fangkuai.run_y+y>=19||huatu[fangkuai.run_y+y+1][fangkuai.run_x+j]!=0){197 return false;198 }199

200 }201

202 }203 if(b)204 y++;205

206 }207

208 return true;209 }210 /**

211 * 变形212 */

213

214 public int[][] bianXing(int d,intarr[][]){215

216 if(arr==null||arr[0]==null)217 return null;218

219 int arr2[][]=new int[arr.length][arr[0].length];220

221

222 switch(d) {223 case 1:224

225

226 for (int i = 0; i < arr.length; i++) {227 for (int j = 0; j < arr[i].length; j++) {228 arr2[j][arr[i].length-1-i]=arr[i][j];229 }230 }231

232

233 break;234

235 default:236 break;237 }238

239 for (int i = 0; i < arr2.length; i++) {240

241 for (int j = 0; j < arr2[i].length; j++) {242

243 if(arr2[i][j]!=0)244 {245 if(fangkuai.run_x+j>19||fangkuai.run_y+i>19||fangkuai.run_x+i<0

246 ||huatu[fangkuai.run_y+i][fangkuai.run_x+j]!=0)247 returnarr;248 }249 }250 }251

252 returnarr2;253

254 }255 /**

256 * 向下移动257 *@paramxingzhuang258 */

259 private void moveDown(intxingzhuang[][]){260

261 if(isCan_down(xingzhuang))262 fangkuai.run_y++;263

264 else

265 {266

267 /**

268 * 如果不能向下移动就把当前方块的0和1 映射到整个面板上,重新创建一个方块269 */

270 int y=0;boolean b=false;271 for (int i = 0; i < xingzhuang.length; i++) {272 for (int j = 0; j < xingzhuang[i].length; j++) {273 if(xingzhuang[i][j]!=0)274 {275 huatu[fangkuai.run_y+y][fangkuai.run_x+j]=1;276 b=true;277 }278

279 }280 if(b)281 y++;282

283 }284

285

286 xiaoChu();287 for (int i = 0; i < huatu[0].length; i++) {288 if(huatu[0][i]!=0)289 game_over=true;290 }291

292 fangkuai=createNewFangkui();293 }294

295 }296 public voidxiaoChu(){297

298 boolean xiao=false;299

300 for (int i = huatu.length-1; i >=0; i--) {301

302 xiao=false;303 int j=0;304 for ( j = 0; j < huatu[i].length; j++) {305 if(huatu[i][j]==0)306 break;307 }308

309 if(j==huatu[i].length)310 xiao=true;311

312

313 if(xiao){314

315 for ( j = i; j >0; j--) {316 for (int j2 = 0; j2 < huatu[j].length; j2++) {317 huatu[j][j2]=huatu[j-1][j2];318 }319 }320 for ( j = 0; j

324 }325

326 }327 }328 /**

329 *http://www.cnblogs.com/roucheng/

330 *@paramd331 *@paramxingzhuang332 */

333 void moveOther(int d,intxingzhuang[][]){334

335 int dx=d==MOVE_LEFT?1:-1;336 if(is_CanMoveOther(d, xingzhuang)){337 fangkuai.run_x+=dx;338 }339 }340 private boolean is_CanMoveOther(int d,intxingzhuang[][]){341

342 int dx=d==MOVE_LEFT?1:-1;343 int y=0;boolean has=false;344 for (int i = 0; i < xingzhuang.length; i++) {345 has=false;346 for (int j = 0; j < xingzhuang[i].length; j++) {347

348 if(xingzhuang[i][j]!=0)349 {350 if(d==MOVE_LEFT&&fangkuai.run_x+j>=19||d==MOVE_RIGHT&&fangkuai.run_x+j<=0)351

352 return false;353 has=true;354 if(huatu[fangkuai.run_y+y][fangkuai.run_x+j+dx]!=0){355 return false;356 }357 }358 }359 if(has)360 y++;361 }362

363 return true;364 }365

366

367

368

369 @Override370 public voidrun() {371

372

373 while(!game_over)374 {375

376

377 this.repaint();378 try{379 Thread.sleep(300);380 } catch(InterruptedException e) {381 e.printStackTrace();382 }383 }384 }385

386 }387 classFangkuai {388

389

390

391 privateColor color;392

393 int run_x=10,run_y;394

395 int d=1;396

397 static final int width=20,height=20;398

399 public static final int xingzhuangs[][][]={400 {{0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0},401 {0,0,0,0,1,1,1,1},{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}},402

403 {{0,0,1,0},{0,1,1,1},{0,0,0,0},{0,0,0,0}},//土形

404 {{0,0,0,0},{1,0,0,0},{1,1,0,0},{0,1,0,0}},405 {{1,1,1,1},{1,0,0,0},{0,0,0,0},{0,0,0,0}},//T形

406 {{1,1},{1,1}}407

408 };409

410 publicColor getColor() {411 returncolor;412 }413

414 public voidsetColor(Color color) {415 this.color =color;416 }417

418 public intgetRun_x() {419 returnrun_x;420 }421

422 public void setRun_x(intrun_x) {423 this.run_x =run_x;424 }425

426 public intgetRun_y() {427 returnrun_y;428 }429

430 public void setRun_y(intrun_y) {431 this.run_y =run_y;432 }433

434

435

436

437 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值