一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - Java教程 - Java 小游戲開發(fā)之俄羅斯方塊

Java 小游戲開發(fā)之俄羅斯方塊

2020-12-05 16:51Renyi-Fan Java教程

這篇文章主要介紹了Java 小游戲開發(fā)之俄羅斯方塊的相關(guān)資料,這里實現(xiàn)俄羅斯方塊的實例和實現(xiàn)效果給大家看下,學(xué)習(xí)java基礎(chǔ)的朋友的好資料,需要的朋友可以參考下

java項目 俄羅斯方塊

一、心得

二、游戲?qū)嵗?/strong>

游戲截圖

Java 小游戲開發(fā)之俄羅斯方塊

Java 小游戲開發(fā)之俄羅斯方塊

Java 小游戲開發(fā)之俄羅斯方塊

目錄結(jié)構(gòu)

Java 小游戲開發(fā)之俄羅斯方塊

三、代碼

1、主界面 tetris.java

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
package com.fry.tetris;
 
import java.util.arrays;
import java.util.random;
 
/**
 * 4格方塊
 */
public class tetromino {
  protected cell[] cells = new cell[4];
  /** 保存旋轉(zhuǎn)的相對于軸位置狀態(tài) */
  protected state[] states;
  
  /** 隨機生成 4格方塊, 使用簡單工廠方法模式!
   * randomtetromino 隨機生成一個四格方塊
   * 這個方面的返回值是多態(tài)的!
   * */
  public static tetromino randomtetromino(){
    random r = new random();
    int type = r.nextint(7);
    switch(type){
    case 0: return new t();
    case 1: return new i();
    case 2: return new j();
    case 3: return new l();
    case 4: return new o();
    case 5: return new s();
    case 6: return new z();
    }
    return null;
  }
  
  public cell[] getcells() {
    return cells;
  }
 
  /** 下落 */
  public void softdrop(){
    for(int i=0; i<cells.length; i++){
      cells[i].movedown();
    }
  }
  public void moveright(){
    //system.out.println("moveright()");
    for(int i=0; i<cells.length; i++){
      this.cells[i].moveright();
    }
  }
  public void moveleft(){
    for(int i=0; i<cells.length; i++){
      cells[i].moveleft();
    }
  }
  private int index = 100000;
  /** 在 tetromino 上添加方法 */
  public void rotateright() {
    index++;//index = 10001
    // index % states.length = 10001 % 4 = 1
    state s = states[index%states.length];//s1
    // [0] + s1 = [1]
    cell o = cells[0];//獲取當(dāng)前的軸
    //軸與相對位置的和作為旋轉(zhuǎn)以后的格子位置
    cells[1].setrow(o.getrow()+s.row1);
    cells[1].setcol(o.getcol()+s.col1);
    cells[2].setrow(o.getrow()+s.row2);
    cells[2].setcol(o.getcol()+s.col2);
    cells[3].setrow(o.getrow()+s.row3);
    cells[3].setcol(o.getcol()+s.col3);
  }
  /** 在 tetromino 上添加方法 */
  public void rotateleft() {
    index--;//index = 10001
    // index % states.length = 10001 % 4 = 1
    state s = states[index%states.length];//s1
    // [0] + s1 = [1]
    cell o = cells[0];//獲取當(dāng)前的軸
    cells[1].setrow(o.getrow()+s.row1);
    cells[1].setcol(o.getcol()+s.col1);
    cells[2].setrow(o.getrow()+s.row2);
    cells[2].setcol(o.getcol()+s.col2);
    cells[3].setrow(o.getrow()+s.row3);
    cells[3].setcol(o.getcol()+s.col3);
  }
  
  @override
  public string tostring() {
    return arrays.tostring(cells);
  }
  
  /** tetromino 類中添加的 內(nèi)部類 用于記錄旋轉(zhuǎn)狀態(tài) */
  protected class state{
    int row0,col0,row1,col1,row2,col2,row3,col3;
 
    public state(int row0, int col0, int row1, int col1,
        int row2, int col2,
        int row3, int col3) {
      this.row0 = row0;
      this.col0 = col0;
      this.row1 = row1;
      this.col1 = col1;
      this.row2 = row2;
      this.col2 = col2;
      this.row3 = row3;
      this.col3 = col3;
    }  
  }
  
}//tetromino 類的結(jié)束
class t extends tetromino{
  public t() {
    cells[0] = new cell(0, 4, tetris.t);
    cells[1] = new cell(0, 3, tetris.t);
    cells[2] = new cell(0, 5, tetris.t);
    cells[3] = new cell(1, 4, tetris.t);
    states = new state[]{
        new state(0,0, 0,-1, 0,1, 1, 0),
        new state(0,0, -1,0, 1,0, 0,-1),
        new state(0,0, 0,1, 0,-1, -1,0),
        new state(0,0, 1,0, -1,0, 0,1)};
  }
}
class i extends tetromino{
  public i() {
    cells[0] = new cell(0, 4, tetris.i);
    cells[1] = new cell(0, 3, tetris.i);
    cells[2] = new cell(0, 5, tetris.i);
    cells[3] = new cell(0, 6, tetris.i);
    states = new state[]{
        new state(0,0, 0,1, 0,-1, 0,-2),
        new state(0,0, -1,0, 1,0,2,0)};
  }
}
class l extends tetromino {
  public l() {
    cells[0] = new cell(0, 4, tetris.l);
    cells[1] = new cell(0, 3, tetris.l);
    cells[2] = new cell(0, 5, tetris.l);
    cells[3] = new cell(1, 3, tetris.l);
    states = new state[]{
        new state(0,0, 0,-1, 0,1, 1,-1 ),
        new state(0,0, -1,0, 1,0, -1,-1),
        new state(0,0, 0,1, 0,-1, -1,1),
        new state(0,0, 1,0, -1,0, 1,1)}; 
  }
}
 
class j extends tetromino {
  public j() {
    cells[0] = new cell(0, 4, tetris.j);
    cells[1] = new cell(0, 3, tetris.j);
    cells[2] = new cell(0, 5, tetris.j);
    cells[3] = new cell(1, 5, tetris.j);
    states = new state[]{
        new state(0,0, 0,-1, 0,1, 1,1),
        new state(0,0, -1,0, 1,0, 1,-1),
        new state(0,0, 0,1, 0,-1, -1,-1),
        new state(0,0, 1,0, -1,0, -1,1 )};
  }
}
 
class s extends tetromino {
  public s() {
    cells[0] = new cell(0, 4, tetris.s);
    cells[1] = new cell(0, 5, tetris.s);
    cells[2] = new cell(1, 3, tetris.s);
    cells[3] = new cell(1, 4, tetris.s);
    states = new state[]{
      new state(0,0, 0,1, 1,-1, 1,0 ),
      new state(0,0, -1,0, 1,1, 0,1 )};
  }
}
 
class z extends tetromino {
  public z() {
    cells[0] = new cell(1, 4, tetris.z);
    cells[1] = new cell(0, 3, tetris.z);
    cells[2] = new cell(0, 4, tetris.z);
    cells[3] = new cell(1, 5, tetris.z);
    states = new state[]{
        new state(0,0, -1,-1, -1,0, 0,1 ),
        new state(0,0, -1,1, 0,1, 1,0 )};
  }
}
 
class o extends tetromino {
  public o() {
    cells[0] = new cell(0, 4, tetris.o);
    cells[1] = new cell(0, 5, tetris.o);
    cells[2] = new cell(1, 4, tetris.o);
    cells[3] = new cell(1, 5, tetris.o);
    states = new state[]{
        new state(0,0, 0,1, 1,0, 1,1 ),
        new state(0,0, 0,1, 1,0, 1,1 )};
  }
}

二、cell.java

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
package com.fry.tetris;
 
import java.awt.image;
 
/**
 * 格子
 * 每一個小格子,就有所在的行 列 和圖片
 */
public class cell {
  private int row;
  private int col;
  //private int color;
  private image image;//格子的貼圖
  
  public cell() {
  }
 
  public cell(int row, int col, image image) {
    super();
    this.row = row;
    this.col = col;
    this.image = image;
  }
 
  public int getrow() {
    return row;
  }
 
  public void setrow(int row) {
    this.row = row;
  }
 
  public int getcol() {
    return col;
  }
 
  public void setcol(int col) {
    this.col = col;
  }
  
  
  public image getimage() {
    return image;
  }
 
  public void setimage(image image) {
    this.image = image;
  }
 
  public void moveright(){
    col++;
    //system.out.println("cell moveright()" + col);
  }
  
  public void moveleft(){
    col--;
  }
  
  public void movedown(){
    row++;
  }
  
  @override
  public string tostring() {
    return "["+row+","+col+"]";
  }
}

三、功能實現(xiàn) tetromino.java

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
package com.fry.tetris;
 
import java.util.arrays;
import java.util.random;
 
/**
 * 4格方塊
 */
public class tetromino {
  protected cell[] cells = new cell[4];
  /** 保存旋轉(zhuǎn)的相對于軸位置狀態(tài) */
  protected state[] states;
  
  /** 隨機生成 4格方塊, 使用簡單工廠方法模式!
   * randomtetromino 隨機生成一個四格方塊
   * 這個方面的返回值是多態(tài)的!
   * */
  public static tetromino randomtetromino(){
    random r = new random();
    int type = r.nextint(7);
    switch(type){
    case 0: return new t();
    case 1: return new i();
    case 2: return new j();
    case 3: return new l();
    case 4: return new o();
    case 5: return new s();
    case 6: return new z();
    }
    return null;
  }
  
  public cell[] getcells() {
    return cells;
  }
 
  /** 下落 */
  public void softdrop(){
    for(int i=0; i<cells.length; i++){
      cells[i].movedown();
    }
  }
  public void moveright(){
    //system.out.println("moveright()");
    for(int i=0; i<cells.length; i++){
      this.cells[i].moveright();
    }
  }
  public void moveleft(){
    for(int i=0; i<cells.length; i++){
      cells[i].moveleft();
    }
  }
  private int index = 100000;
  /** 在 tetromino 上添加方法 */
  public void rotateright() {
    index++;//index = 10001
    // index % states.length = 10001 % 4 = 1
    state s = states[index%states.length];//s1
    // [0] + s1 = [1]
    cell o = cells[0];//獲取當(dāng)前的軸
    //軸與相對位置的和作為旋轉(zhuǎn)以后的格子位置
    cells[1].setrow(o.getrow()+s.row1);
    cells[1].setcol(o.getcol()+s.col1);
    cells[2].setrow(o.getrow()+s.row2);
    cells[2].setcol(o.getcol()+s.col2);
    cells[3].setrow(o.getrow()+s.row3);
    cells[3].setcol(o.getcol()+s.col3);
  }
  /** 在 tetromino 上添加方法 */
  public void rotateleft() {
    index--;//index = 10001
    // index % states.length = 10001 % 4 = 1
    state s = states[index%states.length];//s1
    // [0] + s1 = [1]
    cell o = cells[0];//獲取當(dāng)前的軸
    cells[1].setrow(o.getrow()+s.row1);
    cells[1].setcol(o.getcol()+s.col1);
    cells[2].setrow(o.getrow()+s.row2);
    cells[2].setcol(o.getcol()+s.col2);
    cells[3].setrow(o.getrow()+s.row3);
    cells[3].setcol(o.getcol()+s.col3);
  }
  
  @override
  public string tostring() {
    return arrays.tostring(cells);
  }
  
  /** tetromino 類中添加的 內(nèi)部類 用于記錄旋轉(zhuǎn)狀態(tài) */
  protected class state{
    int row0,col0,row1,col1,row2,col2,row3,col3;
 
    public state(int row0, int col0, int row1, int col1,
        int row2, int col2,
        int row3, int col3) {
      this.row0 = row0;
      this.col0 = col0;
      this.row1 = row1;
      this.col1 = col1;
      this.row2 = row2;
      this.col2 = col2;
      this.row3 = row3;
      this.col3 = col3;
    }  
  }
  
}//tetromino 類的結(jié)束
class t extends tetromino{
  public t() {
    cells[0] = new cell(0, 4, tetris.t);
    cells[1] = new cell(0, 3, tetris.t);
    cells[2] = new cell(0, 5, tetris.t);
    cells[3] = new cell(1, 4, tetris.t);
    states = new state[]{
        new state(0,0, 0,-1, 0,1, 1, 0),
        new state(0,0, -1,0, 1,0, 0,-1),
        new state(0,0, 0,1, 0,-1, -1,0),
        new state(0,0, 1,0, -1,0, 0,1)};
  }
}
class i extends tetromino{
  public i() {
    cells[0] = new cell(0, 4, tetris.i);
    cells[1] = new cell(0, 3, tetris.i);
    cells[2] = new cell(0, 5, tetris.i);
    cells[3] = new cell(0, 6, tetris.i);
    states = new state[]{
        new state(0,0, 0,1, 0,-1, 0,-2),
        new state(0,0, -1,0, 1,0,2,0)};
  }
}
class l extends tetromino {
  public l() {
    cells[0] = new cell(0, 4, tetris.l);
    cells[1] = new cell(0, 3, tetris.l);
    cells[2] = new cell(0, 5, tetris.l);
    cells[3] = new cell(1, 3, tetris.l);
    states = new state[]{
        new state(0,0, 0,-1, 0,1, 1,-1 ),
        new state(0,0, -1,0, 1,0, -1,-1),
        new state(0,0, 0,1, 0,-1, -1,1),
        new state(0,0, 1,0, -1,0, 1,1)}; 
  }
}
 
class j extends tetromino {
  public j() {
    cells[0] = new cell(0, 4, tetris.j);
    cells[1] = new cell(0, 3, tetris.j);
    cells[2] = new cell(0, 5, tetris.j);
    cells[3] = new cell(1, 5, tetris.j);
    states = new state[]{
        new state(0,0, 0,-1, 0,1, 1,1),
        new state(0,0, -1,0, 1,0, 1,-1),
        new state(0,0, 0,1, 0,-1, -1,-1),
        new state(0,0, 1,0, -1,0, -1,1 )};
  }
}
 
class s extends tetromino {
  public s() {
    cells[0] = new cell(0, 4, tetris.s);
    cells[1] = new cell(0, 5, tetris.s);
    cells[2] = new cell(1, 3, tetris.s);
    cells[3] = new cell(1, 4, tetris.s);
    states = new state[]{
      new state(0,0, 0,1, 1,-1, 1,0 ),
      new state(0,0, -1,0, 1,1, 0,1 )};
  }
}
 
class z extends tetromino {
  public z() {
    cells[0] = new cell(1, 4, tetris.z);
    cells[1] = new cell(0, 3, tetris.z);
    cells[2] = new cell(0, 4, tetris.z);
    cells[3] = new cell(1, 5, tetris.z);
    states = new state[]{
        new state(0,0, -1,-1, -1,0, 0,1 ),
        new state(0,0, -1,1, 0,1, 1,0 )};
  }
}
 
class o extends tetromino {
  public o() {
    cells[0] = new cell(0, 4, tetris.o);
    cells[1] = new cell(0, 5, tetris.o);
    cells[2] = new cell(1, 4, tetris.o);
    cells[3] = new cell(1, 5, tetris.o);
    states = new state[]{
        new state(0,0, 0,1, 1,0, 1,1 ),
        new state(0,0, 0,1, 1,0, 1,1 )};
  }
}

以上就是java實現(xiàn)俄羅斯方塊的實例,如有疑問請留言或者到本站社區(qū)討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

原文鏈接:http://www.cnblogs.com/Renyi-Fan/p/7220327.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: bedfriend泰剧全集免费观看 | 男人与雌性宠物交啪啪小说 | 精品淑女少妇AV久久免费 | chinaese中国女人厕所小便 | 日本xxxxxxxxx高清hd | 精品国产乱码久久久久久软件 | 亚洲精品成人 | 久久99精品久久久久久园产越南 | 四虎影视紧急入口地址大全 | 国产精品久线观看视频 | 日本免费不卡在线一区二区三区 | 国产美女屁股直流白浆视频无遮挡 | 欧美交换乱理伦片120秒 | 外女思春台湾三级 | 免费国产一级观看完整版 | 激情亚洲天堂 | 女同videos双性人 | 丰满艳妇亲伦视频 | 91尤物在线播放 | 国产精品香蕉 | 丝袜老师好湿好紧我要进去了 | 日韩福利一区 | 国色天香社区在线视频播放 | 国内精品久久久久影院嫩草 | 国产精品亚欧美一区二区三区 | 亚洲网红精品大秀在线观看 | 亚洲国产欧美在线人网站 | 边摸边操 | 无码欧美喷潮福利XXXX | 欧美日韩视频在线第一区二区三区 | 免费高清www动漫视频播放器 | 精品无人乱码一区二区三区 | 久久九九精品国产自在现线拍 | 亚洲色图色 | 精品一区二区三区免费观看 | 国产成人 免费观看 | 亚洲精品人成网在线播放影院 | 亚洲欧美韩国日产综合在线 | 婷婷婷色 | 好男人在线观看免费高清2019韩剧 | 免费视频一区 |